Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=8987fec0de0a4b71dd345052ea4271eaf05f7956
Commit:     8987fec0de0a4b71dd345052ea4271eaf05f7956
Parent:     93e9012f40f75b8ab8a37deaf532b3c5e9b527c6
Author:     Carlos Corbacho <[EMAIL PROTECTED]>
AuthorDate: Mon Jan 21 01:04:40 2008 -0500
Committer:  Dmitry Torokhov <[EMAIL PROTECTED]>
CommitDate: Mon Jan 21 01:11:08 2008 -0500

    Input: i8042 - add Dritek keyboard extension quirk
    
    Some Wistron based laptops need us to explicitly enable the 'Dritek
    keyboard extension' to make their extra keys start generating scancodes.
    Originally, this was just confined to older laptops, but a few Acer
    laptops have turned up in 2007 that also need this again.
    
    Signed-off-by: Carlos Corbacho <[EMAIL PROTECTED]>
    Signed-off-by: Dmitry Torokhov <[EMAIL PROTECTED]>
---
 drivers/input/serio/i8042-x86ia64io.h |   49 +++++++++++++++++++++++++++++++++
 drivers/input/serio/i8042.c           |   14 +++++++++
 2 files changed, 63 insertions(+), 0 deletions(-)

diff --git a/drivers/input/serio/i8042-x86ia64io.h 
b/drivers/input/serio/i8042-x86ia64io.h
index c5e68dc..4f6384d 100644
--- a/drivers/input/serio/i8042-x86ia64io.h
+++ b/drivers/input/serio/i8042-x86ia64io.h
@@ -277,6 +277,50 @@ static struct dmi_system_id __initdata 
i8042_dmi_nomux_table[] = {
 
 #endif
 
+#ifdef CONFIG_X86
+
+#include <linux/dmi.h>
+
+/*
+ * Some Wistron based laptops need us to explicitly enable the 'Dritek
+ * keyboard extension' to make their extra keys start generating scancodes.
+ * Originally, this was just confined to older laptops, but a few Acer laptops
+ * have turned up in 2007 that also need this again.
+ */
+static struct dmi_system_id __initdata i8042_dmi_dritek_table[] = {
+       {
+               .ident = "Acer Aspire 5630",
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
+                       DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5630"),
+               },
+       },
+       {
+               .ident = "Acer Aspire 5650",
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
+                       DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5650"),
+               },
+       },
+       {
+               .ident = "Acer Aspire 5680",
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
+                       DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5680"),
+               },
+       },
+       {
+               .ident = "Acer TravelMate 2490",
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
+                       DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 2490"),
+               },
+       },
+       { }
+};
+
+#endif /* CONFIG_X86 */
+
 
 #ifdef CONFIG_PNP
 #include <linux/pnp.h>
@@ -520,6 +564,11 @@ static int __init i8042_platform_init(void)
                i8042_nomux = 1;
 #endif
 
+#ifdef CONFIG_X86
+       if (dmi_check_system(i8042_dmi_dritek_table))
+               i8042_dritek = 1;
+#endif /* CONFIG_X86 */
+
        return retval;
 }
 
diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c
index cbe83bf..1f73cf7 100644
--- a/drivers/input/serio/i8042.c
+++ b/drivers/input/serio/i8042.c
@@ -63,6 +63,12 @@ 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");
 
+#ifdef CONFIG_X86
+static unsigned int i8042_dritek;
+module_param_named(dritek, i8042_dritek, bool, 0);
+MODULE_PARM_DESC(dritek, "Force enable the Dritek keyboard extension");
+#endif
+
 #ifdef CONFIG_PNP
 static int i8042_nopnp;
 module_param_named(nopnp, i8042_nopnp, bool, 0);
@@ -1145,6 +1151,7 @@ static int __devinit i8042_setup_kbd(void)
 static int __devinit i8042_probe(struct platform_device *dev)
 {
        int error;
+       char param;
 
        error = i8042_controller_selftest();
        if (error)
@@ -1166,6 +1173,13 @@ static int __devinit i8042_probe(struct platform_device 
*dev)
                        goto out_fail;
        }
 
+       if (i8042_dritek) {
+               param = 0x90;
+               error = i8042_command(&param, 0x1059);
+               if (error)
+                       goto out_fail;
+       }
+
 /*
  * Ok, everything is ready, let's register all serio ports
  */
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to