Skip to content

Commit

Permalink
Input: synaptics - ensure we reset the device on resume
Browse files Browse the repository at this point in the history
When resuming from suspend newer Synaptics touchpads do not recover
correctly.  Analysis of the resume sequence as applied in Linux was
compared to that of other operating systems.  This indicated that the
other OSs were resetting the mouse before attempting to detect it (for
all Synaptics touchpads, old and new).  Applying this same modification
fixes these newer Synaptics touchpads and brings the driver into line
with common OS reset behaviour.

Signed-off-by: Andy Whitcroft <apw@canonical.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
  • Loading branch information
Andy Whitcroft authored and Dmitry Torokhov committed Feb 28, 2009
1 parent 139ebe8 commit 4d36845
Showing 1 changed file with 4 additions and 5 deletions.
9 changes: 4 additions & 5 deletions drivers/input/mouse/synaptics.c
Original file line number Diff line number Diff line change
Expand Up @@ -182,11 +182,6 @@ static int synaptics_identify(struct psmouse *psmouse)

static int synaptics_query_hardware(struct psmouse *psmouse)
{
int retries = 0;

while ((retries++ < 3) && psmouse_reset(psmouse))
/* empty */;

if (synaptics_identify(psmouse))
return -1;
if (synaptics_model_id(psmouse))
Expand Down Expand Up @@ -582,6 +577,8 @@ static int synaptics_reconnect(struct psmouse *psmouse)
struct synaptics_data *priv = psmouse->private;
struct synaptics_data old_priv = *priv;

psmouse_reset(psmouse);

if (synaptics_detect(psmouse, 0))
return -1;

Expand Down Expand Up @@ -640,6 +637,8 @@ int synaptics_init(struct psmouse *psmouse)
if (!priv)
return -1;

psmouse_reset(psmouse);

if (synaptics_query_hardware(psmouse)) {
printk(KERN_ERR "Unable to query Synaptics hardware.\n");
goto init_fail;
Expand Down

0 comments on commit 4d36845

Please sign in to comment.