123 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
From: Ping Cheng <pinglinux@gmail.com>
 | 
						|
Date: Sun, 5 Sep 2010 19:25:40 +0000 (-0700)
 | 
						|
Subject: Input: wacom - parse the Bamboo device family
 | 
						|
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fdtor%2Finput.git;a=commitdiff_plain;h=4a88081e739a41d6d70bace7e0a027f9054ab540
 | 
						|
 | 
						|
Input: wacom - parse the Bamboo device family
 | 
						|
 | 
						|
The Bamboo devices have multiple interfaces which need to be setup
 | 
						|
separately. Use the HID parsing mechanism to achieve that.
 | 
						|
 | 
						|
Signed-off-by: Ping Cheng <pinglinux@gmail.com>
 | 
						|
Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
 | 
						|
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
 | 
						|
---
 | 
						|
 | 
						|
diff --git a/drivers/input/tablet/wacom_sys.c b/drivers/input/tablet/wacom_sys.c
 | 
						|
index e510e4f..98cba08 100644
 | 
						|
--- a/drivers/input/tablet/wacom_sys.c
 | 
						|
+++ b/drivers/input/tablet/wacom_sys.c
 | 
						|
@@ -195,17 +195,30 @@ static int wacom_parse_hid(struct usb_interface *intf, struct hid_descriptor *hi
 | 
						|
 							features->pktlen = WACOM_PKGLEN_TPC2FG;
 | 
						|
 							features->device_type = BTN_TOOL_TRIPLETAP;
 | 
						|
 						}
 | 
						|
-						features->x_max =
 | 
						|
-							get_unaligned_le16(&report[i + 3]);
 | 
						|
-						features->x_phy =
 | 
						|
-							get_unaligned_le16(&report[i + 6]);
 | 
						|
-						features->unit = report[i + 9];
 | 
						|
-						features->unitExpo = report[i + 11];
 | 
						|
-						i += 12;
 | 
						|
+						if (features->type == BAMBOO_PT) {
 | 
						|
+							/* need to reset back */
 | 
						|
+							features->pktlen = WACOM_PKGLEN_BBTOUCH;
 | 
						|
+							features->device_type = BTN_TOOL_TRIPLETAP;
 | 
						|
+							features->x_phy =
 | 
						|
+								get_unaligned_le16(&report[i + 5]);
 | 
						|
+							features->x_max =
 | 
						|
+								get_unaligned_le16(&report[i + 8]);
 | 
						|
+							i += 15;
 | 
						|
+						} else {
 | 
						|
+							features->x_max =
 | 
						|
+								get_unaligned_le16(&report[i + 3]);
 | 
						|
+							features->x_phy =
 | 
						|
+								get_unaligned_le16(&report[i + 6]);
 | 
						|
+							features->unit = report[i + 9];
 | 
						|
+							features->unitExpo = report[i + 11];
 | 
						|
+							i += 12;
 | 
						|
+						}
 | 
						|
 					} else if (pen) {
 | 
						|
 						/* penabled only accepts exact bytes of data */
 | 
						|
 						if (features->type == TABLETPC2FG)
 | 
						|
 							features->pktlen = WACOM_PKGLEN_GRAPHIRE;
 | 
						|
+						if (features->type == BAMBOO_PT)
 | 
						|
+							features->pktlen = WACOM_PKGLEN_BBFUN;
 | 
						|
 						features->device_type = BTN_TOOL_PEN;
 | 
						|
 						features->x_max =
 | 
						|
 							get_unaligned_le16(&report[i + 3]);
 | 
						|
@@ -234,6 +247,15 @@ static int wacom_parse_hid(struct usb_interface *intf, struct hid_descriptor *hi
 | 
						|
 							features->y_phy =
 | 
						|
 								get_unaligned_le16(&report[i + 6]);
 | 
						|
 							i += 7;
 | 
						|
+						} else if (features->type == BAMBOO_PT) {
 | 
						|
+							/* need to reset back */
 | 
						|
+							features->pktlen = WACOM_PKGLEN_BBTOUCH;
 | 
						|
+							features->device_type = BTN_TOOL_TRIPLETAP;
 | 
						|
+							features->y_phy =
 | 
						|
+								get_unaligned_le16(&report[i + 3]);
 | 
						|
+							features->y_max =
 | 
						|
+								get_unaligned_le16(&report[i + 6]);
 | 
						|
+							i += 12;
 | 
						|
 						} else {
 | 
						|
 							features->y_max =
 | 
						|
 								features->x_max;
 | 
						|
@@ -245,6 +267,8 @@ static int wacom_parse_hid(struct usb_interface *intf, struct hid_descriptor *hi
 | 
						|
 						/* penabled only accepts exact bytes of data */
 | 
						|
 						if (features->type == TABLETPC2FG)
 | 
						|
 							features->pktlen = WACOM_PKGLEN_GRAPHIRE;
 | 
						|
+						if (features->type == BAMBOO_PT)
 | 
						|
+							features->pktlen = WACOM_PKGLEN_BBFUN;
 | 
						|
 						features->device_type = BTN_TOOL_PEN;
 | 
						|
 						features->y_max =
 | 
						|
 							get_unaligned_le16(&report[i + 3]);
 | 
						|
@@ -341,7 +365,8 @@ static int wacom_retrieve_hid_descriptor(struct usb_interface *intf,
 | 
						|
 	features->distance_fuzz = 0;
 | 
						|
 
 | 
						|
 	/* only Tablet PCs need to retrieve the info */
 | 
						|
-	if ((features->type != TABLETPC) && (features->type != TABLETPC2FG))
 | 
						|
+	if ((features->type != TABLETPC) && (features->type != TABLETPC2FG) &&
 | 
						|
+	    (features->type != BAMBOO_PT))
 | 
						|
 		goto out;
 | 
						|
 
 | 
						|
 	if (usb_get_extra_descriptor(interface, HID_DEVICET_HID, &hid_desc)) {
 | 
						|
@@ -499,7 +524,8 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i
 | 
						|
 
 | 
						|
 	strlcpy(wacom_wac->name, features->name, sizeof(wacom_wac->name));
 | 
						|
 
 | 
						|
-	if (features->type == TABLETPC || features->type == TABLETPC2FG) {
 | 
						|
+	if (features->type == TABLETPC || features->type == TABLETPC2FG ||
 | 
						|
+	    features->type == BAMBOO_PT) {
 | 
						|
 		/* Append the device type to the name */
 | 
						|
 		strlcat(wacom_wac->name,
 | 
						|
 			features->device_type == BTN_TOOL_PEN ?
 | 
						|
diff --git a/drivers/input/tablet/wacom_wac.h b/drivers/input/tablet/wacom_wac.h
 | 
						|
index d769e9a..fb30895 100644
 | 
						|
--- a/drivers/input/tablet/wacom_wac.h
 | 
						|
+++ b/drivers/input/tablet/wacom_wac.h
 | 
						|
@@ -21,6 +21,7 @@
 | 
						|
 #define WACOM_PKGLEN_INTUOS	10
 | 
						|
 #define WACOM_PKGLEN_TPC1FG	 5
 | 
						|
 #define WACOM_PKGLEN_TPC2FG	14
 | 
						|
+#define WACOM_PKGLEN_BBTOUCH	20
 | 
						|
 
 | 
						|
 /* device IDs */
 | 
						|
 #define STYLUS_DEVICE_ID	0x02
 | 
						|
@@ -44,6 +45,7 @@ enum {
 | 
						|
 	PTU,
 | 
						|
 	PL,
 | 
						|
 	DTU,
 | 
						|
+	BAMBOO_PT,
 | 
						|
 	INTUOS,
 | 
						|
 	INTUOS3S,
 | 
						|
 	INTUOS3,
 |