--- /dev/null
+From seth.forshee@canonical.com Thu Mar 8 14:57:33 2012
+From: Seth Forshee <seth.forshee@canonical.com>
+Date: Thu, 8 Mar 2012 13:48:12 -0600
+Subject: Input: ALPS - fix touchpad detection when buttons are pressed
+To: gregkh@linuxfoundation.org, stable@vger.kernel.org
+Cc: zbe64533@gmail.com, dtor@mail.ru
+Message-ID: <1331236092-12260-1-git-send-email-seth.forshee@canonical.com>
+
+
+From: Akio Idehara <zbe64533@gmail.com>
+
+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>
+
+---
+ drivers/input/mouse/alps.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+--- a/drivers/input/mouse/alps.c
++++ b/drivers/input/mouse/alps.c
+@@ -421,7 +421,9 @@ static const struct alps_model_info *alp
+
+ /*
+ * 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 *alp
+ 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;
+
+ /*