]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
Input: i8042 - introduce 'notimeout' blacklist for Dell Vostro V13
authorJiri Kosina <jkosina@suse.cz>
Sat, 8 Jan 2011 09:37:26 +0000 (01:37 -0800)
committerWilly Tarreau <w@1wt.eu>
Sat, 30 Apr 2011 14:52:58 +0000 (16:52 +0200)
commit f8313ef1f448006207f12c107123522c8bc00f15 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: Jiri Kosina <jkosina@suse.cz>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
Cc: Tim Gardner <tcanonical@tpi.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Documentation/kernel-parameters.txt
drivers/input/serio/i8042-x86ia64io.h
drivers/input/serio/i8042.c

index 792be8687b52ad0c9cf92ab0743ad01a01b51313..2b2691509d08980fc07b4c8371f68914f88693bb 100644 (file)
@@ -811,6 +811,7 @@ and is between 256 and 4096 characters. It is defined in the file
        i8042.panicblink=
                        [HW] Frequency with which keyboard LEDs should blink
                             when kernel panics (default is 0.5 sec)
+       i8042.notimeout [HW] Ignore timeout condition signalled by conroller
        i8042.reset     [HW] Reset the controller during init and cleanup
        i8042.unlock    [HW] Unlock (ignore) the keylock
 
index 29e686388a2c9a85732a028ede45d16e188087c8..6afa77df42408a54a010f252df0be6a5a5cee665 100644 (file)
@@ -430,6 +430,13 @@ static struct dmi_system_id __initdata i8042_dmi_dritek_table[] = {
                        DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 4280"),
                },
        },
+       {
+               /* Dell Vostro V13 */
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+                       DMI_MATCH(DMI_PRODUCT_NAME, "Vostro V13"),
+               },
+       },
        { }
 };
 
@@ -655,6 +662,17 @@ static int __init i8042_platform_init(void)
 {
        int retval;
 
+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"),
+               },
+       },
+       { }
+};
+
 /*
  * On ix86 platforms touching the i8042 data register region can do really
  * bad things. Because of this the region is always reserved on ix86 boxes.
@@ -681,6 +699,9 @@ static int __init i8042_platform_init(void)
        if (dmi_check_system(i8042_dmi_nomux_table))
                i8042_nomux = 1;
 
+       if (dmi_check_system(i8042_dmi_notimeout_table))
+               i8042_notimeout = true;
+
        if (dmi_check_system(i8042_dmi_dritek_table))
                i8042_dritek = 1;
 #endif /* CONFIG_X86 */
index 170f71ee5772cda51f08298ccf7dd779ffa14bba..008da66c553cda41bb678b698e730077c7ff4456 100644 (file)
@@ -63,6 +63,10 @@ static unsigned int i8042_blink_frequency = 500;
 module_param_named(panicblink, i8042_blink_frequency, uint, 0600);
 MODULE_PARM_DESC(panicblink, "Frequency with which keyboard LEDs should blink when kernel panics");
 
+static unsigned int i8042_notimeout;
+module_param_named(notimeout, i8042_notimeout, bool, 0);
+MODULE_PARM_DESC(notimeout, "Ignore timeouts signalled by i8042");
+
 #ifdef CONFIG_X86
 static unsigned int i8042_dritek;
 module_param_named(dritek, i8042_dritek, bool, 0);
@@ -362,7 +366,7 @@ static irqreturn_t i8042_interrupt(int irq, void *dev_id)
        } else {
 
                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) ?
                                I8042_AUX_PORT_NO : I8042_KBD_PORT_NO;