diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2014-01-02 07:44:17 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2014-01-02 07:44:17 +0100 |
commit | e56affb840a369ccca365ce6f0c83a55b99224bc (patch) | |
tree | 4703da40e3cfbdb932b96ea9b3d3ce91e1fe7ce4 /sys/src/9/pc/mouse.c | |
parent | 0e242236bada9266fb4d71912edad87c099ba96f (diff) |
ps2mouse: disable packet streaming during reprogramming
sometimes, ps2 mouse setup failed on thinkpads during boot. disabling
packet streaming while we program the mouse seems to fix the issue.
Diffstat (limited to 'sys/src/9/pc/mouse.c')
-rw-r--r-- | sys/src/9/pc/mouse.c | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/sys/src/9/pc/mouse.c b/sys/src/9/pc/mouse.c index d5e6386bd..5113f8899 100644 --- a/sys/src/9/pc/mouse.c +++ b/sys/src/9/pc/mouse.c @@ -165,9 +165,7 @@ ps2mouse(void) return; i8042auxenable(ps2mouseputc); - /* make mouse streaming, enabled */ - i8042auxcmd(0xEA); - i8042auxcmd(0xF4); + i8042auxcmd(0xEA); /* set stream mode */ mousetype = MousePS2; packetsize = 3; @@ -255,7 +253,16 @@ resetmouse(void) i8042auxcmd(0xEA); /* streaming */ i8042auxcmd(0xE8); /* set resolution */ i8042auxcmd(3); - i8042auxcmd(0xF4); /* enabled */ + break; + } +} + +static void +setstream(int on) +{ + switch(mousetype){ + case MousePS2: + i8042auxcmd(on ? 0xF4 : 0xF5); break; } } @@ -274,27 +281,37 @@ mousectl(Cmdbuf *cb) ct = lookupcmd(cb, mousectlmsg, nelem(mousectlmsg)); switch(ct->index){ case CMaccelerated: + setstream(0); setaccelerated(cb->nf == 1 ? 1 : atoi(cb->f[1])); + setstream(1); break; case CMintellimouse: + setstream(0); setintellimouse(); + setstream(1); break; case CMlinear: + setstream(0); setlinear(); + setstream(1); break; case CMps2: intellimouse = 0; ps2mouse(); + setstream(1); break; case CMps2intellimouse: ps2mouse(); setintellimouse(); + setstream(1); break; case CMres: + setstream(0); if(cb->nf >= 2) setres(atoi(cb->f[1])); else setres(1); + setstream(1); break; case CMreset: resetmouse(); @@ -304,6 +321,7 @@ mousectl(Cmdbuf *cb) setres(resolution); if(intellimouse) setintellimouse(); + setstream(1); break; case CMserial: if(mousetype == Mouseserial) |