Commit 30ebb7fa authored by Tai-hwa Liang's avatar Tai-hwa Liang Committed by Dmitry Torokhov

Input: sentelic - filter out erratic movement when lifting finger

When lifing finger off the surface some versions of touchpad send movement
packets with very low coordinates, which cause cursor to jump to the upper
left corner of the screen. Let's ignore least significant bits of X and Y
coordinates if higher bits are all zeroes and consider finger not touching
the pad.

Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=43197Reported-and-tested-by: default avatarAleksey Spiridonov <leks13@leks13.ru>
Tested-by: default avatarEddie Dunn <eddie.dunn@gmail.com>
Tested-by: default avatarJakub Luzny <limoto94@gmail.com>
Tested-by: default avatarOlivier Goffart <olivier@woboq.com>
Signed-off-by: default avatarTai-hwa Liang <avatar@sentelic.com>
Signed-off-by: default avatarDmitry Torokhov <dtor@mail.ru>
parent 59d1f5c4
...@@ -721,6 +721,17 @@ static psmouse_ret_t fsp_process_byte(struct psmouse *psmouse) ...@@ -721,6 +721,17 @@ static psmouse_ret_t fsp_process_byte(struct psmouse *psmouse)
switch (psmouse->packet[0] >> FSP_PKT_TYPE_SHIFT) { switch (psmouse->packet[0] >> FSP_PKT_TYPE_SHIFT) {
case FSP_PKT_TYPE_ABS: case FSP_PKT_TYPE_ABS:
if ((packet[0] == 0x48 || packet[0] == 0x49) &&
packet[1] == 0 && packet[2] == 0) {
/*
* Ignore coordinate noise when finger leaving the
* surface, otherwise cursor may jump to upper-left
* corner.
*/
packet[3] &= 0xf0;
}
abs_x = GET_ABS_X(packet); abs_x = GET_ABS_X(packet);
abs_y = GET_ABS_Y(packet); abs_y = GET_ABS_Y(packet);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment