Comment 68 for bug 285323

Revision history for this message
Richard Hughes (richard-hughes) wrote : Re: Losing keyboard and mouse control when changing screen brightness with fn + arrow under intrepid

This is a kernel problem that affects Dell laptops. It has been fixed upstream by Matthew Garrett. The issue is that some keys on a Dell laptop do not produce a key down, key up sequence when the button is pressed, and instead just produce key down and NOT key up. This confuses X greatly, as more and more keys are being pressed "together". This is fixed in 61579ba83934d397a4fa2bb7372de9ae112587d5 on 15th August in Linus' tree.

Author: Matthew Garrett <email address hidden>
Date: Fri Aug 15 13:54:51 2008 -0400

    Input: atkbd - expand Latitude's force release quirk to other Dells

    Dell laptops fail to send key up events for several of their special
    keys. There's an existing quirk in the kernel to handle this, but it's
    limited to the Latitude range. This patch extends it to cover all
    portable Dells.

    Signed-off-by: Matthew Garrett <email address hidden>
    Signed-off-by: Dmitry Torokhov <email address hidden>

diff --git a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c
index 4474572..22016ca 100644
--- a/drivers/input/keyboard/atkbd.c
+++ b/drivers/input/keyboard/atkbd.c
@@ -834,10 +834,10 @@ static void atkbd_disconnect(struct serio *serio)
 }

 /*
- * Most special keys (Fn+F?) on Dell Latitudes do not generate release
+ * Most special keys (Fn+F?) on Dell laptops do not generate release
  * events so we have to do it ourselves.
  */
-static void atkbd_latitude_keymap_fixup(struct atkbd *atkbd)
+static void atkbd_dell_laptop_keymap_fixup(struct atkbd *atkbd)
 {
        const unsigned int forced_release_keys[] = {
                0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8f, 0x93,
@@ -1451,13 +1451,13 @@ static int __init atkbd_setup_fixup(const struct dmi_system_id *id)

 static struct dmi_system_id atkbd_dmi_quirk_table[] __initdata = {
        {
- .ident = "Dell Latitude series",
+ .ident = "Dell Laptop",
                .matches = {
                        DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
- DMI_MATCH(DMI_PRODUCT_NAME, "Latitude"),
+ DMI_MATCH(DMI_CHASSIS_TYPE, "8"), /* Portable */
                },
                .callback = atkbd_setup_fixup,
- .driver_data = atkbd_latitude_keymap_fixup,
+ .driver_data = atkbd_dell_laptop_keymap_fixup,
        },
        {
                .ident = "HP 2133",