diff options
Diffstat (limited to 'drivers/hid/hid-multitouch.c')
-rw-r--r-- | drivers/hid/hid-multitouch.c | 233 |
1 files changed, 142 insertions, 91 deletions
diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c index 1d5b94167b52..6e3332a99976 100644 --- a/drivers/hid/hid-multitouch.c +++ b/drivers/hid/hid-multitouch.c | |||
@@ -70,9 +70,16 @@ struct mt_class { | |||
70 | bool is_indirect; /* true for touchpads */ | 70 | bool is_indirect; /* true for touchpads */ |
71 | }; | 71 | }; |
72 | 72 | ||
73 | struct mt_fields { | ||
74 | unsigned usages[HID_MAX_FIELDS]; | ||
75 | unsigned int length; | ||
76 | }; | ||
77 | |||
73 | struct mt_device { | 78 | struct mt_device { |
74 | struct mt_slot curdata; /* placeholder of incoming data */ | 79 | struct mt_slot curdata; /* placeholder of incoming data */ |
75 | struct mt_class mtclass; /* our mt device class */ | 80 | struct mt_class mtclass; /* our mt device class */ |
81 | struct mt_fields *fields; /* temporary placeholder for storing the | ||
82 | multitouch fields */ | ||
76 | unsigned last_field_index; /* last field index of the report */ | 83 | unsigned last_field_index; /* last field index of the report */ |
77 | unsigned last_slot_field; /* the last field of a slot */ | 84 | unsigned last_slot_field; /* the last field of a slot */ |
78 | __s8 inputmode; /* InputMode HID feature, -1 if non-existent */ | 85 | __s8 inputmode; /* InputMode HID feature, -1 if non-existent */ |
@@ -110,6 +117,9 @@ struct mt_device { | |||
110 | 117 | ||
111 | #define MT_DEFAULT_MAXCONTACT 10 | 118 | #define MT_DEFAULT_MAXCONTACT 10 |
112 | 119 | ||
120 | #define MT_USB_DEVICE(v, p) HID_DEVICE(BUS_USB, HID_GROUP_MULTITOUCH, v, p) | ||
121 | #define MT_BT_DEVICE(v, p) HID_DEVICE(BUS_BLUETOOTH, HID_GROUP_MULTITOUCH, v, p) | ||
122 | |||
113 | /* | 123 | /* |
114 | * these device-dependent functions determine what slot corresponds | 124 | * these device-dependent functions determine what slot corresponds |
115 | * to a valid contact that was just read. | 125 | * to a valid contact that was just read. |
@@ -275,11 +285,15 @@ static void set_abs(struct input_dev *input, unsigned int code, | |||
275 | input_set_abs_params(input, code, fmin, fmax, fuzz, 0); | 285 | input_set_abs_params(input, code, fmin, fmax, fuzz, 0); |
276 | } | 286 | } |
277 | 287 | ||
278 | static void set_last_slot_field(struct hid_usage *usage, struct mt_device *td, | 288 | static void mt_store_field(struct hid_usage *usage, struct mt_device *td, |
279 | struct hid_input *hi) | 289 | struct hid_input *hi) |
280 | { | 290 | { |
281 | if (!test_bit(usage->hid, hi->input->absbit)) | 291 | struct mt_fields *f = td->fields; |
282 | td->last_slot_field = usage->hid; | 292 | |
293 | if (f->length >= HID_MAX_FIELDS) | ||
294 | return; | ||
295 | |||
296 | f->usages[f->length++] = usage->hid; | ||
283 | } | 297 | } |
284 | 298 | ||
285 | static int mt_input_mapping(struct hid_device *hdev, struct hid_input *hi, | 299 | static int mt_input_mapping(struct hid_device *hdev, struct hid_input *hi, |
@@ -330,7 +344,7 @@ static int mt_input_mapping(struct hid_device *hdev, struct hid_input *hi, | |||
330 | cls->sn_move); | 344 | cls->sn_move); |
331 | /* touchscreen emulation */ | 345 | /* touchscreen emulation */ |
332 | set_abs(hi->input, ABS_X, field, cls->sn_move); | 346 | set_abs(hi->input, ABS_X, field, cls->sn_move); |
333 | set_last_slot_field(usage, td, hi); | 347 | mt_store_field(usage, td, hi); |
334 | td->last_field_index = field->index; | 348 | td->last_field_index = field->index; |
335 | return 1; | 349 | return 1; |
336 | case HID_GD_Y: | 350 | case HID_GD_Y: |
@@ -340,7 +354,7 @@ static int mt_input_mapping(struct hid_device *hdev, struct hid_input *hi, | |||
340 | cls->sn_move); | 354 | cls->sn_move); |
341 | /* touchscreen emulation */ | 355 | /* touchscreen emulation */ |
342 | set_abs(hi->input, ABS_Y, field, cls->sn_move); | 356 | set_abs(hi->input, ABS_Y, field, cls->sn_move); |
343 | set_last_slot_field(usage, td, hi); | 357 | mt_store_field(usage, td, hi); |
344 | td->last_field_index = field->index; | 358 | td->last_field_index = field->index; |
345 | return 1; | 359 | return 1; |
346 | } | 360 | } |
@@ -349,24 +363,24 @@ static int mt_input_mapping(struct hid_device *hdev, struct hid_input *hi, | |||
349 | case HID_UP_DIGITIZER: | 363 | case HID_UP_DIGITIZER: |
350 | switch (usage->hid) { | 364 | switch (usage->hid) { |
351 | case HID_DG_INRANGE: | 365 | case HID_DG_INRANGE: |
352 | set_last_slot_field(usage, td, hi); | 366 | mt_store_field(usage, td, hi); |
353 | td->last_field_index = field->index; | 367 | td->last_field_index = field->index; |
354 | return 1; | 368 | return 1; |
355 | case HID_DG_CONFIDENCE: | 369 | case HID_DG_CONFIDENCE: |
356 | set_last_slot_field(usage, td, hi); | 370 | mt_store_field(usage, td, hi); |
357 | td->last_field_index = field->index; | 371 | td->last_field_index = field->index; |
358 | return 1; | 372 | return 1; |
359 | case HID_DG_TIPSWITCH: | 373 | case HID_DG_TIPSWITCH: |
360 | hid_map_usage(hi, usage, bit, max, EV_KEY, BTN_TOUCH); | 374 | hid_map_usage(hi, usage, bit, max, EV_KEY, BTN_TOUCH); |
361 | input_set_capability(hi->input, EV_KEY, BTN_TOUCH); | 375 | input_set_capability(hi->input, EV_KEY, BTN_TOUCH); |
362 | set_last_slot_field(usage, td, hi); | 376 | mt_store_field(usage, td, hi); |
363 | td->last_field_index = field->index; | 377 | td->last_field_index = field->index; |
364 | return 1; | 378 | return 1; |
365 | case HID_DG_CONTACTID: | 379 | case HID_DG_CONTACTID: |
366 | if (!td->maxcontacts) | 380 | if (!td->maxcontacts) |
367 | td->maxcontacts = MT_DEFAULT_MAXCONTACT; | 381 | td->maxcontacts = MT_DEFAULT_MAXCONTACT; |
368 | input_mt_init_slots(hi->input, td->maxcontacts); | 382 | input_mt_init_slots(hi->input, td->maxcontacts); |
369 | td->last_slot_field = usage->hid; | 383 | mt_store_field(usage, td, hi); |
370 | td->last_field_index = field->index; | 384 | td->last_field_index = field->index; |
371 | td->touches_by_report++; | 385 | td->touches_by_report++; |
372 | return 1; | 386 | return 1; |
@@ -375,7 +389,7 @@ static int mt_input_mapping(struct hid_device *hdev, struct hid_input *hi, | |||
375 | EV_ABS, ABS_MT_TOUCH_MAJOR); | 389 | EV_ABS, ABS_MT_TOUCH_MAJOR); |
376 | set_abs(hi->input, ABS_MT_TOUCH_MAJOR, field, | 390 | set_abs(hi->input, ABS_MT_TOUCH_MAJOR, field, |
377 | cls->sn_width); | 391 | cls->sn_width); |
378 | set_last_slot_field(usage, td, hi); | 392 | mt_store_field(usage, td, hi); |
379 | td->last_field_index = field->index; | 393 | td->last_field_index = field->index; |
380 | return 1; | 394 | return 1; |
381 | case HID_DG_HEIGHT: | 395 | case HID_DG_HEIGHT: |
@@ -385,7 +399,7 @@ static int mt_input_mapping(struct hid_device *hdev, struct hid_input *hi, | |||
385 | cls->sn_height); | 399 | cls->sn_height); |
386 | input_set_abs_params(hi->input, | 400 | input_set_abs_params(hi->input, |
387 | ABS_MT_ORIENTATION, 0, 1, 0, 0); | 401 | ABS_MT_ORIENTATION, 0, 1, 0, 0); |
388 | set_last_slot_field(usage, td, hi); | 402 | mt_store_field(usage, td, hi); |
389 | td->last_field_index = field->index; | 403 | td->last_field_index = field->index; |
390 | return 1; | 404 | return 1; |
391 | case HID_DG_TIPPRESSURE: | 405 | case HID_DG_TIPPRESSURE: |
@@ -396,7 +410,7 @@ static int mt_input_mapping(struct hid_device *hdev, struct hid_input *hi, | |||
396 | /* touchscreen emulation */ | 410 | /* touchscreen emulation */ |
397 | set_abs(hi->input, ABS_PRESSURE, field, | 411 | set_abs(hi->input, ABS_PRESSURE, field, |
398 | cls->sn_pressure); | 412 | cls->sn_pressure); |
399 | set_last_slot_field(usage, td, hi); | 413 | mt_store_field(usage, td, hi); |
400 | td->last_field_index = field->index; | 414 | td->last_field_index = field->index; |
401 | return 1; | 415 | return 1; |
402 | case HID_DG_CONTACTCOUNT: | 416 | case HID_DG_CONTACTCOUNT: |
@@ -635,6 +649,31 @@ static void mt_set_maxcontacts(struct hid_device *hdev) | |||
635 | } | 649 | } |
636 | } | 650 | } |
637 | 651 | ||
652 | static void mt_post_parse_default_settings(struct mt_device *td) | ||
653 | { | ||
654 | __s32 quirks = td->mtclass.quirks; | ||
655 | |||
656 | /* unknown serial device needs special quirks */ | ||
657 | if (td->touches_by_report == 1) { | ||
658 | quirks |= MT_QUIRK_ALWAYS_VALID; | ||
659 | quirks &= ~MT_QUIRK_NOT_SEEN_MEANS_UP; | ||
660 | quirks &= ~MT_QUIRK_VALID_IS_INRANGE; | ||
661 | quirks &= ~MT_QUIRK_VALID_IS_CONFIDENCE; | ||
662 | } | ||
663 | |||
664 | td->mtclass.quirks = quirks; | ||
665 | } | ||
666 | |||
667 | static void mt_post_parse(struct mt_device *td) | ||
668 | { | ||
669 | struct mt_fields *f = td->fields; | ||
670 | |||
671 | if (td->touches_by_report > 0) { | ||
672 | int field_count_per_touch = f->length / td->touches_by_report; | ||
673 | td->last_slot_field = f->usages[field_count_per_touch - 1]; | ||
674 | } | ||
675 | } | ||
676 | |||
638 | static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id) | 677 | static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id) |
639 | { | 678 | { |
640 | int ret, i; | 679 | int ret, i; |
@@ -654,7 +693,6 @@ static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id) | |||
654 | * that emit events over several HID messages. | 693 | * that emit events over several HID messages. |
655 | */ | 694 | */ |
656 | hdev->quirks |= HID_QUIRK_NO_INPUT_SYNC; | 695 | hdev->quirks |= HID_QUIRK_NO_INPUT_SYNC; |
657 | hdev->quirks &= ~HID_QUIRK_MULTITOUCH; | ||
658 | 696 | ||
659 | td = kzalloc(sizeof(struct mt_device), GFP_KERNEL); | 697 | td = kzalloc(sizeof(struct mt_device), GFP_KERNEL); |
660 | if (!td) { | 698 | if (!td) { |
@@ -666,6 +704,13 @@ static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id) | |||
666 | td->maxcontact_report_id = -1; | 704 | td->maxcontact_report_id = -1; |
667 | hid_set_drvdata(hdev, td); | 705 | hid_set_drvdata(hdev, td); |
668 | 706 | ||
707 | td->fields = kzalloc(sizeof(struct mt_fields), GFP_KERNEL); | ||
708 | if (!td->fields) { | ||
709 | dev_err(&hdev->dev, "cannot allocate multitouch fields data\n"); | ||
710 | ret = -ENOMEM; | ||
711 | goto fail; | ||
712 | } | ||
713 | |||
669 | ret = hid_parse(hdev); | 714 | ret = hid_parse(hdev); |
670 | if (ret != 0) | 715 | if (ret != 0) |
671 | goto fail; | 716 | goto fail; |
@@ -674,14 +719,10 @@ static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id) | |||
674 | if (ret) | 719 | if (ret) |
675 | goto fail; | 720 | goto fail; |
676 | 721 | ||
677 | if (!id && td->touches_by_report == 1) { | 722 | mt_post_parse(td); |
678 | /* the device has been sent by hid-generic */ | 723 | |
679 | mtclass = &td->mtclass; | 724 | if (id->vendor == HID_ANY_ID && id->product == HID_ANY_ID) |
680 | mtclass->quirks |= MT_QUIRK_ALWAYS_VALID; | 725 | mt_post_parse_default_settings(td); |
681 | mtclass->quirks &= ~MT_QUIRK_NOT_SEEN_MEANS_UP; | ||
682 | mtclass->quirks &= ~MT_QUIRK_VALID_IS_INRANGE; | ||
683 | mtclass->quirks &= ~MT_QUIRK_VALID_IS_CONFIDENCE; | ||
684 | } | ||
685 | 726 | ||
686 | td->slots = kzalloc(td->maxcontacts * sizeof(struct mt_slot), | 727 | td->slots = kzalloc(td->maxcontacts * sizeof(struct mt_slot), |
687 | GFP_KERNEL); | 728 | GFP_KERNEL); |
@@ -697,9 +738,13 @@ static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id) | |||
697 | mt_set_maxcontacts(hdev); | 738 | mt_set_maxcontacts(hdev); |
698 | mt_set_input_mode(hdev); | 739 | mt_set_input_mode(hdev); |
699 | 740 | ||
741 | kfree(td->fields); | ||
742 | td->fields = NULL; | ||
743 | |||
700 | return 0; | 744 | return 0; |
701 | 745 | ||
702 | fail: | 746 | fail: |
747 | kfree(td->fields); | ||
703 | kfree(td); | 748 | kfree(td); |
704 | return ret; | 749 | return ret; |
705 | } | 750 | } |
@@ -727,50 +772,54 @@ static const struct hid_device_id mt_devices[] = { | |||
727 | 772 | ||
728 | /* 3M panels */ | 773 | /* 3M panels */ |
729 | { .driver_data = MT_CLS_3M, | 774 | { .driver_data = MT_CLS_3M, |
730 | HID_USB_DEVICE(USB_VENDOR_ID_3M, | 775 | MT_USB_DEVICE(USB_VENDOR_ID_3M, |
731 | USB_DEVICE_ID_3M1968) }, | 776 | USB_DEVICE_ID_3M1968) }, |
732 | { .driver_data = MT_CLS_3M, | 777 | { .driver_data = MT_CLS_3M, |
733 | HID_USB_DEVICE(USB_VENDOR_ID_3M, | 778 | MT_USB_DEVICE(USB_VENDOR_ID_3M, |
734 | USB_DEVICE_ID_3M2256) }, | 779 | USB_DEVICE_ID_3M2256) }, |
735 | { .driver_data = MT_CLS_3M, | 780 | { .driver_data = MT_CLS_3M, |
736 | HID_USB_DEVICE(USB_VENDOR_ID_3M, | 781 | MT_USB_DEVICE(USB_VENDOR_ID_3M, |
737 | USB_DEVICE_ID_3M3266) }, | 782 | USB_DEVICE_ID_3M3266) }, |
738 | 783 | ||
739 | /* ActionStar panels */ | 784 | /* ActionStar panels */ |
740 | { .driver_data = MT_CLS_DEFAULT, | 785 | { .driver_data = MT_CLS_DEFAULT, |
741 | HID_USB_DEVICE(USB_VENDOR_ID_ACTIONSTAR, | 786 | MT_USB_DEVICE(USB_VENDOR_ID_ACTIONSTAR, |
742 | USB_DEVICE_ID_ACTIONSTAR_1011) }, | 787 | USB_DEVICE_ID_ACTIONSTAR_1011) }, |
743 | 788 | ||
744 | /* Atmel panels */ | 789 | /* Atmel panels */ |
745 | { .driver_data = MT_CLS_SERIAL, | 790 | { .driver_data = MT_CLS_SERIAL, |
746 | HID_USB_DEVICE(USB_VENDOR_ID_ATMEL, | 791 | MT_USB_DEVICE(USB_VENDOR_ID_ATMEL, |
747 | USB_DEVICE_ID_ATMEL_MULTITOUCH) }, | 792 | USB_DEVICE_ID_ATMEL_MULTITOUCH) }, |
748 | { .driver_data = MT_CLS_SERIAL, | 793 | { .driver_data = MT_CLS_SERIAL, |
749 | HID_USB_DEVICE(USB_VENDOR_ID_ATMEL, | 794 | MT_USB_DEVICE(USB_VENDOR_ID_ATMEL, |
750 | USB_DEVICE_ID_ATMEL_MXT_DIGITIZER) }, | 795 | USB_DEVICE_ID_ATMEL_MXT_DIGITIZER) }, |
751 | 796 | ||
797 | /* Baanto multitouch devices */ | ||
798 | { .driver_data = MT_CLS_DEFAULT, | ||
799 | MT_USB_DEVICE(USB_VENDOR_ID_BAANTO, | ||
800 | USB_DEVICE_ID_BAANTO_MT_190W2) }, | ||
752 | /* Cando panels */ | 801 | /* Cando panels */ |
753 | { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER, | 802 | { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER, |
754 | HID_USB_DEVICE(USB_VENDOR_ID_CANDO, | 803 | MT_USB_DEVICE(USB_VENDOR_ID_CANDO, |
755 | USB_DEVICE_ID_CANDO_MULTI_TOUCH) }, | 804 | USB_DEVICE_ID_CANDO_MULTI_TOUCH) }, |
756 | { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER, | 805 | { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER, |
757 | HID_USB_DEVICE(USB_VENDOR_ID_CANDO, | 806 | MT_USB_DEVICE(USB_VENDOR_ID_CANDO, |
758 | USB_DEVICE_ID_CANDO_MULTI_TOUCH_10_1) }, | 807 | USB_DEVICE_ID_CANDO_MULTI_TOUCH_10_1) }, |
759 | { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER, | 808 | { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER, |
760 | HID_USB_DEVICE(USB_VENDOR_ID_CANDO, | 809 | MT_USB_DEVICE(USB_VENDOR_ID_CANDO, |
761 | USB_DEVICE_ID_CANDO_MULTI_TOUCH_11_6) }, | 810 | USB_DEVICE_ID_CANDO_MULTI_TOUCH_11_6) }, |
762 | { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER, | 811 | { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER, |
763 | HID_USB_DEVICE(USB_VENDOR_ID_CANDO, | 812 | MT_USB_DEVICE(USB_VENDOR_ID_CANDO, |
764 | USB_DEVICE_ID_CANDO_MULTI_TOUCH_15_6) }, | 813 | USB_DEVICE_ID_CANDO_MULTI_TOUCH_15_6) }, |
765 | 814 | ||
766 | /* Chunghwa Telecom touch panels */ | 815 | /* Chunghwa Telecom touch panels */ |
767 | { .driver_data = MT_CLS_DEFAULT, | 816 | { .driver_data = MT_CLS_DEFAULT, |
768 | HID_USB_DEVICE(USB_VENDOR_ID_CHUNGHWAT, | 817 | MT_USB_DEVICE(USB_VENDOR_ID_CHUNGHWAT, |
769 | USB_DEVICE_ID_CHUNGHWAT_MULTITOUCH) }, | 818 | USB_DEVICE_ID_CHUNGHWAT_MULTITOUCH) }, |
770 | 819 | ||
771 | /* CVTouch panels */ | 820 | /* CVTouch panels */ |
772 | { .driver_data = MT_CLS_DEFAULT, | 821 | { .driver_data = MT_CLS_DEFAULT, |
773 | HID_USB_DEVICE(USB_VENDOR_ID_CVTOUCH, | 822 | MT_USB_DEVICE(USB_VENDOR_ID_CVTOUCH, |
774 | USB_DEVICE_ID_CVTOUCH_SCREEN) }, | 823 | USB_DEVICE_ID_CVTOUCH_SCREEN) }, |
775 | 824 | ||
776 | /* Cypress panel */ | 825 | /* Cypress panel */ |
@@ -780,225 +829,227 @@ static const struct hid_device_id mt_devices[] = { | |||
780 | 829 | ||
781 | /* eGalax devices (resistive) */ | 830 | /* eGalax devices (resistive) */ |
782 | { .driver_data = MT_CLS_EGALAX, | 831 | { .driver_data = MT_CLS_EGALAX, |
783 | HID_USB_DEVICE(USB_VENDOR_ID_DWAV, | 832 | MT_USB_DEVICE(USB_VENDOR_ID_DWAV, |
784 | USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_480D) }, | 833 | USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_480D) }, |
785 | { .driver_data = MT_CLS_EGALAX, | 834 | { .driver_data = MT_CLS_EGALAX, |
786 | HID_USB_DEVICE(USB_VENDOR_ID_DWAV, | 835 | MT_USB_DEVICE(USB_VENDOR_ID_DWAV, |
787 | USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_480E) }, | 836 | USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_480E) }, |
788 | 837 | ||
789 | /* eGalax devices (capacitive) */ | 838 | /* eGalax devices (capacitive) */ |
790 | { .driver_data = MT_CLS_EGALAX, | 839 | { .driver_data = MT_CLS_EGALAX, |
791 | HID_USB_DEVICE(USB_VENDOR_ID_DWAV, | 840 | MT_USB_DEVICE(USB_VENDOR_ID_DWAV, |
792 | USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_720C) }, | 841 | USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_720C) }, |
793 | { .driver_data = MT_CLS_EGALAX_SERIAL, | 842 | { .driver_data = MT_CLS_EGALAX_SERIAL, |
794 | HID_USB_DEVICE(USB_VENDOR_ID_DWAV, | 843 | MT_USB_DEVICE(USB_VENDOR_ID_DWAV, |
795 | USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7207) }, | 844 | USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7207) }, |
796 | { .driver_data = MT_CLS_EGALAX_SERIAL, | 845 | { .driver_data = MT_CLS_EGALAX_SERIAL, |
797 | HID_USB_DEVICE(USB_VENDOR_ID_DWAV, | 846 | MT_USB_DEVICE(USB_VENDOR_ID_DWAV, |
798 | USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_725E) }, | 847 | USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_725E) }, |
799 | { .driver_data = MT_CLS_EGALAX_SERIAL, | 848 | { .driver_data = MT_CLS_EGALAX_SERIAL, |
800 | HID_USB_DEVICE(USB_VENDOR_ID_DWAV, | 849 | MT_USB_DEVICE(USB_VENDOR_ID_DWAV, |
801 | USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7224) }, | 850 | USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7224) }, |
802 | { .driver_data = MT_CLS_EGALAX_SERIAL, | 851 | { .driver_data = MT_CLS_EGALAX_SERIAL, |
803 | HID_USB_DEVICE(USB_VENDOR_ID_DWAV, | 852 | MT_USB_DEVICE(USB_VENDOR_ID_DWAV, |
804 | USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_722A) }, | 853 | USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_722A) }, |
805 | { .driver_data = MT_CLS_EGALAX, | 854 | { .driver_data = MT_CLS_EGALAX, |
806 | HID_USB_DEVICE(USB_VENDOR_ID_DWAV, | 855 | MT_USB_DEVICE(USB_VENDOR_ID_DWAV, |
807 | USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_726B) }, | 856 | USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_726B) }, |
808 | { .driver_data = MT_CLS_EGALAX_SERIAL, | 857 | { .driver_data = MT_CLS_EGALAX_SERIAL, |
809 | HID_USB_DEVICE(USB_VENDOR_ID_DWAV, | 858 | MT_USB_DEVICE(USB_VENDOR_ID_DWAV, |
810 | USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7262) }, | 859 | USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7262) }, |
811 | { .driver_data = MT_CLS_EGALAX, | 860 | { .driver_data = MT_CLS_EGALAX, |
812 | HID_USB_DEVICE(USB_VENDOR_ID_DWAV, | 861 | MT_USB_DEVICE(USB_VENDOR_ID_DWAV, |
813 | USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72A1) }, | 862 | USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72A1) }, |
814 | { .driver_data = MT_CLS_EGALAX_SERIAL, | 863 | { .driver_data = MT_CLS_EGALAX_SERIAL, |
815 | HID_USB_DEVICE(USB_VENDOR_ID_DWAV, | 864 | MT_USB_DEVICE(USB_VENDOR_ID_DWAV, |
816 | USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72AA) }, | 865 | USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72AA) }, |
817 | { .driver_data = MT_CLS_EGALAX, | 866 | { .driver_data = MT_CLS_EGALAX, |
818 | HID_USB_DEVICE(USB_VENDOR_ID_DWAV, | 867 | MT_USB_DEVICE(USB_VENDOR_ID_DWAV, |
819 | USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72FA) }, | 868 | USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72FA) }, |
820 | { .driver_data = MT_CLS_EGALAX, | 869 | { .driver_data = MT_CLS_EGALAX, |
821 | HID_USB_DEVICE(USB_VENDOR_ID_DWAV, | 870 | MT_USB_DEVICE(USB_VENDOR_ID_DWAV, |
822 | USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7302) }, | 871 | USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7302) }, |
823 | { .driver_data = MT_CLS_EGALAX_SERIAL, | 872 | { .driver_data = MT_CLS_EGALAX_SERIAL, |
824 | HID_USB_DEVICE(USB_VENDOR_ID_DWAV, | 873 | MT_USB_DEVICE(USB_VENDOR_ID_DWAV, |
825 | USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7349) }, | 874 | USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7349) }, |
826 | { .driver_data = MT_CLS_EGALAX_SERIAL, | 875 | { .driver_data = MT_CLS_EGALAX_SERIAL, |
827 | HID_USB_DEVICE(USB_VENDOR_ID_DWAV, | 876 | MT_USB_DEVICE(USB_VENDOR_ID_DWAV, |
828 | USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_A001) }, | 877 | USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_A001) }, |
829 | 878 | ||
830 | /* Elo TouchSystems IntelliTouch Plus panel */ | 879 | /* Elo TouchSystems IntelliTouch Plus panel */ |
831 | { .driver_data = MT_CLS_DUAL_NSMU_CONTACTID, | 880 | { .driver_data = MT_CLS_DUAL_NSMU_CONTACTID, |
832 | HID_USB_DEVICE(USB_VENDOR_ID_ELO, | 881 | MT_USB_DEVICE(USB_VENDOR_ID_ELO, |
833 | USB_DEVICE_ID_ELO_TS2515) }, | 882 | USB_DEVICE_ID_ELO_TS2515) }, |
834 | 883 | ||
835 | /* GeneralTouch panel */ | 884 | /* GeneralTouch panel */ |
836 | { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER, | 885 | { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER, |
837 | HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, | 886 | MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, |
838 | USB_DEVICE_ID_GENERAL_TOUCH_WIN7_TWOFINGERS) }, | 887 | USB_DEVICE_ID_GENERAL_TOUCH_WIN7_TWOFINGERS) }, |
839 | 888 | ||
840 | /* Gametel game controller */ | 889 | /* Gametel game controller */ |
841 | { .driver_data = MT_CLS_DEFAULT, | 890 | { .driver_data = MT_CLS_DEFAULT, |
842 | HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_FRUCTEL, | 891 | MT_BT_DEVICE(USB_VENDOR_ID_FRUCTEL, |
843 | USB_DEVICE_ID_GAMETEL_MT_MODE) }, | 892 | USB_DEVICE_ID_GAMETEL_MT_MODE) }, |
844 | 893 | ||
845 | /* GoodTouch panels */ | 894 | /* GoodTouch panels */ |
846 | { .driver_data = MT_CLS_DEFAULT, | 895 | { .driver_data = MT_CLS_DEFAULT, |
847 | HID_USB_DEVICE(USB_VENDOR_ID_GOODTOUCH, | 896 | MT_USB_DEVICE(USB_VENDOR_ID_GOODTOUCH, |
848 | USB_DEVICE_ID_GOODTOUCH_000f) }, | 897 | USB_DEVICE_ID_GOODTOUCH_000f) }, |
849 | 898 | ||
850 | /* Hanvon panels */ | 899 | /* Hanvon panels */ |
851 | { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTID, | 900 | { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTID, |
852 | HID_USB_DEVICE(USB_VENDOR_ID_HANVON_ALT, | 901 | MT_USB_DEVICE(USB_VENDOR_ID_HANVON_ALT, |
853 | USB_DEVICE_ID_HANVON_ALT_MULTITOUCH) }, | 902 | USB_DEVICE_ID_HANVON_ALT_MULTITOUCH) }, |
854 | 903 | ||
855 | /* Ideacom panel */ | 904 | /* Ideacom panel */ |
856 | { .driver_data = MT_CLS_SERIAL, | 905 | { .driver_data = MT_CLS_SERIAL, |
857 | HID_USB_DEVICE(USB_VENDOR_ID_IDEACOM, | 906 | MT_USB_DEVICE(USB_VENDOR_ID_IDEACOM, |
858 | USB_DEVICE_ID_IDEACOM_IDC6650) }, | 907 | USB_DEVICE_ID_IDEACOM_IDC6650) }, |
859 | { .driver_data = MT_CLS_SERIAL, | 908 | { .driver_data = MT_CLS_SERIAL, |
860 | HID_USB_DEVICE(USB_VENDOR_ID_IDEACOM, | 909 | MT_USB_DEVICE(USB_VENDOR_ID_IDEACOM, |
861 | USB_DEVICE_ID_IDEACOM_IDC6651) }, | 910 | USB_DEVICE_ID_IDEACOM_IDC6651) }, |
862 | 911 | ||
863 | /* Ilitek dual touch panel */ | 912 | /* Ilitek dual touch panel */ |
864 | { .driver_data = MT_CLS_DEFAULT, | 913 | { .driver_data = MT_CLS_DEFAULT, |
865 | HID_USB_DEVICE(USB_VENDOR_ID_ILITEK, | 914 | MT_USB_DEVICE(USB_VENDOR_ID_ILITEK, |
866 | USB_DEVICE_ID_ILITEK_MULTITOUCH) }, | 915 | USB_DEVICE_ID_ILITEK_MULTITOUCH) }, |
867 | 916 | ||
868 | /* IRTOUCH panels */ | 917 | /* IRTOUCH panels */ |
869 | { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTID, | 918 | { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTID, |
870 | HID_USB_DEVICE(USB_VENDOR_ID_IRTOUCHSYSTEMS, | 919 | MT_USB_DEVICE(USB_VENDOR_ID_IRTOUCHSYSTEMS, |
871 | USB_DEVICE_ID_IRTOUCH_INFRARED_USB) }, | 920 | USB_DEVICE_ID_IRTOUCH_INFRARED_USB) }, |
872 | 921 | ||
873 | /* LG Display panels */ | 922 | /* LG Display panels */ |
874 | { .driver_data = MT_CLS_DEFAULT, | 923 | { .driver_data = MT_CLS_DEFAULT, |
875 | HID_USB_DEVICE(USB_VENDOR_ID_LG, | 924 | MT_USB_DEVICE(USB_VENDOR_ID_LG, |
876 | USB_DEVICE_ID_LG_MULTITOUCH) }, | 925 | USB_DEVICE_ID_LG_MULTITOUCH) }, |
877 | 926 | ||
878 | /* Lumio panels */ | 927 | /* Lumio panels */ |
879 | { .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE, | 928 | { .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE, |
880 | HID_USB_DEVICE(USB_VENDOR_ID_LUMIO, | 929 | MT_USB_DEVICE(USB_VENDOR_ID_LUMIO, |
881 | USB_DEVICE_ID_CRYSTALTOUCH) }, | 930 | USB_DEVICE_ID_CRYSTALTOUCH) }, |
882 | { .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE, | 931 | { .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE, |
883 | HID_USB_DEVICE(USB_VENDOR_ID_LUMIO, | 932 | MT_USB_DEVICE(USB_VENDOR_ID_LUMIO, |
884 | USB_DEVICE_ID_CRYSTALTOUCH_DUAL) }, | 933 | USB_DEVICE_ID_CRYSTALTOUCH_DUAL) }, |
885 | 934 | ||
886 | /* MosArt panels */ | 935 | /* MosArt panels */ |
887 | { .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE, | 936 | { .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE, |
888 | HID_USB_DEVICE(USB_VENDOR_ID_ASUS, | 937 | MT_USB_DEVICE(USB_VENDOR_ID_ASUS, |
889 | USB_DEVICE_ID_ASUS_T91MT)}, | 938 | USB_DEVICE_ID_ASUS_T91MT)}, |
890 | { .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE, | 939 | { .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE, |
891 | HID_USB_DEVICE(USB_VENDOR_ID_ASUS, | 940 | MT_USB_DEVICE(USB_VENDOR_ID_ASUS, |
892 | USB_DEVICE_ID_ASUSTEK_MULTITOUCH_YFO) }, | 941 | USB_DEVICE_ID_ASUSTEK_MULTITOUCH_YFO) }, |
893 | { .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE, | 942 | { .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE, |
894 | HID_USB_DEVICE(USB_VENDOR_ID_TURBOX, | 943 | MT_USB_DEVICE(USB_VENDOR_ID_TURBOX, |
895 | USB_DEVICE_ID_TURBOX_TOUCHSCREEN_MOSART) }, | 944 | USB_DEVICE_ID_TURBOX_TOUCHSCREEN_MOSART) }, |
896 | 945 | ||
897 | /* Panasonic panels */ | 946 | /* Panasonic panels */ |
898 | { .driver_data = MT_CLS_PANASONIC, | 947 | { .driver_data = MT_CLS_PANASONIC, |
899 | HID_USB_DEVICE(USB_VENDOR_ID_PANASONIC, | 948 | MT_USB_DEVICE(USB_VENDOR_ID_PANASONIC, |
900 | USB_DEVICE_ID_PANABOARD_UBT780) }, | 949 | USB_DEVICE_ID_PANABOARD_UBT780) }, |
901 | { .driver_data = MT_CLS_PANASONIC, | 950 | { .driver_data = MT_CLS_PANASONIC, |
902 | HID_USB_DEVICE(USB_VENDOR_ID_PANASONIC, | 951 | MT_USB_DEVICE(USB_VENDOR_ID_PANASONIC, |
903 | USB_DEVICE_ID_PANABOARD_UBT880) }, | 952 | USB_DEVICE_ID_PANABOARD_UBT880) }, |
904 | 953 | ||
905 | /* PenMount panels */ | 954 | /* PenMount panels */ |
906 | { .driver_data = MT_CLS_CONFIDENCE, | 955 | { .driver_data = MT_CLS_CONFIDENCE, |
907 | HID_USB_DEVICE(USB_VENDOR_ID_PENMOUNT, | 956 | MT_USB_DEVICE(USB_VENDOR_ID_PENMOUNT, |
908 | USB_DEVICE_ID_PENMOUNT_PCI) }, | 957 | USB_DEVICE_ID_PENMOUNT_PCI) }, |
909 | 958 | ||
910 | /* PixArt optical touch screen */ | 959 | /* PixArt optical touch screen */ |
911 | { .driver_data = MT_CLS_INRANGE_CONTACTNUMBER, | 960 | { .driver_data = MT_CLS_INRANGE_CONTACTNUMBER, |
912 | HID_USB_DEVICE(USB_VENDOR_ID_PIXART, | 961 | MT_USB_DEVICE(USB_VENDOR_ID_PIXART, |
913 | USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN) }, | 962 | USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN) }, |
914 | { .driver_data = MT_CLS_INRANGE_CONTACTNUMBER, | 963 | { .driver_data = MT_CLS_INRANGE_CONTACTNUMBER, |
915 | HID_USB_DEVICE(USB_VENDOR_ID_PIXART, | 964 | MT_USB_DEVICE(USB_VENDOR_ID_PIXART, |
916 | USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN1) }, | 965 | USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN1) }, |
917 | { .driver_data = MT_CLS_INRANGE_CONTACTNUMBER, | 966 | { .driver_data = MT_CLS_INRANGE_CONTACTNUMBER, |
918 | HID_USB_DEVICE(USB_VENDOR_ID_PIXART, | 967 | MT_USB_DEVICE(USB_VENDOR_ID_PIXART, |
919 | USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN2) }, | 968 | USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN2) }, |
920 | 969 | ||
921 | /* PixCir-based panels */ | 970 | /* PixCir-based panels */ |
922 | { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTID, | 971 | { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTID, |
923 | HID_USB_DEVICE(USB_VENDOR_ID_HANVON, | 972 | MT_USB_DEVICE(USB_VENDOR_ID_HANVON, |
924 | USB_DEVICE_ID_HANVON_MULTITOUCH) }, | 973 | USB_DEVICE_ID_HANVON_MULTITOUCH) }, |
925 | { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTID, | 974 | { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTID, |
926 | HID_USB_DEVICE(USB_VENDOR_ID_CANDO, | 975 | MT_USB_DEVICE(USB_VENDOR_ID_CANDO, |
927 | USB_DEVICE_ID_CANDO_PIXCIR_MULTI_TOUCH) }, | 976 | USB_DEVICE_ID_CANDO_PIXCIR_MULTI_TOUCH) }, |
928 | 977 | ||
929 | /* Quanta-based panels */ | 978 | /* Quanta-based panels */ |
930 | { .driver_data = MT_CLS_CONFIDENCE_CONTACT_ID, | 979 | { .driver_data = MT_CLS_CONFIDENCE_CONTACT_ID, |
931 | HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, | 980 | MT_USB_DEVICE(USB_VENDOR_ID_QUANTA, |
932 | USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH) }, | 981 | USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH) }, |
933 | { .driver_data = MT_CLS_CONFIDENCE_CONTACT_ID, | 982 | { .driver_data = MT_CLS_CONFIDENCE_CONTACT_ID, |
934 | HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, | 983 | MT_USB_DEVICE(USB_VENDOR_ID_QUANTA, |
935 | USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3001) }, | 984 | USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3001) }, |
936 | { .driver_data = MT_CLS_CONFIDENCE_CONTACT_ID, | 985 | { .driver_data = MT_CLS_CONFIDENCE_CONTACT_ID, |
937 | HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, | 986 | MT_USB_DEVICE(USB_VENDOR_ID_QUANTA, |
938 | USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3008) }, | 987 | USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3008) }, |
939 | 988 | ||
940 | /* Stantum panels */ | 989 | /* Stantum panels */ |
941 | { .driver_data = MT_CLS_CONFIDENCE, | 990 | { .driver_data = MT_CLS_CONFIDENCE, |
942 | HID_USB_DEVICE(USB_VENDOR_ID_STANTUM, | 991 | MT_USB_DEVICE(USB_VENDOR_ID_STANTUM, |
943 | USB_DEVICE_ID_MTP)}, | 992 | USB_DEVICE_ID_MTP)}, |
944 | { .driver_data = MT_CLS_CONFIDENCE, | 993 | { .driver_data = MT_CLS_CONFIDENCE, |
945 | HID_USB_DEVICE(USB_VENDOR_ID_STANTUM_STM, | 994 | MT_USB_DEVICE(USB_VENDOR_ID_STANTUM_STM, |
946 | USB_DEVICE_ID_MTP_STM)}, | 995 | USB_DEVICE_ID_MTP_STM)}, |
947 | { .driver_data = MT_CLS_CONFIDENCE, | 996 | { .driver_data = MT_CLS_CONFIDENCE, |
948 | HID_USB_DEVICE(USB_VENDOR_ID_STANTUM_SITRONIX, | 997 | MT_USB_DEVICE(USB_VENDOR_ID_STANTUM_SITRONIX, |
949 | USB_DEVICE_ID_MTP_SITRONIX)}, | 998 | USB_DEVICE_ID_MTP_SITRONIX)}, |
950 | 999 | ||
951 | /* TopSeed panels */ | 1000 | /* TopSeed panels */ |
952 | { .driver_data = MT_CLS_TOPSEED, | 1001 | { .driver_data = MT_CLS_TOPSEED, |
953 | HID_USB_DEVICE(USB_VENDOR_ID_TOPSEED2, | 1002 | MT_USB_DEVICE(USB_VENDOR_ID_TOPSEED2, |
954 | USB_DEVICE_ID_TOPSEED2_PERIPAD_701) }, | 1003 | USB_DEVICE_ID_TOPSEED2_PERIPAD_701) }, |
955 | 1004 | ||
956 | /* Touch International panels */ | 1005 | /* Touch International panels */ |
957 | { .driver_data = MT_CLS_DEFAULT, | 1006 | { .driver_data = MT_CLS_DEFAULT, |
958 | HID_USB_DEVICE(USB_VENDOR_ID_TOUCH_INTL, | 1007 | MT_USB_DEVICE(USB_VENDOR_ID_TOUCH_INTL, |
959 | USB_DEVICE_ID_TOUCH_INTL_MULTI_TOUCH) }, | 1008 | USB_DEVICE_ID_TOUCH_INTL_MULTI_TOUCH) }, |
960 | 1009 | ||
961 | /* Unitec panels */ | 1010 | /* Unitec panels */ |
962 | { .driver_data = MT_CLS_DEFAULT, | 1011 | { .driver_data = MT_CLS_DEFAULT, |
963 | HID_USB_DEVICE(USB_VENDOR_ID_UNITEC, | 1012 | MT_USB_DEVICE(USB_VENDOR_ID_UNITEC, |
964 | USB_DEVICE_ID_UNITEC_USB_TOUCH_0709) }, | 1013 | USB_DEVICE_ID_UNITEC_USB_TOUCH_0709) }, |
965 | { .driver_data = MT_CLS_DEFAULT, | 1014 | { .driver_data = MT_CLS_DEFAULT, |
966 | HID_USB_DEVICE(USB_VENDOR_ID_UNITEC, | 1015 | MT_USB_DEVICE(USB_VENDOR_ID_UNITEC, |
967 | USB_DEVICE_ID_UNITEC_USB_TOUCH_0A19) }, | 1016 | USB_DEVICE_ID_UNITEC_USB_TOUCH_0A19) }, |
968 | /* XAT */ | 1017 | /* XAT */ |
969 | { .driver_data = MT_CLS_DEFAULT, | 1018 | { .driver_data = MT_CLS_DEFAULT, |
970 | HID_USB_DEVICE(USB_VENDOR_ID_XAT, | 1019 | MT_USB_DEVICE(USB_VENDOR_ID_XAT, |
971 | USB_DEVICE_ID_XAT_CSR) }, | 1020 | USB_DEVICE_ID_XAT_CSR) }, |
972 | 1021 | ||
973 | /* Xiroku */ | 1022 | /* Xiroku */ |
974 | { .driver_data = MT_CLS_DEFAULT, | 1023 | { .driver_data = MT_CLS_DEFAULT, |
975 | HID_USB_DEVICE(USB_VENDOR_ID_XIROKU, | 1024 | MT_USB_DEVICE(USB_VENDOR_ID_XIROKU, |
976 | USB_DEVICE_ID_XIROKU_SPX) }, | 1025 | USB_DEVICE_ID_XIROKU_SPX) }, |
977 | { .driver_data = MT_CLS_DEFAULT, | 1026 | { .driver_data = MT_CLS_DEFAULT, |
978 | HID_USB_DEVICE(USB_VENDOR_ID_XIROKU, | 1027 | MT_USB_DEVICE(USB_VENDOR_ID_XIROKU, |
979 | USB_DEVICE_ID_XIROKU_MPX) }, | 1028 | USB_DEVICE_ID_XIROKU_MPX) }, |
980 | { .driver_data = MT_CLS_DEFAULT, | 1029 | { .driver_data = MT_CLS_DEFAULT, |
981 | HID_USB_DEVICE(USB_VENDOR_ID_XIROKU, | 1030 | MT_USB_DEVICE(USB_VENDOR_ID_XIROKU, |
982 | USB_DEVICE_ID_XIROKU_CSR) }, | 1031 | USB_DEVICE_ID_XIROKU_CSR) }, |
983 | { .driver_data = MT_CLS_DEFAULT, | 1032 | { .driver_data = MT_CLS_DEFAULT, |
984 | HID_USB_DEVICE(USB_VENDOR_ID_XIROKU, | 1033 | MT_USB_DEVICE(USB_VENDOR_ID_XIROKU, |
985 | USB_DEVICE_ID_XIROKU_SPX1) }, | 1034 | USB_DEVICE_ID_XIROKU_SPX1) }, |
986 | { .driver_data = MT_CLS_DEFAULT, | 1035 | { .driver_data = MT_CLS_DEFAULT, |
987 | HID_USB_DEVICE(USB_VENDOR_ID_XIROKU, | 1036 | MT_USB_DEVICE(USB_VENDOR_ID_XIROKU, |
988 | USB_DEVICE_ID_XIROKU_MPX1) }, | 1037 | USB_DEVICE_ID_XIROKU_MPX1) }, |
989 | { .driver_data = MT_CLS_DEFAULT, | 1038 | { .driver_data = MT_CLS_DEFAULT, |
990 | HID_USB_DEVICE(USB_VENDOR_ID_XIROKU, | 1039 | MT_USB_DEVICE(USB_VENDOR_ID_XIROKU, |
991 | USB_DEVICE_ID_XIROKU_CSR1) }, | 1040 | USB_DEVICE_ID_XIROKU_CSR1) }, |
992 | { .driver_data = MT_CLS_DEFAULT, | 1041 | { .driver_data = MT_CLS_DEFAULT, |
993 | HID_USB_DEVICE(USB_VENDOR_ID_XIROKU, | 1042 | MT_USB_DEVICE(USB_VENDOR_ID_XIROKU, |
994 | USB_DEVICE_ID_XIROKU_SPX2) }, | 1043 | USB_DEVICE_ID_XIROKU_SPX2) }, |
995 | { .driver_data = MT_CLS_DEFAULT, | 1044 | { .driver_data = MT_CLS_DEFAULT, |
996 | HID_USB_DEVICE(USB_VENDOR_ID_XIROKU, | 1045 | MT_USB_DEVICE(USB_VENDOR_ID_XIROKU, |
997 | USB_DEVICE_ID_XIROKU_MPX2) }, | 1046 | USB_DEVICE_ID_XIROKU_MPX2) }, |
998 | { .driver_data = MT_CLS_DEFAULT, | 1047 | { .driver_data = MT_CLS_DEFAULT, |
999 | HID_USB_DEVICE(USB_VENDOR_ID_XIROKU, | 1048 | MT_USB_DEVICE(USB_VENDOR_ID_XIROKU, |
1000 | USB_DEVICE_ID_XIROKU_CSR2) }, | 1049 | USB_DEVICE_ID_XIROKU_CSR2) }, |
1001 | 1050 | ||
1051 | /* Generic MT device */ | ||
1052 | { HID_DEVICE(HID_BUS_ANY, HID_GROUP_MULTITOUCH, HID_ANY_ID, HID_ANY_ID) }, | ||
1002 | { } | 1053 | { } |
1003 | }; | 1054 | }; |
1004 | MODULE_DEVICE_TABLE(hid, mt_devices); | 1055 | MODULE_DEVICE_TABLE(hid, mt_devices); |