Commit f8313ef1f448006207f12c107123522c8bc00f15

Authored by Jiri Kosina
Committed by Dmitry Torokhov
1 parent 93f38e9141

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;