| From 9d720b34c0a432639252f63012e18b0507f5b432 Mon Sep 17 00:00:00 2001 |
| From: =?UTF-8?q?Pali=20Roh=C3=A1r?= <pali.rohar@gmail.com> |
| Date: Sat, 8 Nov 2014 12:58:57 -0800 |
| Subject: Input: alps - allow up to 2 invalid packets without resetting device |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: =?UTF-8?q?Pali=20Roh=C3=A1r?= <pali.rohar@gmail.com> |
| |
| commit 9d720b34c0a432639252f63012e18b0507f5b432 upstream. |
| |
| On some Dell Latitude laptops ALPS device or Dell EC send one invalid byte |
| in 6 bytes ALPS packet. In this case psmouse driver enter out of sync |
| state. It looks like that all other bytes in packets are valid and also |
| device working properly. So there is no need to do full device reset, just |
| need to wait for byte which match condition for first byte (start of |
| packet). Because ALPS packets are bigger (6 or 8 bytes) default limit is |
| small. |
| |
| This patch increase number of invalid bytes to size of 2 ALPS packets which |
| psmouse driver can drop before do full reset. |
| |
| Resetting ALPS devices take some time and when doing reset on some Dell |
| laptops touchpad, trackstick and also keyboard do not respond. So it is |
| better to do it only if really necessary. |
| |
| Signed-off-by: Pali Rohár <pali.rohar@gmail.com> |
| Tested-by: Pali Rohár <pali.rohar@gmail.com> |
| Reviewed-by: Hans de Goede <hdegoede@redhat.com> |
| Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/input/mouse/alps.c | 3 +++ |
| 1 file changed, 3 insertions(+) |
| |
| --- a/drivers/input/mouse/alps.c |
| +++ b/drivers/input/mouse/alps.c |
| @@ -2154,6 +2154,9 @@ int alps_init(struct psmouse *psmouse) |
| /* We are having trouble resyncing ALPS touchpads so disable it for now */ |
| psmouse->resync_time = 0; |
| |
| + /* Allow 2 invalid packets without resetting device */ |
| + psmouse->resetafter = psmouse->pktsize * 2; |
| + |
| return 0; |
| |
| init_fail: |