Commit b6b12578 authored by Jiri Kosina's avatar Jiri Kosina Committed by Greg Kroah-Hartman

Input: i8042 - introduce 'notimeout' blacklist for Dell Vostro V13

commit f8313ef1 upstream.

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: default avatarJiri Kosina <jkosina@suse.cz>
Signed-off-by: default avatarDmitry Torokhov <dtor@mail.ru>
Cc: Tim Gardner <tcanonical@tpi.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 407ccedf
...@@ -884,6 +884,7 @@ and is between 256 and 4096 characters. It is defined in the file ...@@ -884,6 +884,7 @@ and is between 256 and 4096 characters. It is defined in the file
controller controller
i8042.nopnp [HW] Don't use ACPIPnP / PnPBIOS to discover KBD/AUX i8042.nopnp [HW] Don't use ACPIPnP / PnPBIOS to discover KBD/AUX
controllers controllers
i8042.notimeout [HW] Ignore timeout condition signalled by conroller
i8042.reset [HW] Reset the controller during init and cleanup i8042.reset [HW] Reset the controller during init and cleanup
i8042.unlock [HW] Unlock (ignore) the keylock i8042.unlock [HW] Unlock (ignore) the keylock
......
...@@ -424,6 +424,13 @@ static const struct dmi_system_id __initconst i8042_dmi_nomux_table[] = { ...@@ -424,6 +424,13 @@ static const struct dmi_system_id __initconst i8042_dmi_nomux_table[] = {
DMI_MATCH(DMI_PRODUCT_VERSION, "0100"), DMI_MATCH(DMI_PRODUCT_VERSION, "0100"),
}, },
}, },
{
/* Dell Vostro V13 */
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
DMI_MATCH(DMI_PRODUCT_NAME, "Vostro V13"),
},
},
{ } { }
}; };
...@@ -545,6 +552,17 @@ static const struct dmi_system_id __initconst i8042_dmi_laptop_table[] = { ...@@ -545,6 +552,17 @@ static const struct dmi_system_id __initconst i8042_dmi_laptop_table[] = {
}; };
#endif #endif
static const struct dmi_system_id __initconst i8042_dmi_notimeout_table[] = {
{
/* Dell Vostro V13 */
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
DMI_MATCH(DMI_PRODUCT_NAME, "Vostro V13"),
},
},
{ }
};
/* /*
* Some Wistron based laptops need us to explicitly enable the 'Dritek * Some Wistron based laptops need us to explicitly enable the 'Dritek
* keyboard extension' to make their extra keys start generating scancodes. * keyboard extension' to make their extra keys start generating scancodes.
...@@ -897,6 +915,9 @@ static int __init i8042_platform_init(void) ...@@ -897,6 +915,9 @@ static int __init i8042_platform_init(void)
if (dmi_check_system(i8042_dmi_nomux_table)) if (dmi_check_system(i8042_dmi_nomux_table))
i8042_nomux = true; i8042_nomux = true;
if (dmi_check_system(i8042_dmi_notimeout_table))
i8042_notimeout = true;
if (dmi_check_system(i8042_dmi_dritek_table)) if (dmi_check_system(i8042_dmi_dritek_table))
i8042_dritek = true; i8042_dritek = true;
#endif /* CONFIG_X86 */ #endif /* CONFIG_X86 */
......
...@@ -61,6 +61,10 @@ static bool i8042_noloop; ...@@ -61,6 +61,10 @@ static bool i8042_noloop;
module_param_named(noloop, i8042_noloop, bool, 0); module_param_named(noloop, i8042_noloop, bool, 0);
MODULE_PARM_DESC(noloop, "Disable the AUX Loopback command while probing for the AUX port"); MODULE_PARM_DESC(noloop, "Disable the AUX Loopback command while probing for the AUX port");
static bool i8042_notimeout;
module_param_named(notimeout, i8042_notimeout, bool, 0);
MODULE_PARM_DESC(notimeout, "Ignore timeouts signalled by i8042");
#ifdef CONFIG_X86 #ifdef CONFIG_X86
static bool i8042_dritek; static bool i8042_dritek;
module_param_named(dritek, i8042_dritek, bool, 0); module_param_named(dritek, i8042_dritek, bool, 0);
...@@ -503,7 +507,7 @@ static irqreturn_t i8042_interrupt(int irq, void *dev_id) ...@@ -503,7 +507,7 @@ static irqreturn_t i8042_interrupt(int irq, void *dev_id)
} else { } else {
dfl = ((str & I8042_STR_PARITY) ? SERIO_PARITY : 0) | dfl = ((str & I8042_STR_PARITY) ? SERIO_PARITY : 0) |
((str & I8042_STR_TIMEOUT) ? SERIO_TIMEOUT : 0); ((str & I8042_STR_TIMEOUT && !i8042_notimeout) ? SERIO_TIMEOUT : 0);
port_no = (str & I8042_STR_AUXDATA) ? port_no = (str & I8042_STR_AUXDATA) ?
I8042_AUX_PORT_NO : I8042_KBD_PORT_NO; I8042_AUX_PORT_NO : I8042_KBD_PORT_NO;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment