summaryrefslogtreecommitdiff
path: root/drivers/input
diff options
context:
space:
mode:
authorVojtech Pavlik <vojtech@suse.cz>2002-10-09 16:49:06 +0200
committerVojtech Pavlik <vojtech@suse.cz>2002-10-09 16:49:06 +0200
commit6bb434ef4ee79b3ab793027ccd94a64812c60d60 (patch)
treeba24db9d98a987de429b2c44a5468caaa7a6cf65 /drivers/input
parent223aa656e4466320f39b17b567dbf5991efdf03e (diff)
Don't try to enable extra keys on IBM/Chicony keyboards as this upsets
several notebook keyboards. Until we find a better solution how to detect who are we talking to, we rely on the kernel command line. Use atkbd_set=4 to gain access to the extra keys.
Diffstat (limited to 'drivers/input')
-rw-r--r--drivers/input/keyboard/atkbd.c24
1 files changed, 14 insertions, 10 deletions
diff --git a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c
index bc8e89124152..58ad972cdf87 100644
--- a/drivers/input/keyboard/atkbd.c
+++ b/drivers/input/keyboard/atkbd.c
@@ -280,6 +280,7 @@ static int atkbd_event(struct input_dev *dev, unsigned int type, unsigned int co
param[1] = (test_bit(LED_COMPOSE, dev->led) ? 0x01 : 0)
| (test_bit(LED_SLEEP, dev->led) ? 0x02 : 0)
| (test_bit(LED_SUSPEND, dev->led) ? 0x04 : 0)
+ | (test_bit(LED_MISC, dev->led) ? 0x10 : 0);
| (test_bit(LED_MUTE, dev->led) ? 0x20 : 0);
atkbd_command(atkbd, param, ATKBD_CMD_EX_SETLEDS);
}
@@ -309,8 +310,8 @@ static int atkbd_set_3(struct atkbd *atkbd)
/*
* For known special keyboards we can go ahead and set the correct set.
- * We check for NCD PS/2 Sun, NorthGate OmniKey 101 and IBM RapidAccess
- * keyboards.
+ * We check for NCD PS/2 Sun, NorthGate OmniKey 101 and
+ * IBM RapidAccess / IBM EzButton / Chicony KBP-8993 keyboards.
*/
if (atkbd->id == 0xaca1) {
@@ -319,14 +320,17 @@ static int atkbd_set_3(struct atkbd *atkbd)
return 3;
}
- if (!atkbd_command(atkbd, param, ATKBD_CMD_OK_GETID)) {
- atkbd->id = param[0] << 8 | param[1];
- return 2;
- }
+ if (atkbd_set != 2)
+ if (!atkbd_command(atkbd, param, ATKBD_CMD_OK_GETID)) {
+ atkbd->id = param[0] << 8 | param[1];
+ return 2;
+ }
- param[0] = 0x71;
- if (!atkbd_command(atkbd, param, ATKBD_CMD_EX_ENABLE))
- return 4;
+ if (atkbd_set == 4) {
+ param[0] = 0x71;
+ if (!atkbd_command(atkbd, param, ATKBD_CMD_EX_ENABLE))
+ return 4;
+ }
/*
* Try to set the set we want.
@@ -505,7 +509,7 @@ static void atkbd_connect(struct serio *serio, struct serio_dev *dev)
}
if (atkbd->set == 4) {
- atkbd->dev.ledbit[0] |= BIT(LED_COMPOSE) | BIT(LED_SUSPEND) | BIT(LED_SLEEP) | BIT(LED_MUTE);
+ atkbd->dev.ledbit[0] |= BIT(LED_COMPOSE) | BIT(LED_SUSPEND) | BIT(LED_SLEEP) | BIT(LED_MUTE) | BIT(LED_MISC);
sprintf(atkbd->name, "AT Set 2 Extended keyboard");
} else
sprintf(atkbd->name, "AT Set %d keyboard", atkbd->set);