]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blobdiff - drivers/hid/hid-multitouch.c
Merge branches 'for-3.15/multitouch', 'for-3.15/sony' and 'for-3.15/uhid' into for...
[mirror_ubuntu-artful-kernel.git] / drivers / hid / hid-multitouch.c
index f134d73beca16b72ddce5716d36e4d7ca949e61d..35278e43c7a48d1999283c21f0f60cceccbc3b84 100644 (file)
@@ -68,6 +68,9 @@ MODULE_LICENSE("GPL");
 #define MT_QUIRK_HOVERING              (1 << 11)
 #define MT_QUIRK_CONTACT_CNT_ACCURATE  (1 << 12)
 
+#define MT_INPUTMODE_TOUCHSCREEN       0x02
+#define MT_INPUTMODE_TOUCHPAD          0x03
+
 struct mt_slot {
        __s32 x, y, cx, cy, p, w, h;
        __s32 contactid;        /* the device ContactID assigned to this slot */
@@ -84,6 +87,7 @@ struct mt_class {
        __s32 sn_pressure;      /* Signal/noise ratio for pressure events */
        __u8 maxcontacts;
        bool is_indirect;       /* true for touchpads */
+       bool export_all_inputs; /* do not ignore mouse, keyboards, etc... */
 };
 
 struct mt_fields {
@@ -100,11 +104,11 @@ struct mt_device {
        int cc_value_index;     /* contact count value index in the field */
        unsigned last_slot_field;       /* the last field of a slot */
        unsigned mt_report_id;  /* the report ID of the multitouch device */
-       unsigned pen_report_id; /* the report ID of the pen device */
        __s16 inputmode;        /* InputMode HID feature, -1 if non-existent */
        __s16 inputmode_index;  /* InputMode HID feature index in the report */
        __s16 maxcontact_report_id;     /* Maximum Contact Number HID feature,
                                   -1 if non-existent */
+       __u8 inputmode_value;  /* InputMode HID feature value */
        __u8 num_received;      /* how many contacts we received */
        __u8 num_expected;      /* expected last contact index */
        __u8 maxcontacts;
@@ -128,16 +132,17 @@ static void mt_post_parse(struct mt_device *td);
 #define MT_CLS_CONFIDENCE_MINUS_ONE            0x0005
 #define MT_CLS_DUAL_INRANGE_CONTACTID          0x0006
 #define MT_CLS_DUAL_INRANGE_CONTACTNUMBER      0x0007
-#define MT_CLS_DUAL_NSMU_CONTACTID             0x0008
+/* reserved                                    0x0008 */
 #define MT_CLS_INRANGE_CONTACTNUMBER           0x0009
 #define MT_CLS_NSMU                            0x000a
-#define MT_CLS_DUAL_CONTACT_NUMBER             0x0010
-#define MT_CLS_DUAL_CONTACT_ID                 0x0011
+/* reserved                                    0x0010 */
+/* reserved                                    0x0011 */
 #define MT_CLS_WIN_8                           0x0012
+#define MT_CLS_EXPORT_ALL_INPUTS               0x0013
 
 /* vendor specific classes */
 #define MT_CLS_3M                              0x0101
-#define MT_CLS_CYPRESS                         0x0102
+/* reserved                                    0x0102 */
 #define MT_CLS_EGALAX                          0x0103
 #define MT_CLS_EGALAX_SERIAL                   0x0104
 #define MT_CLS_TOPSEED                         0x0105
@@ -189,28 +194,18 @@ static struct mt_class mt_classes[] = {
                .quirks = MT_QUIRK_VALID_IS_INRANGE |
                        MT_QUIRK_SLOT_IS_CONTACTNUMBER,
                .maxcontacts = 2 },
-       { .name = MT_CLS_DUAL_NSMU_CONTACTID,
-               .quirks = MT_QUIRK_NOT_SEEN_MEANS_UP |
-                       MT_QUIRK_SLOT_IS_CONTACTID,
-               .maxcontacts = 2 },
        { .name = MT_CLS_INRANGE_CONTACTNUMBER,
                .quirks = MT_QUIRK_VALID_IS_INRANGE |
                        MT_QUIRK_SLOT_IS_CONTACTNUMBER },
-       { .name = MT_CLS_DUAL_CONTACT_NUMBER,
-               .quirks = MT_QUIRK_ALWAYS_VALID |
-                       MT_QUIRK_CONTACT_CNT_ACCURATE |
-                       MT_QUIRK_SLOT_IS_CONTACTNUMBER,
-               .maxcontacts = 2 },
-       { .name = MT_CLS_DUAL_CONTACT_ID,
-               .quirks = MT_QUIRK_ALWAYS_VALID |
-                       MT_QUIRK_CONTACT_CNT_ACCURATE |
-                       MT_QUIRK_SLOT_IS_CONTACTID,
-               .maxcontacts = 2 },
        { .name = MT_CLS_WIN_8,
                .quirks = MT_QUIRK_ALWAYS_VALID |
                        MT_QUIRK_IGNORE_DUPLICATES |
                        MT_QUIRK_HOVERING |
                        MT_QUIRK_CONTACT_CNT_ACCURATE },
+       { .name = MT_CLS_EXPORT_ALL_INPUTS,
+               .quirks = MT_QUIRK_ALWAYS_VALID |
+                       MT_QUIRK_CONTACT_CNT_ACCURATE,
+               .export_all_inputs = true },
 
        /*
         * vendor specific classes
@@ -223,10 +218,6 @@ static struct mt_class mt_classes[] = {
                .sn_height = 128,
                .maxcontacts = 60,
        },
-       { .name = MT_CLS_CYPRESS,
-               .quirks = MT_QUIRK_NOT_SEEN_MEANS_UP |
-                       MT_QUIRK_CYPRESS,
-               .maxcontacts = 10 },
        { .name = MT_CLS_EGALAX,
                .quirks =  MT_QUIRK_SLOT_IS_CONTACTID |
                        MT_QUIRK_VALID_IS_INRANGE,
@@ -360,45 +351,6 @@ static void mt_store_field(struct hid_usage *usage, struct mt_device *td,
        f->usages[f->length++] = usage->hid;
 }
 
-static int mt_pen_input_mapping(struct hid_device *hdev, struct hid_input *hi,
-               struct hid_field *field, struct hid_usage *usage,
-               unsigned long **bit, int *max)
-{
-       struct mt_device *td = hid_get_drvdata(hdev);
-
-       td->pen_report_id = field->report->id;
-
-       return 0;
-}
-
-static int mt_pen_input_mapped(struct hid_device *hdev, struct hid_input *hi,
-               struct hid_field *field, struct hid_usage *usage,
-               unsigned long **bit, int *max)
-{
-       return 0;
-}
-
-static int mt_pen_event(struct hid_device *hid, struct hid_field *field,
-                               struct hid_usage *usage, __s32 value)
-{
-       /* let hid-input handle it */
-       return 0;
-}
-
-static void mt_pen_report(struct hid_device *hid, struct hid_report *report)
-{
-       struct hid_field *field = report->field[0];
-
-       input_sync(field->hidinput->input);
-}
-
-static void mt_pen_input_configured(struct hid_device *hdev,
-                                       struct hid_input *hi)
-{
-       /* force BTN_STYLUS to allow tablet matching in udev */
-       __set_bit(BTN_STYLUS, hi->input->keybit);
-}
-
 static int mt_touch_input_mapping(struct hid_device *hdev, struct hid_input *hi,
                struct hid_field *field, struct hid_usage *usage,
                unsigned long **bit, int *max)
@@ -415,8 +367,10 @@ static int mt_touch_input_mapping(struct hid_device *hdev, struct hid_input *hi,
         * Model touchscreens providing buttons as touchpads.
         */
        if (field->application == HID_DG_TOUCHPAD ||
-           (usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON)
+           (usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON) {
                td->mt_flags |= INPUT_MT_POINTER;
+               td->inputmode_value = MT_INPUTMODE_TOUCHPAD;
+       }
 
        if (usage->usage_index)
                prev_usage = &field->usage[usage->usage_index - 1];
@@ -776,28 +730,52 @@ static int mt_input_mapping(struct hid_device *hdev, struct hid_input *hi,
                struct hid_field *field, struct hid_usage *usage,
                unsigned long **bit, int *max)
 {
-       /* Only map fields from TouchScreen or TouchPad collections.
-       * We need to ignore fields that belong to other collections
-       * such as Mouse that might have the same GenericDesktop usages. */
-       if (field->application != HID_DG_TOUCHSCREEN &&
+       struct mt_device *td = hid_get_drvdata(hdev);
+
+       /*
+        * If mtclass.export_all_inputs is not set, only map fields from
+        * TouchScreen or TouchPad collections. We need to ignore fields
+        * that belong to other collections such as Mouse that might have
+        * the same GenericDesktop usages.
+        */
+       if (!td->mtclass.export_all_inputs &&
+           field->application != HID_DG_TOUCHSCREEN &&
            field->application != HID_DG_PEN &&
            field->application != HID_DG_TOUCHPAD)
                return -1;
 
+       /*
+        * some egalax touchscreens have "application == HID_DG_TOUCHSCREEN"
+        * for the stylus.
+        */
        if (field->physical == HID_DG_STYLUS)
-               return mt_pen_input_mapping(hdev, hi, field, usage, bit, max);
+               return 0;
+
+       if (field->application == HID_DG_TOUCHSCREEN ||
+           field->application == HID_DG_TOUCHPAD)
+               return mt_touch_input_mapping(hdev, hi, field, usage, bit, max);
 
-       return mt_touch_input_mapping(hdev, hi, field, usage, bit, max);
+       /* let hid-core decide for the others */
+       return 0;
 }
 
 static int mt_input_mapped(struct hid_device *hdev, struct hid_input *hi,
                struct hid_field *field, struct hid_usage *usage,
                unsigned long **bit, int *max)
 {
+       /*
+        * some egalax touchscreens have "application == HID_DG_TOUCHSCREEN"
+        * for the stylus.
+        */
        if (field->physical == HID_DG_STYLUS)
-               return mt_pen_input_mapped(hdev, hi, field, usage, bit, max);
+               return 0;
+
+       if (field->application == HID_DG_TOUCHSCREEN ||
+           field->application == HID_DG_TOUCHPAD)
+               return mt_touch_input_mapped(hdev, hi, field, usage, bit, max);
 
-       return mt_touch_input_mapped(hdev, hi, field, usage, bit, max);
+       /* let hid-core decide for the others */
+       return 0;
 }
 
 static int mt_event(struct hid_device *hid, struct hid_field *field,
@@ -808,25 +786,22 @@ static int mt_event(struct hid_device *hid, struct hid_field *field,
        if (field->report->id == td->mt_report_id)
                return mt_touch_event(hid, field, usage, value);
 
-       if (field->report->id == td->pen_report_id)
-               return mt_pen_event(hid, field, usage, value);
-
-       /* ignore other reports */
-       return 1;
+       return 0;
 }
 
 static void mt_report(struct hid_device *hid, struct hid_report *report)
 {
        struct mt_device *td = hid_get_drvdata(hid);
+       struct hid_field *field = report->field[0];
 
        if (!(hid->claimed & HID_CLAIMED_INPUT))
                return;
 
        if (report->id == td->mt_report_id)
-               mt_touch_report(hid, report);
+               return mt_touch_report(hid, report);
 
-       if (report->id == td->pen_report_id)
-               mt_pen_report(hid, report);
+       if (field && field->hidinput && field->hidinput->input)
+               input_sync(field->hidinput->input);
 }
 
 static void mt_set_input_mode(struct hid_device *hdev)
@@ -841,7 +816,7 @@ static void mt_set_input_mode(struct hid_device *hdev)
        re = &(hdev->report_enum[HID_FEATURE_REPORT]);
        r = re->report_id_hash[td->inputmode];
        if (r) {
-               r->field[0]->value[td->inputmode_index] = 0x02;
+               r->field[0]->value[td->inputmode_index] = td->inputmode_value;
                hid_hw_request(hdev, r, HID_REQ_SET_REPORT);
        }
 }
@@ -907,13 +882,49 @@ static void mt_input_configured(struct hid_device *hdev, struct hid_input *hi)
        struct mt_device *td = hid_get_drvdata(hdev);
        char *name;
        const char *suffix = NULL;
+       struct hid_field *field = hi->report->field[0];
 
        if (hi->report->id == td->mt_report_id)
                mt_touch_input_configured(hdev, hi);
 
+       /*
+        * some egalax touchscreens have "application == HID_DG_TOUCHSCREEN"
+        * for the stylus. Check this first, and then rely on the application
+        * field.
+        */
        if (hi->report->field[0]->physical == HID_DG_STYLUS) {
                suffix = "Pen";
-               mt_pen_input_configured(hdev, hi);
+               /* force BTN_STYLUS to allow tablet matching in udev */
+               __set_bit(BTN_STYLUS, hi->input->keybit);
+       } else {
+               switch (field->application) {
+               case HID_GD_KEYBOARD:
+                       suffix = "Keyboard";
+                       break;
+               case HID_GD_KEYPAD:
+                       suffix = "Keypad";
+                       break;
+               case HID_GD_MOUSE:
+                       suffix = "Mouse";
+                       break;
+               case HID_DG_STYLUS:
+                       suffix = "Pen";
+                       /* force BTN_STYLUS to allow tablet matching in udev */
+                       __set_bit(BTN_STYLUS, hi->input->keybit);
+                       break;
+               case HID_DG_TOUCHSCREEN:
+                       /* we do not set suffix = "Touchscreen" */
+                       break;
+               case HID_GD_SYSTEM_CONTROL:
+                       suffix = "System Control";
+                       break;
+               case HID_CP_CONSUMER_CONTROL:
+                       suffix = "Consumer Control";
+                       break;
+               default:
+                       suffix = "UNKNOWN";
+                       break;
+               }
        }
 
        if (suffix) {
@@ -973,9 +984,9 @@ static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id)
        td->mtclass = *mtclass;
        td->inputmode = -1;
        td->maxcontact_report_id = -1;
+       td->inputmode_value = MT_INPUTMODE_TOUCHSCREEN;
        td->cc_index = -1;
        td->mt_report_id = -1;
-       td->pen_report_id = -1;
        hid_set_drvdata(hdev, td);
 
        td->fields = devm_kzalloc(&hdev->dev, sizeof(struct mt_fields),
@@ -1034,6 +1045,12 @@ static void mt_remove(struct hid_device *hdev)
        hid_hw_stop(hdev);
 }
 
+/*
+ * This list contains only:
+ * - VID/PID of products not working with the default multitouch handling
+ * - 2 generic rules.
+ * So there is no point in adding here any device with MT_CLS_DEFAULT.
+ */
 static const struct hid_device_id mt_devices[] = {
 
        /* 3M panels */
@@ -1047,15 +1064,12 @@ static const struct hid_device_id mt_devices[] = {
                MT_USB_DEVICE(USB_VENDOR_ID_3M,
                        USB_DEVICE_ID_3M3266) },
 
-       /* ActionStar panels */
-       { .driver_data = MT_CLS_NSMU,
-               MT_USB_DEVICE(USB_VENDOR_ID_ACTIONSTAR,
-                       USB_DEVICE_ID_ACTIONSTAR_1011) },
+       /* Anton devices */
+       { .driver_data = MT_CLS_EXPORT_ALL_INPUTS,
+               MT_USB_DEVICE(USB_VENDOR_ID_ANTON,
+                       USB_DEVICE_ID_ANTON_TOUCH_PAD) },
 
        /* Atmel panels */
-       { .driver_data = MT_CLS_SERIAL,
-               MT_USB_DEVICE(USB_VENDOR_ID_ATMEL,
-                       USB_DEVICE_ID_ATMEL_MULTITOUCH) },
        { .driver_data = MT_CLS_SERIAL,
                MT_USB_DEVICE(USB_VENDOR_ID_ATMEL,
                        USB_DEVICE_ID_ATMEL_MXT_DIGITIZER) },
@@ -1064,16 +1078,11 @@ static const struct hid_device_id mt_devices[] = {
        { .driver_data = MT_CLS_NSMU,
                MT_USB_DEVICE(USB_VENDOR_ID_BAANTO,
                        USB_DEVICE_ID_BAANTO_MT_190W2) },
+
        /* Cando panels */
        { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
                MT_USB_DEVICE(USB_VENDOR_ID_CANDO,
                        USB_DEVICE_ID_CANDO_MULTI_TOUCH) },
-       { .driver_data = MT_CLS_DUAL_CONTACT_NUMBER,
-               MT_USB_DEVICE(USB_VENDOR_ID_CANDO,
-                       USB_DEVICE_ID_CANDO_MULTI_TOUCH_10_1) },
-       { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
-               MT_USB_DEVICE(USB_VENDOR_ID_CANDO,
-                       USB_DEVICE_ID_CANDO_MULTI_TOUCH_11_6) },
        { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
                MT_USB_DEVICE(USB_VENDOR_ID_CANDO,
                        USB_DEVICE_ID_CANDO_MULTI_TOUCH_15_6) },
@@ -1088,16 +1097,6 @@ static const struct hid_device_id mt_devices[] = {
                MT_USB_DEVICE(USB_VENDOR_ID_CVTOUCH,
                        USB_DEVICE_ID_CVTOUCH_SCREEN) },
 
-       /* Cypress panel */
-       { .driver_data = MT_CLS_CYPRESS,
-               HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS,
-                       USB_DEVICE_ID_CYPRESS_TRUETOUCH) },
-
-       /* Data Modul easyMaxTouch */
-       { .driver_data = MT_CLS_DEFAULT,
-               MT_USB_DEVICE(USB_VENDOR_ID_DATA_MODUL,
-                       USB_VENDOR_ID_DATA_MODUL_EASYMAXTOUCH) },
-
        /* eGalax devices (resistive) */
        { .driver_data = MT_CLS_EGALAX,
                MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
@@ -1156,16 +1155,16 @@ static const struct hid_device_id mt_devices[] = {
                MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
                        USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_A001) },
 
-       /* Elo TouchSystems IntelliTouch Plus panel */
-       { .driver_data = MT_CLS_DUAL_CONTACT_ID,
-               MT_USB_DEVICE(USB_VENDOR_ID_ELO,
-                       USB_DEVICE_ID_ELO_TS2515) },
-
        /* Flatfrog Panels */
        { .driver_data = MT_CLS_FLATFROG,
                MT_USB_DEVICE(USB_VENDOR_ID_FLATFROG,
                        USB_DEVICE_ID_MULTITOUCH_3200) },
 
+       /* FocalTech Panels */
+       { .driver_data = MT_CLS_SERIAL,
+               MT_USB_DEVICE(USB_VENDOR_ID_CYGNAL,
+                       USB_DEVICE_ID_FOCALTECH_FTXXXX_MULTITOUCH) },
+
        /* GeneralTouch panel */
        { .driver_data = MT_CLS_GENERALTOUCH_TWOFINGERS,
                MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
@@ -1204,37 +1203,11 @@ static const struct hid_device_id mt_devices[] = {
                MT_USB_DEVICE(USB_VENDOR_ID_HANVON_ALT,
                        USB_DEVICE_ID_HANVON_ALT_MULTITOUCH) },
 
-       /* Ideacom panel */
-       { .driver_data = MT_CLS_SERIAL,
-               MT_USB_DEVICE(USB_VENDOR_ID_IDEACOM,
-                       USB_DEVICE_ID_IDEACOM_IDC6650) },
-       { .driver_data = MT_CLS_SERIAL,
-               MT_USB_DEVICE(USB_VENDOR_ID_IDEACOM,
-                       USB_DEVICE_ID_IDEACOM_IDC6651) },
-
        /* Ilitek dual touch panel */
        {  .driver_data = MT_CLS_NSMU,
                MT_USB_DEVICE(USB_VENDOR_ID_ILITEK,
                        USB_DEVICE_ID_ILITEK_MULTITOUCH) },
 
-       /* IRTOUCH panels */
-       { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTID,
-               MT_USB_DEVICE(USB_VENDOR_ID_IRTOUCHSYSTEMS,
-                       USB_DEVICE_ID_IRTOUCH_INFRARED_USB) },
-
-       /* LG Display panels */
-       { .driver_data = MT_CLS_DEFAULT,
-               MT_USB_DEVICE(USB_VENDOR_ID_LG,
-                       USB_DEVICE_ID_LG_MULTITOUCH) },
-
-       /* Lumio panels */
-       { .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
-               MT_USB_DEVICE(USB_VENDOR_ID_LUMIO,
-                       USB_DEVICE_ID_CRYSTALTOUCH) },
-       { .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
-               MT_USB_DEVICE(USB_VENDOR_ID_LUMIO,
-                       USB_DEVICE_ID_CRYSTALTOUCH_DUAL) },
-
        /* MosArt panels */
        { .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
                MT_USB_DEVICE(USB_VENDOR_ID_ASUS,
@@ -1246,11 +1219,6 @@ static const struct hid_device_id mt_devices[] = {
                MT_USB_DEVICE(USB_VENDOR_ID_TURBOX,
                        USB_DEVICE_ID_TURBOX_TOUCHSCREEN_MOSART) },
 
-       /* Nexio panels */
-       { .driver_data = MT_CLS_DEFAULT,
-               MT_USB_DEVICE(USB_VENDOR_ID_NEXIO,
-                       USB_DEVICE_ID_NEXIO_MULTITOUCH_420)},
-
        /* Panasonic panels */
        { .driver_data = MT_CLS_PANASONIC,
                MT_USB_DEVICE(USB_VENDOR_ID_PANASONIC,
@@ -1264,11 +1232,6 @@ static const struct hid_device_id mt_devices[] = {
                MT_USB_DEVICE(USB_VENDOR_ID_NOVATEK,
                        USB_DEVICE_ID_NOVATEK_PCT) },
 
-       /* PenMount panels */
-       { .driver_data = MT_CLS_CONFIDENCE,
-               MT_USB_DEVICE(USB_VENDOR_ID_PENMOUNT,
-                       USB_DEVICE_ID_PENMOUNT_PCI) },
-
        /* PixArt optical touch screen */
        { .driver_data = MT_CLS_INRANGE_CONTACTNUMBER,
                MT_USB_DEVICE(USB_VENDOR_ID_PIXART,
@@ -1281,45 +1244,19 @@ static const struct hid_device_id mt_devices[] = {
                        USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN2) },
 
        /* PixCir-based panels */
-       { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTID,
-               MT_USB_DEVICE(USB_VENDOR_ID_HANVON,
-                       USB_DEVICE_ID_HANVON_MULTITOUCH) },
        { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTID,
                MT_USB_DEVICE(USB_VENDOR_ID_CANDO,
                        USB_DEVICE_ID_CANDO_PIXCIR_MULTI_TOUCH) },
 
        /* Quanta-based panels */
-       { .driver_data = MT_CLS_CONFIDENCE_CONTACT_ID,
-               MT_USB_DEVICE(USB_VENDOR_ID_QUANTA,
-                       USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH) },
        { .driver_data = MT_CLS_CONFIDENCE_CONTACT_ID,
                MT_USB_DEVICE(USB_VENDOR_ID_QUANTA,
                        USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3001) },
-       { .driver_data = MT_CLS_CONFIDENCE_CONTACT_ID,
-               MT_USB_DEVICE(USB_VENDOR_ID_QUANTA,
-                       USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3008) },
-
-       /* SiS panels */
-       { .driver_data = MT_CLS_DEFAULT,
-               HID_USB_DEVICE(USB_VENDOR_ID_SIS_TOUCH,
-               USB_DEVICE_ID_SIS9200_TOUCH) },
-       { .driver_data = MT_CLS_DEFAULT,
-               HID_USB_DEVICE(USB_VENDOR_ID_SIS_TOUCH,
-               USB_DEVICE_ID_SIS817_TOUCH) },
-       { .driver_data = MT_CLS_DEFAULT,
-               HID_USB_DEVICE(USB_VENDOR_ID_SIS_TOUCH,
-               USB_DEVICE_ID_SIS1030_TOUCH) },
 
        /* Stantum panels */
-       { .driver_data = MT_CLS_CONFIDENCE,
-               MT_USB_DEVICE(USB_VENDOR_ID_STANTUM,
-                       USB_DEVICE_ID_MTP)},
        { .driver_data = MT_CLS_CONFIDENCE,
                MT_USB_DEVICE(USB_VENDOR_ID_STANTUM_STM,
                        USB_DEVICE_ID_MTP_STM)},
-       { .driver_data = MT_CLS_DEFAULT,
-               MT_USB_DEVICE(USB_VENDOR_ID_STANTUM_SITRONIX,
-                       USB_DEVICE_ID_MTP_SITRONIX)},
 
        /* TopSeed panels */
        { .driver_data = MT_CLS_TOPSEED,
@@ -1378,11 +1315,6 @@ static const struct hid_device_id mt_devices[] = {
                MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
                        USB_DEVICE_ID_XIROKU_CSR2) },
 
-       /* Zytronic panels */
-       { .driver_data = MT_CLS_SERIAL,
-               MT_USB_DEVICE(USB_VENDOR_ID_ZYTRONIC,
-                       USB_DEVICE_ID_ZYTRONIC_ZXY100) },
-
        /* Generic MT device */
        { HID_DEVICE(HID_BUS_ANY, HID_GROUP_MULTITOUCH, HID_ANY_ID, HID_ANY_ID) },