[PATCH v2] input: add multitouch slot support to w8001.

Previous thread: linux-next: Tree for August 26 by Stephen Rothwell on Wednesday, August 25, 2010 - 6:51 pm. (1 message)

Next thread: [PATCH v2 1/1] pxa168: added initial support for TPO TD043MTEA1 LCD display on Aspenite by Mark F. Brown on Wednesday, August 25, 2010 - 7:04 pm. (6 messages)
From: Peter Hutterer
Date: Wednesday, August 25, 2010 - 7:01 pm

Some serial wacom devices support two-finger touch. Test for this during
init and parse the touch packets accordingly. Touch packets are
processed using Protocol B (MT Slots).

Note: there are several wacom versions that do touch but not two-finger
touch. These are not catered for here, touch events for these are simply
discarded.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
CC: Henrik Rydberg <rydberg@euromail.se>
---
Changes to v1:
- model MT slot approach after Henrik's bamboo patches
- add a comment about what the missing bytes are in the data packets

Henrik, I think this addresses all your comments? The patch is certainly
a bit simpler now.

 drivers/input/touchscreen/wacom_w8001.c |   49 +++++++++++++++++++++++++++++--
 1 files changed, 46 insertions(+), 3 deletions(-)

diff --git a/drivers/input/touchscreen/wacom_w8001.c b/drivers/input/touchscreen/wacom_w8001.c
index 7feac22..297c79d 100644
--- a/drivers/input/touchscreen/wacom_w8001.c
+++ b/drivers/input/touchscreen/wacom_w8001.c
@@ -49,6 +49,8 @@ MODULE_LICENSE("GPL");
 #define W8001_PKTLEN_TPCCTL	11	/* control packet */
 #define W8001_PKTLEN_TOUCH2FG	13
 
+#define MAX_TRACKING_ID		0xFF	/* arbitrarily chosen */
+
 struct w8001_coord {
 	u8 rdy;
 	u8 tsw;
@@ -86,6 +88,7 @@ struct w8001 {
 	char phys[32];
 	int type;
 	unsigned int pktlen;
+	int trkid[2];
 };
 
 static void parse_data(u8 *data, struct w8001_coord *coord)
@@ -112,6 +115,35 @@ static void parse_data(u8 *data, struct w8001_coord *coord)
 	coord->tilt_y = data[8] & 0x7F;
 }
 
+static void parse_touch(struct w8001 *w8001)
+{
+	static int trkid;
+	struct input_dev *dev = w8001->dev;
+	unsigned char *data = w8001->data;
+	int i;
+
+	for (i = 0; i < 2; i++) {
+		input_mt_slot(dev, i);
+
+		if (data[0] & (1 << i)) {
+			int x = (data[6 * i + 1] << 7) | (data[6 * i + 2]);
+			int y = (data[6 * i + 3] << 7) | (data[6 * i + 4]);
+			/* data[5,6] and [11,12] is finger capacity */
+
+			input_report_abs(dev, ...
From: Henrik Rydberg
Date: Wednesday, August 25, 2010 - 11:42 pm

Acked-by: Henrik Rydberg <rydberg@euromail.se>

Yes, thanks, it looks fine now. And thanks for finding the bug in my own
version. :-)

Cheers,
Henrik
--

From: Dmitry Torokhov
Date: Saturday, August 28, 2010 - 10:48 pm

Applied all 3 to 'next', thanks Peter and Henrik.

-- 
Dmitry
--

Previous thread: linux-next: Tree for August 26 by Stephen Rothwell on Wednesday, August 25, 2010 - 6:51 pm. (1 message)

Next thread: [PATCH v2 1/1] pxa168: added initial support for TPO TD043MTEA1 LCD display on Aspenite by Mark F. Brown on Wednesday, August 25, 2010 - 7:04 pm. (6 messages)