[Linuxwacom-devel] [PATCH v2 4/4] input: wacom: Intuos5 multitouch sensor support
Intuos5 tablets with PTH-* model numbers include a multitouch sensor which use the same touch reports as the 3rd-generation Bamboo. No useful information is in the HID descriptor for the touch interface so hardcoded values are used during setup. Signed-off-by: Jason Gerecke killert...@gmail.com --- Changes from v1: * Fixed calculation of x_phy and y_phy (logic for the 3rd-gen Bamboo which I copied is incorrect! Patch on the way.) drivers/input/tablet/wacom_sys.c | 24 ++ drivers/input/tablet/wacom_wac.c | 63 +++--- 2 files changed, 82 insertions(+), 5 deletions(-) diff --git a/drivers/input/tablet/wacom_sys.c b/drivers/input/tablet/wacom_sys.c index 11b4c05..528e3a4 100644 --- a/drivers/input/tablet/wacom_sys.c +++ b/drivers/input/tablet/wacom_sys.c @@ -228,6 +228,9 @@ static int wacom_parse_logical_collection(unsigned char *report, * 3rd gen Bamboo Touch no longer define a Digitizer-Finger Pysical * Collection. Instead they define a Logical Collection with a single * Logical Maximum for both X and Y. + * + * Intuos5 touch interface does not contain useful data. We deal with + * this after returning from this function. */ static int wacom_parse_hid(struct usb_interface *intf, struct hid_descriptor *hid_desc, @@ -924,6 +927,27 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i if (error) goto fail3; + /* Intuos5 has no useful data about its touch interface in its +* HID descriptor. If this is the touch interface (wMaxPacketSize +* of WACOM_PKGLEN_BBTOUCH3), override the table values. +*/ + if (features-type = INTUOS5S features-type = INTUOS5L) { + if (endpoint-wMaxPacketSize == WACOM_PKGLEN_BBTOUCH3) { + features-device_type = BTN_TOOL_FINGER; + features-pktlen = WACOM_PKGLEN_BBTOUCH3; + + features-x_phy = + (features-x_max * 100) / features-x_resolution; + features-y_phy = + (features-y_max * 100) / features-y_resolution; + + features-x_max = 4096; + features-y_max = 4096; + } else { + features-device_type = BTN_TOOL_PEN; + } + } + wacom_setup_device_quirks(features); strlcpy(wacom_wac-name, features-name, sizeof(wacom_wac-name)); diff --git a/drivers/input/tablet/wacom_wac.c b/drivers/input/tablet/wacom_wac.c index 86827c7..30067ae 100644 --- a/drivers/input/tablet/wacom_wac.c +++ b/drivers/input/tablet/wacom_wac.c @@ -321,6 +321,9 @@ static int wacom_intuos_inout(struct wacom_wac *wacom) /* Enter report */ if ((data[1] 0xfc) == 0xc0) { + if (features-type = INTUOS5S features-type = INTUOS5L) + wacom-shared-stylus_in_proximity = true; + /* serial number of the tool */ wacom-serial[idx] = ((data[3] 0x0f) 28) + (data[4] 20) + (data[5] 12) + @@ -406,6 +409,9 @@ static int wacom_intuos_inout(struct wacom_wac *wacom) /* Exit report */ if ((data[1] 0xfe) == 0x80) { + if (features-type = INTUOS5S features-type = INTUOS5L) + wacom-shared-stylus_in_proximity = false; + /* * Reset all states otherwise we lose the initial states * when in-prox next time @@ -,9 +1117,6 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len) case INTUOS4S: case INTUOS4: case INTUOS4L: - case INTUOS5S: - case INTUOS5: - case INTUOS5L: case CINTIQ: case WACOM_BEE: case WACOM_21UX2: @@ -1121,6 +1124,15 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len) sync = wacom_intuos_irq(wacom_wac); break; + case INTUOS5S: + case INTUOS5: + case INTUOS5L: + if (len == WACOM_PKGLEN_BBTOUCH3) + sync = wacom_bpt3_touch(wacom_wac); + else + sync = wacom_intuos_irq(wacom_wac); + break; + case TABLETPC: case TABLETPC2FG: sync = wacom_tpc_irq(wacom_wac, len); @@ -1191,7 +1203,7 @@ void wacom_setup_device_quirks(struct wacom_features *features) /* these device have multiple inputs */ if (features-type == TABLETPC || features-type == TABLETPC2FG || - features-type == BAMBOO_PT) + features-type == BAMBOO_PT || (features-type = INTUOS5S features-type = INTUOS5L)) features-quirks |= WACOM_QUIRK_MULTI_INPUT; /* quirk for bamboo touch with 2 low res touches */ @@ -1350,13 +1362,54 @@ void wacom_setup_input_capabilities(struct input_dev *input_dev,
Re: [Linuxwacom-devel] [PATCH v2 4/4] input: wacom: Intuos5 multitouch sensor support
On Mon, Mar 12, 2012 at 5:36 PM, Jason Gerecke killert...@gmail.com wrote: Intuos5 tablets with PTH-* model numbers include a multitouch sensor which use the same touch reports as the 3rd-generation Bamboo. No useful information is in the HID descriptor for the touch interface so hardcoded values are used during setup. Signed-off-by: Jason Gerecke killert...@gmail.com --- Changes from v1: * Fixed calculation of x_phy and y_phy (logic for the 3rd-gen Bamboo which I copied is incorrect! Patch on the way.) Thanks for catching. For patches 1, 2, and 4 in this series: Reviewed-by: Chris Bagwell ch...@cnpbagwell.com I did review and didn't see any issues with patch #3 but I'm not familiar with LED support to comment. Chris drivers/input/tablet/wacom_sys.c | 24 ++ drivers/input/tablet/wacom_wac.c | 63 +++--- 2 files changed, 82 insertions(+), 5 deletions(-) diff --git a/drivers/input/tablet/wacom_sys.c b/drivers/input/tablet/wacom_sys.c index 11b4c05..528e3a4 100644 --- a/drivers/input/tablet/wacom_sys.c +++ b/drivers/input/tablet/wacom_sys.c @@ -228,6 +228,9 @@ static int wacom_parse_logical_collection(unsigned char *report, * 3rd gen Bamboo Touch no longer define a Digitizer-Finger Pysical * Collection. Instead they define a Logical Collection with a single * Logical Maximum for both X and Y. + * + * Intuos5 touch interface does not contain useful data. We deal with + * this after returning from this function. */ static int wacom_parse_hid(struct usb_interface *intf, struct hid_descriptor *hid_desc, @@ -924,6 +927,27 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i if (error) goto fail3; + /* Intuos5 has no useful data about its touch interface in its + * HID descriptor. If this is the touch interface (wMaxPacketSize + * of WACOM_PKGLEN_BBTOUCH3), override the table values. + */ + if (features-type = INTUOS5S features-type = INTUOS5L) { + if (endpoint-wMaxPacketSize == WACOM_PKGLEN_BBTOUCH3) { + features-device_type = BTN_TOOL_FINGER; + features-pktlen = WACOM_PKGLEN_BBTOUCH3; + + features-x_phy = + (features-x_max * 100) / features-x_resolution; + features-y_phy = + (features-y_max * 100) / features-y_resolution; + + features-x_max = 4096; + features-y_max = 4096; + } else { + features-device_type = BTN_TOOL_PEN; + } + } + wacom_setup_device_quirks(features); strlcpy(wacom_wac-name, features-name, sizeof(wacom_wac-name)); diff --git a/drivers/input/tablet/wacom_wac.c b/drivers/input/tablet/wacom_wac.c index 86827c7..30067ae 100644 --- a/drivers/input/tablet/wacom_wac.c +++ b/drivers/input/tablet/wacom_wac.c @@ -321,6 +321,9 @@ static int wacom_intuos_inout(struct wacom_wac *wacom) /* Enter report */ if ((data[1] 0xfc) == 0xc0) { + if (features-type = INTUOS5S features-type = INTUOS5L) + wacom-shared-stylus_in_proximity = true; + /* serial number of the tool */ wacom-serial[idx] = ((data[3] 0x0f) 28) + (data[4] 20) + (data[5] 12) + @@ -406,6 +409,9 @@ static int wacom_intuos_inout(struct wacom_wac *wacom) /* Exit report */ if ((data[1] 0xfe) == 0x80) { + if (features-type = INTUOS5S features-type = INTUOS5L) + wacom-shared-stylus_in_proximity = false; + /* * Reset all states otherwise we lose the initial states * when in-prox next time @@ -,9 +1117,6 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len) case INTUOS4S: case INTUOS4: case INTUOS4L: - case INTUOS5S: - case INTUOS5: - case INTUOS5L: case CINTIQ: case WACOM_BEE: case WACOM_21UX2: @@ -1121,6 +1124,15 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len) sync = wacom_intuos_irq(wacom_wac); break; + case INTUOS5S: + case INTUOS5: + case INTUOS5L: + if (len == WACOM_PKGLEN_BBTOUCH3) + sync = wacom_bpt3_touch(wacom_wac); + else + sync = wacom_intuos_irq(wacom_wac); + break; + case TABLETPC: case TABLETPC2FG: sync = wacom_tpc_irq(wacom_wac, len); @@ -1191,7 +1203,7 @@ void wacom_setup_device_quirks(struct wacom_features *features) /* these device have multiple inputs */ if (features-type == TABLETPC || features-type ==