浏览代码

Input: ALPS - handle touchpoints buttons correctly

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>
Ulrich Dangel 16 年之前
父节点
当前提交
d7ed5d883c
共有 1 个文件被更改,包括 9 次插入4 次删除
  1. 9 4
      drivers/input/mouse/alps.c

+ 9 - 4
drivers/input/mouse/alps.c

@@ -132,18 +132,23 @@ static void alps_process_packet(struct psmouse *psmouse)
 	ges = packet[2] & 1;
 	ges = packet[2] & 1;
 	fin = packet[2] & 2;
 	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) {
 	if ((priv->i->flags & ALPS_DUALPOINT) && z == 127) {
 		input_report_rel(dev2, REL_X,  (x > 383 ? (x - 768) : x));
 		input_report_rel(dev2, REL_X,  (x > 383 ? (x - 768) : x));
 		input_report_rel(dev2, REL_Y, -(y > 255 ? (y - 512) : y));
 		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(dev);
 		input_sync(dev2);
 		input_sync(dev2);
 		return;
 		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 */
 	/* Convert hardware tap to a reasonable Z value */
 	if (ges && !fin) z = 40;
 	if (ges && !fin) z = 40;