Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 99c90ab3 authored by Akio Idehara's avatar Akio Idehara Committed by Dmitry Torokhov
Browse files

Input: ALPS - fix touchpad detection when buttons are pressed



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: default avatarAkio Idehara <zbe64533@gmail.com>
Tested-by: default avatarSeth Forshee <seth.forshee@canonical.com>
Signed-off-by: default avatarDmitry Torokhov <dtor@mail.ru>
parent 82b982c9
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -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
+5 −2
Original line number Diff line number Diff line
@@ -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;

	/*