From: KT Liao <kt.l...@emc.com.tw>

[ Upstream commit d899520b0431e70279bfb5066ecb6dc91d0b7072 ]

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.l...@emc.com.tw>
Signed-off-by: Dmitry Torokhov <dmitry.torok...@gmail.com>
Signed-off-by: Sasha Levin <alexander.le...@microsoft.com>
---
 drivers/input/mouse/elantech.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c
index 59603a5728f7..c519c0b09568 100644
--- a/drivers/input/mouse/elantech.c
+++ b/drivers/input/mouse/elantech.c
@@ -1711,6 +1711,17 @@ int elantech_init(struct psmouse *psmouse)
                             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)) {
                psmouse_err(psmouse,
                            "failed to put touchpad into absolute mode.\n");
-- 
2.14.1

Reply via email to