summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAkio Idehara <zbe64533@gmail.com>2012-03-08 13:48:12 -0600
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-03-12 12:31:39 -0700
commit349409f0ccd8ee34a3fe3d02f843b3fcec505719 (patch)
tree584062efffe5e2967b83b5859002ce860ec0430d
parentd6bc69349915e2d58499165851a17280c97126ac (diff)
downloadlinux-stable-349409f0ccd8ee34a3fe3d02f843b3fcec505719.tar.gz
linux-stable-349409f0ccd8ee34a3fe3d02f843b3fcec505719.tar.bz2
linux-stable-349409f0ccd8ee34a3fe3d02f843b3fcec505719.zip
Input: ALPS - fix touchpad detection when buttons are pressed
commit 99c90ab31fad855b9da9dee3a5aa6c27f263e9d6 upstream. ALPS touchpad detection fails if some buttons of ALPS are pressed. The reason is that the "E6" query response byte is different from what is expected. This was tested on a Toshiba Portege R500. Signed-off-by: Akio Idehara <zbe64533@gmail.com> Tested-by: Seth Forshee <seth.forshee@canonical.com> Signed-off-by: Dmitry Torokhov <dtor@mail.ru> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/input/mouse/alps.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c
index 003587c71f43..9c40c1129a0f 100644
--- a/drivers/input/mouse/alps.c
+++ b/drivers/input/mouse/alps.c
@@ -421,7 +421,9 @@ static const struct alps_model_info *alps_get_model(struct psmouse *psmouse, int
/*
* First try "E6 report".
- * ALPS should return 0,0,10 or 0,0,100
+ * ALPS should return 0,0,10 or 0,0,100 if no buttons are pressed.
+ * The bits 0-2 of the first byte will be 1s if some buttons are
+ * pressed.
*/
param[0] = 0;
if (ps2_command(ps2dev, param, PSMOUSE_CMD_SETRES) ||
@@ -437,7 +439,8 @@ static const struct alps_model_info *alps_get_model(struct psmouse *psmouse, int
psmouse_dbg(psmouse, "E6 report: %2.2x %2.2x %2.2x",
param[0], param[1], param[2]);
- if (param[0] != 0 || param[1] != 0 || (param[2] != 10 && param[2] != 100))
+ if ((param[0] & 0xf8) != 0 || param[1] != 0 ||
+ (param[2] != 10 && param[2] != 100))
return NULL;
/*