2008-08-14 03:33:15

by Matthew Garrett

[permalink] [raw]
Subject: [PATCH] Make Dell keyboard repeat quirk apply to a wider range of hardware

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 protected]>

---
diff --git a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c
index b1ce10f..e32c24d 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,
@@ -1461,13 +1461,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",

--
Matthew Garrett | [email protected]


2008-08-15 19:04:56

by Dmitry Torokhov

[permalink] [raw]
Subject: Re: [PATCH] Make Dell keyboard repeat quirk apply to a wider range of hardware

On Thu, Aug 14, 2008 at 04:32:55AM +0100, Matthew Garrett wrote:
> 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 protected]>
>

Applied to 'next', thank you Matthew.

--
Dmitry

2008-11-11 07:47:19

by Nick Warne

[permalink] [raw]
Subject: Re: [PATCH] Make Dell keyboard repeat quirk apply to a wider range of hardware


> 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 protected]>
>
> ---
> diff --git a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c
> index b1ce10f..e32c24d 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,
> @@ -1461,13 +1461,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",

This issue has hit a lot of Ubuntu Dell uses (like myself), and the
patch indeed fixes it up - but it appears not all Dell machines are
alike. One user has reported it doesn't work, and his investigation
reveals dmicode output shows:

Vendor: Dell Computer Corporation

So I guess this isn't totally fixed yet. As to what the vendor output
is al all these machines, I don't know, but I guess now it could be any
permatation of Dell Inc., Dell Computer Corp. etc.

Ref. Ubuntu bug report thread:

https://bugs.launchpad.net/ubuntu/+source/acpid/+bug/285323/comments/88

Nick

--
Free Software Foundation Associate Member 5508

2008-11-12 13:14:41

by Nick Warne

[permalink] [raw]
Subject: Re: [PATCH] Make Dell keyboard repeat quirk apply to a wider range of hardware

On Tue, 11 Nov 2008 07:47:02 +0000
Nick Warne <[email protected]> wrote:

>
> > 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 protected]>
> >
> > ---
> > diff --git a/drivers/input/keyboard/atkbd.c
> > b/drivers/input/keyboard/atkbd.c index b1ce10f..e32c24d 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, @@ -1461,13 +1461,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",
>
> This issue has hit a lot of Ubuntu Dell uses (like myself), and the
> patch indeed fixes it up - but it appears not all Dell machines are
> alike. One user has reported it doesn't work, and his investigation
> reveals dmicode output shows:
>
> Vendor: Dell Computer Corporation
>
> So I guess this isn't totally fixed yet. As to what the vendor output
> is al all these machines, I don't know, but I guess now it could be
> any permatation of Dell Inc., Dell Computer Corp. etc.
>
> Ref. Ubuntu bug report thread:
>
> https://bugs.launchpad.net/ubuntu/+source/acpid/+bug/285323/comments/88
>
> Nick

OK, I asked for help on this - so far it seems either Dell Inc. or Dell
Computer Corporation, so I guess this patch needs a || somewhere.


1814-BIOS Information
1831: Vendor: Dell Inc.
1850- Version: A17
2774- Manufacturer: Dell Inc.
2799: Product Name: MM061
2847- Version: Not Specified
--
3064- Manufacturer: Dell Inc.
3089: Product Name: 0KD882
3111- Version:



2675-BIOS Information
2692: Vendor: Dell Inc.
2711- Version: A02
3546- Manufacturer: Dell Inc.
3571: Product Name: Latitude D620
3619- Version: Not Specified
--
3836- Manufacturer: Dell Inc.
3861: Product Name: 0JK187
3883- Version:



2132-BIOS Information
2149: Vendor: Dell Inc.
2168- Version: A13
3093- Manufacturer: Dell Inc.
3118: Product Name: Inspiron 1525
3166- Version: Not Specified
--
3383- Manufacturer: Dell Inc.
3408: Product Name: 0U990C
3430- Version:


841-BIOS Information
858: Vendor: Dell Computer Corporation
893- Version: A11
1782- Manufacturer: Dell Computer Corporation
1823: Product Name: Inspiron 8200
1871- Version: Not Specified
--
2050- Manufacturer: Dell Computer Corporation
2091: Product Name: Inspiron 8200
2132- Version: Not Specified



617-BIOS Information
634: Vendor: Dell Inc.
653- Version: A00
1140- Manufacturer: Dell Inc.
1165: Product Name: Inspiron 910
1193- Version: A00
--
1412- Manufacturer: Dell Inc.
1437: Product Name: CN0J14
1459- Version: A00


1852-BIOS Information
1869: Vendor: Dell Inc.
1888- Version: A09
2812- Manufacturer: Dell Inc.
2837: Product Name: MP061
2885- Version: Not Specified
--
3102- Manufacturer: Dell Inc.
3127: Product Name: 0YD479
3149- Version:


372-BIOS Information
389: Vendor: Dell Computer Corporation
424- Version: A34
1278- Manufacturer: Dell Computer Corporation
1319: Product Name: Inspiron 5150
1367- Version: Not Specified
--
1546- Manufacturer: Dell Computer Corporation
1587: Product Name: 0W0940
1609- Version:


094-BIOS Information
2111: Vendor: Dell Inc.
2130- Version: A09
3055- Manufacturer: Dell Inc.
3080: Product Name: Inspiron 1720
3128- Version: Not Specified
--
3345- Manufacturer: Dell Inc.
3370: Product Name:
3392- Version:
--
Free Software Foundation Associate Member 5508

2008-11-12 16:45:30

by Andreas Mohr

[permalink] [raw]
Subject: Re: [PATCH] Make Dell keyboard repeat quirk apply to a wider range of hardware

BIOS Information
Vendor: Dell Computer Corporation
Version: A23
Release Date: 01/21/2004
Product Name: Inspiron 8000

NOT affected (or already working) AFAICS (showkeys on -rc4 has press/release
for all Fn- combos)

Andreas Mohr

2008-11-12 16:57:09

by Matthew Garrett

[permalink] [raw]
Subject: Re: [PATCH] Make Dell keyboard repeat quirk apply to a wider range of hardware

Does this work?

diff --git a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c
index 22016ca..15479ef 100644
--- a/drivers/input/keyboard/atkbd.c
+++ b/drivers/input/keyboard/atkbd.c
@@ -1460,6 +1460,15 @@ static struct dmi_system_id atkbd_dmi_quirk_table[] __initdata = {
.driver_data = atkbd_dell_laptop_keymap_fixup,
},
{
+ .ident = "Dell Laptop",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"),
+ DMI_MATCH(DMI_CHASSIS_TYPE, "8"), /* Portable */
+ },
+ .callback = atkbd_setup_fixup,
+ .driver_data = atkbd_dell_laptop_keymap_fixup,
+ },
+ {
.ident = "HP 2133",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),

--
Matthew Garrett | [email protected]

2008-11-12 17:24:40

by Nick Warne

[permalink] [raw]
Subject: Re: [PATCH] Make Dell keyboard repeat quirk apply to a wider range of hardware

On Wed, 12 Nov 2008 16:56:50 +0000
Matthew Garrett <[email protected]> wrote:

> Does this work?
>
> diff --git a/drivers/input/keyboard/atkbd.c
> b/drivers/input/keyboard/atkbd.c index 22016ca..15479ef 100644
> --- a/drivers/input/keyboard/atkbd.c
> +++ b/drivers/input/keyboard/atkbd.c
> @@ -1460,6 +1460,15 @@ static struct dmi_system_id
> atkbd_dmi_quirk_table[] __initdata = { .driver_data =
> atkbd_dell_laptop_keymap_fixup, },
> {
> + .ident = "Dell Laptop",
> + .matches = {
> + DMI_MATCH(DMI_SYS_VENDOR, "Dell Computer
> Corporation"),
> + DMI_MATCH(DMI_CHASSIS_TYPE, "8"), /*
> Portable */
> + },
> + .callback = atkbd_setup_fixup,
> + .driver_data = atkbd_dell_laptop_keymap_fixup,
> + },
> + {
> .ident = "HP 2133",
> .matches = {
> DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
>

Matthew,

The original worked for me fine, and a lot of other people as our Dell
laptops produce 'Dell Inc.' as vendor. But other peoples return 'Dell
Computer Corporation' and thus it didn't work for them.

But how you determine if these certain laptops produce a keypress
release I don't know with having all of them at hand...

So it needs BOTH 'Dell Inc.' and 'Dell Computer Corporation' to cover
these laptops (I guess), as per the info I got from people running
dmidecode:

http://ubuntuforums.org/showthread.php?t=978973

Nick

--
Free Software Foundation Associate Member 5508

2008-11-12 17:27:22

by Matthew Garrett

[permalink] [raw]
Subject: Re: [PATCH] Make Dell keyboard repeat quirk apply to a wider range of hardware

On Wed, Nov 12, 2008 at 05:24:29PM +0000, Nick Warne wrote:

> But how you determine if these certain laptops produce a keypress
> release I don't know with having all of them at hand...

The quirk is only applied to a small number of keys which wouldn't want
autorepeat anyway, so it's pretty clearly harmless even if the hardware
works sanely.

> So it needs BOTH 'Dell Inc.' and 'Dell Computer Corporation' to cover
> these laptops (I guess), as per the info I got from people running
> dmidecode:

That's what the patch adds. I don't have appropriate hardware to test.

--
Matthew Garrett | [email protected]

2008-11-12 17:40:40

by Nick Warne

[permalink] [raw]
Subject: Re: [PATCH] Make Dell keyboard repeat quirk apply to a wider range of hardware

On Wed, 12 Nov 2008 17:27:12 +0000
Matthew Garrett <[email protected]> wrote:

> On Wed, Nov 12, 2008 at 05:24:29PM +0000, Nick Warne wrote:
>
> > But how you determine if these certain laptops produce a keypress
> > release I don't know with having all of them at hand...
>
> The quirk is only applied to a small number of keys which wouldn't
> want autorepeat anyway, so it's pretty clearly harmless even if the
> hardware works sanely.
>
> > So it needs BOTH 'Dell Inc.' and 'Dell Computer Corporation' to
> > cover these laptops (I guess), as per the info I got from people
> > running dmidecode:
>
> That's what the patch adds. I don't have appropriate hardware to test.
>

Yes.

I have copied to the Ubuntu bug report (they already pushed out your
first patch) so hopefully people there can test it as I don't have this
hardware either.

BTW, what was it that produced this issue in the first place? All
previous kernel versions worked OK?

Thanks,

Nick

--
Free Software Foundation Associate Member 5508

2008-11-12 17:41:55

by Matthew Garrett

[permalink] [raw]
Subject: Re: [PATCH] Make Dell keyboard repeat quirk apply to a wider range of hardware

On Wed, Nov 12, 2008 at 05:40:10PM +0000, Nick Warne wrote:

> BTW, what was it that produced this issue in the first place? All
> previous kernel versions worked OK?

It's the switch from kbd to evdev in Ubuntu, I suspect.

--
Matthew Garrett | [email protected]

2008-11-15 12:32:31

by Nick Warne

[permalink] [raw]
Subject: Re: [PATCH] Make Dell keyboard repeat quirk apply to a wider range of hardware

On Wed, 12 Nov 2008 16:56:50 +0000
Matthew Garrett <[email protected]> wrote:

> Does this work?
>
> diff --git a/drivers/input/keyboard/atkbd.c
> b/drivers/input/keyboard/atkbd.c index 22016ca..15479ef 100644
> --- a/drivers/input/keyboard/atkbd.c
> +++ b/drivers/input/keyboard/atkbd.c
> @@ -1460,6 +1460,15 @@ static struct dmi_system_id
> atkbd_dmi_quirk_table[] __initdata = { .driver_data =
> atkbd_dell_laptop_keymap_fixup, },
> {
> + .ident = "Dell Laptop",
> + .matches = {
> + DMI_MATCH(DMI_SYS_VENDOR, "Dell Computer
> Corporation"),
> + DMI_MATCH(DMI_CHASSIS_TYPE, "8"), /*
> Portable */
> + },
> + .callback = atkbd_setup_fixup,
> + .driver_data = atkbd_dell_laptop_keymap_fixup,
> + },
> + {
> .ident = "HP 2133",
> .matches = {
> DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
>

OK, as discussed, I cannot test this, but my research leads to this to
be correct:

http://ubuntuforums.org/showthread.php?t=978973

Dell use vendor ID s either 'Dell Inc.' or 'Dell Computer Corporation'
exclusively.

So I think this can be officially submitted.

Nick

--
Free Software Foundation Associate Member 5508

2008-12-29 11:36:33

by Nick Warne

[permalink] [raw]
Subject: Re: [PATCH] Make Dell keyboard repeat quirk apply to a wider range of hardware

On Wed, 12 Nov 2008 16:56:50 +0000
Matthew Garrett <[email protected]> wrote:

> Does this work?
>
> diff --git a/drivers/input/keyboard/atkbd.c
> b/drivers/input/keyboard/atkbd.c index 22016ca..15479ef 100644
> --- a/drivers/input/keyboard/atkbd.c
> +++ b/drivers/input/keyboard/atkbd.c
> @@ -1460,6 +1460,15 @@ static struct dmi_system_id
> atkbd_dmi_quirk_table[] __initdata = { .driver_data =
> atkbd_dell_laptop_keymap_fixup, },
> {
> + .ident = "Dell Laptop",
> + .matches = {
> + DMI_MATCH(DMI_SYS_VENDOR, "Dell Computer
> Corporation"),
> + DMI_MATCH(DMI_CHASSIS_TYPE, "8"), /*
> Portable */
> + },
> + .callback = atkbd_setup_fixup,
> + .driver_data = atkbd_dell_laptop_keymap_fixup,
> + },
> + {
> .ident = "HP 2133",
> .matches = {
> DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
>

Hi Matthew,

I see this didn't make into the 2.6.28 release, and a lot of Ubuntu
users are being bitten by it - I also assume that the Ubuntu kernel
guys will not add it until it is officially applied, and they will then
backport it.

The Ubuntu bug report confirms this works OK for people:

https://bugs.launchpad.net/ubuntu/+source/acpid/+bug/285323

Nick
--
Free Software Foundation Associate Member 5508
http://linicks.net/

2008-12-29 14:29:19

by Matthew Garrett

[permalink] [raw]
Subject: [PATCH] Input: atkbd - broaden the Dell DMI signatures

Some Dells need the dell input quirk applied but have a different vendor
string in their DMI tables. Add an extra entry to cover these machines as
well.

Signed-off-by: Matthew Garrett <[email protected]>

---

Dmitry, any chance of getting this queued for .29? Probably suitable for
-stable as well.

diff --git a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c
index 379b7ff..d48de0c 100644
--- a/drivers/input/keyboard/atkbd.c
+++ b/drivers/input/keyboard/atkbd.c
@@ -1476,6 +1476,15 @@ static struct dmi_system_id atkbd_dmi_quirk_table[] __initdata = {
.driver_data = atkbd_dell_laptop_keymap_fixup,
},
{
+ .ident = "Dell Laptop",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"),
+ DMI_MATCH(DMI_CHASSIS_TYPE, "8"), /* Portable */
+ },
+ .callback = atkbd_setup_fixup,
+ .driver_data = atkbd_dell_laptop_keymap_fixup,
+ },
+ {
.ident = "HP 2133",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),

--
Matthew Garrett | [email protected]

2008-12-30 04:16:17

by Dmitry Torokhov

[permalink] [raw]
Subject: Re: [PATCH] Input: atkbd - broaden the Dell DMI signatures

On Monday 29 December 2008 06:29:02 Matthew Garrett wrote:
> Some Dells need the dell input quirk applied but have a different vendor
> string in their DMI tables. Add an extra entry to cover these machines as
> well.
>
> Signed-off-by: Matthew Garrett <[email protected]>
>
> ---
>
> Dmitry, any chance of getting this queued for .29? Probably suitable for
> -stable as well.

Yep, will send with the rest of stuff for .29. Thank you Matthew.

--
Dmitry