Skip to contentSkip to conversation

Make Dell keyboard repeat quirk apply to a wider range of hardware

PATCH In review Nick Warne 4 participants 13 messages Nov 11, 2008 – Jan 4, 2009

Subsystems (2)
lore
Share & tools
lore

Nick Warne

author
#0 lore raw
Quoted 33 lines

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.

---

drivers/input/keyboard/atkbd.c +3 -3
index b1ce10f..e32c24d 100644
@@ -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 = {

drivers/input/keyboard/atkbd.c static int __init atkbd_setup_fixup(const struct dmi_system_id *id) · line 1473

Quoted 10 lines
drivers/input/keyboard/atkbd.c +2 -2
 			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

Signature · 1 line
Free Software Foundation Associate Member 5508
author
#1 lore raw
Quoted 57 lines · On Tue, 11 Nov 2008 07:47:02 +0000 Nick Warne <[email protected]> wrote:
Quoted 39 lines

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.

---

(quoted diff) +0 -0

b/drivers/input/keyboard/atkbd.c index b1ce10f..e32c24d 100644

drivers/input/keyboard/atkbd.c +0 -1
@@ -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.
*/

drivers/input/keyboard/atkbd.c +1 -1
-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 = {

drivers/input/keyboard/atkbd.c +2 -2
 	{
-		.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 */ },

drivers/input/keyboard/atkbd.c

Quoted 6 lines
drivers/input/keyboard/atkbd.c +1 -1
 		.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.

Quoted 5 lines

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:

Signature · 1 line
Free Software Foundation Associate Member 5508
#2 lore raw

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

#3 lore raw
In reply to Nick Warne

Does this work?

drivers/input/keyboard/atkbd.c +9 -0
index 22016ca..15479ef 100644
@@ -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"),
Signature · 1 line
Matthew Garrett | [email protected]
author
#4 lore raw
Quoted 17 lines · On Wed, 12 Nov 2008 16:56:50 +0000 Matthew Garrett <[email protected]> wrote:

Does this work?

(quoted diff) +0 -0

b/drivers/input/keyboard/atkbd.c index 22016ca..15479ef 100644

drivers/input/keyboard/atkbd.c +0 -0
@@ -1460,6 +1460,15 @@ static struct dmi_system_id

atkbd_dmi_quirk_table[] __initdata = { .driver_data = atkbd_dell_laptop_keymap_fixup, },

drivers/input/keyboard/atkbd.c +3 -0
 	{
+		.ident = "Dell Laptop",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "Dell Computer

Corporation"),

drivers/input/keyboard/atkbd.c +1 -0
+			DMI_MATCH(DMI_CHASSIS_TYPE, "8"), /*

Portable */

drivers/input/keyboard/atkbd.c static struct dmi_system_id atkbd_dmi_quirk_table[] __initdata = { · line 1474

Quoted 8 lines
drivers/input/keyboard/atkbd.c +5 -0
+		},
+		.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

Signature · 1 line
Free Software Foundation Associate Member 5508
#5 lore raw
Quoted 2 lines · Nick Warne

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.

Quoted 3 lines

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.

Signature · 1 line
Matthew Garrett | [email protected]
author
#6 lore raw
Quoted 9 lines · On Wed, 12 Nov 2008 17:27:12 +0000 Matthew Garrett <[email protected]> wrote:
Quoted 2 lines · Nick Warne

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.

Quoted 6 lines
Quoted 3 lines

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

Signature · 1 line
Free Software Foundation Associate Member 5508
#7 lore raw
Quoted 2 lines · Nick Warne

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.

Signature · 1 line
Matthew Garrett | [email protected]
author
#8 lore raw
In reply to Matthew Garrett
Quoted 17 lines · On Wed, 12 Nov 2008 16:56:50 +0000 Matthew Garrett <[email protected]> wrote:

Does this work?

(quoted diff) +0 -0

b/drivers/input/keyboard/atkbd.c index 22016ca..15479ef 100644

drivers/input/keyboard/atkbd.c +0 -0
@@ -1460,6 +1460,15 @@ static struct dmi_system_id

atkbd_dmi_quirk_table[] __initdata = { .driver_data = atkbd_dell_laptop_keymap_fixup, },

drivers/input/keyboard/atkbd.c +3 -0
 	{
+		.ident = "Dell Laptop",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "Dell Computer

Corporation"),

drivers/input/keyboard/atkbd.c +1 -0
+			DMI_MATCH(DMI_CHASSIS_TYPE, "8"), /*

Portable */

drivers/input/keyboard/atkbd.c static struct dmi_system_id atkbd_dmi_quirk_table[] __initdata = { · line 1474

Quoted 8 lines
drivers/input/keyboard/atkbd.c +5 -0
+		},
+		.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

Signature · 1 line
Free Software Foundation Associate Member 5508
author
#9 lore raw
In reply to Matthew Garrett
Quoted 17 lines · On Wed, 12 Nov 2008 16:56:50 +0000 Matthew Garrett <[email protected]> wrote:

Does this work?

(quoted diff) +0 -0

b/drivers/input/keyboard/atkbd.c index 22016ca..15479ef 100644

drivers/input/keyboard/atkbd.c +0 -0
@@ -1460,6 +1460,15 @@ static struct dmi_system_id

atkbd_dmi_quirk_table[] __initdata = { .driver_data = atkbd_dell_laptop_keymap_fixup, },

drivers/input/keyboard/atkbd.c +3 -0
 	{
+		.ident = "Dell Laptop",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "Dell Computer

Corporation"),

drivers/input/keyboard/atkbd.c +1 -0
+			DMI_MATCH(DMI_CHASSIS_TYPE, "8"), /*

Portable */

drivers/input/keyboard/atkbd.c static struct dmi_system_id atkbd_dmi_quirk_table[] __initdata = { · line 1474

Quoted 8 lines
drivers/input/keyboard/atkbd.c +5 -0
+		},
+		.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

Signature · 2 lines
Free Software Foundation Associate Member 5508
http://linicks.net/
#10 lore raw

PATCH 1/1 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.

---

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

drivers/input/keyboard/atkbd.c +9 -0
index 379b7ff..d48de0c 100644
@@ -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"),
Signature · 1 line
Matthew Garrett | [email protected]
#11 lore raw

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

Quoted 10 lines · 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.

---

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.

Signature · 1 line
Dmitry
author
#12 lore raw

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

Hi Matthew, Dmitry,

Quoted 5 lines · On Mon, 29 Dec 2008 20:15:33 -0800 Dmitry Torokhov <[email protected]> wrote:
Quoted 4 lines · 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.

Quoted 8 lines
Quoted 6 lines

---

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.

I am mailing off LKML here, as I don't know what to think, but somebody has reported a new ID for these Dell laptops:

http://ubuntuforums.org/showpost.php?p=6488632&postcount=37
===
You say you're looking for people whose Vendor IDs don't say "Dell"?

Looks like you're looking for me.

261-BIOS Information
278: Vendor: Phoenix Technologies LTD
312- Version: A04
809- Manufacturer: Dell Inc.
834: Product Name: Inspiron 700m
869- Version: -1
--
1050- Manufacturer: DELL SYSTEM
1077: Product Name: 0D9593
1099- Version:
===

I dunno if this is a rogue post, but have no reason to assume otherwise.

Will this never end?

Nick

Signature · 2 lines
Free Software Foundation Associate Member 5508
http://linicks.net/