diff options
| -rw-r--r-- | drivers/input/mouse/synaptics.c | 13 | 
1 files changed, 11 insertions, 2 deletions
| diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c index fdf089c0c707..aa186cf6c514 100644 --- a/drivers/input/mouse/synaptics.c +++ b/drivers/input/mouse/synaptics.c @@ -755,12 +755,21 @@ static int synaptics_reconnect(struct psmouse *psmouse)  {  	struct synaptics_data *priv = psmouse->private;  	struct synaptics_data old_priv = *priv; +	int retry = 0; +	int error; -	psmouse_reset(psmouse); +	do { +		psmouse_reset(psmouse); +		error = synaptics_detect(psmouse, 0); +	} while (error && ++retry < 3); -	if (synaptics_detect(psmouse, 0)) +	if (error)  		return -1; +	if (retry > 1) +		printk(KERN_DEBUG "Synaptics reconnected after %d tries\n", +			retry); +  	if (synaptics_query_hardware(psmouse)) {  		printk(KERN_ERR "Unable to query Synaptics hardware.\n");  		return -1; | 
