Input: ALPS - handle touchpoints buttons correctly
authorUlrich Dangel <uli-kernel@spamt.net>
Thu, 11 Jun 2009 07:15:09 +0000 (00:15 -0700)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Thu, 11 Jun 2009 09:09:45 +0000 (02:09 -0700)
When pressing any button belonging to the touchpoint, the generated
click events don't belong to the touchpoint but to the touchpad.
This patch fixes this behaviour, the events will be sent via the
correct device, so scrolling with touchpoint is possible.

Signed-off-by: Ulrich Dangel <uli@spamt.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
drivers/input/mouse/alps.c

index cd4203c4deb91f37069f094e20d9b40dbf355b8e..5547e2429fbe5bc17596948c4cdb8f140f8dfa3d 100644 (file)
@@ -132,18 +132,23 @@ static void alps_process_packet(struct psmouse *psmouse)
        ges = packet[2] & 1;
        fin = packet[2] & 2;
 
-       input_report_key(dev, BTN_LEFT, left);
-       input_report_key(dev, BTN_RIGHT, right);
-       input_report_key(dev, BTN_MIDDLE, middle);
-
        if ((priv->i->flags & ALPS_DUALPOINT) && z == 127) {
                input_report_rel(dev2, REL_X,  (x > 383 ? (x - 768) : x));
                input_report_rel(dev2, REL_Y, -(y > 255 ? (y - 512) : y));
+
+               input_report_key(dev2, BTN_LEFT, left);
+               input_report_key(dev2, BTN_RIGHT, right);
+               input_report_key(dev2, BTN_MIDDLE, middle);
+
                input_sync(dev);
                input_sync(dev2);
                return;
        }
 
+       input_report_key(dev, BTN_LEFT, left);
+       input_report_key(dev, BTN_RIGHT, right);
+       input_report_key(dev, BTN_MIDDLE, middle);
+
        /* Convert hardware tap to a reasonable Z value */
        if (ges && !fin) z = 40;