From: Peter Osterlund Here is a patch that is needed to make some old synaptics touchpads work. When setting the mode byte, don't set bits that the touchpad doesn't understand. Those bits are reserved and setting them can lead to weird problems, like the left button not working, as reported by Miles Lane. 25-akpm/drivers/input/mouse/synaptics.c | 12 ++++++++---- 1 files changed, 8 insertions(+), 4 deletions(-) diff -puN drivers/input/mouse/synaptics.c~synaptics-mode-set drivers/input/mouse/synaptics.c --- 25/drivers/input/mouse/synaptics.c~synaptics-mode-set Thu Jul 31 11:35:07 2003 +++ 25-akpm/drivers/input/mouse/synaptics.c Thu Jul 31 11:35:07 2003 @@ -182,6 +182,7 @@ static int query_hardware(struct psmouse { struct synaptics_data *priv = psmouse->private; int retries = 0; + int mode; while ((retries++ < 3) && synaptics_reset(psmouse)) printk(KERN_ERR "synaptics reset failed\n"); @@ -192,10 +193,13 @@ static int query_hardware(struct psmouse return -1; if (synaptics_capability(psmouse, &priv->capabilities, &priv->ext_cap)) return -1; - if (synaptics_set_mode(psmouse, (SYN_BIT_ABSOLUTE_MODE | - SYN_BIT_HIGH_RATE | - SYN_BIT_DISABLE_GESTURE | - SYN_BIT_W_MODE))) + + mode = SYN_BIT_ABSOLUTE_MODE | SYN_BIT_HIGH_RATE; + if (SYN_ID_MAJOR(priv->identity) >= 4) + mode |= SYN_BIT_DISABLE_GESTURE; + if (SYN_CAP_EXTENDED(priv->capabilities)) + mode |= SYN_BIT_W_MODE; + if (synaptics_set_mode(psmouse, mode)) return -1; return 0; _