Commit f8313ef1f448006207f12c107123522c8bc00f15
Committed by
Dmitry Torokhov
1 parent
93f38e9141
Exists in
master
and in
4 other branches
Input: i8042 - introduce 'notimeout' blacklist for Dell Vostro V13
i8042 controller present in Dell Vostro V13 errorneously signals spurious timeouts. Introduce i8042.notimeout parameter for ignoring i8042-signalled timeouts and apply this quirk automatically for Dell Vostro V13, based on DMI match. In addition to that, this machine also needs to be added to nomux blacklist. Signed-off-by: Jiri Kosina <jkosina@suse.cz> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
Showing 3 changed files with 27 additions and 1 deletions Side-by-side Diff
Documentation/kernel-parameters.txt
... | ... | @@ -884,6 +884,7 @@ |
884 | 884 | controller |
885 | 885 | i8042.nopnp [HW] Don't use ACPIPnP / PnPBIOS to discover KBD/AUX |
886 | 886 | controllers |
887 | + i8042.notimeout [HW] Ignore timeout condition signalled by conroller | |
887 | 888 | i8042.reset [HW] Reset the controller during init and cleanup |
888 | 889 | i8042.unlock [HW] Unlock (ignore) the keylock |
889 | 890 |
drivers/input/serio/i8042-x86ia64io.h
... | ... | @@ -424,6 +424,13 @@ |
424 | 424 | DMI_MATCH(DMI_PRODUCT_VERSION, "0100"), |
425 | 425 | }, |
426 | 426 | }, |
427 | + { | |
428 | + /* Dell Vostro V13 */ | |
429 | + .matches = { | |
430 | + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | |
431 | + DMI_MATCH(DMI_PRODUCT_NAME, "Vostro V13"), | |
432 | + }, | |
433 | + }, | |
427 | 434 | { } |
428 | 435 | }; |
429 | 436 | |
... | ... | @@ -545,6 +552,17 @@ |
545 | 552 | }; |
546 | 553 | #endif |
547 | 554 | |
555 | +static const struct dmi_system_id __initconst i8042_dmi_notimeout_table[] = { | |
556 | + { | |
557 | + /* Dell Vostro V13 */ | |
558 | + .matches = { | |
559 | + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | |
560 | + DMI_MATCH(DMI_PRODUCT_NAME, "Vostro V13"), | |
561 | + }, | |
562 | + }, | |
563 | + { } | |
564 | +}; | |
565 | + | |
548 | 566 | /* |
549 | 567 | * Some Wistron based laptops need us to explicitly enable the 'Dritek |
550 | 568 | * keyboard extension' to make their extra keys start generating scancodes. |
... | ... | @@ -895,6 +913,9 @@ |
895 | 913 | |
896 | 914 | if (dmi_check_system(i8042_dmi_nomux_table)) |
897 | 915 | i8042_nomux = true; |
916 | + | |
917 | + if (dmi_check_system(i8042_dmi_notimeout_table)) | |
918 | + i8042_notimeout = true; | |
898 | 919 | |
899 | 920 | if (dmi_check_system(i8042_dmi_dritek_table)) |
900 | 921 | i8042_dritek = true; |
drivers/input/serio/i8042.c
... | ... | @@ -63,6 +63,10 @@ |
63 | 63 | module_param_named(noloop, i8042_noloop, bool, 0); |
64 | 64 | MODULE_PARM_DESC(noloop, "Disable the AUX Loopback command while probing for the AUX port"); |
65 | 65 | |
66 | +static bool i8042_notimeout; | |
67 | +module_param_named(notimeout, i8042_notimeout, bool, 0); | |
68 | +MODULE_PARM_DESC(notimeout, "Ignore timeouts signalled by i8042"); | |
69 | + | |
66 | 70 | #ifdef CONFIG_X86 |
67 | 71 | static bool i8042_dritek; |
68 | 72 | module_param_named(dritek, i8042_dritek, bool, 0); |
... | ... | @@ -504,7 +508,7 @@ |
504 | 508 | } else { |
505 | 509 | |
506 | 510 | dfl = ((str & I8042_STR_PARITY) ? SERIO_PARITY : 0) | |
507 | - ((str & I8042_STR_TIMEOUT) ? SERIO_TIMEOUT : 0); | |
511 | + ((str & I8042_STR_TIMEOUT && !i8042_notimeout) ? SERIO_TIMEOUT : 0); | |
508 | 512 | |
509 | 513 | port_no = (str & I8042_STR_AUXDATA) ? |
510 | 514 | I8042_AUX_PORT_NO : I8042_KBD_PORT_NO; |