| 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 |
| |
| |
| @@ -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 |
| |
| |
| @@ -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, |