Browse Source

Input: elantech - force relative mode on a certain module

One of Elan modules with sample version is 0x74 and hw_version is 0x03 has
a bug in absolute mode implementation, so let it run in default PS/2
relative mode.

Signed-off-by: KT Liao <kt.liao@emc.com.tw>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
KT Liao 8 years ago
parent
commit
d899520b04
1 changed files with 11 additions and 0 deletions
  1. 11 0
      drivers/input/mouse/elantech.c

+ 11 - 0
drivers/input/mouse/elantech.c

@@ -1687,6 +1687,17 @@ int elantech_init(struct psmouse *psmouse)
 			     etd->samples[0], etd->samples[1], etd->samples[2]);
 			     etd->samples[0], etd->samples[1], etd->samples[2]);
 	}
 	}
 
 
+	if (etd->samples[1] == 0x74 && etd->hw_version == 0x03) {
+		/*
+		 * This module has a bug which makes absolute mode
+		 * unusable, so let's abort so we'll be using standard
+		 * PS/2 protocol.
+		 */
+		psmouse_info(psmouse,
+			     "absolute mode broken, forcing standard PS/2 protocol\n");
+		goto init_fail;
+	}
+
 	if (elantech_set_absolute_mode(psmouse)) {
 	if (elantech_set_absolute_mode(psmouse)) {
 		psmouse_err(psmouse,
 		psmouse_err(psmouse,
 			    "failed to put touchpad into absolute mode.\n");
 			    "failed to put touchpad into absolute mode.\n");