linux-input.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2] Input: ALPS - Fix ALPS touchpad detection
@ 2012-02-16 13:11 Akio Idehara
  2012-02-16 14:32 ` Seth Forshee
  0 siblings, 1 reply; 5+ messages in thread
From: Akio Idehara @ 2012-02-16 13:11 UTC (permalink / raw)
  To: dmitry.torokhov; +Cc: rubini, seth.forshee, linux-input, inux-kernel

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.

Cc: stable <stable@vger.kernel.org>
Signed-off-by: Akio Idehara <zbe64533@gmail.com>
---
  Documentation/input/alps.txt |    3 ++-
  drivers/input/mouse/alps.c   |    7 +++++--
  2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/Documentation/input/alps.txt b/Documentation/input/alps.txt
index f274c28..2f95308 100644
--- a/Documentation/input/alps.txt
+++ b/Documentation/input/alps.txt
@@ -13,7 +13,8 @@ Detection

  All ALPS touchpads should respond to the "E6 report" command sequence:
  E8-E6-E6-E6-E9. An ALPS touchpad should respond with either 00-00-0A or
-00-00-64.
+00-00-64 if no buttons are pressed. The bits 0-2 of the first byte will be 1s
+if some buttons are pressed.

  If the E6 report is successful, the touchpad model is identified using the "E7
  report" sequence: E8-E7-E7-E7-E9. The response is the model signature and is
diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c
index bd87380..4c6a72d 100644
--- a/drivers/input/mouse/alps.c
+++ b/drivers/input/mouse/alps.c
@@ -952,7 +952,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) ||
@@ -968,7 +970,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;

  	/*
-- 
1.7.9

^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2012-02-24 10:19 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-02-16 13:11 [PATCH v2] Input: ALPS - Fix ALPS touchpad detection Akio Idehara
2012-02-16 14:32 ` Seth Forshee
2012-02-23 14:41   ` Akio Idehara
2012-02-24  8:17     ` Dmitry Torokhov
2012-02-24 10:19       ` Akio Idehara

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).