diff options
| -rw-r--r-- | Documentation/kernel-parameters.txt | 1 | ||||
| -rw-r--r-- | drivers/input/serio/i8042-x86ia64io.h | 21 | ||||
| -rw-r--r-- | drivers/input/serio/i8042.c | 6 |
3 files changed, 27 insertions, 1 deletions
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index ed45e9802aa..185b6bf0fb8 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
| @@ -884,6 +884,7 @@ and is between 256 and 4096 characters. It is defined in the file | |||
| 884 | controller | 884 | controller |
| 885 | i8042.nopnp [HW] Don't use ACPIPnP / PnPBIOS to discover KBD/AUX | 885 | i8042.nopnp [HW] Don't use ACPIPnP / PnPBIOS to discover KBD/AUX |
| 886 | controllers | 886 | controllers |
| 887 | i8042.notimeout [HW] Ignore timeout condition signalled by conroller | ||
| 887 | i8042.reset [HW] Reset the controller during init and cleanup | 888 | i8042.reset [HW] Reset the controller during init and cleanup |
| 888 | i8042.unlock [HW] Unlock (ignore) the keylock | 889 | i8042.unlock [HW] Unlock (ignore) the keylock |
| 889 | 890 | ||
diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h index 5ae0fc4578f..bb9f5d31f0d 100644 --- a/drivers/input/serio/i8042-x86ia64io.h +++ b/drivers/input/serio/i8042-x86ia64io.h | |||
| @@ -424,6 +424,13 @@ static const struct dmi_system_id __initconst i8042_dmi_nomux_table[] = { | |||
| 424 | DMI_MATCH(DMI_PRODUCT_VERSION, "0100"), | 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 @@ static const struct dmi_system_id __initconst i8042_dmi_laptop_table[] = { | |||
| 545 | }; | 552 | }; |
| 546 | #endif | 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 | * Some Wistron based laptops need us to explicitly enable the 'Dritek | 567 | * Some Wistron based laptops need us to explicitly enable the 'Dritek |
| 550 | * keyboard extension' to make their extra keys start generating scancodes. | 568 | * keyboard extension' to make their extra keys start generating scancodes. |
| @@ -896,6 +914,9 @@ static int __init i8042_platform_init(void) | |||
| 896 | if (dmi_check_system(i8042_dmi_nomux_table)) | 914 | if (dmi_check_system(i8042_dmi_nomux_table)) |
| 897 | i8042_nomux = true; | 915 | i8042_nomux = true; |
| 898 | 916 | ||
| 917 | if (dmi_check_system(i8042_dmi_notimeout_table)) | ||
| 918 | i8042_notimeout = true; | ||
| 919 | |||
| 899 | if (dmi_check_system(i8042_dmi_dritek_table)) | 920 | if (dmi_check_system(i8042_dmi_dritek_table)) |
| 900 | i8042_dritek = true; | 921 | i8042_dritek = true; |
| 901 | #endif /* CONFIG_X86 */ | 922 | #endif /* CONFIG_X86 */ |
diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c index c04ff00a366..ac4c93689ab 100644 --- a/drivers/input/serio/i8042.c +++ b/drivers/input/serio/i8042.c | |||
| @@ -63,6 +63,10 @@ static bool i8042_noloop; | |||
| 63 | module_param_named(noloop, i8042_noloop, bool, 0); | 63 | module_param_named(noloop, i8042_noloop, bool, 0); |
| 64 | MODULE_PARM_DESC(noloop, "Disable the AUX Loopback command while probing for the AUX port"); | 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 | #ifdef CONFIG_X86 | 70 | #ifdef CONFIG_X86 |
| 67 | static bool i8042_dritek; | 71 | static bool i8042_dritek; |
| 68 | module_param_named(dritek, i8042_dritek, bool, 0); | 72 | module_param_named(dritek, i8042_dritek, bool, 0); |
| @@ -504,7 +508,7 @@ static irqreturn_t i8042_interrupt(int irq, void *dev_id) | |||
| 504 | } else { | 508 | } else { |
| 505 | 509 | ||
| 506 | dfl = ((str & I8042_STR_PARITY) ? SERIO_PARITY : 0) | | 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 | port_no = (str & I8042_STR_AUXDATA) ? | 513 | port_no = (str & I8042_STR_AUXDATA) ? |
| 510 | I8042_AUX_PORT_NO : I8042_KBD_PORT_NO; | 514 | I8042_AUX_PORT_NO : I8042_KBD_PORT_NO; |
