[SRU][Xenial][Yakkety][PATCH] HID: alps: fix multitouch cursor issue
Phidias Chiang
phidias.chiang at canonical.com
Tue Nov 15 09:28:55 UTC 2016
From: Masaki Ota <012nexus at gmail.com>
BugLink: http://bugs.launchpad.net/bugs/1641874
Issue reproduction procedure:
1. three or more fingers put on Touchpad.
2. release fingers from Touchpad.
3. move the cursor by one finger.
4. the cursor does not move.
Cause:
We do not notify multi fingers state correctly to input subsystem. For
example, when three fingers release from Touchpad, fingers state is 3 -> 0. It
needs to notify first, second and third finger's releasing state.
Fix this by not breaking out on z axis and move x,y,z input handling
code to the correct place so that it's in fact per-finger.
[jkosina at suse.cz: reword changelog]
Signed-off-by: Masaki Ota <masaki.ota at jp.alps.com>
Signed-off-by: Jiri Kosina <jkosina at suse.cz>
(cherry picked from commit 9a54cf462d6f3c383a5a4f5fe15c020a03db44e6)
Signed-off-by: Phidias Chiang <phidias.chiang at canonical.com>
---
drivers/hid/hid-alps.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/drivers/hid/hid-alps.c b/drivers/hid/hid-alps.c
index 390f8d3..82aeca4 100644
--- a/drivers/hid/hid-alps.c
+++ b/drivers/hid/hid-alps.c
@@ -190,16 +190,16 @@ static int alps_raw_event(struct hid_device *hdev,
if (z != 0) {
input_mt_report_slot_state(hdata->input,
MT_TOOL_FINGER, 1);
+ input_report_abs(hdata->input,
+ ABS_MT_POSITION_X, x);
+ input_report_abs(hdata->input,
+ ABS_MT_POSITION_Y, y);
+ input_report_abs(hdata->input,
+ ABS_MT_PRESSURE, z);
} else {
input_mt_report_slot_state(hdata->input,
MT_TOOL_FINGER, 0);
- break;
}
-
- input_report_abs(hdata->input, ABS_MT_POSITION_X, x);
- input_report_abs(hdata->input, ABS_MT_POSITION_Y, y);
- input_report_abs(hdata->input, ABS_MT_PRESSURE, z);
-
}
input_mt_sync_frame(hdata->input);
--
2.7.3
More information about the kernel-team
mailing list