mirror of https://gitee.com/openkylin/linux.git
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>
This commit is contained in:
parent
93f38e9141
commit
f8313ef1f4
|
@ -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[] = {
|
||||||
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[] = {
|
||||||
};
|
};
|
||||||
#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.
|
||||||
|
@ -896,6 +914,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 */
|
||||||
|
|
|
@ -63,6 +63,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);
|
||||||
|
@ -504,7 +508,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;
|
||||||
|
|
Loading…
Reference in New Issue