aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Tissoires <benjamin.tissoires@redhat.com>2014-02-28 11:41:23 -0500
committerJiri Kosina <jkosina@suse.cz>2014-03-05 08:29:30 -0500
commit0fa9c61618fe996c153d186e4087a61ca4e7b2ed (patch)
tree1d221fa427f221138c2276ea2c020ccf212ca4ad
parent3a75b24949a8d34d2014866006e30dc69dd567c8 (diff)
HID: multitouch: remove registered devices with default behavior
The default multitouch protocol class in use since the kernel v3.9 is working quite well. Since its inclusion, the only devices we had to tweak were those who really need quirks (GeneralTouch, FocalTech and Wistron, the 3 of them are Win 7 certified ones). The flow of new unhandled devices has stopped, which is great and I think it's time to reduce the list of registered device. This commit removes only the registration in the kernel of devices that use the class MT_CLS_DEFAULT, or that can use it. By that, I mean that I checked all the recordings I have, and the produced input device and events are the same before and after applying the patch. This gives two benefits: - remove a bunch of lines of codes - prevent bad handling of existing registered devices which are using a different protocol while using the same VID/PID (I got the case of a Quanta 3008 recently). I also removed the associated classes (MT_CLS*). I kept their #define in case people use the new_id sysfs node with a non standard class (their should be really few people now, but we never now). This is why there are /* reserved .... */. Last, I add a comment on top of mt_devices[] definition to remember people (and myself) not to include devices for the beauty of it. To people still trying to add devices with the default class: """ Guys, try out your device under a kernel greater or equal to v3.9. If it works, you are all set. Adding your VID/PID to the kernel only brings us overload and you won't get anything from it _because_ even a backport of this shiny patch will _not_ make the device work under 3.0, 3.2, 3.4 or even 3.8. So if it works, it works. If it does not work, then yes, submit a patch or call for help. In any cases, if you want me to do regression tests, I'd be happy to get some traces of your device. But I won't patch the kernel if it works. """ Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
-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