[SRU][Xenial][Yakkety][PATCH 2/4] Input: ALPS - handle 0-pressure 1F events

Phidias Chiang phidias.chiang at canonical.com
Wed Nov 30 10:11:00 UTC 2016


From: Ben Gamari <ben at smart-cactus.org>

BugLink: http://bugs.launchpad.net/bugs/1571530

While a button is held SS5 hardware will give us single-finger packets
with x, y, and pressure equal to zero. This causes annoying jumps in
pointer position if a touch is released while the button is held. Handle
this by claiming zero contacts to ensure that no position events are
provided to the user.

Reviewed-by: Pali Rohár <pali.rohar at gmail.com>
Tested-by: Michal Hocko <mhocko at suse.com>
Signed-off-by: Ben Gamari <ben at smart-cactus.org>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov at gmail.com>
(cherry picked from commit a831776323e7c532ef9c88d0d62512ae15d78415)
Signed-off-by: Phidias Chiang <phidias.chiang at canonical.com>
---
 drivers/input/mouse/alps.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c
index 27a32db..b32bfd1 100644
--- a/drivers/input/mouse/alps.c
+++ b/drivers/input/mouse/alps.c
@@ -1197,7 +1197,13 @@ static int alps_decode_ss4_v2(struct alps_fields *f,
 		f->mt[0].x = SS4_1F_X_V2(p);
 		f->mt[0].y = SS4_1F_Y_V2(p);
 		f->pressure = ((SS4_1F_Z_V2(p)) * 2) & 0x7f;
-		f->fingers = 1;
+		/*
+		 * When a button is held the device will give us events
+		 * with x, y, and pressure of 0. This causes annoying jumps
+		 * if a touch is released while the button is held.
+		 * Handle this by claiming zero contacts.
+		 */
+		f->fingers = f->pressure > 0 ? 1 : 0;
 		f->first_mp = 0;
 		f->is_mp = 0;
 		break;
-- 
2.7.3





More information about the kernel-team mailing list