Skip to contentSkip to conversation

input: wacom - add 0xE5 (MT device) support

PATCH Applied Ping Cheng 5 participants 13 messages Apr 26, 2012 – Jun 19, 2012

Subsystems (2)
lore
Share & tools
lore

Ping Cheng

author
#0 lore raw

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
index b4842d0..b79d451 100644
@@ -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
index 321269c..3dde639 100644
@@ -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
maintainer Applied
#1 lore raw
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
#2 lore raw

[RFC/PATCH] Revert "Input: wacom - add 0xE5 (MT device) support"

In reply to Ping Cheng

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.

---
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
index b79d45198d82..b4842d0e61dd 100644
@@ -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
index 78fbd3f42009..321269c1ac4c 100644
@@ -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
author
#3 lore raw

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.

---
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
index b79d45198d82..b4842d0e61dd 100644
@@ -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 +0 -4
index cad5602d3ce4..a0cc46e5f13c 100644
@@ -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
index 004bc1bb1544..5b31418b416b 100644
@@ -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:
-               return wacom_tpc_single_touch(wacom, len);
+                return wacom_tpc_single_touch(wacom, len);

       case WACOM_PKGLEN_TPC2FG:
-               return wacom_tpc_mt_touch(wacom);
+               return wacom_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:
                       return wacom_tpc_single_touch(wacom, len);

-               case WACOM_REPORT_TPCMT:
-                       return wacom_mt_touch(wacom); -
               case WACOM_REPORT_PENABLED:
                       return wacom_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_features wacom_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_features wacom_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
index 78fbd3f42009..321269c1ac4c 100644
@@ -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

#4 lore raw

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

author
#5 lore raw

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

#6 lore raw

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

#7 lore raw

Re: [RFC/PATCH] Revert "Input: wacom - add 0xE5 (MT device) support"

In reply to Ping Cheng
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.

Thanks much,
Jonathan

author
#8 lore raw

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

#9 lore raw

Re: [RFC/PATCH] Revert "Input: wacom - add 0xE5 (MT device) support"

In reply to Ping Cheng

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].

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

#10 lore raw

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

#11 lore raw

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               5

Device Status: 0x0001
Self Powered

#12 lore raw

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