[garloff@suse.de: Re: [Research] Synatics Touchpad (PS/2) and 2.2.16]

From: Kurt Garloff (kurt@garloff.de)
Date: Thu Aug 31 2000 - 10:01:52 EST


Hi,

updating my laptop (Acer TM 512T) to 2.2.16 (-SuSE which is a 17pre1x with
some additional drivers and some of Andrea's VM fixes), I started to have a
lot of trouble with the builtin Synaptics Touchpad.

Using the touchpad, it suddenly started to stop working for a couple of
seconds and GPM logged Tossing PS/2 data messages.\ to the syslog.

It turned out to be a problem in the kernel's psaux driver.

Here's the patch that caused the problem.

--- linux-2.2.14.SuSE/drivers/char/pc_keyb.c Sat Mar 18 22:31:46 2000
+++ linux.susefont/drivers/char/pc_keyb.c Mon Jul 17 22:36:18 2000
@@ -73,6 +76,9 @@
 
 static int __init psaux_init(void);
 
+#define AUX_RECONNECT 170
+/* #define CHECK_RECONNECT_SCANCODE 1 */
+
 static struct aux_queue *queue; /* Mouse data buffer. */
 static int aux_count = 0;
 /* used when we send commands to the mouse that expect an ACK. */
@@ -393,6 +399,19 @@
                 }
                 mouse_reply_expected = 0;
         }
+ else if(scancode == AUX_RECONNECT){
+ queue->head = queue->tail = 0; /* Flush input queue */
+ /*
+ * need this stuff? seems to work fine w/o it for me
+ aux_write_ack(AUX_SET_SAMPLE);
+ aux_write_ack(100);
+ aux_write_ack(AUX_SET_RES);
+ aux_write_ack(3);
+ aux_write_ack(AUX_SET_SCALE21);
+ */
+ aux_write_ack(AUX_ENABLE_DEV); /* ping the mouse :) */
+ return;
+ }
 
         add_mouse_randomness(scancode);
         if (aux_count) {

Commenting out the check for AUX_RECONNECT does cure my problems.

Apparently, the synps2 does send the reconnect scancode for normal (or
special enhanced synps/2) mouse events.

The question is how this can be solved in a general way. I guess the code
was introduced to solve some problem. (Does the kernel get this scancode
when you plug a PS/2 mouse?)
How can we do it?
* Make the kernel recognize synps2 and ignore AUX_RECONNECT then.
* Make the gpm -tsynps2 do an ioctl on psaux which makes the kernel
  ignore ...
* Make the kernel aware of some state (mouse connected?) and only handle
  AUX_RECONNECT in case the mouse is not already connected.

I have not the slightest clue about PS/2 protocol, so I'd prefer somebody
with more knowledge to have a look into this.

Regards,

-- 
Kurt Garloff  <garloff@suse.de>                          Eindhoven, NL
GPG key: See mail header, key servers         Linux kernel development
SuSE GmbH, Nuernberg, FRG                               SCSI, Security

----- End forwarded message -----

-- Kurt Garloff <kurt@garloff.de> [Eindhoven, NL] Physics: Plasma simulations <k.garloff@phys.tue.nl> [TU Eindhoven, NL] Linux: SCSI, Security <garloff@suse.de> [SuSE Nuernberg, FRG] (See mail header or public key servers for PGP2 and GPG public keys.)


- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Thu Aug 31 2000 - 21:00:27 EST