input: wacom - add 0xE5 (MT device) support
Subsystems (2)
PATCH 2/2 input: wacom - add 0xE5 (MT device) support
Main part of patch is adding support for a new Wacom MT touch packet and labels these devices using MTSCREEN type.
Other items of interest:
Delete some duplicate code in HID parsing for Y info since its already done in X path.
In wacom_query_tablet_data(), only invoke the set report that requests tablets to send Wacom Touch packets for Finger interfaces. Mostly, this is to make code intent clear.
--- drivers/input/tablet/wacom.h | 4 +- drivers/input/tablet/wacom_sys.c | 86 +++++++++++++++++++--------------- drivers/input/tablet/wacom_wac.c | 96 ++++++++++++++++++++++++++++++++++++-- drivers/input/tablet/wacom_wac.h | 8 +++ 4 files changed, 149 insertions(+), 45 deletions(-)
drivers/input/tablet/wacom.h +2 -2
@@ -135,6 +135,6 @@ extern const struct usb_device_id wacom_ids[];void wacom_wac_irq (struct wacom_wac *wacom_wac,size_t len);void wacom_setup_device_quirks (struct wacom_features *features); -void wacom_setup_input_capabilities (struct input_dev *input_dev, -struct wacom_wac *wacom_wac); +int wacom_setup_input_capabilities (struct input_dev *input_dev, +struct wacom_wac *wacom_wac);#endif
drivers/input/tablet/wacom_sys.c +48 -38
143 lines not on this page · raw message
drivers/input/tablet/wacom_wac.c +91 -5
166 lines not on this page · raw message
drivers/input/tablet/wacom_wac.h +8 -0
@@ -25,6 +25,10 @@#define WACOM_PKGLEN_BBTOUCH3 64#define WACOM_PKGLEN_BBPEN 10#define WACOM_PKGLEN_WIRELESS 32 +#define WACOM_PKGLEN_MTOUCH 62 + +/* wacom data size per MT contact */ +#define WACOM_BYTES_PER_MT_PACKET 11/* device IDs */ #define STYLUS_DEVICE_ID 0x02
@@ -41,6 +45,7 @@#define WACOM_REPORT_INTUOS5PAD 3#define WACOM_REPORT_TPC1FG 6#define WACOM_REPORT_TPC2FG 13 +#define WACOM_REPORT_TPCMT 13#define WACOM_REPORT_TPCHID 15#define WACOM_REPORT_TPCST 16
@@ -76,6 +81,7 @@ enum {WACOM_MO ,TABLETPC ,TABLETPC2FG , +MTSCREEN , MAX_TYPE };
@@ -118,6 +124,8 @@ struct wacom_wac {struct input_dev *input;int pid;int battery_capacity; +unsigned num_contacts_left; + int *slots; };#endif
Signature · 1 line
1.7.5.4
Quoted 11 lines · Ping Cheng
Main part of patch is adding support for a new Wacom MT touch packet and labels these devices using MTSCREEN type.
Other items of interest:
Delete some duplicate code in HID parsing for Y info since its already done in X path.
In
wacom_query_tablet_data(), only invoke the set report that requests tablets to send Wacom Touch packets for Finger interfaces. Mostly, this is to make code intent clear.
Applied, but:
drivers/input/tablet/wacom_wac.c static int wacom_intuos_irq(struct wacom_wac *wacom) · line 831
Quoted 4 lines
drivers/input/tablet/wacom_wac.c +4
-0+ + wacom->num_contacts_left -= contacts_to_send; +if (wacom->num_contacts_left <0 ) + wacom->num_contacts_left =0 ;
num_contacts_left is unsigned so this condition woudl never fire. Changed num_contacts_left to be signed before applying.
Thanks.
Signature · 1 line
Dmitry
[RFC/PATCH] Revert "Input: wacom - add 0xE5 (MT device) support"
In reply to Ping ChengThis reverts commit 1963518b9b1b8019d33b4b08deee6f873ffa2730.
It was supposed to just add support for new MTSCREEN devices, but instead it significantly changed the code handling TABLETPC2FG and BAMBOO_PT. That destroys debugability. Back to the drawing board.
---
Hi,
Quoted 4 lines · Ping Cheng
Main part of patch is adding support for a new Wacom MT touch packet and labels these devices using MTSCREEN type.
Other items of interest:
Agh!
A patch adding new hardware support should not touch existing support for other devices at the same time. Especially not cosmetic changes.
[1] has an analysis by Bjørn of why those unrelated changes are probably buggy, but I don't really care about that at the moment. If it were a separate patch with a description explaining what it was supposed to do, the normal review process would take care of those things. Piggy-backing onto another patch is just not a good idea.
How about this patch (untested)?
Thanks,
Jonathan
[1] http://bugs.debian.org/cgi-bin/bugreport.cgi?msg=55;bug=677164
drivers/input/tablet/wacom.h | 4 +- drivers/input/tablet/wacom_sys.c | 91 +++++++++++++++-------------------- drivers/input/tablet/wacom_wac.c | 99 ++------------------------------------ drivers/input/tablet/wacom_wac.h | 8 --- 4 files changed, 45 insertions(+), 157 deletions(-)
drivers/input/tablet/wacom.h +2 -2
@@ -135,6 +135,6 @@ extern const struct usb_device_id wacom_ids[];void wacom_wac_irq (struct wacom_wac *wacom_wac,size_t len);void wacom_setup_device_quirks (struct wacom_features *features); -int wacom_setup_input_capabilities (struct input_dev *input_dev, -struct wacom_wac *wacom_wac); +void wacom_setup_input_capabilities (struct input_dev *input_dev, +struct wacom_wac *wacom_wac);#endif
drivers/input/tablet/wacom_sys.c +38 -53
148 lines not on this page · raw message
drivers/input/tablet/wacom_wac.c +5 -94
169 lines not on this page · raw message
drivers/input/tablet/wacom_wac.h +0 -8
@@ -25,10 +25,6 @@#define WACOM_PKGLEN_BBTOUCH3 64#define WACOM_PKGLEN_BBPEN 10#define WACOM_PKGLEN_WIRELESS 32 -#define WACOM_PKGLEN_MTOUCH 62 - -/* wacom data size per MT contact */ -#define WACOM_BYTES_PER_MT_PACKET 11/* device IDs */ #define STYLUS_DEVICE_ID 0x02
@@ -45,7 +41,6 @@#define WACOM_REPORT_INTUOS5PAD 3#define WACOM_REPORT_TPC1FG 6#define WACOM_REPORT_TPC2FG 13 -#define WACOM_REPORT_TPCMT 13#define WACOM_REPORT_TPCHID 15#define WACOM_REPORT_TPCST 16
@@ -81,7 +76,6 @@ enum {WACOM_MO ,TABLETPC ,TABLETPC2FG , -MTSCREEN , MAX_TYPE };
@@ -124,8 +118,6 @@ struct wacom_wac {struct input_dev *input;int pid; int battery_capacity; -int num_contacts_left; - int *slots; };#endif
Signature · 6 lines
1.7.10.4 -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [RFC/PATCH] Revert "Input: wacom - add 0xE5 (MT device) support"
Quoted 17 lines · Jonathan Nieder
This reverts commit
1963518b9b1b8019d33b4b08deee6f873ffa2730.It was supposed to just add support for new MTSCREEN devices, but instead it significantly changed the code handling TABLETPC2FG and
BAMBOO_PT. That destroys debugability. Back to the drawing board.Signed-off-by Jonathan Nieder <[email protected]>---
Hi,Quoted 4 lines · Ping Cheng
Main part of patch is adding support for a new Wacom MT touch packet and labels these devices using MTSCREEN type.
Other items of interest:
Quoted 7 lines
Agh!
A patch adding new hardware support should not touch existing support for other devices at the same time. Especially not cosmetic changes.
[1] has an analysis by Bjørn of why those unrelated changes are probably buggy,
I feel very bad about the issue. More testing should have been done among us during the development. Since the patch was touched by more than one people at linuxwacom.sf.net project, we most likely did not test TPC2FG devices after last person's change.
Quoted 4 lines
but I don't really care about that at the moment. If it were a separate patch with a description explaining what it was supposed to do, the normal review process would take care of those things. Piggy-backing onto another patch is just not a good idea.
You are right. But it would be hard to follow why we made the other changes without putting them together, escpecially we had to exchange ideas among developers due to personal and testing issues.
All in all, I am very sorry about the problem. But reverting back isn't as easy as it sounds since we have many patches built on it now. Using your patch requires us the same amount of time to test on other devices, which does not help us move forward.
So, I propose we make a patch that fixes the issue upstream. Then backport it to 3.2.18. Does this work for you?
Thank you.
Ping
Quoted 411 lines
How about this patch (untested)?
Thanks,
Jonathan[1] http://bugs.debian.org/cgi-bin/bugreport.cgi?msg=55;bug=677164
drivers/input/tablet/wacom.h | 4 +-
drivers/input/tablet/wacom_sys.c | 91 +++++++++++++++-------------------- drivers/input/tablet/wacom_wac.c | 99 ++------------------------------------ drivers/input/tablet/wacom_wac.h | 8 --- 4 files changed, 45 insertions(+), 157 deletions(-)drivers/input/tablet/wacom.h +2
-2@@ -135,6 +135,6 @@ extern const struct usb_device_id wacom_ids[]; void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len); void wacom_setup_device_quirks(struct wacom_features *features); -int wacom_setup_input_capabilities (struct input_dev *input_dev, - struct wacom_wac *wacom_wac); +void wacom_setup_input_capabilities (struct input_dev *input_dev, + struct wacom_wac *wacom_wac); #endifdrivers/input/tablet/wacom_sys.c +0
-4@@ -320,10 +320,6 @@ static int wacom_parse_hid(struct usb_interface *intf, /* need to reset back */ features->pktlen = WACOM_PKGLEN_TPC2FG; } - - if (features->type == MTSCREEN) - features->pktlen = WACOM_PKGLEN_MTOUCH; - if (features->type == BAMBOO_PT) { /* need to reset back */ features->pktlen = WACOM_PKGLEN_BBTOUCH;@@ -356,15 +352,18 @@ static int wacom_parse_hid(struct usb_interface *intf,case
HID_USAGE_Y:
if (usage ==WCM_DESKTOP) {
if (finger) {
- int type =features->type;
-
- if (type == TABLETPC2FG || type == MTSCREEN) {
+features->device_type=BTN_TOOL_FINGER;
+ if (features->type== TABLETPC2FG) {
+ /* need to reset back */
+features->pktlen=WACOM_PKGLEN_TPC2FG;features->y_max=get_unaligned_le16(&report[i + 3]);features->y_phy=get_unaligned_le16(&report[i + 6]); i += 7;
- } else if (type ==BAMBOO_PT) {
+ } else if (features->type==BAMBOO_PT) {
+ /* need to reset back */
+features->pktlen=WACOM_PKGLEN_BBTOUCH;features->y_phy=get_unaligned_le16(&report[i + 3]);features->y_max=drivers/input/tablet/wacom_sys.c +4
-0@@ -378,6 +377,10 @@ static int wacom_parse_hid(struct usb_interface *intf, i += 4; } } else if (pen) { + /* penabled only accepts exact bytes of data */ + if (features->type == TABLETPC2FG) + features->pktlen = WACOM_PKGLEN_GRAPHIRE; + features->device_type = BTN_TOOL_PEN;features->y_max =
get_unaligned_le16(&report[i + 3]); i += 4;drivers/input/tablet/wacom_sys.c +16
-23@@ -440,29 +443,22 @@ static int wacom_query_tablet_data(struct usb_interface *intf, struct wacom_feat if (!rep_data) return error; - /* ask to report Wacom data */ - if (features->device_type == BTN_TOOL_FINGER) { - /* if it is an MT Tablet PC touch */ - if (features->type == TABLETPC2FG || - features->type == MTSCREEN) { - do { - rep_data[0] = 3; - rep_data[1] = 4; - rep_data[2] = 0; - rep_data[3] = 0; - report_id = 3; - error = wacom_set_report(intf, - WAC_HID_FEATURE_REPORT, - report_id, - rep_data, 4, 1); - if (error >= 0) - error = wacom_get_report(intf, - WAC_HID_FEATURE_REPORT, - report_id, - rep_data, 4, 1); - } while ((error < 0 || rep_data[1] != 4) && - limit++ < WAC_MSG_RETRIES); - } + /* ask to report tablet data if it is MT Tablet PC or + * not a Tablet PC */ + if (features->type == TABLETPC2FG) { + do { + rep_data[0] = 3; + rep_data[1] = 4; + rep_data[2] = 0; + rep_data[3] = 0; + report_id = 3; + error = wacom_set_report(intf, WAC_HID_FEATURE_REPORT, + report_id, rep_data, 4, 1); + if (error >= 0) + error = wacom_get_report(intf, + WAC_HID_FEATURE_REPORT, + report_id, rep_data, 4, 1); + } while ((error < 0 || rep_data[1] != 4) && limit++ < WAC_MSG_RETRIES); } else if (features->type != TABLETPC &&
features->type!= WIRELESS &&features->device_type==BTN_TOOL_PEN) {drivers/input/tablet/wacom_sys.c +11
-22@@ -484,7 +480,7 @@ static int wacom_query_tablet_data(struct usb_interface *intf, struct wacom_feat } static int wacom_retrieve_hid_descriptor(struct usb_interface *intf, - struct wacom_features *features) + struct wacom_features *features) { int error = 0; struct usb_host_interface *interface = intf->cur_altsetting;@@ -512,13 +508,10 @@ static int wacom_retrieve_hid_descriptor(struct usb_interface *intf, } } - /* only devices that support touch need to retrieve the info */ - if (features->type != TABLETPC && - features->type != TABLETPC2FG && - features->type != BAMBOO_PT && - features->type != MTSCREEN) { + /* only Tablet PCs and Bamboo P&T need to retrieve the info */ + if ((features->type != TABLETPC) && (features->type != TABLETPC2FG) && + (features->type != BAMBOO_PT)) goto out; - } error = usb_get_extra_descriptor(interface, HID_DEVICET_HID, &hid_desc); if (error) {@@ -990,10 +983,8 @@ static int wacom_register_input(struct wacom *wacom) int error; input_dev = input_allocate_device(); - if (!input_dev) { - error = -ENOMEM; - goto fail1; - } + if (!input_dev) + return -ENOMEM; input_dev->name = wacom_wac->name; input_dev->dev.parent = &intf->dev;@@ -1003,20 +994,14 @@ static int wacom_register_input(struct wacom *wacom) input_set_drvdata(input_dev, wacom); wacom_wac->input = input_dev; - error = wacom_setup_input_capabilities(input_dev, wacom_wac); - if (error) - goto fail1; + wacom_setup_input_capabilities(input_dev, wacom_wac); error = input_register_device(input_dev); - if (error) - goto fail2; + if (error) { + input_free_device(input_dev); + wacom_wac->input = NULL; + } - return 0; - -fail2: - input_free_device(input_dev); - wacom_wac->input = NULL; -fail1: return error; }drivers/input/tablet/wacom_wac.c +0
-69@@ -776,72 +776,6 @@ static int wacom_intuos_irq(struct wacom_wac *wacom) return 1; } -static int find_slot_from_contactid (struct wacom_wac *wacom,int contactid) -{ - int touch_max = wacom->features.touch_max; - int i; - - if (!wacom->slots) - return -1; - - for (i = 0; i < touch_max; ++i) { - if (wacom->slots[i] == contactid) - return i; - } - for (i = 0; i < touch_max; ++i) { - if (wacom->slots[i] == -1) - return i; - } - return -1; -} - -static int wacom_mt_touch (struct wacom_wac *wacom) -{ - struct input_dev *input = wacom->input; - char *data = wacom->data; - int i; - int current_num_contacts = data[2]; - int contacts_to_send = 0; - - /* - * First packet resets the counter since only the first - * packet in series will have non-zero current_num_contacts. - */ - if (current_num_contacts) - wacom->num_contacts_left = current_num_contacts; - - /* There are at most 5 contacts per packet */ - contacts_to_send = min(5, wacom->num_contacts_left); - - for (i = 0; i < contacts_to_send; i++) { - int offset = (WACOM_BYTES_PER_MT_PACKET * i) + 3; - bool touch = data[offset] & 0x1; - int id = le16_to_cpup((__le16 *)&data[offset + 1]); - int slot = find_slot_from_contactid(wacom, id); - - if (slot < 0) - continue; - - input_mt_slot(input, slot); - input_mt_report_slot_state(input, MT_TOOL_FINGER, touch); - if (touch) { - int x = le16_to_cpup((__le16 *)&data[offset + 7]); - int y = le16_to_cpup((__le16 *)&data[offset + 9]); - input_report_abs(input, ABS_MT_POSITION_X, x); - input_report_abs(input, ABS_MT_POSITION_Y, y); - } - wacom->slots[slot] = touch ? id : -1; - } - - input_mt_report_pointer_emulation(input, true); - - wacom->num_contacts_left -= contacts_to_send; - if (wacom->num_contacts_left < 0) - wacom->num_contacts_left = 0; - - return 1; -} - static int wacom_tpc_mt_touch(struct wacom_wac *wacom) { struct input_dev *input = wacom->input;@@ -880,9 +814,6 @@ static int wacom_tpc_single_touch(struct wacom_wac *wacom, size_t len) bool prox; int x = 0, y = 0; - if (wacom->features.touch_max > 1 || len > WACOM_PKGLEN_TPC2FG) - return 0; - if (!wacom->shared->stylus_in_proximity) { if (len == WACOM_PKGLEN_TPC1FG) { prox = data[0] & 0x01;@@ -951,10 +882,10 @@ static int wacom_tpc_irq(struct wacom_wac *wacom, size_t len) switch (len) {case
WACOM_PKGLEN_TPC1FG:
- returnwacom_tpc_single_touch(wacom, len);
+ returnwacom_tpc_single_touch(wacom, len);case
WACOM_PKGLEN_TPC2FG:
- returnwacom_tpc_mt_touch(wacom);
+ returnwacom_tpc_mt_touch(wacom);default:
switch (data[0]) {drivers/input/tablet/wacom_wac.c +0
-0@@ -963,9 +894,6 @@ static int wacom_tpc_irq(struct wacom_wac *wacom, size_t len)case
WACOM_REPORT_TPCST:
returnwacom_tpc_single_touch(wacom, len);- case
WACOM_REPORT_TPCMT:
- returnwacom_mt_touch(wacom); -
caseWACOM_REPORT_PENABLED:
returnwacom_tpc_pen(wacom); }drivers/input/tablet/wacom_wac.c +0
-0@@ -1245,7 +1173,6 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len)case TABLETPC:
case TABLETPC2FG:
- case MTSCREEN:
sync =wacom_tpc_irq(wacom_wac, len); break;drivers/input/tablet/wacom_wac.c +0
-0@@ -1319,8 +1246,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 == WIRELESS || - (features->type >= INTUOS5S && features->type <= INTUOS5L) ||-
features->type== MTSCREEN)
+ (features->type>= INTUOS5S &&features->type<= INTUOS5L))features->quirks|=WACOM_QUIRK_MULTI_INPUT;/* quirk for bamboo touch with 2 low res touches */
drivers/input/tablet/wacom_wac.c +2
-2@@ -1351,8 +1277,8 @@ static unsigned int wacom_calculate_touch_res(unsigned int logical_max, return (logical_max * 100) / physical_max; } -int wacom_setup_input_capabilities (struct input_dev *input_dev, - struct wacom_wac *wacom_wac) +void wacom_setup_input_capabilities (struct input_dev *input_dev, + struct wacom_wac *wacom_wac) { struct wacom_features *features = &wacom_wac->features; int i;@@ -1548,18 +1474,8 @@ int wacom_setup_input_capabilities(struct input_dev *input_dev, break;case TABLETPC2FG:
- case MTSCREEN:
if (features->device_type==BTN_TOOL_FINGER) {-
wacom_wac->slots= kmalloc(features->touch_max *
- sizeof(int),
- GFP_KERNEL);
- if (!wacom_wac->slots)
- return-ENOMEM;drivers/input/tablet/wacom_wac.c +0
-4- - for (i = 0; i < features->touch_max; i++) - wacom_wac->slots[i] = -1; -input_mt_init_slots(input_dev,
features->touch_max);input_set_abs_params(input_dev, ABS_MT_TOOL_TYPE, 0, MT_TOOL_MAX, 0, 0);drivers/input/tablet/wacom_wac.c +0
-1@@ -1645,7 +1561,6 @@ int wacom_setup_input_capabilities(struct input_dev *input_dev, } break; } - return 0; }static const struct
wacom_featureswacom_features_0x00=drivers/input/tablet/wacom_wac.c +0
-3@@ -1878,9 +1793,6 @@ static const struct wacom_features wacom_features_0xE3 = { "Wacom ISDv4 E3", WACOM_PKGLEN_TPC2FG, 26202, 16325, 255, 0, TABLETPC2FG, WACOM_INTUOS_RES, WACOM_INTUOS_RES, .touch_max = 2 }; -static const struct wacom_features wacom_features_0xE5 = - { "Wacom ISDv4 E5", WACOM_PKGLEN_MTOUCH, 26202, 16325, 255, - 0, MTSCREEN, WACOM_INTUOS_RES, WACOM_INTUOS_RES };static const struct
wacom_featureswacom_features_0xE6=
{ "Wacom ISDv4 E6",WACOM_PKGLEN_TPC2FG, 27760, 15694, 255, 0, TABLETPC2FG,WACOM_INTUOS_RES,WACOM_INTUOS_RES,drivers/input/tablet/wacom_wac.c +0
-1@@ -2059,7 +1971,6 @@ const struct usb_device_id wacom_ids[] = { { USB_DEVICE_WACOM(0x9F) }, { USB_DEVICE_WACOM(0xE2) }, { USB_DEVICE_WACOM(0xE3) }, - { USB_DEVICE_WACOM(0xE5) }, { USB_DEVICE_WACOM(0xE6) }, { USB_DEVICE_WACOM(0xEC) }, { USB_DEVICE_WACOM(0x47) },drivers/input/tablet/wacom_wac.h +0
-6@@ -25,10 +25,6 @@ #define WACOM_PKGLEN_BBTOUCH3 64 #define WACOM_PKGLEN_BBPEN 10 #define WACOM_PKGLEN_WIRELESS 32 -#define WACOM_PKGLEN_MTOUCH 62 - -/* wacom data size per MT contact */ -#define WACOM_BYTES_PER_MT_PACKET 11 /* device IDs */ #define STYLUS_DEVICE_ID 0x02@@ -45,7 +41,6 @@ #define WACOM_REPORT_INTUOS5PAD 3 #define WACOM_REPORT_TPC1FG 6 #define WACOM_REPORT_TPC2FG 13 -#define WACOM_REPORT_TPCMT 13 #define WACOM_REPORT_TPCHID 15 #define WACOM_REPORT_TPCST 16@@ -81,7 +76,6 @@ enum { WACOM_MO, TABLETPC, TABLETPC2FG, - MTSCREEN,MAX_TYPE
};drivers/input/tablet/wacom_wac.h +0
-3@@ -124,8 +118,6 @@ struct wacom_wac { struct input_dev *input; int pid; int battery_capacity; - int num_contacts_left; - int *slots; }; #endif --
Quoted 2 lines
1.7.10.4
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [RFC/PATCH] Revert "Input: wacom - add 0xE5 (MT device) support"
Quoted 4 lines · Ping Cheng
I feel very bad about the issue. More testing should have been done among us during the development. Since the patch was touched by more than one people at linuxwacom.sf.net project, we most likely did not test TPC2FG devices after last person's change.
It's not really about testing. A patch adding MTSCREEN support simply should not touch the non-MTSCREEN cases at all. It can make perfect sense to have some preparatory changes that affect other devices, as earlier patches in the same series.
And I don't think it's your fault --- others on the linux-input@ list could have caught it.
[...]
Quoted 6 lines
All in all, I am very sorry about the problem. But reverting back isn't as easy as it sounds since we have many patches built on it now. Using your patch requires us the same amount of time to test on other devices, which does not help us move forward.
So, I propose we make a patch that fixes the issue upstream.
Yeah, that works for me. But please be more careful in the future.
Thanks,
Jonathan
Re: [RFC/PATCH] Revert "Input: wacom - add 0xE5 (MT device) support"
Quoted 8 lines · Jonathan Nieder
Quoted 4 lines · Ping Cheng
I feel very bad about the issue. More testing should have been done among us during the development. Since the patch was touched by more than one people at linuxwacom.sf.net project, we most likely did not test TPC2FG devices after last person's change.
It's not really about testing. A patch adding MTSCREEN support simply
Here is an update on my testing (for hardware, I have to test to be sure). The result shows driver in upstream and 3.2.20 both work with TPC2FG.
I downloaded, built and installed 3.5.-rc2 and 3.2.20 from kernel.org without changing anything in the source. 3.5.-rc2 works all right. But I can not boot 3.2.20 on my system (the error has nothing to do with wacom driver). I didn't waste my time to fix 3.2.20 since we only care about Wacom driver now. I copied wacom driver from 3.2.20 to 3.5.-rc2 source and built there. Replaced wacom.ko for 3.5.-rc2 with the driver built from 3.2.20 code. It also works.
Then, I built the driver from input-wacom-0.13.0 for 3.5.-rc2. Everything built fine, no warnings. But when I load the driver, it did not find the device. I need more time to figure out the root cause. We most likely need to introduce a new base version for later kernels. 2.6.38 is too old.
Since this issue doesn't affect upstream, let's bring the discussion to linuxwacom.sf.net.
Thank you for the heads up and suggestions. We'll sure be careful in the future.
Ping
Quoted 13 lines
should not touch the non-MTSCREEN cases at all. It can make perfect sense to have some preparatory changes that affect other devices, as earlier patches in the same series.
And I don't think it's your fault --- others on the linux-input@ list could have caught it.
[...]
Quoted 5 lines
All in all, I am very sorry about the problem. But reverting back isn't as easy as it sounds since we have many patches built on it now. Using your patch requires us the same amount of time to test on other devices, which does not help us move forward.
Quoted 6 lines
Quoted 1 line
So, I propose we make a patch that fixes the issue upstream.
Yeah, that works for me. But please be more careful in the future.
Thanks,
Jonathan
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [RFC/PATCH] Revert "Input: wacom - add 0xE5 (MT device) support"
Quoted 7 lines · Ping Cheng
Quoted 1 line · Jonathan Nieder
It's not really about testing. A patch adding MTSCREEN support simply
Here is an update on my testing (for hardware, I have to test to be sure). The result shows driver in upstream and 3.2.20 both work with TPC2FG.
I will ask Nils to test 3.5-rc2 or newer. For reference, he reproduced trouble (the driver rejecting his tablet) using 3.4.2 with the following patches on top:
9fee619505bd Input: wacom - add basic Intuos5 support f860e581fd47 Input: wacom - add Intuos5 Touch Ring/ExpressKey support 9b5b95dd516a Input: wacom - add Intuos5 Touch Ring LED support ae584ca47328 Input: wacom - add Intuos5 multitouch sensor support f393ee2b814e Input: wacom - retrieve maximum number of touch points 1963518b9b1b Input: wacom - add 0xE5 (MT device) support a882c932a628 Input: wacom - return proper error if
usb_get_extra_descriptor() fails
His machine is a Thinkpad x220t. The built-in tablet has USB id 056a:00e6. 3.4.2 without those patches works fine. (More details at [1].)
I prefer to start with making sure mainline works well first, and then I'll be happy to work with you on backporting the current driver to 3.2-based kernels if you'd like.
Thanks again for your help,
Jonathan
[1] http://bugs.debian.org/677164
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [RFC/PATCH] Revert "Input: wacom - add 0xE5 (MT device) support"
In reply to Ping ChengQuoted 4 lines · Ping Cheng
I downloaded, built and installed 3.5.-rc2 and 3.2.20 from kernel.org without changing anything in the source. 3.5.-rc2 works all right. But I can not boot 3.2.20 on my system (the error has nothing to do with wacom driver).
By the way, if you have time to describe the boot failure in more detail to [email protected] (feel free to cc me), that would be very useful.
Thanks much,
Jonathan
Re: [RFC/PATCH] Revert "Input: wacom - add 0xE5 (MT device) support"
Quoted 10 lines · Jonathan Nieder
Quoted 4 lines · Ping Cheng
I downloaded, built and installed 3.5.-rc2 and 3.2.20 from kernel.org without changing anything in the source. 3.5.-rc2 works all right. But I can not boot 3.2.20 on my system (the error has nothing to do with wacom driver).
By the way, if you have time to describe the boot failure in more detail to [email protected] (feel free to cc me), that would be very useful.
Sorry for not getting back to you sooner. I am off today. I made 3.2.20 work after rerunning "make config" on Friday.
With the output of lsusb and dmesg from Nils, looks like either MAXCONTACTS, or device_type, or both are the root cause. MAXCONTACTS is not 2. The problem is that I do not have an X220T (0xE6) system to test with. My testing is on an 0xE3 system, which does not report MAXCONTACTS. So, a patch for upstream is needed.
I'll make a patch tomorrow for Nils to test.
Ping
Re: [RFC/PATCH] Revert "Input: wacom - add 0xE5 (MT device) support"
In reply to Ping ChengHi Ping,
Quoted 3 lines · Ping Cheng
Here is an update on my testing (for hardware, I have to test to be sure). The result shows driver in upstream and 3.2.20 both work with TPC2FG.
Again, thanks much for this.
Nils (cc-ed) tested Linus's "master" branch (3.5-rc2+) this morning. The outcome:
| I built the kernel from the git repository as you described. The tablet | does not work. | | lsusb -t gives: | Port 5: Dev 5, If 0, Class=HID, Driver=, 12M | | The dmesg output is attached. The two input files mentioned in this | file, which are related to the wacom tablet, are not there after | booting.
Logs at [1].
For comparison, v3.4.2 works fine. v3.4.2 plus some unrelated Intuous5 support patches (9fee619505bd + f860e581fd47 + 9b5b95dd516a + ae584ca47328) also works fine.
Nils also tested v3.4.2 plus the following patch.
f393ee2b814e Input: wacom - retrieve maximum number of touch points
from the HID usage table when it is supported
The exact patch used is at [2]. That produced:
| Linux video capture interface: v2.00 | ------------[ cut here ]------------ | kernel BUG at mm/slab.c:505! | invalid opcode: 0000 [#1] SMP [...] | Pid: 579, comm: modprobe Not tainted 3.4.2-amd64 #1 LENOVO 42992QG/42992QG [...] | Call Trace: | [<ffffffff810ef84e>] ? kfree+0x50/0x6c | [<ffffffffa04029cd>] ? wacom_probe+0x52c/0x957 [wacom] | [<ffffffffa006866b>] ? usb_probe_interface+0xf2/0x15d [usbcore]
which is "BUG_ON(!PageSlab(page))" in page_get_cache() and represents a free of an invalid pointer.
Full log at [3].
Known problem? Any ideas for tracking it down?
Thanks again and hope that helps,
Jonathan
[1] http://bugs.debian.org/677164#87
[2] http://bugs.debian.org/677164#50
[3] http://bugs.debian.org/cgi-bin/bugreport.cgi?msg=77;filename=dmesg_0001;att=1;bug=677164
Re: [RFC/PATCH] Revert "Input: wacom - add 0xE5 (MT device) support"
Quoted 53 lines · Jonathan Nieder
Hi Ping,
Quoted 3 lines · Ping Cheng
Here is an update on my testing (for hardware, I have to test to be sure). The result shows driver in upstream and 3.2.20 both work with TPC2FG.
Again, thanks much for this.
Nils (cc-ed) tested Linus's "master" branch (3.5-rc2+) this morning. The outcome:
| I built the kernel from the git repository as you described. The tablet | does not work. | | lsusb -t gives: | Port 5: Dev 5, If 0, Class=HID, Driver=, 12M | | The dmesg output is attached. The two input files mentioned in this | file, which are related to the wacom tablet, are not there after | booting.Logs at [1].
For comparison, v3.4.2 works fine. v3.4.2 plus some unrelated Intuous5 support patches (
9fee619505bd+f860e581fd47+9b5b95dd516a+ae584ca47328) also works fine.Nils also tested v3.4.2 plus the following patch.
f393ee2b814e Input: wacom - retrieve maximum number of touch points from the HID usage table when it is supported
The exact patch used is at [2]. That produced:
| Linux video capture interface: v2.00 | ------------[ cut here ]------------ | kernel BUG at mm/slab.c:505! | invalid opcode: 0000 [#1] SMP [...] | Pid: 579, comm: modprobe Not tainted 3.4.2-amd64 #1 LENOVO 42992QG/42992QG [...] | Call Trace: | [<ffffffff810ef84e>] ? kfree+0x50/0x6c | [<ffffffffa04029cd>] ? wacom_probe+0x52c/0x957 [wacom] | [<ffffffffa006866b>] ? usb_probe_interface+0xf2/0x15d [usbcore]which is "BUG_ON(!PageSlab(page))" in
page_get_cache()and represents a free of an invalid pointer.Full log at [3].
Quoted 8 lines
Known problem? Any ideas for tracking it down?
Thanks again and hope that helps,
Jonathan[1] http://bugs.debian.org/677164#87
[2] http://bugs.debian.org/677164#50
[3] http://bugs.debian.org/cgi-bin/bugreport.cgi?msg=77;filename=dmesg_0001;att=1;bug=677164
Its not obvious to me yet why patch [2] would cause the crash in log [1]. The only reason I see for wacom_probe() to be calling kfree() is in error case were its trying to unload the interface. Since the dmesg shows Pen loading, this is most likely crashing while processing the Finger/touch interface.
That makes some sense because patch [2] adds logic that should only be invoked on the touch interface.
Can you "rmmod wacom" and this run "lsusb -vvv" and email me directly or post to debian bug report the section for Wacom? I'd like to look at HID report for MAXCONTACTS and other items for touch interface. In this part of patch [2]:
+ case HID_USAGE_CONTACTMAX:
+ wacom_retrieve_report_data(intf, features);
+ i++;
+ break;
that i++ may not be needed and may cause it to ignore an important piece of data on this 0xE6 device.
Thats my only guess right now. From here, you may need to sprinkle the wacom_probe() function with a bunch of printk()'s to see exactly which part is failing and requesting to jump to "fail1:" label.
Chris
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [RFC/PATCH] Revert "Input: wacom - add 0xE5 (MT device) support"
Quoted 4 lines · Chris Bagwell
Quoted 1 line
The exact patch used is at [2]. That produced:
Can you "rmmod wacom" and this run "lsusb -vvv" and email me directly or post to debian bug report the section for Wacom? I'd like to look
With this kernel I could not remove the wacom module using "rmmod wacom" (the options -f or -w do not help). Furthermore "lsusb -vvv" hangs at the wacom device and does not produce more then:
Bus 002 Device 004: ID 056a:00e6 Wacom Co., Ltd
The output of "lsusb -vvv" using the Debian kernel from linux-image 3.2.17 and after doing "rmmod wacom" is in the attached file.
Nils
Bus 002 Device 004: ID 056a:00e6 Wacom Co., Ltd
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x056a Wacom Co., Ltd
idProduct 0x00e6
bcdDevice 1.39
iManufacturer 1 Tablet
iProduct 2 ISD-V4
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 59
bNumInterfaces 2
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xe0
Self Powered
Remote Wakeup
MaxPower 0mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 0 No Subclass
bInterfaceProtocol 0 None
iInterface 0
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.11
bCountryCode 0 Not supported
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 181
Report Descriptor: (length is 181)
Item(Global): Usage Page, data= [ 0x0d ] 13
Digitizer
Item(Local ): Usage, data= [ 0x02 ] 2
Pen
Item(Main ): Collection, data= [ 0x01 ] 1
Application
Item(Global): Report ID, data= [ 0x02 ] 2
Item(Local ): Usage, data= [ 0x20 ] 32
Stylus
Item(Main ): Collection, data= [ 0x00 ] 0
Physical
Item(Local ): Usage, data= [ 0x42 ] 66
Tip Switch
Item(Local ): Usage, data= [ 0x44 ] 68
Barrel Switch
Item(Local ): Usage, data= [ 0x45 ] 69
Eraser
Item(Local ): Usage, data= [ 0x3c ] 60
Invert
Item(Local ): Usage, data= [ 0x00 ] 0
Undefined
Item(Local ): Usage, data= [ 0x32 ] 50
In Range
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0x01 ] 1
Item(Global): Report Size, data= [ 0x01 ] 1
Item(Global): Report Count, data= [ 0x06 ] 6
Item(Main ): Input, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Report Count, data= [ 0x02 ] 2
Item(Main ): Input, data= [ 0x03 ] 3
Constant Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Usage Page, data= [ 0x01 ] 1
Generic Desktop Controls
Item(Local ): Usage, data= [ 0x30 ] 48
Direction-X
Item(Global): Logical Maximum, data= [ 0x70 0x6c ] 27760
Item(Global): Physical Maximum, data= [ 0x70 0x6c ] 27760
Item(Global): Unit, data= [ 0x11 ] 17
System: SI Linear, Unit: Centimeter
Item(Global): Unit Exponent, data= [ 0x0d ] 13
Unit Exponent: 13
Item(Global): Report Size, data= [ 0x10 ] 16
Item(Global): Report Count, data= [ 0x01 ] 1
Item(Main ): Input, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Local ): Usage, data= [ 0x31 ] 49
Direction-Y
Item(Global): Logical Maximum, data= [ 0x4e 0x3d ] 15694
Item(Global): Physical Maximum, data= [ 0x4e 0x3d ] 15694
Item(Main ): Input, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Physical Maximum, data= [ 0x00 ] 0
Item(Global): Unit, data= [ 0x00 ] 0
System: None, Unit: (None)
Item(Global): Unit Exponent, data= [ 0x00 ] 0
Unit Exponent: 0
Item(Global): Usage Page, data= [ 0x0d ] 13
Digitizer
Item(Local ): Usage, data= [ 0x30 ] 48
Tip Pressure
Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
Item(Main ): Input, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Main ): End Collection, data=none
Item(Main ): End Collection, data=none
Item(Global): Usage Page, data= [ 0x00 0xff ] 65280
(null)
Item(Local ): Usage, data= [ 0x00 ] 0
(null)
Item(Main ): Collection, data= [ 0x01 ] 1
Application
Item(Global): Report ID, data= [ 0x11 ] 17
Item(Global): Usage Page, data= [ 0x0d ] 13
Digitizer
Item(Local ): Usage, data= [ 0x20 ] 32
Stylus
Item(Main ): Collection, data= [ 0x00 ] 0
Physical
Item(Local ): Usage, data= [ 0x42 ] 66
Tip Switch
Item(Local ): Usage, data= [ 0x44 ] 68
Barrel Switch
Item(Local ): Usage, data= [ 0x45 ] 69
Eraser
Item(Local ): Usage, data= [ 0x3c ] 60
Invert
Item(Local ): Usage, data= [ 0x00 ] 0
Undefined
Item(Local ): Usage, data= [ 0x32 ] 50
In Range
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0x01 ] 1
Item(Global): Report Size, data= [ 0x01 ] 1
Item(Global): Report Count, data= [ 0x06 ] 6
Item(Main ): Input, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Report Count, data= [ 0x02 ] 2
Item(Main ): Input, data= [ 0x03 ] 3
Constant Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Usage Page, data= [ 0x01 ] 1
Generic Desktop Controls
Item(Local ): Usage, data= [ 0x30 ] 48
Direction-X
Item(Global): Logical Maximum, data= [ 0x70 0x6c ] 27760
Item(Global): Physical Maximum, data= [ 0x70 0x6c ] 27760
Item(Global): Unit, data= [ 0x11 ] 17
System: SI Linear, Unit: Centimeter
Item(Global): Unit Exponent, data= [ 0x0d ] 13
Unit Exponent: 13
Item(Global): Report Size, data= [ 0x10 ] 16
Item(Global): Report Count, data= [ 0x01 ] 1
Item(Main ): Input, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Local ): Usage, data= [ 0x31 ] 49
Direction-Y
Item(Global): Logical Maximum, data= [ 0x4e 0x3d ] 15694
Item(Global): Physical Maximum, data= [ 0x4e 0x3d ] 15694
Item(Main ): Input, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Physical Maximum, data= [ 0x00 ] 0
Item(Global): Unit, data= [ 0x00 ] 0
System: None, Unit: (None)
Item(Global): Unit Exponent, data= [ 0x00 ] 0
Unit Exponent: 0
Item(Global): Usage Page, data= [ 0x0d ] 13
Digitizer
Item(Local ): Usage, data= [ 0x30 ] 48
Tip Pressure
Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
Item(Main ): Input, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Main ): End Collection, data=none
Item(Local ): Usage, data= [ 0x00 ] 0
Undefined
Item(Global): Report Size, data= [ 0x08 ] 8
Item(Global): Report Count, data= [ 0x03 ] 3
Item(Main ): Feature, data= [ 0x12 ] 18
Data Variable Absolute No_Wrap Non_Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Main ): End Collection, data=none
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
bInterval 7
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 0 No Subclass
bInterfaceProtocol 0 None
iInterface 0
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.11
bCountryCode 0 Not supported
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 357
Report Descriptor: (length is 357)
Item(Global): Usage Page, data= [ 0x0d ] 13
Digitizer
Item(Local ): Usage, data= [ 0x04 ] 4
Touch Screen
Item(Main ): Collection, data= [ 0x01 ] 1
Application
Item(Global): Report ID, data= [ 0x0c ] 12
Item(Local ): Usage, data= [ 0x22 ] 34
Finger
Item(Main ): Collection, data= [ 0x00 ] 0
Physical
Item(Local ): Usage, data= [ 0x42 ] 66
Tip Switch
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0x01 ] 1
Item(Global): Report Size, data= [ 0x01 ] 1
Item(Global): Report Count, data= [ 0x01 ] 1
Item(Main ): Input, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Local ): Usage, data= [ 0x32 ] 50
In Range
Item(Main ): Input, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Local ): Usage, data= [ 0x47 ] 71
Confidence
Item(Main ): Input, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Report Count, data= [ 0x05 ] 5
Item(Main ): Input, data= [ 0x03 ] 3
Constant Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Usage Page, data= [ 0x01 ] 1
Generic Desktop Controls
Item(Local ): Usage, data= [ 0x30 ] 48
Direction-X
Item(Global): Logical Maximum, data= [ 0xd8 0x0a ] 2776
Item(Global): Physical Maximum, data= [ 0x70 0x6c ] 27760
Item(Global): Unit, data= [ 0x11 ] 17
System: SI Linear, Unit: Centimeter
Item(Global): Unit Exponent, data= [ 0x0d ] 13
Unit Exponent: 13
Item(Global): Report Size, data= [ 0x10 ] 16
Item(Global): Report Count, data= [ 0x01 ] 1
Item(Main ): Input, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Local ): Usage, data= [ 0x31 ] 49
Direction-Y
Item(Global): Logical Maximum, data= [ 0x21 0x06 ] 1569
Item(Global): Physical Maximum, data= [ 0x4e 0x3d ] 15694
Item(Main ): Input, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Physical Maximum, data= [ 0x00 ] 0
Item(Global): Unit, data= [ 0x00 ] 0
System: None, Unit: (None)
Item(Global): Unit Exponent, data= [ 0x00 ] 0
Unit Exponent: 0
Item(Global): Usage Page, data= [ 0x0d ] 13
Digitizer
Item(Local ): Usage, data= [ 0x48 ] 72
Width
Item(Global): Report Size, data= [ 0x08 ] 8
Item(Global): Logical Maximum, data= [ 0x7f ] 127
Item(Main ): Input, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Local ): Usage, data= [ 0x49 ] 73
Height
Item(Main ): Input, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Local ): Usage, data= [ 0x51 ] 81
Contact ID
Item(Main ): Input, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Local ): Usage, data= [ 0x55 ] 85
Maximum Contact Number
Item(Main ): Feature, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Main ): End Collection, data=none
Item(Main ): End Collection, data=none
Item(Global): Usage Page, data= [ 0x00 0xff ] 65280
(null)
Item(Local ): Usage, data= [ 0x01 ] 1
(null)
Item(Main ): Collection, data= [ 0x01 ] 1
Application
Item(Global): Report ID, data= [ 0x0d ] 13
Item(Global): Usage Page, data= [ 0x0d ] 13
Digitizer
Item(Local ): Usage, data= [ 0x22 ] 34
Finger
Item(Main ): Collection, data= [ 0x00 ] 0
Physical
Item(Local ): Usage, data= [ 0x42 ] 66
Tip Switch
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0x01 ] 1
Item(Global): Report Size, data= [ 0x01 ] 1
Item(Global): Report Count, data= [ 0x04 ] 4
Item(Main ): Input, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Report Count, data= [ 0x04 ] 4
Item(Main ): Input, data= [ 0x03 ] 3
Constant Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Usage Page, data= [ 0x01 ] 1
Generic Desktop Controls
Item(Local ): Usage, data= [ 0x30 ] 48
Direction-X
Item(Global): Logical Maximum, data= [ 0xd8 0x0a ] 2776
Item(Global): Physical Maximum, data= [ 0x70 0x6c ] 27760
Item(Global): Unit, data= [ 0x11 ] 17
System: SI Linear, Unit: Centimeter
Item(Global): Unit Exponent, data= [ 0x0d ] 13
Unit Exponent: 13
Item(Global): Report Size, data= [ 0x10 ] 16
Item(Global): Report Count, data= [ 0x02 ] 2
Item(Main ): Input, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Local ): Usage, data= [ 0x31 ] 49
Direction-Y
Item(Global): Logical Maximum, data= [ 0x21 0x06 ] 1569
Item(Global): Physical Maximum, data= [ 0x4e 0x3d ] 15694
Item(Main ): Input, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Physical Maximum, data= [ 0x00 ] 0
Item(Global): Unit, data= [ 0x00 ] 0
System: None, Unit: (None)
Item(Global): Unit Exponent, data= [ 0x00 ] 0
Unit Exponent: 0
Item(Global): Usage Page, data= [ 0x0d ] 13
Digitizer
Item(Local ): Usage, data= [ 0x48 ] 72
Width
Item(Global): Report Size, data= [ 0x08 ] 8
Item(Global): Logical Maximum, data= [ 0x7f ] 127
Item(Main ): Input, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Local ): Usage, data= [ 0x49 ] 73
Height
Item(Main ): Input, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Main ): End Collection, data=none
Item(Global): Report ID, data= [ 0x02 ] 2
Item(Local ): Usage, data= [ 0x00 ] 0
Undefined
Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
Item(Global): Report Count, data= [ 0x01 ] 1
Item(Main ): Feature, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Report ID, data= [ 0x03 ] 3
Item(Local ): Usage, data= [ 0x00 ] 0
Undefined
Item(Global): Report Count, data= [ 0x03 ] 3
Item(Main ): Feature, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Report ID, data= [ 0x05 ] 5
Item(Local ): Usage, data= [ 0x00 ] 0
Undefined
Item(Global): Report Count, data= [ 0x08 ] 8
Item(Main ): Feature, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Report ID, data= [ 0x06 ] 6
Item(Local ): Usage, data= [ 0x00 ] 0
Undefined
Item(Global): Report Count, data= [ 0x08 ] 8
Item(Main ): Feature, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Main ): End Collection, data=none
Item(Global): Usage Page, data= [ 0x0d ] 13
Digitizer
Item(Local ): Usage, data= [ 0x0e ] 14
(null)
Item(Main ): Collection, data= [ 0x01 ] 1
Application
Item(Global): Report ID, data= [ 0x0e ] 14
Item(Local ): Usage, data= [ 0x52 ] 82
Input Mode
Item(Local ): Usage, data= [ 0x53 ] 83
Device Index
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
Item(Global): Report Size, data= [ 0x08 ] 8
Item(Global): Report Count, data= [ 0x02 ] 2
Item(Main ): Feature, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Main ): End Collection, data=none
Item(Global): Usage Page, data= [ 0x01 ] 1
Generic Desktop Controls
Item(Local ): Usage, data= [ 0x02 ] 2
Mouse
Item(Main ): Collection, data= [ 0x01 ] 1
Application
Item(Global): Report ID, data= [ 0x0f ] 15
Item(Local ): Usage, data= [ 0x01 ] 1
Pointer
Item(Main ): Collection, data= [ 0x00 ] 0
Physical
Item(Global): Usage Page, data= [ 0x09 ] 9
Buttons
Item(Local ): Usage Minimum, data= [ 0x01 ] 1
Button 1 (Primary)
Item(Local ): Usage Maximum, data= [ 0x02 ] 2
Button 2 (Secondary)
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0x01 ] 1
Item(Global): Report Count, data= [ 0x02 ] 2
Item(Global): Report Size, data= [ 0x01 ] 1
Item(Main ): Input, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Report Count, data= [ 0x01 ] 1
Item(Global): Report Size, data= [ 0x06 ] 6
Item(Main ): Input, data= [ 0x03 ] 3
Constant Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Usage Page, data= [ 0x01 ] 1
Generic Desktop Controls
Item(Local ): Usage, data= [ 0x30 ] 48
Direction-X
Item(Local ): Usage, data= [ 0x31 ] 49
Direction-Y
Item(Global): Logical Maximum, data= [ 0xff 0x7f ] 32767
Item(Global): Report Size, data= [ 0x10 ] 16
Item(Global): Report Count, data= [ 0x02 ] 2
Item(Main ): Input, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Main ): End Collection, data=none
Item(Main ): End Collection, data=none
Item(Global): Usage Page, data= [ 0x0d ] 13
Digitizer
Item(Local ): Usage, data= [ 0x04 ] 4
Touch Screen
Item(Main ): Collection, data= [ 0x01 ] 1
Application
Item(Global): Report ID, data= [ 0x10 ] 16
Item(Local ): Usage, data= [ 0x22 ] 34
Finger
Item(Main ): Collection, data= [ 0x00 ] 0
Physical
Item(Local ): Usage, data= [ 0x42 ] 66
Tip Switch
Item(Local ): Usage, data= [ 0x32 ] 50
In Range
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0x01 ] 1
Item(Global): Report Size, data= [ 0x01 ] 1
Item(Global): Report Count, data= [ 0x02 ] 2
Item(Main ): Input, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Report Count, data= [ 0x06 ] 6
Item(Main ): Input, data= [ 0x03 ] 3
Constant Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Usage Page, data= [ 0x01 ] 1
Generic Desktop Controls
Item(Local ): Usage, data= [ 0x30 ] 48
Direction-X
Item(Global): Logical Maximum, data= [ 0xd8 0x0a ] 2776
Item(Global): Physical Maximum, data= [ 0x70 0x6c ] 27760
Item(Global): Unit, data= [ 0x11 ] 17
System: SI Linear, Unit: Centimeter
Item(Global): Unit Exponent, data= [ 0x0d ] 13
Unit Exponent: 13
Item(Global): Report Size, data= [ 0x10 ] 16
Item(Global): Report Count, data= [ 0x01 ] 1
Item(Main ): Input, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Local ): Usage, data= [ 0x31 ] 49
Direction-Y
Item(Global): Logical Maximum, data= [ 0x21 0x06 ] 1569
Item(Global): Physical Maximum, data= [ 0x4e 0x3d ] 15694
Item(Main ): Input, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Physical Maximum, data= [ 0x00 ] 0
Item(Global): Unit, data= [ 0x00 ] 0
System: None, Unit: (None)
Item(Global): Unit Exponent, data= [ 0x00 ] 0
Unit Exponent: 0
Item(Main ): End Collection, data=none
Item(Main ): End Collection, data=none
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0010 1x 16 bytes
bInterval 5Device Status: 0x0001
Self Powered
Re: [RFC/PATCH] Revert "Input: wacom - add 0xE5 (MT device) support"
Quoted 11 lines · Nils Kanning
Quoted 4 lines · Chris Bagwell
Quoted 1 line
The exact patch used is at [2]. That produced:
Can you "rmmod wacom" and this run "lsusb -vvv" and email me directly or post to debian bug report the section for Wacom? I'd like to look
With this kernel I could not remove the wacom module using "rmmod wacom" (the options -f or -w do not help). Furthermore "lsusb -vvv" hangs at the wacom device and does not produce more then:
Bus 002 Device 004: ID 056a:00e6 Wacom Co., Ltd
Quoted 5 lines
The output of "lsusb -vvv" using the Debian kernel from linux-image 3.2.17 and after doing "rmmod wacom" is in the attached file.
Nils
The HID report didn't help me yet; other then now knowing the i++ is correct.
Your dmesg log file from 3.5-rc2 gives best hint yet at problem.
[ 2.159684] input: Wacom ISDv4 E6 Pen as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.5/2-1.5:1.0/input/input5 [ 2.164406] input: Wacom ISDv4 E6 Pen as
/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.5/2-1.5:1.1/input/input6
Instead of opps, it loads 2 input devices. That second device should say "Finger" instead of "Pen".
Thats related to device_type that gets set while parsing the HID report. I'll need some more time to study your HID report to see if I can figure out why its getting confused.
Chris
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html