hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/input/serio/i8042-x86ia64io.h
similarity index 68%rename from kernel/drivers/input/serio/i8042-x86ia64io.hrename to kernel/drivers/input/serio/i8042-acpipnpio.h
....@@ -1,6 +1,6 @@
11 /* SPDX-License-Identifier: GPL-2.0-only */
2
-#ifndef _I8042_X86IA64IO_H
3
-#define _I8042_X86IA64IO_H
2
+#ifndef _I8042_ACPIPNPIO_H
3
+#define _I8042_ACPIPNPIO_H
44
55
66 #ifdef CONFIG_X86
....@@ -67,25 +67,84 @@
6767
6868 #include <linux/dmi.h>
6969
70
-static const struct dmi_system_id __initconst i8042_dmi_noloop_table[] = {
70
+#define SERIO_QUIRK_NOKBD BIT(0)
71
+#define SERIO_QUIRK_NOAUX BIT(1)
72
+#define SERIO_QUIRK_NOMUX BIT(2)
73
+#define SERIO_QUIRK_FORCEMUX BIT(3)
74
+#define SERIO_QUIRK_UNLOCK BIT(4)
75
+#define SERIO_QUIRK_PROBE_DEFER BIT(5)
76
+#define SERIO_QUIRK_RESET_ALWAYS BIT(6)
77
+#define SERIO_QUIRK_RESET_NEVER BIT(7)
78
+#define SERIO_QUIRK_DIECT BIT(8)
79
+#define SERIO_QUIRK_DUMBKBD BIT(9)
80
+#define SERIO_QUIRK_NOLOOP BIT(10)
81
+#define SERIO_QUIRK_NOTIMEOUT BIT(11)
82
+#define SERIO_QUIRK_KBDRESET BIT(12)
83
+#define SERIO_QUIRK_DRITEK BIT(13)
84
+#define SERIO_QUIRK_NOPNP BIT(14)
85
+
86
+/* Quirk table for different mainboards. Options similar or identical to i8042
87
+ * module parameters.
88
+ * ORDERING IS IMPORTANT! The first match will be apllied and the rest ignored.
89
+ * This allows entries to overwrite vendor wide quirks on a per device basis.
90
+ * Where this is irrelevant, entries are sorted case sensitive by DMI_SYS_VENDOR
91
+ * and/or DMI_BOARD_VENDOR to make it easier to avoid dublicate entries.
92
+ */
93
+static const struct dmi_system_id i8042_dmi_quirk_table[] __initconst = {
7194 {
72
- /*
73
- * Arima-Rioworks HDAMB -
74
- * AUX LOOP command does not raise AUX IRQ
75
- */
7695 .matches = {
77
- DMI_MATCH(DMI_BOARD_VENDOR, "RIOWORKS"),
78
- DMI_MATCH(DMI_BOARD_NAME, "HDAMB"),
79
- DMI_MATCH(DMI_BOARD_VERSION, "Rev E"),
96
+ DMI_MATCH(DMI_SYS_VENDOR, "ALIENWARE"),
97
+ DMI_MATCH(DMI_PRODUCT_NAME, "Sentia"),
8098 },
99
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX)
81100 },
82101 {
83
- /* ASUS G1S */
84102 .matches = {
85
- DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer Inc."),
86
- DMI_MATCH(DMI_BOARD_NAME, "G1S"),
87
- DMI_MATCH(DMI_BOARD_VERSION, "1.0"),
103
+ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
104
+ DMI_MATCH(DMI_PRODUCT_NAME, "X750LN"),
88105 },
106
+ .driver_data = (void *)(SERIO_QUIRK_NOLOOP)
107
+ },
108
+ {
109
+ /* Asus X450LCP */
110
+ .matches = {
111
+ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
112
+ DMI_MATCH(DMI_PRODUCT_NAME, "X450LCP"),
113
+ },
114
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_NEVER)
115
+ },
116
+ {
117
+ /* ASUS ZenBook UX425UA */
118
+ .matches = {
119
+ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
120
+ DMI_MATCH(DMI_PRODUCT_NAME, "ZenBook UX425UA"),
121
+ },
122
+ .driver_data = (void *)(SERIO_QUIRK_PROBE_DEFER | SERIO_QUIRK_RESET_NEVER)
123
+ },
124
+ {
125
+ /* ASUS ZenBook UM325UA */
126
+ .matches = {
127
+ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
128
+ DMI_MATCH(DMI_PRODUCT_NAME, "ZenBook UX325UA_UM325UA"),
129
+ },
130
+ .driver_data = (void *)(SERIO_QUIRK_PROBE_DEFER | SERIO_QUIRK_RESET_NEVER)
131
+ },
132
+ /*
133
+ * On some Asus laptops, just running self tests cause problems.
134
+ */
135
+ {
136
+ .matches = {
137
+ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
138
+ DMI_MATCH(DMI_CHASSIS_TYPE, "10"), /* Notebook */
139
+ },
140
+ .driver_data = (void *)(SERIO_QUIRK_RESET_NEVER)
141
+ },
142
+ {
143
+ .matches = {
144
+ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
145
+ DMI_MATCH(DMI_CHASSIS_TYPE, "31"), /* Convertible Notebook */
146
+ },
147
+ .driver_data = (void *)(SERIO_QUIRK_RESET_NEVER)
89148 },
90149 {
91150 /* ASUS P65UP5 - AUX LOOP command does not raise AUX IRQ */
....@@ -94,362 +153,23 @@
94153 DMI_MATCH(DMI_BOARD_NAME, "P/I-P65UP5"),
95154 DMI_MATCH(DMI_BOARD_VERSION, "REV 2.X"),
96155 },
156
+ .driver_data = (void *)(SERIO_QUIRK_NOLOOP)
97157 },
98158 {
159
+ /* ASUS G1S */
99160 .matches = {
100
- DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
101
- DMI_MATCH(DMI_PRODUCT_NAME, "X750LN"),
161
+ DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer Inc."),
162
+ DMI_MATCH(DMI_BOARD_NAME, "G1S"),
163
+ DMI_MATCH(DMI_BOARD_VERSION, "1.0"),
102164 },
103
- },
104
- {
105
- .matches = {
106
- DMI_MATCH(DMI_SYS_VENDOR, "Compaq"),
107
- DMI_MATCH(DMI_PRODUCT_NAME , "ProLiant"),
108
- DMI_MATCH(DMI_PRODUCT_VERSION, "8500"),
109
- },
110
- },
111
- {
112
- .matches = {
113
- DMI_MATCH(DMI_SYS_VENDOR, "Compaq"),
114
- DMI_MATCH(DMI_PRODUCT_NAME , "ProLiant"),
115
- DMI_MATCH(DMI_PRODUCT_VERSION, "DL760"),
116
- },
117
- },
118
- {
119
- /* Dell Embedded Box PC 3000 */
120
- .matches = {
121
- DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
122
- DMI_MATCH(DMI_PRODUCT_NAME, "Embedded Box PC 3000"),
123
- },
124
- },
125
- {
126
- /* OQO Model 01 */
127
- .matches = {
128
- DMI_MATCH(DMI_SYS_VENDOR, "OQO"),
129
- DMI_MATCH(DMI_PRODUCT_NAME, "ZEPTO"),
130
- DMI_MATCH(DMI_PRODUCT_VERSION, "00"),
131
- },
132
- },
133
- {
134
- /* ULI EV4873 - AUX LOOP does not work properly */
135
- .matches = {
136
- DMI_MATCH(DMI_SYS_VENDOR, "ULI"),
137
- DMI_MATCH(DMI_PRODUCT_NAME, "EV4873"),
138
- DMI_MATCH(DMI_PRODUCT_VERSION, "5a"),
139
- },
140
- },
141
- {
142
- /* Microsoft Virtual Machine */
143
- .matches = {
144
- DMI_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"),
145
- DMI_MATCH(DMI_PRODUCT_NAME, "Virtual Machine"),
146
- DMI_MATCH(DMI_PRODUCT_VERSION, "VS2005R2"),
147
- },
148
- },
149
- {
150
- /* Medion MAM 2070 */
151
- .matches = {
152
- DMI_MATCH(DMI_SYS_VENDOR, "Notebook"),
153
- DMI_MATCH(DMI_PRODUCT_NAME, "MAM 2070"),
154
- DMI_MATCH(DMI_PRODUCT_VERSION, "5a"),
155
- },
156
- },
157
- {
158
- /* Medion Akoya E7225 */
159
- .matches = {
160
- DMI_MATCH(DMI_SYS_VENDOR, "Medion"),
161
- DMI_MATCH(DMI_PRODUCT_NAME, "Akoya E7225"),
162
- DMI_MATCH(DMI_PRODUCT_VERSION, "1.0"),
163
- },
164
- },
165
- {
166
- /* Blue FB5601 */
167
- .matches = {
168
- DMI_MATCH(DMI_SYS_VENDOR, "blue"),
169
- DMI_MATCH(DMI_PRODUCT_NAME, "FB5601"),
170
- DMI_MATCH(DMI_PRODUCT_VERSION, "M606"),
171
- },
172
- },
173
- {
174
- /* Gigabyte M912 */
175
- .matches = {
176
- DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"),
177
- DMI_MATCH(DMI_PRODUCT_NAME, "M912"),
178
- DMI_MATCH(DMI_PRODUCT_VERSION, "01"),
179
- },
180
- },
181
- {
182
- /* Gigabyte M1022M netbook */
183
- .matches = {
184
- DMI_MATCH(DMI_BOARD_VENDOR, "Gigabyte Technology Co.,Ltd."),
185
- DMI_MATCH(DMI_BOARD_NAME, "M1022E"),
186
- DMI_MATCH(DMI_BOARD_VERSION, "1.02"),
187
- },
188
- },
189
- {
190
- /* Gigabyte Spring Peak - defines wrong chassis type */
191
- .matches = {
192
- DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"),
193
- DMI_MATCH(DMI_PRODUCT_NAME, "Spring Peak"),
194
- },
195
- },
196
- {
197
- /* Gigabyte T1005 - defines wrong chassis type ("Other") */
198
- .matches = {
199
- DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"),
200
- DMI_MATCH(DMI_PRODUCT_NAME, "T1005"),
201
- },
202
- },
203
- {
204
- /* Gigabyte T1005M/P - defines wrong chassis type ("Other") */
205
- .matches = {
206
- DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"),
207
- DMI_MATCH(DMI_PRODUCT_NAME, "T1005M/P"),
208
- },
209
- },
210
- {
211
- .matches = {
212
- DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
213
- DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv9700"),
214
- DMI_MATCH(DMI_PRODUCT_VERSION, "Rev 1"),
215
- },
216
- },
217
- {
218
- .matches = {
219
- DMI_MATCH(DMI_SYS_VENDOR, "PEGATRON CORPORATION"),
220
- DMI_MATCH(DMI_PRODUCT_NAME, "C15B"),
221
- },
222
- },
223
- {
224
- .matches = {
225
- DMI_MATCH(DMI_SYS_VENDOR, "ByteSpeed LLC"),
226
- DMI_MATCH(DMI_PRODUCT_NAME, "ByteSpeed Laptop C15B"),
227
- },
228
- },
229
- { }
230
-};
231
-
232
-/*
233
- * Some Fujitsu notebooks are having trouble with touchpads if
234
- * active multiplexing mode is activated. Luckily they don't have
235
- * external PS/2 ports so we can safely disable it.
236
- * ... apparently some Toshibas don't like MUX mode either and
237
- * die horrible death on reboot.
238
- */
239
-static const struct dmi_system_id __initconst i8042_dmi_nomux_table[] = {
240
- {
241
- /* Fujitsu Lifebook P7010/P7010D */
242
- .matches = {
243
- DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
244
- DMI_MATCH(DMI_PRODUCT_NAME, "P7010"),
245
- },
246
- },
247
- {
248
- /* Fujitsu Lifebook P7010 */
249
- .matches = {
250
- DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
251
- DMI_MATCH(DMI_PRODUCT_NAME, "0000000000"),
252
- },
253
- },
254
- {
255
- /* Fujitsu Lifebook P5020D */
256
- .matches = {
257
- DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
258
- DMI_MATCH(DMI_PRODUCT_NAME, "LifeBook P Series"),
259
- },
260
- },
261
- {
262
- /* Fujitsu Lifebook S2000 */
263
- .matches = {
264
- DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
265
- DMI_MATCH(DMI_PRODUCT_NAME, "LifeBook S Series"),
266
- },
267
- },
268
- {
269
- /* Fujitsu Lifebook S6230 */
270
- .matches = {
271
- DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
272
- DMI_MATCH(DMI_PRODUCT_NAME, "LifeBook S6230"),
273
- },
274
- },
275
- {
276
- /* Fujitsu Lifebook T725 laptop */
277
- .matches = {
278
- DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
279
- DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK T725"),
280
- },
281
- },
282
- {
283
- /* Fujitsu Lifebook U745 */
284
- .matches = {
285
- DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
286
- DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK U745"),
287
- },
288
- },
289
- {
290
- /* Fujitsu T70H */
291
- .matches = {
292
- DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
293
- DMI_MATCH(DMI_PRODUCT_NAME, "FMVLT70H"),
294
- },
295
- },
296
- {
297
- /* Fujitsu-Siemens Lifebook T3010 */
298
- .matches = {
299
- DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
300
- DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK T3010"),
301
- },
302
- },
303
- {
304
- /* Fujitsu-Siemens Lifebook E4010 */
305
- .matches = {
306
- DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
307
- DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK E4010"),
308
- },
309
- },
310
- {
311
- /* Fujitsu-Siemens Amilo Pro 2010 */
312
- .matches = {
313
- DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
314
- DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Pro V2010"),
315
- },
316
- },
317
- {
318
- /* Fujitsu-Siemens Amilo Pro 2030 */
319
- .matches = {
320
- DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
321
- DMI_MATCH(DMI_PRODUCT_NAME, "AMILO PRO V2030"),
322
- },
323
- },
324
- {
325
- /*
326
- * No data is coming from the touchscreen unless KBC
327
- * is in legacy mode.
328
- */
329
- /* Panasonic CF-29 */
330
- .matches = {
331
- DMI_MATCH(DMI_SYS_VENDOR, "Matsushita"),
332
- DMI_MATCH(DMI_PRODUCT_NAME, "CF-29"),
333
- },
334
- },
335
- {
336
- /*
337
- * HP Pavilion DV4017EA -
338
- * errors on MUX ports are reported without raising AUXDATA
339
- * causing "spurious NAK" messages.
340
- */
341
- .matches = {
342
- DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
343
- DMI_MATCH(DMI_PRODUCT_NAME, "Pavilion dv4000 (EA032EA#ABF)"),
344
- },
345
- },
346
- {
347
- /*
348
- * HP Pavilion ZT1000 -
349
- * like DV4017EA does not raise AUXERR for errors on MUX ports.
350
- */
351
- .matches = {
352
- DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
353
- DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion Notebook PC"),
354
- DMI_MATCH(DMI_PRODUCT_VERSION, "HP Pavilion Notebook ZT1000"),
355
- },
356
- },
357
- {
358
- /*
359
- * HP Pavilion DV4270ca -
360
- * like DV4017EA does not raise AUXERR for errors on MUX ports.
361
- */
362
- .matches = {
363
- DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
364
- DMI_MATCH(DMI_PRODUCT_NAME, "Pavilion dv4000 (EH476UA#ABL)"),
365
- },
366
- },
367
- {
368
- .matches = {
369
- DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
370
- DMI_MATCH(DMI_PRODUCT_NAME, "Satellite P10"),
371
- },
372
- },
373
- {
374
- .matches = {
375
- DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
376
- DMI_MATCH(DMI_PRODUCT_NAME, "EQUIUM A110"),
377
- },
378
- },
379
- {
380
- .matches = {
381
- DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
382
- DMI_MATCH(DMI_PRODUCT_NAME, "SATELLITE C850D"),
383
- },
384
- },
385
- {
386
- .matches = {
387
- DMI_MATCH(DMI_SYS_VENDOR, "ALIENWARE"),
388
- DMI_MATCH(DMI_PRODUCT_NAME, "Sentia"),
389
- },
390
- },
391
- {
392
- /* Sharp Actius MM20 */
393
- .matches = {
394
- DMI_MATCH(DMI_SYS_VENDOR, "SHARP"),
395
- DMI_MATCH(DMI_PRODUCT_NAME, "PC-MM20 Series"),
396
- },
397
- },
398
- {
399
- /* Sony Vaio FS-115b */
400
- .matches = {
401
- DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
402
- DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FS115B"),
403
- },
404
- },
405
- {
406
- /*
407
- * Sony Vaio FZ-240E -
408
- * reset and GET ID commands issued via KBD port are
409
- * sometimes being delivered to AUX3.
410
- */
411
- .matches = {
412
- DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
413
- DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FZ240E"),
414
- },
415
- },
416
- {
417
- /*
418
- * Most (all?) VAIOs do not have external PS/2 ports nor
419
- * they implement active multiplexing properly, and
420
- * MUX discovery usually messes up keyboard/touchpad.
421
- */
422
- .matches = {
423
- DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
424
- DMI_MATCH(DMI_BOARD_NAME, "VAIO"),
425
- },
426
- },
427
- {
428
- /* Amoi M636/A737 */
429
- .matches = {
430
- DMI_MATCH(DMI_SYS_VENDOR, "Amoi Electronics CO.,LTD."),
431
- DMI_MATCH(DMI_PRODUCT_NAME, "M636/A737 platform"),
432
- },
433
- },
434
- {
435
- /* Lenovo 3000 n100 */
436
- .matches = {
437
- DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
438
- DMI_MATCH(DMI_PRODUCT_NAME, "076804U"),
439
- },
440
- },
441
- {
442
- /* Lenovo XiaoXin Air 12 */
443
- .matches = {
444
- DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
445
- DMI_MATCH(DMI_PRODUCT_NAME, "80UN"),
446
- },
165
+ .driver_data = (void *)(SERIO_QUIRK_NOLOOP)
447166 },
448167 {
449168 .matches = {
450169 DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
451170 DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 1360"),
452171 },
172
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX)
453173 },
454174 {
455175 /* Acer Aspire 5710 */
....@@ -457,6 +177,7 @@
457177 DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
458178 DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5710"),
459179 },
180
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX)
460181 },
461182 {
462183 /* Acer Aspire 7738 */
....@@ -464,41 +185,7 @@
464185 DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
465186 DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 7738"),
466187 },
467
- },
468
- {
469
- /* Gericom Bellagio */
470
- .matches = {
471
- DMI_MATCH(DMI_SYS_VENDOR, "Gericom"),
472
- DMI_MATCH(DMI_PRODUCT_NAME, "N34AS6"),
473
- },
474
- },
475
- {
476
- /* IBM 2656 */
477
- .matches = {
478
- DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
479
- DMI_MATCH(DMI_PRODUCT_NAME, "2656"),
480
- },
481
- },
482
- {
483
- /* Dell XPS M1530 */
484
- .matches = {
485
- DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
486
- DMI_MATCH(DMI_PRODUCT_NAME, "XPS M1530"),
487
- },
488
- },
489
- {
490
- /* Compal HEL80I */
491
- .matches = {
492
- DMI_MATCH(DMI_SYS_VENDOR, "COMPAL"),
493
- DMI_MATCH(DMI_PRODUCT_NAME, "HEL80I"),
494
- },
495
- },
496
- {
497
- /* Dell Vostro 1510 */
498
- .matches = {
499
- DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
500
- DMI_MATCH(DMI_PRODUCT_NAME, "Vostro1510"),
501
- },
188
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX)
502189 },
503190 {
504191 /* Acer Aspire 5536 */
....@@ -507,48 +194,7 @@
507194 DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5536"),
508195 DMI_MATCH(DMI_PRODUCT_VERSION, "0100"),
509196 },
510
- },
511
- {
512
- /* Dell Vostro V13 */
513
- .matches = {
514
- DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
515
- DMI_MATCH(DMI_PRODUCT_NAME, "Vostro V13"),
516
- },
517
- },
518
- {
519
- /* Newer HP Pavilion dv4 models */
520
- .matches = {
521
- DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
522
- DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv4 Notebook PC"),
523
- },
524
- },
525
- {
526
- /* Asus X450LCP */
527
- .matches = {
528
- DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
529
- DMI_MATCH(DMI_PRODUCT_NAME, "X450LCP"),
530
- },
531
- },
532
- {
533
- /* Avatar AVIU-145A6 */
534
- .matches = {
535
- DMI_MATCH(DMI_SYS_VENDOR, "Intel"),
536
- DMI_MATCH(DMI_PRODUCT_NAME, "IC4I"),
537
- },
538
- },
539
- {
540
- /* TUXEDO BU1406 */
541
- .matches = {
542
- DMI_MATCH(DMI_SYS_VENDOR, "Notebook"),
543
- DMI_MATCH(DMI_PRODUCT_NAME, "N24_25BU"),
544
- },
545
- },
546
- {
547
- /* Lenovo LaVie Z */
548
- .matches = {
549
- DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
550
- DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo LaVie Z"),
551
- },
197
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX)
552198 },
553199 {
554200 /*
....@@ -560,6 +206,253 @@
560206 DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
561207 DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5738"),
562208 },
209
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX)
210
+ },
211
+ {
212
+ /* Acer Aspire One 150 */
213
+ .matches = {
214
+ DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
215
+ DMI_MATCH(DMI_PRODUCT_NAME, "AOA150"),
216
+ },
217
+ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS)
218
+ },
219
+ {
220
+ .matches = {
221
+ DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
222
+ DMI_MATCH(DMI_PRODUCT_NAME, "Aspire A114-31"),
223
+ },
224
+ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS)
225
+ },
226
+ {
227
+ .matches = {
228
+ DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
229
+ DMI_MATCH(DMI_PRODUCT_NAME, "Aspire A314-31"),
230
+ },
231
+ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS)
232
+ },
233
+ {
234
+ .matches = {
235
+ DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
236
+ DMI_MATCH(DMI_PRODUCT_NAME, "Aspire A315-31"),
237
+ },
238
+ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS)
239
+ },
240
+ {
241
+ .matches = {
242
+ DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
243
+ DMI_MATCH(DMI_PRODUCT_NAME, "Aspire ES1-132"),
244
+ },
245
+ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS)
246
+ },
247
+ {
248
+ .matches = {
249
+ DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
250
+ DMI_MATCH(DMI_PRODUCT_NAME, "Aspire ES1-332"),
251
+ },
252
+ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS)
253
+ },
254
+ {
255
+ .matches = {
256
+ DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
257
+ DMI_MATCH(DMI_PRODUCT_NAME, "Aspire ES1-432"),
258
+ },
259
+ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS)
260
+ },
261
+ {
262
+ .matches = {
263
+ DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
264
+ DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate Spin B118-RN"),
265
+ },
266
+ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS)
267
+ },
268
+ /*
269
+ * Some Wistron based laptops need us to explicitly enable the 'Dritek
270
+ * keyboard extension' to make their extra keys start generating scancodes.
271
+ * Originally, this was just confined to older laptops, but a few Acer laptops
272
+ * have turned up in 2007 that also need this again.
273
+ */
274
+ {
275
+ /* Acer Aspire 5100 */
276
+ .matches = {
277
+ DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
278
+ DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5100"),
279
+ },
280
+ .driver_data = (void *)(SERIO_QUIRK_DRITEK)
281
+ },
282
+ {
283
+ /* Acer Aspire 5610 */
284
+ .matches = {
285
+ DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
286
+ DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5610"),
287
+ },
288
+ .driver_data = (void *)(SERIO_QUIRK_DRITEK)
289
+ },
290
+ {
291
+ /* Acer Aspire 5630 */
292
+ .matches = {
293
+ DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
294
+ DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5630"),
295
+ },
296
+ .driver_data = (void *)(SERIO_QUIRK_DRITEK)
297
+ },
298
+ {
299
+ /* Acer Aspire 5650 */
300
+ .matches = {
301
+ DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
302
+ DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5650"),
303
+ },
304
+ .driver_data = (void *)(SERIO_QUIRK_DRITEK)
305
+ },
306
+ {
307
+ /* Acer Aspire 5680 */
308
+ .matches = {
309
+ DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
310
+ DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5680"),
311
+ },
312
+ .driver_data = (void *)(SERIO_QUIRK_DRITEK)
313
+ },
314
+ {
315
+ /* Acer Aspire 5720 */
316
+ .matches = {
317
+ DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
318
+ DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5720"),
319
+ },
320
+ .driver_data = (void *)(SERIO_QUIRK_DRITEK)
321
+ },
322
+ {
323
+ /* Acer Aspire 9110 */
324
+ .matches = {
325
+ DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
326
+ DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 9110"),
327
+ },
328
+ .driver_data = (void *)(SERIO_QUIRK_DRITEK)
329
+ },
330
+ {
331
+ /* Acer TravelMate 660 */
332
+ .matches = {
333
+ DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
334
+ DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 660"),
335
+ },
336
+ .driver_data = (void *)(SERIO_QUIRK_DRITEK)
337
+ },
338
+ {
339
+ /* Acer TravelMate 2490 */
340
+ .matches = {
341
+ DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
342
+ DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 2490"),
343
+ },
344
+ .driver_data = (void *)(SERIO_QUIRK_DRITEK)
345
+ },
346
+ {
347
+ /* Acer TravelMate 4280 */
348
+ .matches = {
349
+ DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
350
+ DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 4280"),
351
+ },
352
+ .driver_data = (void *)(SERIO_QUIRK_DRITEK)
353
+ },
354
+ {
355
+ /* Amoi M636/A737 */
356
+ .matches = {
357
+ DMI_MATCH(DMI_SYS_VENDOR, "Amoi Electronics CO.,LTD."),
358
+ DMI_MATCH(DMI_PRODUCT_NAME, "M636/A737 platform"),
359
+ },
360
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX)
361
+ },
362
+ {
363
+ .matches = {
364
+ DMI_MATCH(DMI_SYS_VENDOR, "ByteSpeed LLC"),
365
+ DMI_MATCH(DMI_PRODUCT_NAME, "ByteSpeed Laptop C15B"),
366
+ },
367
+ .driver_data = (void *)(SERIO_QUIRK_NOLOOP)
368
+ },
369
+ {
370
+ /* Compal HEL80I */
371
+ .matches = {
372
+ DMI_MATCH(DMI_SYS_VENDOR, "COMPAL"),
373
+ DMI_MATCH(DMI_PRODUCT_NAME, "HEL80I"),
374
+ },
375
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX)
376
+ },
377
+ {
378
+ .matches = {
379
+ DMI_MATCH(DMI_SYS_VENDOR, "Compaq"),
380
+ DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant"),
381
+ DMI_MATCH(DMI_PRODUCT_VERSION, "8500"),
382
+ },
383
+ .driver_data = (void *)(SERIO_QUIRK_NOLOOP)
384
+ },
385
+ {
386
+ .matches = {
387
+ DMI_MATCH(DMI_SYS_VENDOR, "Compaq"),
388
+ DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant"),
389
+ DMI_MATCH(DMI_PRODUCT_VERSION, "DL760"),
390
+ },
391
+ .driver_data = (void *)(SERIO_QUIRK_NOLOOP)
392
+ },
393
+ {
394
+ /* Advent 4211 */
395
+ .matches = {
396
+ DMI_MATCH(DMI_SYS_VENDOR, "DIXONSXP"),
397
+ DMI_MATCH(DMI_PRODUCT_NAME, "Advent 4211"),
398
+ },
399
+ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS)
400
+ },
401
+ {
402
+ /* Dell Embedded Box PC 3000 */
403
+ .matches = {
404
+ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
405
+ DMI_MATCH(DMI_PRODUCT_NAME, "Embedded Box PC 3000"),
406
+ },
407
+ .driver_data = (void *)(SERIO_QUIRK_NOLOOP)
408
+ },
409
+ {
410
+ /* Dell XPS M1530 */
411
+ .matches = {
412
+ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
413
+ DMI_MATCH(DMI_PRODUCT_NAME, "XPS M1530"),
414
+ },
415
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX)
416
+ },
417
+ {
418
+ /* Dell Vostro 1510 */
419
+ .matches = {
420
+ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
421
+ DMI_MATCH(DMI_PRODUCT_NAME, "Vostro1510"),
422
+ },
423
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX)
424
+ },
425
+ {
426
+ /* Dell Vostro V13 */
427
+ .matches = {
428
+ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
429
+ DMI_MATCH(DMI_PRODUCT_NAME, "Vostro V13"),
430
+ },
431
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_NOTIMEOUT)
432
+ },
433
+ {
434
+ /* Dell Vostro 1320 */
435
+ .matches = {
436
+ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
437
+ DMI_MATCH(DMI_PRODUCT_NAME, "Vostro 1320"),
438
+ },
439
+ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS)
440
+ },
441
+ {
442
+ /* Dell Vostro 1520 */
443
+ .matches = {
444
+ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
445
+ DMI_MATCH(DMI_PRODUCT_NAME, "Vostro 1520"),
446
+ },
447
+ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS)
448
+ },
449
+ {
450
+ /* Dell Vostro 1720 */
451
+ .matches = {
452
+ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
453
+ DMI_MATCH(DMI_PRODUCT_NAME, "Vostro 1720"),
454
+ },
455
+ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS)
563456 },
564457 {
565458 /* Entroware Proteus */
....@@ -568,11 +461,546 @@
568461 DMI_MATCH(DMI_PRODUCT_NAME, "Proteus"),
569462 DMI_MATCH(DMI_PRODUCT_VERSION, "EL07R4"),
570463 },
464
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS)
571465 },
572
- { }
573
-};
574
-
575
-static const struct dmi_system_id i8042_dmi_forcemux_table[] __initconst = {
466
+ /*
467
+ * Some Fujitsu notebooks are having trouble with touchpads if
468
+ * active multiplexing mode is activated. Luckily they don't have
469
+ * external PS/2 ports so we can safely disable it.
470
+ * ... apparently some Toshibas don't like MUX mode either and
471
+ * die horrible death on reboot.
472
+ */
473
+ {
474
+ /* Fujitsu Lifebook P7010/P7010D */
475
+ .matches = {
476
+ DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
477
+ DMI_MATCH(DMI_PRODUCT_NAME, "P7010"),
478
+ },
479
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX)
480
+ },
481
+ {
482
+ /* Fujitsu Lifebook P5020D */
483
+ .matches = {
484
+ DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
485
+ DMI_MATCH(DMI_PRODUCT_NAME, "LifeBook P Series"),
486
+ },
487
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX)
488
+ },
489
+ {
490
+ /* Fujitsu Lifebook S2000 */
491
+ .matches = {
492
+ DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
493
+ DMI_MATCH(DMI_PRODUCT_NAME, "LifeBook S Series"),
494
+ },
495
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX)
496
+ },
497
+ {
498
+ /* Fujitsu Lifebook S6230 */
499
+ .matches = {
500
+ DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
501
+ DMI_MATCH(DMI_PRODUCT_NAME, "LifeBook S6230"),
502
+ },
503
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX)
504
+ },
505
+ {
506
+ /* Fujitsu Lifebook T725 laptop */
507
+ .matches = {
508
+ DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
509
+ DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK T725"),
510
+ },
511
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_NOTIMEOUT)
512
+ },
513
+ {
514
+ /* Fujitsu Lifebook U745 */
515
+ .matches = {
516
+ DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
517
+ DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK U745"),
518
+ },
519
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX)
520
+ },
521
+ {
522
+ /* Fujitsu T70H */
523
+ .matches = {
524
+ DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
525
+ DMI_MATCH(DMI_PRODUCT_NAME, "FMVLT70H"),
526
+ },
527
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX)
528
+ },
529
+ {
530
+ /* Fujitsu A544 laptop */
531
+ /* https://bugzilla.redhat.com/show_bug.cgi?id=1111138 */
532
+ .matches = {
533
+ DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
534
+ DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK A544"),
535
+ },
536
+ .driver_data = (void *)(SERIO_QUIRK_NOTIMEOUT)
537
+ },
538
+ {
539
+ /* Fujitsu AH544 laptop */
540
+ /* https://bugzilla.kernel.org/show_bug.cgi?id=69731 */
541
+ .matches = {
542
+ DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
543
+ DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK AH544"),
544
+ },
545
+ .driver_data = (void *)(SERIO_QUIRK_NOTIMEOUT)
546
+ },
547
+ {
548
+ /* Fujitsu U574 laptop */
549
+ /* https://bugzilla.kernel.org/show_bug.cgi?id=69731 */
550
+ .matches = {
551
+ DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
552
+ DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK U574"),
553
+ },
554
+ .driver_data = (void *)(SERIO_QUIRK_NOTIMEOUT)
555
+ },
556
+ {
557
+ /* Fujitsu UH554 laptop */
558
+ .matches = {
559
+ DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
560
+ DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK UH544"),
561
+ },
562
+ .driver_data = (void *)(SERIO_QUIRK_NOTIMEOUT)
563
+ },
564
+ {
565
+ /* Fujitsu Lifebook P7010 */
566
+ .matches = {
567
+ DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
568
+ DMI_MATCH(DMI_PRODUCT_NAME, "0000000000"),
569
+ },
570
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX)
571
+ },
572
+ {
573
+ /* Fujitsu-Siemens Lifebook T3010 */
574
+ .matches = {
575
+ DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
576
+ DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK T3010"),
577
+ },
578
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX)
579
+ },
580
+ {
581
+ /* Fujitsu-Siemens Lifebook E4010 */
582
+ .matches = {
583
+ DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
584
+ DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK E4010"),
585
+ },
586
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX)
587
+ },
588
+ {
589
+ /* Fujitsu-Siemens Amilo Pro 2010 */
590
+ .matches = {
591
+ DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
592
+ DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Pro V2010"),
593
+ },
594
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX)
595
+ },
596
+ {
597
+ /* Fujitsu-Siemens Amilo Pro 2030 */
598
+ .matches = {
599
+ DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
600
+ DMI_MATCH(DMI_PRODUCT_NAME, "AMILO PRO V2030"),
601
+ },
602
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX)
603
+ },
604
+ {
605
+ /* Fujitsu Lifebook A574/H */
606
+ .matches = {
607
+ DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
608
+ DMI_MATCH(DMI_PRODUCT_NAME, "FMVA0501PZ"),
609
+ },
610
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX)
611
+ },
612
+ {
613
+ /* Gigabyte M912 */
614
+ .matches = {
615
+ DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"),
616
+ DMI_MATCH(DMI_PRODUCT_NAME, "M912"),
617
+ DMI_MATCH(DMI_PRODUCT_VERSION, "01"),
618
+ },
619
+ .driver_data = (void *)(SERIO_QUIRK_NOLOOP)
620
+ },
621
+ {
622
+ /* Gigabyte Spring Peak - defines wrong chassis type */
623
+ .matches = {
624
+ DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"),
625
+ DMI_MATCH(DMI_PRODUCT_NAME, "Spring Peak"),
626
+ },
627
+ .driver_data = (void *)(SERIO_QUIRK_NOLOOP)
628
+ },
629
+ {
630
+ /* Gigabyte T1005 - defines wrong chassis type ("Other") */
631
+ .matches = {
632
+ DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"),
633
+ DMI_MATCH(DMI_PRODUCT_NAME, "T1005"),
634
+ },
635
+ .driver_data = (void *)(SERIO_QUIRK_NOLOOP)
636
+ },
637
+ {
638
+ /* Gigabyte T1005M/P - defines wrong chassis type ("Other") */
639
+ .matches = {
640
+ DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"),
641
+ DMI_MATCH(DMI_PRODUCT_NAME, "T1005M/P"),
642
+ },
643
+ .driver_data = (void *)(SERIO_QUIRK_NOLOOP)
644
+ },
645
+ /*
646
+ * Some laptops need keyboard reset before probing for the trackpad to get
647
+ * it detected, initialised & finally work.
648
+ */
649
+ {
650
+ /* Gigabyte P35 v2 - Elantech touchpad */
651
+ .matches = {
652
+ DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"),
653
+ DMI_MATCH(DMI_PRODUCT_NAME, "P35V2"),
654
+ },
655
+ .driver_data = (void *)(SERIO_QUIRK_KBDRESET)
656
+ },
657
+ {
658
+ /* Aorus branded Gigabyte X3 Plus - Elantech touchpad */
659
+ .matches = {
660
+ DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"),
661
+ DMI_MATCH(DMI_PRODUCT_NAME, "X3"),
662
+ },
663
+ .driver_data = (void *)(SERIO_QUIRK_KBDRESET)
664
+ },
665
+ {
666
+ /* Gigabyte P34 - Elantech touchpad */
667
+ .matches = {
668
+ DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"),
669
+ DMI_MATCH(DMI_PRODUCT_NAME, "P34"),
670
+ },
671
+ .driver_data = (void *)(SERIO_QUIRK_KBDRESET)
672
+ },
673
+ {
674
+ /* Gigabyte P57 - Elantech touchpad */
675
+ .matches = {
676
+ DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"),
677
+ DMI_MATCH(DMI_PRODUCT_NAME, "P57"),
678
+ },
679
+ .driver_data = (void *)(SERIO_QUIRK_KBDRESET)
680
+ },
681
+ {
682
+ /* Gericom Bellagio */
683
+ .matches = {
684
+ DMI_MATCH(DMI_SYS_VENDOR, "Gericom"),
685
+ DMI_MATCH(DMI_PRODUCT_NAME, "N34AS6"),
686
+ },
687
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX)
688
+ },
689
+ {
690
+ /* Gigabyte M1022M netbook */
691
+ .matches = {
692
+ DMI_MATCH(DMI_BOARD_VENDOR, "Gigabyte Technology Co.,Ltd."),
693
+ DMI_MATCH(DMI_BOARD_NAME, "M1022E"),
694
+ DMI_MATCH(DMI_BOARD_VERSION, "1.02"),
695
+ },
696
+ .driver_data = (void *)(SERIO_QUIRK_NOLOOP)
697
+ },
698
+ {
699
+ .matches = {
700
+ DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
701
+ DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv9700"),
702
+ DMI_MATCH(DMI_PRODUCT_VERSION, "Rev 1"),
703
+ },
704
+ .driver_data = (void *)(SERIO_QUIRK_NOLOOP)
705
+ },
706
+ {
707
+ /*
708
+ * HP Pavilion DV4017EA -
709
+ * errors on MUX ports are reported without raising AUXDATA
710
+ * causing "spurious NAK" messages.
711
+ */
712
+ .matches = {
713
+ DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
714
+ DMI_MATCH(DMI_PRODUCT_NAME, "Pavilion dv4000 (EA032EA#ABF)"),
715
+ },
716
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX)
717
+ },
718
+ {
719
+ /*
720
+ * HP Pavilion ZT1000 -
721
+ * like DV4017EA does not raise AUXERR for errors on MUX ports.
722
+ */
723
+ .matches = {
724
+ DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
725
+ DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion Notebook PC"),
726
+ DMI_MATCH(DMI_PRODUCT_VERSION, "HP Pavilion Notebook ZT1000"),
727
+ },
728
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX)
729
+ },
730
+ {
731
+ /*
732
+ * HP Pavilion DV4270ca -
733
+ * like DV4017EA does not raise AUXERR for errors on MUX ports.
734
+ */
735
+ .matches = {
736
+ DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
737
+ DMI_MATCH(DMI_PRODUCT_NAME, "Pavilion dv4000 (EH476UA#ABL)"),
738
+ },
739
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX)
740
+ },
741
+ {
742
+ /* Newer HP Pavilion dv4 models */
743
+ .matches = {
744
+ DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
745
+ DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv4 Notebook PC"),
746
+ },
747
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_NOTIMEOUT)
748
+ },
749
+ {
750
+ /* IBM 2656 */
751
+ .matches = {
752
+ DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
753
+ DMI_MATCH(DMI_PRODUCT_NAME, "2656"),
754
+ },
755
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX)
756
+ },
757
+ {
758
+ /* Avatar AVIU-145A6 */
759
+ .matches = {
760
+ DMI_MATCH(DMI_SYS_VENDOR, "Intel"),
761
+ DMI_MATCH(DMI_PRODUCT_NAME, "IC4I"),
762
+ },
763
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX)
764
+ },
765
+ {
766
+ /* Intel MBO Desktop D845PESV */
767
+ .matches = {
768
+ DMI_MATCH(DMI_BOARD_VENDOR, "Intel Corporation"),
769
+ DMI_MATCH(DMI_BOARD_NAME, "D845PESV"),
770
+ },
771
+ .driver_data = (void *)(SERIO_QUIRK_NOPNP)
772
+ },
773
+ {
774
+ /*
775
+ * Intel NUC D54250WYK - does not have i8042 controller but
776
+ * declares PS/2 devices in DSDT.
777
+ */
778
+ .matches = {
779
+ DMI_MATCH(DMI_BOARD_VENDOR, "Intel Corporation"),
780
+ DMI_MATCH(DMI_BOARD_NAME, "D54250WYK"),
781
+ },
782
+ .driver_data = (void *)(SERIO_QUIRK_NOPNP)
783
+ },
784
+ {
785
+ /* Lenovo 3000 n100 */
786
+ .matches = {
787
+ DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
788
+ DMI_MATCH(DMI_PRODUCT_NAME, "076804U"),
789
+ },
790
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX)
791
+ },
792
+ {
793
+ /* Lenovo XiaoXin Air 12 */
794
+ .matches = {
795
+ DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
796
+ DMI_MATCH(DMI_PRODUCT_NAME, "80UN"),
797
+ },
798
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX)
799
+ },
800
+ {
801
+ /* Lenovo LaVie Z */
802
+ .matches = {
803
+ DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
804
+ DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo LaVie Z"),
805
+ },
806
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX)
807
+ },
808
+ {
809
+ /* Lenovo Ideapad U455 */
810
+ .matches = {
811
+ DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
812
+ DMI_MATCH(DMI_PRODUCT_NAME, "20046"),
813
+ },
814
+ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS)
815
+ },
816
+ {
817
+ /* Lenovo ThinkPad L460 */
818
+ .matches = {
819
+ DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
820
+ DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad L460"),
821
+ },
822
+ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS)
823
+ },
824
+ {
825
+ /* Lenovo ThinkPad Twist S230u */
826
+ .matches = {
827
+ DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
828
+ DMI_MATCH(DMI_PRODUCT_NAME, "33474HU"),
829
+ },
830
+ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS)
831
+ },
832
+ {
833
+ /* LG Electronics X110 */
834
+ .matches = {
835
+ DMI_MATCH(DMI_BOARD_VENDOR, "LG Electronics Inc."),
836
+ DMI_MATCH(DMI_BOARD_NAME, "X110"),
837
+ },
838
+ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS)
839
+ },
840
+ {
841
+ /* Medion Akoya Mini E1210 */
842
+ .matches = {
843
+ DMI_MATCH(DMI_SYS_VENDOR, "MEDION"),
844
+ DMI_MATCH(DMI_PRODUCT_NAME, "E1210"),
845
+ },
846
+ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS)
847
+ },
848
+ {
849
+ /* Medion Akoya E1222 */
850
+ .matches = {
851
+ DMI_MATCH(DMI_SYS_VENDOR, "MEDION"),
852
+ DMI_MATCH(DMI_PRODUCT_NAME, "E122X"),
853
+ },
854
+ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS)
855
+ },
856
+ {
857
+ /* MSI Wind U-100 */
858
+ .matches = {
859
+ DMI_MATCH(DMI_BOARD_VENDOR, "MICRO-STAR INTERNATIONAL CO., LTD"),
860
+ DMI_MATCH(DMI_BOARD_NAME, "U-100"),
861
+ },
862
+ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS | SERIO_QUIRK_NOPNP)
863
+ },
864
+ {
865
+ /*
866
+ * No data is coming from the touchscreen unless KBC
867
+ * is in legacy mode.
868
+ */
869
+ /* Panasonic CF-29 */
870
+ .matches = {
871
+ DMI_MATCH(DMI_SYS_VENDOR, "Matsushita"),
872
+ DMI_MATCH(DMI_PRODUCT_NAME, "CF-29"),
873
+ },
874
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX)
875
+ },
876
+ {
877
+ /* Medion Akoya E7225 */
878
+ .matches = {
879
+ DMI_MATCH(DMI_SYS_VENDOR, "Medion"),
880
+ DMI_MATCH(DMI_PRODUCT_NAME, "Akoya E7225"),
881
+ DMI_MATCH(DMI_PRODUCT_VERSION, "1.0"),
882
+ },
883
+ .driver_data = (void *)(SERIO_QUIRK_NOLOOP)
884
+ },
885
+ {
886
+ /* Microsoft Virtual Machine */
887
+ .matches = {
888
+ DMI_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"),
889
+ DMI_MATCH(DMI_PRODUCT_NAME, "Virtual Machine"),
890
+ DMI_MATCH(DMI_PRODUCT_VERSION, "VS2005R2"),
891
+ },
892
+ .driver_data = (void *)(SERIO_QUIRK_NOLOOP)
893
+ },
894
+ {
895
+ /* Medion MAM 2070 */
896
+ .matches = {
897
+ DMI_MATCH(DMI_SYS_VENDOR, "Notebook"),
898
+ DMI_MATCH(DMI_PRODUCT_NAME, "MAM 2070"),
899
+ DMI_MATCH(DMI_PRODUCT_VERSION, "5a"),
900
+ },
901
+ .driver_data = (void *)(SERIO_QUIRK_NOLOOP)
902
+ },
903
+ {
904
+ /* TUXEDO BU1406 */
905
+ .matches = {
906
+ DMI_MATCH(DMI_SYS_VENDOR, "Notebook"),
907
+ DMI_MATCH(DMI_PRODUCT_NAME, "N24_25BU"),
908
+ },
909
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX)
910
+ },
911
+ {
912
+ /* Clevo P650RS, 650RP6, Sager NP8152-S, and others */
913
+ .matches = {
914
+ DMI_MATCH(DMI_SYS_VENDOR, "Notebook"),
915
+ DMI_MATCH(DMI_PRODUCT_NAME, "P65xRP"),
916
+ },
917
+ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS)
918
+ },
919
+ {
920
+ /* OQO Model 01 */
921
+ .matches = {
922
+ DMI_MATCH(DMI_SYS_VENDOR, "OQO"),
923
+ DMI_MATCH(DMI_PRODUCT_NAME, "ZEPTO"),
924
+ DMI_MATCH(DMI_PRODUCT_VERSION, "00"),
925
+ },
926
+ .driver_data = (void *)(SERIO_QUIRK_NOLOOP)
927
+ },
928
+ {
929
+ .matches = {
930
+ DMI_MATCH(DMI_SYS_VENDOR, "PEGATRON CORPORATION"),
931
+ DMI_MATCH(DMI_PRODUCT_NAME, "C15B"),
932
+ },
933
+ .driver_data = (void *)(SERIO_QUIRK_NOLOOP)
934
+ },
935
+ {
936
+ /* Acer Aspire 5 A515 */
937
+ .matches = {
938
+ DMI_MATCH(DMI_BOARD_VENDOR, "PK"),
939
+ DMI_MATCH(DMI_BOARD_NAME, "Grumpy_PK"),
940
+ },
941
+ .driver_data = (void *)(SERIO_QUIRK_NOPNP)
942
+ },
943
+ {
944
+ /* ULI EV4873 - AUX LOOP does not work properly */
945
+ .matches = {
946
+ DMI_MATCH(DMI_SYS_VENDOR, "ULI"),
947
+ DMI_MATCH(DMI_PRODUCT_NAME, "EV4873"),
948
+ DMI_MATCH(DMI_PRODUCT_VERSION, "5a"),
949
+ },
950
+ .driver_data = (void *)(SERIO_QUIRK_NOLOOP)
951
+ },
952
+ {
953
+ /*
954
+ * Arima-Rioworks HDAMB -
955
+ * AUX LOOP command does not raise AUX IRQ
956
+ */
957
+ .matches = {
958
+ DMI_MATCH(DMI_BOARD_VENDOR, "RIOWORKS"),
959
+ DMI_MATCH(DMI_BOARD_NAME, "HDAMB"),
960
+ DMI_MATCH(DMI_BOARD_VERSION, "Rev E"),
961
+ },
962
+ .driver_data = (void *)(SERIO_QUIRK_NOLOOP)
963
+ },
964
+ {
965
+ /* Sharp Actius MM20 */
966
+ .matches = {
967
+ DMI_MATCH(DMI_SYS_VENDOR, "SHARP"),
968
+ DMI_MATCH(DMI_PRODUCT_NAME, "PC-MM20 Series"),
969
+ },
970
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX)
971
+ },
972
+ {
973
+ /*
974
+ * Sony Vaio FZ-240E -
975
+ * reset and GET ID commands issued via KBD port are
976
+ * sometimes being delivered to AUX3.
977
+ */
978
+ .matches = {
979
+ DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
980
+ DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FZ240E"),
981
+ },
982
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX)
983
+ },
984
+ {
985
+ /*
986
+ * Most (all?) VAIOs do not have external PS/2 ports nor
987
+ * they implement active multiplexing properly, and
988
+ * MUX discovery usually messes up keyboard/touchpad.
989
+ */
990
+ .matches = {
991
+ DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
992
+ DMI_MATCH(DMI_BOARD_NAME, "VAIO"),
993
+ },
994
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX)
995
+ },
996
+ {
997
+ /* Sony Vaio FS-115b */
998
+ .matches = {
999
+ DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
1000
+ DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FS115B"),
1001
+ },
1002
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX)
1003
+ },
5761004 {
5771005 /*
5781006 * Sony Vaio VGN-CS series require MUX or the touch sensor
....@@ -582,111 +1010,51 @@
5821010 DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
5831011 DMI_MATCH(DMI_PRODUCT_NAME, "VGN-CS"),
5841012 },
585
- },
586
- { }
587
-};
588
-
589
-/*
590
- * On some Asus laptops, just running self tests cause problems.
591
- */
592
-static const struct dmi_system_id i8042_dmi_noselftest_table[] = {
593
- {
594
- .matches = {
595
- DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
596
- DMI_MATCH(DMI_CHASSIS_TYPE, "10"), /* Notebook */
597
- },
598
- }, {
599
- .matches = {
600
- DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
601
- DMI_MATCH(DMI_CHASSIS_TYPE, "31"), /* Convertible Notebook */
602
- },
603
- },
604
- { }
605
-};
606
-static const struct dmi_system_id __initconst i8042_dmi_reset_table[] = {
607
- {
608
- /* MSI Wind U-100 */
609
- .matches = {
610
- DMI_MATCH(DMI_BOARD_NAME, "U-100"),
611
- DMI_MATCH(DMI_BOARD_VENDOR, "MICRO-STAR INTERNATIONAL CO., LTD"),
612
- },
613
- },
614
- {
615
- /* LG Electronics X110 */
616
- .matches = {
617
- DMI_MATCH(DMI_BOARD_NAME, "X110"),
618
- DMI_MATCH(DMI_BOARD_VENDOR, "LG Electronics Inc."),
619
- },
620
- },
621
- {
622
- /* Acer Aspire One 150 */
623
- .matches = {
624
- DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
625
- DMI_MATCH(DMI_PRODUCT_NAME, "AOA150"),
626
- },
1013
+ .driver_data = (void *)(SERIO_QUIRK_FORCEMUX)
6271014 },
6281015 {
6291016 .matches = {
630
- DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
631
- DMI_MATCH(DMI_PRODUCT_NAME, "Aspire A114-31"),
1017
+ DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
1018
+ DMI_MATCH(DMI_PRODUCT_NAME, "Satellite P10"),
6321019 },
1020
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX)
6331021 },
6341022 {
6351023 .matches = {
636
- DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
637
- DMI_MATCH(DMI_PRODUCT_NAME, "Aspire A314-31"),
1024
+ DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
1025
+ DMI_MATCH(DMI_PRODUCT_NAME, "EQUIUM A110"),
6381026 },
1027
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX)
6391028 },
6401029 {
6411030 .matches = {
642
- DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
643
- DMI_MATCH(DMI_PRODUCT_NAME, "Aspire A315-31"),
1031
+ DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
1032
+ DMI_MATCH(DMI_PRODUCT_NAME, "SATELLITE C850D"),
6441033 },
1034
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX)
1035
+ },
1036
+ /*
1037
+ * A lot of modern Clevo barebones have touchpad and/or keyboard issues
1038
+ * after suspend fixable with nomux + reset + noloop + nopnp. Luckily,
1039
+ * none of them have an external PS/2 port so this can safely be set for
1040
+ * all of them. These two are based on a Clevo design, but have the
1041
+ * board_name changed.
1042
+ */
1043
+ {
1044
+ .matches = {
1045
+ DMI_MATCH(DMI_BOARD_VENDOR, "TUXEDO"),
1046
+ DMI_MATCH(DMI_BOARD_NAME, "AURA1501"),
1047
+ },
1048
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS |
1049
+ SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP)
6451050 },
6461051 {
6471052 .matches = {
648
- DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
649
- DMI_MATCH(DMI_PRODUCT_NAME, "Aspire ES1-132"),
1053
+ DMI_MATCH(DMI_BOARD_VENDOR, "TUXEDO"),
1054
+ DMI_MATCH(DMI_BOARD_NAME, "EDUBOOK1502"),
6501055 },
651
- },
652
- {
653
- .matches = {
654
- DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
655
- DMI_MATCH(DMI_PRODUCT_NAME, "Aspire ES1-332"),
656
- },
657
- },
658
- {
659
- .matches = {
660
- DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
661
- DMI_MATCH(DMI_PRODUCT_NAME, "Aspire ES1-432"),
662
- },
663
- },
664
- {
665
- .matches = {
666
- DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
667
- DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate Spin B118-RN"),
668
- },
669
- },
670
- {
671
- /* Advent 4211 */
672
- .matches = {
673
- DMI_MATCH(DMI_SYS_VENDOR, "DIXONSXP"),
674
- DMI_MATCH(DMI_PRODUCT_NAME, "Advent 4211"),
675
- },
676
- },
677
- {
678
- /* Medion Akoya Mini E1210 */
679
- .matches = {
680
- DMI_MATCH(DMI_SYS_VENDOR, "MEDION"),
681
- DMI_MATCH(DMI_PRODUCT_NAME, "E1210"),
682
- },
683
- },
684
- {
685
- /* Medion Akoya E1222 */
686
- .matches = {
687
- DMI_MATCH(DMI_SYS_VENDOR, "MEDION"),
688
- DMI_MATCH(DMI_PRODUCT_NAME, "E122X"),
689
- },
1056
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS |
1057
+ SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP)
6901058 },
6911059 {
6921060 /* Mivvy M310 */
....@@ -694,104 +1062,154 @@
6941062 DMI_MATCH(DMI_SYS_VENDOR, "VIOOO"),
6951063 DMI_MATCH(DMI_PRODUCT_NAME, "N10"),
6961064 },
1065
+ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS)
1066
+ },
1067
+ /*
1068
+ * Some laptops need keyboard reset before probing for the trackpad to get
1069
+ * it detected, initialised & finally work.
1070
+ */
1071
+ {
1072
+ /* Schenker XMG C504 - Elantech touchpad */
1073
+ .matches = {
1074
+ DMI_MATCH(DMI_SYS_VENDOR, "XMG"),
1075
+ DMI_MATCH(DMI_PRODUCT_NAME, "C504"),
1076
+ },
1077
+ .driver_data = (void *)(SERIO_QUIRK_KBDRESET)
6971078 },
6981079 {
699
- /* Dell Vostro 1320 */
1080
+ /* Blue FB5601 */
7001081 .matches = {
701
- DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
702
- DMI_MATCH(DMI_PRODUCT_NAME, "Vostro 1320"),
1082
+ DMI_MATCH(DMI_SYS_VENDOR, "blue"),
1083
+ DMI_MATCH(DMI_PRODUCT_NAME, "FB5601"),
1084
+ DMI_MATCH(DMI_PRODUCT_VERSION, "M606"),
7031085 },
1086
+ .driver_data = (void *)(SERIO_QUIRK_NOLOOP)
1087
+ },
1088
+ /*
1089
+ * A lot of modern Clevo barebones have touchpad and/or keyboard issues
1090
+ * after suspend fixable with nomux + reset + noloop + nopnp. Luckily,
1091
+ * none of them have an external PS/2 port so this can safely be set for
1092
+ * all of them.
1093
+ * Clevo barebones come with board_vendor and/or system_vendor set to
1094
+ * either the very generic string "Notebook" and/or a different value
1095
+ * for each individual reseller. The only somewhat universal way to
1096
+ * identify them is by board_name.
1097
+ */
1098
+ {
1099
+ .matches = {
1100
+ DMI_MATCH(DMI_BOARD_NAME, "LAPQC71A"),
1101
+ },
1102
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS |
1103
+ SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP)
7041104 },
7051105 {
706
- /* Dell Vostro 1520 */
7071106 .matches = {
708
- DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
709
- DMI_MATCH(DMI_PRODUCT_NAME, "Vostro 1520"),
1107
+ DMI_MATCH(DMI_BOARD_NAME, "LAPQC71B"),
7101108 },
1109
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS |
1110
+ SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP)
7111111 },
7121112 {
713
- /* Dell Vostro 1720 */
7141113 .matches = {
715
- DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
716
- DMI_MATCH(DMI_PRODUCT_NAME, "Vostro 1720"),
1114
+ DMI_MATCH(DMI_BOARD_NAME, "N140CU"),
7171115 },
1116
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS |
1117
+ SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP)
7181118 },
7191119 {
720
- /* Lenovo Ideapad U455 */
7211120 .matches = {
722
- DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
723
- DMI_MATCH(DMI_PRODUCT_NAME, "20046"),
1121
+ DMI_MATCH(DMI_BOARD_NAME, "N141CU"),
7241122 },
1123
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS |
1124
+ SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP)
7251125 },
7261126 {
727
- /* Lenovo ThinkPad L460 */
7281127 .matches = {
729
- DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
730
- DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad L460"),
1128
+ DMI_MATCH(DMI_BOARD_NAME, "NH5xAx"),
7311129 },
1130
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS |
1131
+ SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP)
7321132 },
7331133 {
734
- /* Clevo P650RS, 650RP6, Sager NP8152-S, and others */
7351134 .matches = {
736
- DMI_MATCH(DMI_SYS_VENDOR, "Notebook"),
737
- DMI_MATCH(DMI_PRODUCT_NAME, "P65xRP"),
1135
+ DMI_MATCH(DMI_BOARD_NAME, "NL5xRU"),
7381136 },
1137
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS |
1138
+ SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP)
1139
+ },
1140
+ /*
1141
+ * At least one modern Clevo barebone has the touchpad connected both
1142
+ * via PS/2 and i2c interface. This causes a race condition between the
1143
+ * psmouse and i2c-hid driver. Since the full capability of the touchpad
1144
+ * is available via the i2c interface and the device has no external
1145
+ * PS/2 port, it is safe to just ignore all ps2 mouses here to avoid
1146
+ * this issue. The known affected device is the
1147
+ * TUXEDO InfinityBook S17 Gen6 / Clevo NS70MU which comes with one of
1148
+ * the two different dmi strings below. NS50MU is not a typo!
1149
+ */
1150
+ {
1151
+ .matches = {
1152
+ DMI_MATCH(DMI_BOARD_NAME, "NS50MU"),
1153
+ },
1154
+ .driver_data = (void *)(SERIO_QUIRK_NOAUX | SERIO_QUIRK_NOMUX |
1155
+ SERIO_QUIRK_RESET_ALWAYS | SERIO_QUIRK_NOLOOP |
1156
+ SERIO_QUIRK_NOPNP)
7391157 },
7401158 {
741
- /* Lenovo ThinkPad Twist S230u */
7421159 .matches = {
743
- DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
744
- DMI_MATCH(DMI_PRODUCT_NAME, "33474HU"),
1160
+ DMI_MATCH(DMI_BOARD_NAME, "NS50_70MU"),
7451161 },
1162
+ .driver_data = (void *)(SERIO_QUIRK_NOAUX | SERIO_QUIRK_NOMUX |
1163
+ SERIO_QUIRK_RESET_ALWAYS | SERIO_QUIRK_NOLOOP |
1164
+ SERIO_QUIRK_NOPNP)
7461165 },
7471166 {
748
- /* Entroware Proteus */
7491167 .matches = {
750
- DMI_MATCH(DMI_SYS_VENDOR, "Entroware"),
751
- DMI_MATCH(DMI_PRODUCT_NAME, "Proteus"),
752
- DMI_MATCH(DMI_PRODUCT_VERSION, "EL07R4"),
1168
+ DMI_MATCH(DMI_BOARD_NAME, "NJ50_70CU"),
7531169 },
1170
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS |
1171
+ SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP)
1172
+ },
1173
+ {
1174
+ .matches = {
1175
+ DMI_MATCH(DMI_BOARD_NAME, "PB50_70DFx,DDx"),
1176
+ },
1177
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS |
1178
+ SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP)
1179
+ },
1180
+ {
1181
+ .matches = {
1182
+ DMI_MATCH(DMI_BOARD_NAME, "PCX0DX"),
1183
+ },
1184
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS |
1185
+ SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP)
1186
+ },
1187
+ /* See comment on TUXEDO InfinityBook S17 Gen6 / Clevo NS70MU above */
1188
+ {
1189
+ .matches = {
1190
+ DMI_MATCH(DMI_BOARD_NAME, "PD5x_7xPNP_PNR_PNN_PNT"),
1191
+ },
1192
+ .driver_data = (void *)(SERIO_QUIRK_NOAUX)
1193
+ },
1194
+ {
1195
+ .matches = {
1196
+ DMI_MATCH(DMI_BOARD_NAME, "X170SM"),
1197
+ },
1198
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS |
1199
+ SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP)
1200
+ },
1201
+ {
1202
+ .matches = {
1203
+ DMI_MATCH(DMI_BOARD_NAME, "X170KM-G"),
1204
+ },
1205
+ .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS |
1206
+ SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP)
7541207 },
7551208 { }
7561209 };
7571210
7581211 #ifdef CONFIG_PNP
759
-static const struct dmi_system_id __initconst i8042_dmi_nopnp_table[] = {
760
- {
761
- /* Intel MBO Desktop D845PESV */
762
- .matches = {
763
- DMI_MATCH(DMI_BOARD_NAME, "D845PESV"),
764
- DMI_MATCH(DMI_BOARD_VENDOR, "Intel Corporation"),
765
- },
766
- },
767
- {
768
- /*
769
- * Intel NUC D54250WYK - does not have i8042 controller but
770
- * declares PS/2 devices in DSDT.
771
- */
772
- .matches = {
773
- DMI_MATCH(DMI_BOARD_NAME, "D54250WYK"),
774
- DMI_MATCH(DMI_BOARD_VENDOR, "Intel Corporation"),
775
- },
776
- },
777
- {
778
- /* MSI Wind U-100 */
779
- .matches = {
780
- DMI_MATCH(DMI_BOARD_NAME, "U-100"),
781
- DMI_MATCH(DMI_BOARD_VENDOR, "MICRO-STAR INTERNATIONAL CO., LTD"),
782
- },
783
- },
784
- {
785
- /* Acer Aspire 5 A515 */
786
- .matches = {
787
- DMI_MATCH(DMI_BOARD_NAME, "Grumpy_PK"),
788
- DMI_MATCH(DMI_BOARD_VENDOR, "PK"),
789
- },
790
- },
791
- { }
792
-};
793
-
794
-static const struct dmi_system_id __initconst i8042_dmi_laptop_table[] = {
1212
+static const struct dmi_system_id i8042_dmi_laptop_table[] __initconst = {
7951213 {
7961214 .matches = {
7971215 DMI_MATCH(DMI_CHASSIS_TYPE, "8"), /* Portable */
....@@ -815,203 +1233,6 @@
8151233 { }
8161234 };
8171235 #endif
818
-
819
-static const struct dmi_system_id __initconst i8042_dmi_notimeout_table[] = {
820
- {
821
- /* Dell Vostro V13 */
822
- .matches = {
823
- DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
824
- DMI_MATCH(DMI_PRODUCT_NAME, "Vostro V13"),
825
- },
826
- },
827
- {
828
- /* Newer HP Pavilion dv4 models */
829
- .matches = {
830
- DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
831
- DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv4 Notebook PC"),
832
- },
833
- },
834
- {
835
- /* Fujitsu A544 laptop */
836
- /* https://bugzilla.redhat.com/show_bug.cgi?id=1111138 */
837
- .matches = {
838
- DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
839
- DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK A544"),
840
- },
841
- },
842
- {
843
- /* Fujitsu AH544 laptop */
844
- /* https://bugzilla.kernel.org/show_bug.cgi?id=69731 */
845
- .matches = {
846
- DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
847
- DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK AH544"),
848
- },
849
- },
850
- {
851
- /* Fujitsu Lifebook T725 laptop */
852
- .matches = {
853
- DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
854
- DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK T725"),
855
- },
856
- },
857
- {
858
- /* Fujitsu U574 laptop */
859
- /* https://bugzilla.kernel.org/show_bug.cgi?id=69731 */
860
- .matches = {
861
- DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
862
- DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK U574"),
863
- },
864
- },
865
- {
866
- /* Fujitsu UH554 laptop */
867
- .matches = {
868
- DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
869
- DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK UH544"),
870
- },
871
- },
872
- { }
873
-};
874
-
875
-/*
876
- * Some Wistron based laptops need us to explicitly enable the 'Dritek
877
- * keyboard extension' to make their extra keys start generating scancodes.
878
- * Originally, this was just confined to older laptops, but a few Acer laptops
879
- * have turned up in 2007 that also need this again.
880
- */
881
-static const struct dmi_system_id __initconst i8042_dmi_dritek_table[] = {
882
- {
883
- /* Acer Aspire 5100 */
884
- .matches = {
885
- DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
886
- DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5100"),
887
- },
888
- },
889
- {
890
- /* Acer Aspire 5610 */
891
- .matches = {
892
- DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
893
- DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5610"),
894
- },
895
- },
896
- {
897
- /* Acer Aspire 5630 */
898
- .matches = {
899
- DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
900
- DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5630"),
901
- },
902
- },
903
- {
904
- /* Acer Aspire 5650 */
905
- .matches = {
906
- DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
907
- DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5650"),
908
- },
909
- },
910
- {
911
- /* Acer Aspire 5680 */
912
- .matches = {
913
- DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
914
- DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5680"),
915
- },
916
- },
917
- {
918
- /* Acer Aspire 5720 */
919
- .matches = {
920
- DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
921
- DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5720"),
922
- },
923
- },
924
- {
925
- /* Acer Aspire 9110 */
926
- .matches = {
927
- DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
928
- DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 9110"),
929
- },
930
- },
931
- {
932
- /* Acer TravelMate 660 */
933
- .matches = {
934
- DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
935
- DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 660"),
936
- },
937
- },
938
- {
939
- /* Acer TravelMate 2490 */
940
- .matches = {
941
- DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
942
- DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 2490"),
943
- },
944
- },
945
- {
946
- /* Acer TravelMate 4280 */
947
- .matches = {
948
- DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
949
- DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 4280"),
950
- },
951
- },
952
- { }
953
-};
954
-
955
-/*
956
- * Some laptops need keyboard reset before probing for the trackpad to get
957
- * it detected, initialised & finally work.
958
- */
959
-static const struct dmi_system_id __initconst i8042_dmi_kbdreset_table[] = {
960
- {
961
- /* Gigabyte P35 v2 - Elantech touchpad */
962
- .matches = {
963
- DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"),
964
- DMI_MATCH(DMI_PRODUCT_NAME, "P35V2"),
965
- },
966
- },
967
- {
968
- /* Aorus branded Gigabyte X3 Plus - Elantech touchpad */
969
- .matches = {
970
- DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"),
971
- DMI_MATCH(DMI_PRODUCT_NAME, "X3"),
972
- },
973
- },
974
- {
975
- /* Gigabyte P34 - Elantech touchpad */
976
- .matches = {
977
- DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"),
978
- DMI_MATCH(DMI_PRODUCT_NAME, "P34"),
979
- },
980
- },
981
- {
982
- /* Gigabyte P57 - Elantech touchpad */
983
- .matches = {
984
- DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"),
985
- DMI_MATCH(DMI_PRODUCT_NAME, "P57"),
986
- },
987
- },
988
- {
989
- /* Schenker XMG C504 - Elantech touchpad */
990
- .matches = {
991
- DMI_MATCH(DMI_SYS_VENDOR, "XMG"),
992
- DMI_MATCH(DMI_PRODUCT_NAME, "C504"),
993
- },
994
- },
995
- { }
996
-};
997
-
998
-static const struct dmi_system_id i8042_dmi_probe_defer_table[] __initconst = {
999
- {
1000
- /* ASUS ZenBook UX425UA */
1001
- .matches = {
1002
- DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
1003
- DMI_MATCH(DMI_PRODUCT_NAME, "ZenBook UX425UA"),
1004
- },
1005
- },
1006
- {
1007
- /* ASUS ZenBook UM325UA */
1008
- .matches = {
1009
- DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
1010
- DMI_MATCH(DMI_PRODUCT_NAME, "ZenBook UX325UA_UM325UA"),
1011
- },
1012
- },
1013
- { }
1014
-};
10151236
10161237 #endif /* CONFIG_X86 */
10171238
....@@ -1167,11 +1388,6 @@
11671388 bool pnp_data_busted = false;
11681389 int err;
11691390
1170
-#ifdef CONFIG_X86
1171
- if (dmi_check_system(i8042_dmi_nopnp_table))
1172
- i8042_nopnp = true;
1173
-#endif
1174
-
11751391 if (i8042_nopnp) {
11761392 pr_info("PNP detection disabled\n");
11771393 return 0;
....@@ -1275,6 +1491,59 @@
12751491 static inline void i8042_pnp_exit(void) { }
12761492 #endif /* CONFIG_PNP */
12771493
1494
+
1495
+#ifdef CONFIG_X86
1496
+static void __init i8042_check_quirks(void)
1497
+{
1498
+ const struct dmi_system_id *device_quirk_info;
1499
+ uintptr_t quirks;
1500
+
1501
+ device_quirk_info = dmi_first_match(i8042_dmi_quirk_table);
1502
+ if (!device_quirk_info)
1503
+ return;
1504
+
1505
+ quirks = (uintptr_t)device_quirk_info->driver_data;
1506
+
1507
+ if (quirks & SERIO_QUIRK_NOKBD)
1508
+ i8042_nokbd = true;
1509
+ if (quirks & SERIO_QUIRK_NOAUX)
1510
+ i8042_noaux = true;
1511
+ if (quirks & SERIO_QUIRK_NOMUX)
1512
+ i8042_nomux = true;
1513
+ if (quirks & SERIO_QUIRK_FORCEMUX)
1514
+ i8042_nomux = false;
1515
+ if (quirks & SERIO_QUIRK_UNLOCK)
1516
+ i8042_unlock = true;
1517
+ if (quirks & SERIO_QUIRK_PROBE_DEFER)
1518
+ i8042_probe_defer = true;
1519
+ /* Honor module parameter when value is not default */
1520
+ if (i8042_reset == I8042_RESET_DEFAULT) {
1521
+ if (quirks & SERIO_QUIRK_RESET_ALWAYS)
1522
+ i8042_reset = I8042_RESET_ALWAYS;
1523
+ if (quirks & SERIO_QUIRK_RESET_NEVER)
1524
+ i8042_reset = I8042_RESET_NEVER;
1525
+ }
1526
+ if (quirks & SERIO_QUIRK_DIECT)
1527
+ i8042_direct = true;
1528
+ if (quirks & SERIO_QUIRK_DUMBKBD)
1529
+ i8042_dumbkbd = true;
1530
+ if (quirks & SERIO_QUIRK_NOLOOP)
1531
+ i8042_noloop = true;
1532
+ if (quirks & SERIO_QUIRK_NOTIMEOUT)
1533
+ i8042_notimeout = true;
1534
+ if (quirks & SERIO_QUIRK_KBDRESET)
1535
+ i8042_kbdreset = true;
1536
+ if (quirks & SERIO_QUIRK_DRITEK)
1537
+ i8042_dritek = true;
1538
+#ifdef CONFIG_PNP
1539
+ if (quirks & SERIO_QUIRK_NOPNP)
1540
+ i8042_nopnp = true;
1541
+#endif
1542
+}
1543
+#else
1544
+static inline void i8042_check_quirks(void) {}
1545
+#endif
1546
+
12781547 static int __init i8042_platform_init(void)
12791548 {
12801549 int retval;
....@@ -1297,45 +1566,17 @@
12971566 i8042_kbd_irq = I8042_MAP_IRQ(1);
12981567 i8042_aux_irq = I8042_MAP_IRQ(12);
12991568
1569
+#if defined(__ia64__)
1570
+ i8042_reset = I8042_RESET_ALWAYS;
1571
+#endif
1572
+
1573
+ i8042_check_quirks();
1574
+
13001575 retval = i8042_pnp_init();
13011576 if (retval)
13021577 return retval;
13031578
1304
-#if defined(__ia64__)
1305
- i8042_reset = I8042_RESET_ALWAYS;
1306
-#endif
1307
-
13081579 #ifdef CONFIG_X86
1309
- /* Honor module parameter when value is not default */
1310
- if (i8042_reset == I8042_RESET_DEFAULT) {
1311
- if (dmi_check_system(i8042_dmi_reset_table))
1312
- i8042_reset = I8042_RESET_ALWAYS;
1313
-
1314
- if (dmi_check_system(i8042_dmi_noselftest_table))
1315
- i8042_reset = I8042_RESET_NEVER;
1316
- }
1317
-
1318
- if (dmi_check_system(i8042_dmi_noloop_table))
1319
- i8042_noloop = true;
1320
-
1321
- if (dmi_check_system(i8042_dmi_nomux_table))
1322
- i8042_nomux = true;
1323
-
1324
- if (dmi_check_system(i8042_dmi_forcemux_table))
1325
- i8042_nomux = false;
1326
-
1327
- if (dmi_check_system(i8042_dmi_notimeout_table))
1328
- i8042_notimeout = true;
1329
-
1330
- if (dmi_check_system(i8042_dmi_dritek_table))
1331
- i8042_dritek = true;
1332
-
1333
- if (dmi_check_system(i8042_dmi_kbdreset_table))
1334
- i8042_kbdreset = true;
1335
-
1336
- if (dmi_check_system(i8042_dmi_probe_defer_table))
1337
- i8042_probe_defer = true;
1338
-
13391580 /*
13401581 * A20 was already enabled during early kernel init. But some buggy
13411582 * BIOSes (in MSI Laptops) require A20 to be enabled using 8042 to
....@@ -1353,4 +1594,4 @@
13531594 i8042_pnp_exit();
13541595 }
13551596
1356
-#endif /* _I8042_X86IA64IO_H */
1597
+#endif /* _I8042_ACPIPNPIO_H */