diff mbox

[v2] Input: wacom - allow both MT and pen data to be reported

Message ID 1290987960-12118-1-git-send-email-pinglinux@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Ping Cheng Nov. 28, 2010, 11:46 p.m. UTC
None
diff mbox

Patch

diff --git a/drivers/input/tablet/wacom_wac.c b/drivers/input/tablet/wacom_wac.c
index b3252ef..e0826d1 100644
--- a/drivers/input/tablet/wacom_wac.c
+++ b/drivers/input/tablet/wacom_wac.c
@@ -868,13 +868,11 @@  static int wacom_bpt_touch(struct wacom_wac *wacom)
 	for (i = 0; i < 2; i++) {
 		int p = data[9 * i + 2];
 		input_mt_slot(input, i);
-		/*
-		 * Touch events need to be disabled while stylus is
-		 * in proximity because user's hand is resting on touchpad
-		 * and sending unwanted events.  User expects tablet buttons
-		 * to continue working though.
+
+		/* MT events are sent even a stylus is in proximity. Clients
+		 * have the opportunity to use or ignore them later.
 		 */
-		if (p && !wacom->shared->stylus_in_proximity) {
+		if (p) {
 			int x = get_unaligned_be16(&data[9 * i + 3]) & 0x7ff;
 			int y = get_unaligned_be16(&data[9 * i + 5]) & 0x7ff;
 			if (features->quirks & WACOM_QUIRK_BBTOUCH_LOWRES) {
@@ -894,13 +892,19 @@  static int wacom_bpt_touch(struct wacom_wac *wacom)
 		input_report_abs(input, ABS_MT_TRACKING_ID, wacom->id[i]);
 	}
 
-	input_report_key(input, BTN_TOUCH, count > 0);
-	input_report_key(input, BTN_TOOL_FINGER, count == 1);
-	input_report_key(input, BTN_TOOL_DOUBLETAP, count == 2);
-
-	input_report_abs(input, ABS_PRESSURE, sp);
-	input_report_abs(input, ABS_X, sx);
-	input_report_abs(input, ABS_Y, sy);
+	/* As discussed at linux-input and xorg-devel mailing lists, single
+	 * touch events are ignored when pen is in prox to support backward
+	 * compatibility
+	 */
+	if (!wacom->shared->stylus_in_proximity) {
+		input_report_key(input, BTN_TOUCH, count > 0);
+		input_report_key(input, BTN_TOOL_FINGER, count == 1);
+		input_report_key(input, BTN_TOOL_DOUBLETAP, count == 2);
+
+		input_report_abs(input, ABS_PRESSURE, sp);
+		input_report_abs(input, ABS_X, sx);
+		input_report_abs(input, ABS_Y, sy);
+	}
 
 	input_report_key(input, BTN_LEFT, (data[1] & 0x08) != 0);
 	input_report_key(input, BTN_FORWARD, (data[1] & 0x04) != 0);