Input: lifebook - don't send incomplete events
authorDmitry Torokhov <[email protected]>
Sat, 9 May 2009 01:30:32 +0000 (18:30 -0700)
committerDmitry Torokhov <[email protected]>
Sat, 9 May 2009 01:31:49 +0000 (18:31 -0700)
When we get a relative packet from trackpoint (when we deal with
touchscreen/trackpoint combo) we should not send events for the device
corresponding to touchscreen as it confuses evtouch driver (it looks
like it keeps previously reported absolute coordinates and the cursor
stays in the same place).

Reported-by: Marcin Drewka <[email protected]>
Signed-off-by: Dmitry Torokhov <[email protected]>
drivers/input/mouse/lifebook.c

index 15ac3205ac0532cf9d933cc56cc36fa1c145e79d..dcd4236af1e33b038bcba36fc711c35c8695fd1d 100644 (file)
@@ -159,21 +159,22 @@ static psmouse_ret_t lifebook_process_byte(struct psmouse *psmouse)
                if (!dev2)
                        printk(KERN_WARNING "lifebook.c: got relative packet "
                                "but no relative device set up\n");
-       } else if (lifebook_use_6byte_proto) {
-               input_report_abs(dev1, ABS_X,
-                                ((packet[1] & 0x3f) << 6) | (packet[2] & 0x3f));
-               input_report_abs(dev1, ABS_Y,
-                                4096 - (((packet[4] & 0x3f) << 6) | (packet[5] & 0x3f)));
        } else {
-               input_report_abs(dev1, ABS_X,
-                                (packet[1] | ((packet[0] & 0x30) << 4)));
-               input_report_abs(dev1, ABS_Y,
-                                1024 - (packet[2] | ((packet[0] & 0xC0) << 2)));
+               if (lifebook_use_6byte_proto) {
+                       input_report_abs(dev1, ABS_X,
+                               ((packet[1] & 0x3f) << 6) | (packet[2] & 0x3f));
+                       input_report_abs(dev1, ABS_Y,
+                               4096 - (((packet[4] & 0x3f) << 6) | (packet[5] & 0x3f)));
+               } else {
+                       input_report_abs(dev1, ABS_X,
+                               (packet[1] | ((packet[0] & 0x30) << 4)));
+                       input_report_abs(dev1, ABS_Y,
+                               1024 - (packet[2] | ((packet[0] & 0xC0) << 2)));
+               }
+               input_report_key(dev1, BTN_TOUCH, packet[0] & 0x04);
+               input_sync(dev1);
        }
 
-       input_report_key(dev1, BTN_TOUCH, packet[0] & 0x04);
-       input_sync(dev1);
-
        if (dev2) {
                if (relative_packet) {
                        input_report_rel(dev2, REL_X,