Commit d682bd7f38b73e5dff0b5584c8ec301ccf76e4db

Authored by Henrik Rydberg
Committed by Jiri Kosina
1 parent 8052ee5f5f

Revert "HID: multitouch: decide if hid-multitouch needs to handle mt devices"

This reverts commit 0db3bfc72adf0c (""HID: multitouch: decide if hid-multitouch
needs to handle mt devices").

The generic detection of hid-mt devices has two major flaws, and was
merged prematurely. Firstly, the hid-multitouch gets loaded even when
the device is handled by a special device. Secondly, the patch only
partially duplicates the device whitelist already present in hid-core,
effectively rendering a number of devices non-functional.

Reported-by: Sean Young <sean@mess.org>
Tested-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>

Showing 1 changed file with 4 additions and 43 deletions Side-by-side Diff

drivers/hid/hid-multitouch.c
... ... @@ -291,7 +291,6 @@
291 291 td->last_slot_field = usage->hid;
292 292 td->last_field_index = field->index;
293 293 td->last_mt_collection = usage->collection_index;
294   - hdev->quirks &= ~HID_QUIRK_MULTITOUCH;
295 294 return 1;
296 295 case HID_DG_WIDTH:
297 296 hid_map_usage(hi, usage, bit, max,
298 297  
... ... @@ -530,44 +529,12 @@
530 529 }
531 530 }
532 531  
533   -/* a list of devices for which there is a specialized multitouch driver */
534   -static const struct hid_device_id mt_have_special_driver[] = {
535   - { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, 0x0001) },
536   - { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, 0x0006) },
537   - { HID_USB_DEVICE(USB_VENDOR_ID_QUANTA,
538   - USB_DEVICE_ID_PIXART_IMAGING_INC_OPTICAL_TOUCH_SCREEN) },
539   - { HID_USB_DEVICE(USB_VENDOR_ID_QUANTA,
540   - USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH) },
541   - { }
542   -};
543   -
544   -static bool mt_match_one_id(struct hid_device *hdev,
545   - const struct hid_device_id *id)
546   -{
547   - return id->bus == hdev->bus &&
548   - (id->vendor == HID_ANY_ID || id->vendor == hdev->vendor) &&
549   - (id->product == HID_ANY_ID || id->product == hdev->product);
550   -}
551   -
552   -static const struct hid_device_id *mt_match_id(struct hid_device *hdev,
553   - const struct hid_device_id *id)
554   -{
555   - for (; id->bus; id++)
556   - if (mt_match_one_id(hdev, id))
557   - return id;
558   -
559   - return NULL;
560   -}
561   -
562 532 static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id)
563 533 {
564 534 int ret, i;
565 535 struct mt_device *td;
566 536 struct mt_class *mtclass = mt_classes; /* MT_CLS_DEFAULT */
567 537  
568   - if (mt_match_id(hdev, mt_have_special_driver))
569   - return -ENODEV;
570   -
571 538 for (i = 0; mt_classes[i].name ; i++) {
572 539 if (id->driver_data == mt_classes[i].name) {
573 540 mtclass = &(mt_classes[i]);
... ... @@ -575,6 +542,10 @@
575 542 }
576 543 }
577 544  
  545 + /* This allows the driver to correctly support devices
  546 + * that emit events over several HID messages.
  547 + */
  548 + hdev->quirks |= HID_QUIRK_NO_INPUT_SYNC;
578 549  
579 550 td = kzalloc(sizeof(struct mt_device), GFP_KERNEL);
580 551 if (!td) {
581 552  
... ... @@ -590,16 +561,10 @@
590 561 if (ret != 0)
591 562 goto fail;
592 563  
593   - hdev->quirks |= HID_QUIRK_MULTITOUCH;
594 564 ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT);
595 565 if (ret)
596 566 goto fail;
597 567  
598   - /* This allows the driver to correctly support devices
599   - * that emit events over several HID messages.
600   - */
601   - hdev->quirks |= HID_QUIRK_NO_INPUT_SYNC;
602   -
603 568 td->slots = kzalloc(td->maxcontacts * sizeof(struct mt_slot),
604 569 GFP_KERNEL);
605 570 if (!td->slots) {
... ... @@ -792,10 +757,6 @@
792 757 { .driver_data = MT_CLS_DEFAULT,
793 758 HID_USB_DEVICE(USB_VENDOR_ID_XAT,
794 759 USB_DEVICE_ID_XAT_CSR) },
795   -
796   - /* Rest of the world */
797   - { .driver_data = MT_CLS_DEFAULT,
798   - HID_USB_DEVICE(HID_ANY_ID, HID_ANY_ID) },
799 760  
800 761 { }
801 762 };