aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/hid/hid-multitouch.c129
1 files changed, 11 insertions, 118 deletions
diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
index f134d73beca1..3e81f4e1c7c1 100644
--- a/drivers/hid/hid-multitouch.c
+++ b/drivers/hid/hid-multitouch.c
@@ -128,16 +128,16 @@ static void mt_post_parse(struct mt_device *td);
128#define MT_CLS_CONFIDENCE_MINUS_ONE 0x0005 128#define MT_CLS_CONFIDENCE_MINUS_ONE 0x0005
129#define MT_CLS_DUAL_INRANGE_CONTACTID 0x0006 129#define MT_CLS_DUAL_INRANGE_CONTACTID 0x0006
130#define MT_CLS_DUAL_INRANGE_CONTACTNUMBER 0x0007 130#define MT_CLS_DUAL_INRANGE_CONTACTNUMBER 0x0007
131#define MT_CLS_DUAL_NSMU_CONTACTID 0x0008 131/* reserved 0x0008 */
132#define MT_CLS_INRANGE_CONTACTNUMBER 0x0009 132#define MT_CLS_INRANGE_CONTACTNUMBER 0x0009
133#define MT_CLS_NSMU 0x000a 133#define MT_CLS_NSMU 0x000a
134#define MT_CLS_DUAL_CONTACT_NUMBER 0x0010 134/* reserved 0x0010 */
135#define MT_CLS_DUAL_CONTACT_ID 0x0011 135/* reserved 0x0011 */
136#define MT_CLS_WIN_8 0x0012 136#define MT_CLS_WIN_8 0x0012
137 137
138/* vendor specific classes */ 138/* vendor specific classes */
139#define MT_CLS_3M 0x0101 139#define MT_CLS_3M 0x0101
140#define MT_CLS_CYPRESS 0x0102 140/* reserved 0x0102 */
141#define MT_CLS_EGALAX 0x0103 141#define MT_CLS_EGALAX 0x0103
142#define MT_CLS_EGALAX_SERIAL 0x0104 142#define MT_CLS_EGALAX_SERIAL 0x0104
143#define MT_CLS_TOPSEED 0x0105 143#define MT_CLS_TOPSEED 0x0105
@@ -189,23 +189,9 @@ static struct mt_class mt_classes[] = {
189 .quirks = MT_QUIRK_VALID_IS_INRANGE | 189 .quirks = MT_QUIRK_VALID_IS_INRANGE |
190 MT_QUIRK_SLOT_IS_CONTACTNUMBER, 190 MT_QUIRK_SLOT_IS_CONTACTNUMBER,
191 .maxcontacts = 2 }, 191 .maxcontacts = 2 },
192 { .name = MT_CLS_DUAL_NSMU_CONTACTID,
193 .quirks = MT_QUIRK_NOT_SEEN_MEANS_UP |
194 MT_QUIRK_SLOT_IS_CONTACTID,
195 .maxcontacts = 2 },
196 { .name = MT_CLS_INRANGE_CONTACTNUMBER, 192 { .name = MT_CLS_INRANGE_CONTACTNUMBER,
197 .quirks = MT_QUIRK_VALID_IS_INRANGE | 193 .quirks = MT_QUIRK_VALID_IS_INRANGE |
198 MT_QUIRK_SLOT_IS_CONTACTNUMBER }, 194 MT_QUIRK_SLOT_IS_CONTACTNUMBER },
199 { .name = MT_CLS_DUAL_CONTACT_NUMBER,
200 .quirks = MT_QUIRK_ALWAYS_VALID |
201 MT_QUIRK_CONTACT_CNT_ACCURATE |
202 MT_QUIRK_SLOT_IS_CONTACTNUMBER,
203 .maxcontacts = 2 },
204 { .name = MT_CLS_DUAL_CONTACT_ID,
205 .quirks = MT_QUIRK_ALWAYS_VALID |
206 MT_QUIRK_CONTACT_CNT_ACCURATE |
207 MT_QUIRK_SLOT_IS_CONTACTID,
208 .maxcontacts = 2 },
209 { .name = MT_CLS_WIN_8, 195 { .name = MT_CLS_WIN_8,
210 .quirks = MT_QUIRK_ALWAYS_VALID | 196 .quirks = MT_QUIRK_ALWAYS_VALID |
211 MT_QUIRK_IGNORE_DUPLICATES | 197 MT_QUIRK_IGNORE_DUPLICATES |
@@ -223,10 +209,6 @@ static struct mt_class mt_classes[] = {
223 .sn_height = 128, 209 .sn_height = 128,
224 .maxcontacts = 60, 210 .maxcontacts = 60,
225 }, 211 },
226 { .name = MT_CLS_CYPRESS,
227 .quirks = MT_QUIRK_NOT_SEEN_MEANS_UP |
228 MT_QUIRK_CYPRESS,
229 .maxcontacts = 10 },
230 { .name = MT_CLS_EGALAX, 212 { .name = MT_CLS_EGALAX,
231 .quirks = MT_QUIRK_SLOT_IS_CONTACTID | 213 .quirks = MT_QUIRK_SLOT_IS_CONTACTID |
232 MT_QUIRK_VALID_IS_INRANGE, 214 MT_QUIRK_VALID_IS_INRANGE,
@@ -1034,6 +1016,12 @@ static void mt_remove(struct hid_device *hdev)
1034 hid_hw_stop(hdev); 1016 hid_hw_stop(hdev);
1035} 1017}
1036 1018
1019/*
1020 * This list contains only:
1021 * - VID/PID of products not working with the default multitouch handling
1022 * - 2 generic rules.
1023 * So there is no point in adding here any device with MT_CLS_DEFAULT.
1024 */
1037static const struct hid_device_id mt_devices[] = { 1025static const struct hid_device_id mt_devices[] = {
1038 1026
1039 /* 3M panels */ 1027 /* 3M panels */
@@ -1047,33 +1035,20 @@ static const struct hid_device_id mt_devices[] = {
1047 MT_USB_DEVICE(USB_VENDOR_ID_3M, 1035 MT_USB_DEVICE(USB_VENDOR_ID_3M,
1048 USB_DEVICE_ID_3M3266) }, 1036 USB_DEVICE_ID_3M3266) },
1049 1037
1050 /* ActionStar panels */
1051 { .driver_data = MT_CLS_NSMU,
1052 MT_USB_DEVICE(USB_VENDOR_ID_ACTIONSTAR,
1053 USB_DEVICE_ID_ACTIONSTAR_1011) },
1054
1055 /* Atmel panels */ 1038 /* Atmel panels */
1056 { .driver_data = MT_CLS_SERIAL, 1039 { .driver_data = MT_CLS_SERIAL,
1057 MT_USB_DEVICE(USB_VENDOR_ID_ATMEL, 1040 MT_USB_DEVICE(USB_VENDOR_ID_ATMEL,
1058 USB_DEVICE_ID_ATMEL_MULTITOUCH) },
1059 { .driver_data = MT_CLS_SERIAL,
1060 MT_USB_DEVICE(USB_VENDOR_ID_ATMEL,
1061 USB_DEVICE_ID_ATMEL_MXT_DIGITIZER) }, 1041 USB_DEVICE_ID_ATMEL_MXT_DIGITIZER) },
1062 1042
1063 /* Baanto multitouch devices */ 1043 /* Baanto multitouch devices */
1064 { .driver_data = MT_CLS_NSMU, 1044 { .driver_data = MT_CLS_NSMU,
1065 MT_USB_DEVICE(USB_VENDOR_ID_BAANTO, 1045 MT_USB_DEVICE(USB_VENDOR_ID_BAANTO,
1066 USB_DEVICE_ID_BAANTO_MT_190W2) }, 1046 USB_DEVICE_ID_BAANTO_MT_190W2) },
1047
1067 /* Cando panels */ 1048 /* Cando panels */
1068 { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER, 1049 { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
1069 MT_USB_DEVICE(USB_VENDOR_ID_CANDO, 1050 MT_USB_DEVICE(USB_VENDOR_ID_CANDO,
1070 USB_DEVICE_ID_CANDO_MULTI_TOUCH) }, 1051 USB_DEVICE_ID_CANDO_MULTI_TOUCH) },
1071 { .driver_data = MT_CLS_DUAL_CONTACT_NUMBER,
1072 MT_USB_DEVICE(USB_VENDOR_ID_CANDO,
1073 USB_DEVICE_ID_CANDO_MULTI_TOUCH_10_1) },
1074 { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
1075 MT_USB_DEVICE(USB_VENDOR_ID_CANDO,
1076 USB_DEVICE_ID_CANDO_MULTI_TOUCH_11_6) },
1077 { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER, 1052 { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
1078 MT_USB_DEVICE(USB_VENDOR_ID_CANDO, 1053 MT_USB_DEVICE(USB_VENDOR_ID_CANDO,
1079 USB_DEVICE_ID_CANDO_MULTI_TOUCH_15_6) }, 1054 USB_DEVICE_ID_CANDO_MULTI_TOUCH_15_6) },
@@ -1088,16 +1063,6 @@ static const struct hid_device_id mt_devices[] = {
1088 MT_USB_DEVICE(USB_VENDOR_ID_CVTOUCH, 1063 MT_USB_DEVICE(USB_VENDOR_ID_CVTOUCH,
1089 USB_DEVICE_ID_CVTOUCH_SCREEN) }, 1064 USB_DEVICE_ID_CVTOUCH_SCREEN) },
1090 1065
1091 /* Cypress panel */
1092 { .driver_data = MT_CLS_CYPRESS,
1093 HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS,
1094 USB_DEVICE_ID_CYPRESS_TRUETOUCH) },
1095
1096 /* Data Modul easyMaxTouch */
1097 { .driver_data = MT_CLS_DEFAULT,
1098 MT_USB_DEVICE(USB_VENDOR_ID_DATA_MODUL,
1099 USB_VENDOR_ID_DATA_MODUL_EASYMAXTOUCH) },
1100
1101 /* eGalax devices (resistive) */ 1066 /* eGalax devices (resistive) */
1102 { .driver_data = MT_CLS_EGALAX, 1067 { .driver_data = MT_CLS_EGALAX,
1103 MT_USB_DEVICE(USB_VENDOR_ID_DWAV, 1068 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
@@ -1156,11 +1121,6 @@ static const struct hid_device_id mt_devices[] = {
1156 MT_USB_DEVICE(USB_VENDOR_ID_DWAV, 1121 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1157 USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_A001) }, 1122 USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_A001) },
1158 1123
1159 /* Elo TouchSystems IntelliTouch Plus panel */
1160 { .driver_data = MT_CLS_DUAL_CONTACT_ID,
1161 MT_USB_DEVICE(USB_VENDOR_ID_ELO,
1162 USB_DEVICE_ID_ELO_TS2515) },
1163
1164 /* Flatfrog Panels */ 1124 /* Flatfrog Panels */
1165 { .driver_data = MT_CLS_FLATFROG, 1125 { .driver_data = MT_CLS_FLATFROG,
1166 MT_USB_DEVICE(USB_VENDOR_ID_FLATFROG, 1126 MT_USB_DEVICE(USB_VENDOR_ID_FLATFROG,
@@ -1204,37 +1164,11 @@ static const struct hid_device_id mt_devices[] = {
1204 MT_USB_DEVICE(USB_VENDOR_ID_HANVON_ALT, 1164 MT_USB_DEVICE(USB_VENDOR_ID_HANVON_ALT,
1205 USB_DEVICE_ID_HANVON_ALT_MULTITOUCH) }, 1165 USB_DEVICE_ID_HANVON_ALT_MULTITOUCH) },
1206 1166
1207 /* Ideacom panel */
1208 { .driver_data = MT_CLS_SERIAL,
1209 MT_USB_DEVICE(USB_VENDOR_ID_IDEACOM,
1210 USB_DEVICE_ID_IDEACOM_IDC6650) },
1211 { .driver_data = MT_CLS_SERIAL,
1212 MT_USB_DEVICE(USB_VENDOR_ID_IDEACOM,
1213 USB_DEVICE_ID_IDEACOM_IDC6651) },
1214
1215 /* Ilitek dual touch panel */ 1167 /* Ilitek dual touch panel */
1216 { .driver_data = MT_CLS_NSMU, 1168 { .driver_data = MT_CLS_NSMU,
1217 MT_USB_DEVICE(USB_VENDOR_ID_ILITEK, 1169 MT_USB_DEVICE(USB_VENDOR_ID_ILITEK,
1218 USB_DEVICE_ID_ILITEK_MULTITOUCH) }, 1170 USB_DEVICE_ID_ILITEK_MULTITOUCH) },
1219 1171
1220 /* IRTOUCH panels */
1221 { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTID,
1222 MT_USB_DEVICE(USB_VENDOR_ID_IRTOUCHSYSTEMS,
1223 USB_DEVICE_ID_IRTOUCH_INFRARED_USB) },
1224
1225 /* LG Display panels */
1226 { .driver_data = MT_CLS_DEFAULT,
1227 MT_USB_DEVICE(USB_VENDOR_ID_LG,
1228 USB_DEVICE_ID_LG_MULTITOUCH) },
1229
1230 /* Lumio panels */
1231 { .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
1232 MT_USB_DEVICE(USB_VENDOR_ID_LUMIO,
1233 USB_DEVICE_ID_CRYSTALTOUCH) },
1234 { .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
1235 MT_USB_DEVICE(USB_VENDOR_ID_LUMIO,
1236 USB_DEVICE_ID_CRYSTALTOUCH_DUAL) },
1237
1238 /* MosArt panels */ 1172 /* MosArt panels */
1239 { .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE, 1173 { .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
1240 MT_USB_DEVICE(USB_VENDOR_ID_ASUS, 1174 MT_USB_DEVICE(USB_VENDOR_ID_ASUS,
@@ -1246,11 +1180,6 @@ static const struct hid_device_id mt_devices[] = {
1246 MT_USB_DEVICE(USB_VENDOR_ID_TURBOX, 1180 MT_USB_DEVICE(USB_VENDOR_ID_TURBOX,
1247 USB_DEVICE_ID_TURBOX_TOUCHSCREEN_MOSART) }, 1181 USB_DEVICE_ID_TURBOX_TOUCHSCREEN_MOSART) },
1248 1182
1249 /* Nexio panels */
1250 { .driver_data = MT_CLS_DEFAULT,
1251 MT_USB_DEVICE(USB_VENDOR_ID_NEXIO,
1252 USB_DEVICE_ID_NEXIO_MULTITOUCH_420)},
1253
1254 /* Panasonic panels */ 1183 /* Panasonic panels */
1255 { .driver_data = MT_CLS_PANASONIC, 1184 { .driver_data = MT_CLS_PANASONIC,
1256 MT_USB_DEVICE(USB_VENDOR_ID_PANASONIC, 1185 MT_USB_DEVICE(USB_VENDOR_ID_PANASONIC,
@@ -1264,11 +1193,6 @@ static const struct hid_device_id mt_devices[] = {
1264 MT_USB_DEVICE(USB_VENDOR_ID_NOVATEK, 1193 MT_USB_DEVICE(USB_VENDOR_ID_NOVATEK,
1265 USB_DEVICE_ID_NOVATEK_PCT) }, 1194 USB_DEVICE_ID_NOVATEK_PCT) },
1266 1195
1267 /* PenMount panels */
1268 { .driver_data = MT_CLS_CONFIDENCE,
1269 MT_USB_DEVICE(USB_VENDOR_ID_PENMOUNT,
1270 USB_DEVICE_ID_PENMOUNT_PCI) },
1271
1272 /* PixArt optical touch screen */ 1196 /* PixArt optical touch screen */
1273 { .driver_data = MT_CLS_INRANGE_CONTACTNUMBER, 1197 { .driver_data = MT_CLS_INRANGE_CONTACTNUMBER,
1274 MT_USB_DEVICE(USB_VENDOR_ID_PIXART, 1198 MT_USB_DEVICE(USB_VENDOR_ID_PIXART,
@@ -1282,44 +1206,18 @@ static const struct hid_device_id mt_devices[] = {
1282 1206
1283 /* PixCir-based panels */ 1207 /* PixCir-based panels */
1284 { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTID, 1208 { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTID,
1285 MT_USB_DEVICE(USB_VENDOR_ID_HANVON,
1286 USB_DEVICE_ID_HANVON_MULTITOUCH) },
1287 { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTID,
1288 MT_USB_DEVICE(USB_VENDOR_ID_CANDO, 1209 MT_USB_DEVICE(USB_VENDOR_ID_CANDO,
1289 USB_DEVICE_ID_CANDO_PIXCIR_MULTI_TOUCH) }, 1210 USB_DEVICE_ID_CANDO_PIXCIR_MULTI_TOUCH) },
1290 1211
1291 /* Quanta-based panels */ 1212 /* Quanta-based panels */
1292 { .driver_data = MT_CLS_CONFIDENCE_CONTACT_ID, 1213 { .driver_data = MT_CLS_CONFIDENCE_CONTACT_ID,
1293 MT_USB_DEVICE(USB_VENDOR_ID_QUANTA, 1214 MT_USB_DEVICE(USB_VENDOR_ID_QUANTA,
1294 USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH) },
1295 { .driver_data = MT_CLS_CONFIDENCE_CONTACT_ID,
1296 MT_USB_DEVICE(USB_VENDOR_ID_QUANTA,
1297 USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3001) }, 1215 USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3001) },
1298 { .driver_data = MT_CLS_CONFIDENCE_CONTACT_ID,
1299 MT_USB_DEVICE(USB_VENDOR_ID_QUANTA,
1300 USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3008) },
1301
1302 /* SiS panels */
1303 { .driver_data = MT_CLS_DEFAULT,
1304 HID_USB_DEVICE(USB_VENDOR_ID_SIS_TOUCH,
1305 USB_DEVICE_ID_SIS9200_TOUCH) },
1306 { .driver_data = MT_CLS_DEFAULT,
1307 HID_USB_DEVICE(USB_VENDOR_ID_SIS_TOUCH,
1308 USB_DEVICE_ID_SIS817_TOUCH) },
1309 { .driver_data = MT_CLS_DEFAULT,
1310 HID_USB_DEVICE(USB_VENDOR_ID_SIS_TOUCH,
1311 USB_DEVICE_ID_SIS1030_TOUCH) },
1312 1216
1313 /* Stantum panels */ 1217 /* Stantum panels */
1314 { .driver_data = MT_CLS_CONFIDENCE, 1218 { .driver_data = MT_CLS_CONFIDENCE,
1315 MT_USB_DEVICE(USB_VENDOR_ID_STANTUM,
1316 USB_DEVICE_ID_MTP)},
1317 { .driver_data = MT_CLS_CONFIDENCE,
1318 MT_USB_DEVICE(USB_VENDOR_ID_STANTUM_STM, 1219 MT_USB_DEVICE(USB_VENDOR_ID_STANTUM_STM,
1319 USB_DEVICE_ID_MTP_STM)}, 1220 USB_DEVICE_ID_MTP_STM)},
1320 { .driver_data = MT_CLS_DEFAULT,
1321 MT_USB_DEVICE(USB_VENDOR_ID_STANTUM_SITRONIX,
1322 USB_DEVICE_ID_MTP_SITRONIX)},
1323 1221
1324 /* TopSeed panels */ 1222 /* TopSeed panels */
1325 { .driver_data = MT_CLS_TOPSEED, 1223 { .driver_data = MT_CLS_TOPSEED,
@@ -1378,11 +1276,6 @@ static const struct hid_device_id mt_devices[] = {
1378 MT_USB_DEVICE(USB_VENDOR_ID_XIROKU, 1276 MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1379 USB_DEVICE_ID_XIROKU_CSR2) }, 1277 USB_DEVICE_ID_XIROKU_CSR2) },
1380 1278
1381 /* Zytronic panels */
1382 { .driver_data = MT_CLS_SERIAL,
1383 MT_USB_DEVICE(USB_VENDOR_ID_ZYTRONIC,
1384 USB_DEVICE_ID_ZYTRONIC_ZXY100) },
1385
1386 /* Generic MT device */ 1279 /* Generic MT device */
1387 { HID_DEVICE(HID_BUS_ANY, HID_GROUP_MULTITOUCH, HID_ANY_ID, HID_ANY_ID) }, 1280 { HID_DEVICE(HID_BUS_ANY, HID_GROUP_MULTITOUCH, HID_ANY_ID, HID_ANY_ID) },
1388 1281