diff options
author | Chuck Ebbert <cebbert@redhat.com> | 2010-09-13 15:57:40 -0400 |
---|---|---|
committer | Chuck Ebbert <cebbert@redhat.com> | 2010-09-13 15:57:40 -0400 |
commit | 1d13b01aba24af0a9dffa76d85abaa02e80ba687 (patch) | |
tree | c05557705dd6cd332da843344805e6377fd66c5f /wacom-02-parse-the-bamboo-device-family.patch | |
parent | db42d7353c3452dc3f7b98d25778e7a7754c9685 (diff) | |
download | kernel-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.patch | 122 |
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, |