diff options
| -rw-r--r-- | drivers/input/mouse/synaptics.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c index c080b828e5dc..a6dcd18e9adf 100644 --- a/drivers/input/mouse/synaptics.c +++ b/drivers/input/mouse/synaptics.c | |||
| @@ -24,6 +24,7 @@ | |||
| 24 | */ | 24 | */ |
| 25 | 25 | ||
| 26 | #include <linux/module.h> | 26 | #include <linux/module.h> |
| 27 | #include <linux/delay.h> | ||
| 27 | #include <linux/dmi.h> | 28 | #include <linux/dmi.h> |
| 28 | #include <linux/input/mt.h> | 29 | #include <linux/input/mt.h> |
| 29 | #include <linux/serio.h> | 30 | #include <linux/serio.h> |
| @@ -1220,6 +1221,16 @@ static int synaptics_reconnect(struct psmouse *psmouse) | |||
| 1220 | 1221 | ||
| 1221 | do { | 1222 | do { |
| 1222 | psmouse_reset(psmouse); | 1223 | psmouse_reset(psmouse); |
| 1224 | if (retry) { | ||
| 1225 | /* | ||
| 1226 | * On some boxes, right after resuming, the touchpad | ||
| 1227 | * needs some time to finish initializing (I assume | ||
| 1228 | * it needs time to calibrate) and start responding | ||
| 1229 | * to Synaptics-specific queries, so let's wait a | ||
| 1230 | * bit. | ||
| 1231 | */ | ||
| 1232 | ssleep(1); | ||
| 1233 | } | ||
| 1223 | error = synaptics_detect(psmouse, 0); | 1234 | error = synaptics_detect(psmouse, 0); |
| 1224 | } while (error && ++retry < 3); | 1235 | } while (error && ++retry < 3); |
| 1225 | 1236 | ||
