summaryrefslogtreecommitdiffstats
path: root/wacom-02-parse-the-bamboo-device-family.patch
diff options
context:
space:
mode:
authorChuck Ebbert <cebbert@redhat.com>2010-09-13 15:57:40 -0400
committerChuck Ebbert <cebbert@redhat.com>2010-09-13 15:57:40 -0400
commit1d13b01aba24af0a9dffa76d85abaa02e80ba687 (patch)
treec05557705dd6cd332da843344805e6377fd66c5f /wacom-02-parse-the-bamboo-device-family.patch
parentdb42d7353c3452dc3f7b98d25778e7a7754c9685 (diff)
downloadkernel-1d13b01aba24af0a9dffa76d85abaa02e80ba687.tar.gz
kernel-1d13b01aba24af0a9dffa76d85abaa02e80ba687.tar.xz
kernel-1d13b01aba24af0a9dffa76d85abaa02e80ba687.zip
Add preliminary support for Wacom Bamboo pen and touch devices.
Diffstat (limited to 'wacom-02-parse-the-bamboo-device-family.patch')
-rw-r--r--wacom-02-parse-the-bamboo-device-family.patch122
1 files changed, 122 insertions, 0 deletions
diff --git a/wacom-02-parse-the-bamboo-device-family.patch b/wacom-02-parse-the-bamboo-device-family.patch
new file mode 100644
index 000000000..f24d04d01
--- /dev/null
+++ b/wacom-02-parse-the-bamboo-device-family.patch
@@ -0,0 +1,122 @@
+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,