Input: synaptics - ignore bogus mt packet
authorHenrik Rydberg <rydberg@euromail.se>
Sat, 18 Dec 2010 14:42:30 +0000 (15:42 +0100)
committerHenrik Rydberg <rydberg@euromail.se>
Wed, 22 Dec 2010 10:15:28 +0000 (11:15 +0100)
In multitouch mode, at least one device (fw: 7.4 id: 0x1c0b1) sometimes
sends a final main packet with x == 1. Since the normal values are above
1472, this is clearly bogus. At the same time, a two-finger touch is
signaled, even though only one finger was on the pad to begin with. This
patch ignores the packet altogether, removing the problem.

Acked-by: Chris Bagwell <chris@cnpbagwell.com>
Acked-by: Chase Douglas <chase.douglas@canonical.com>
Acked-by: Dmitry Torokhov <dtor@mail.ru>
Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
drivers/input/mouse/synaptics.c

index 6514928fd35fcc0ec8628729ec18027a4808d47b..720729afe6dcc1be3f3dbc6349267ef97bed0bd2 100644 (file)
@@ -548,7 +548,7 @@ static void synaptics_process_packet(struct psmouse *psmouse)
                return;
        }
 
-       if (hw.z > 0) {
+       if (hw.z > 0 && hw.x > 1) {
                num_fingers = 1;
                finger_width = 5;
                if (SYN_CAP_EXTENDED(priv->capabilities)) {
@@ -582,7 +582,7 @@ static void synaptics_process_packet(struct psmouse *psmouse)
        if (hw.z > 30) input_report_key(dev, BTN_TOUCH, 1);
        if (hw.z < 25) input_report_key(dev, BTN_TOUCH, 0);
 
-       if (hw.z > 0) {
+       if (num_fingers > 0) {
                input_report_abs(dev, ABS_X, hw.x);
                input_report_abs(dev, ABS_Y, YMAX_NOMINAL + YMIN_NOMINAL - hw.y);
        }