aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/hid/hid-multitouch.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/hid/hid-multitouch.c')
-rw-r--r--drivers/hid/hid-multitouch.c233
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
73struct mt_fields {
74 unsigned usages[HID_MAX_FIELDS];
75 unsigned int length;
76};
77
73struct mt_device { 78struct 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
278static void set_last_slot_field(struct hid_usage *usage, struct mt_device *td, 288static 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
285static int mt_input_mapping(struct hid_device *hdev, struct hid_input *hi, 299static 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
652static 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
667static 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
638static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id) 677static 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
702fail: 746fail:
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};
1004MODULE_DEVICE_TABLE(hid, mt_devices); 1055MODULE_DEVICE_TABLE(hid, mt_devices);