2 * AT and PS/2 keyboard driver
4 * Copyright (c) 1999-2002 Vojtech Pavlik
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License version 2 as published by
10 * the Free Software Foundation.
14 * This driver can handle standard AT keyboards and PS/2 keyboards in
15 * Translated and Raw Set 2 and Set 3, as well as AT keyboards on dumb
16 * input-only controllers and AT keyboards connected over a one way RS232
20 #include <linux/delay.h>
21 #include <linux/module.h>
22 #include <linux/moduleparam.h>
23 #include <linux/slab.h>
24 #include <linux/interrupt.h>
25 #include <linux/init.h>
26 #include <linux/input.h>
27 #include <linux/serio.h>
28 #include <linux/workqueue.h>
29 #include <linux/libps2.h>
30 #include <linux/mutex.h>
32 #define DRIVER_DESC "AT and PS/2 keyboard driver"
34 MODULE_AUTHOR("Vojtech Pavlik <vojtech@suse.cz>");
35 MODULE_DESCRIPTION(DRIVER_DESC);
36 MODULE_LICENSE("GPL");
38 static int atkbd_set = 2;
39 module_param_named(set, atkbd_set, int, 0);
40 MODULE_PARM_DESC(set, "Select keyboard code set (2 = default, 3 = PS/2 native)");
42 #if defined(__i386__) || defined(__x86_64__) || defined(__hppa__)
43 static int atkbd_reset;
45 static int atkbd_reset = 1;
47 module_param_named(reset, atkbd_reset, bool, 0);
48 MODULE_PARM_DESC(reset, "Reset keyboard during initialization");
50 static int atkbd_softrepeat;
51 module_param_named(softrepeat, atkbd_softrepeat, bool, 0);
52 MODULE_PARM_DESC(softrepeat, "Use software keyboard repeat");
54 static int atkbd_softraw = 1;
55 module_param_named(softraw, atkbd_softraw, bool, 0);
56 MODULE_PARM_DESC(softraw, "Use software generated rawmode");
58 static int atkbd_scroll = 0;
59 module_param_named(scroll, atkbd_scroll, bool, 0);
60 MODULE_PARM_DESC(scroll, "Enable scroll-wheel on MS Office and similar keyboards");
62 static int atkbd_extra;
63 module_param_named(extra, atkbd_extra, bool, 0);
64 MODULE_PARM_DESC(extra, "Enable extra LEDs and keys on IBM RapidAcces, EzKey and similar keyboards");
66 __obsolete_setup("atkbd_set=");
67 __obsolete_setup("atkbd_reset");
68 __obsolete_setup("atkbd_softrepeat=");
71 * Scancode to keycode tables. These are just the default setting, and
72 * are loadable via an userland utility.
75 static unsigned char atkbd_set2_keycode[512] = {
77 #ifdef CONFIG_KEYBOARD_ATKBD_HP_KEYCODES
79 /* XXX: need a more general approach */
81 #include "hpps2atkbd.h" /* include the keyboard scancodes */
84 0, 67, 65, 63, 61, 59, 60, 88, 0, 68, 66, 64, 62, 15, 41,117,
85 0, 56, 42, 93, 29, 16, 2, 0, 0, 0, 44, 31, 30, 17, 3, 0,
86 0, 46, 45, 32, 18, 5, 4, 95, 0, 57, 47, 33, 20, 19, 6,183,
87 0, 49, 48, 35, 34, 21, 7,184, 0, 0, 50, 36, 22, 8, 9,185,
88 0, 51, 37, 23, 24, 11, 10, 0, 0, 52, 53, 38, 39, 25, 12, 0,
89 0, 89, 40, 0, 26, 13, 0, 0, 58, 54, 28, 27, 0, 43, 0, 85,
90 0, 86, 91, 90, 92, 0, 14, 94, 0, 79,124, 75, 71,121, 0, 0,
91 82, 83, 80, 76, 77, 72, 1, 69, 87, 78, 81, 74, 55, 73, 70, 99,
93 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
94 217,100,255, 0, 97,165, 0, 0,156, 0, 0, 0, 0, 0, 0,125,
95 173,114, 0,113, 0, 0, 0,126,128, 0, 0,140, 0, 0, 0,127,
96 159, 0,115, 0,164, 0, 0,116,158, 0,150,166, 0, 0, 0,142,
97 157, 0, 0, 0, 0, 0, 0, 0,155, 0, 98, 0, 0,163, 0, 0,
98 226, 0, 0, 0, 0, 0, 0, 0, 0,255, 96, 0, 0, 0,143, 0,
99 0, 0, 0, 0, 0, 0, 0, 0, 0,107, 0,105,102, 0, 0,112,
100 110,111,108,112,106,103, 0,119, 0,118,109, 0, 99,104,119, 0,
106 static unsigned char atkbd_set3_keycode[512] = {
108 0, 0, 0, 0, 0, 0, 0, 59, 1,138,128,129,130, 15, 41, 60,
109 131, 29, 42, 86, 58, 16, 2, 61,133, 56, 44, 31, 30, 17, 3, 62,
110 134, 46, 45, 32, 18, 5, 4, 63,135, 57, 47, 33, 20, 19, 6, 64,
111 136, 49, 48, 35, 34, 21, 7, 65,137,100, 50, 36, 22, 8, 9, 66,
112 125, 51, 37, 23, 24, 11, 10, 67,126, 52, 53, 38, 39, 25, 12, 68,
113 113,114, 40, 43, 26, 13, 87, 99, 97, 54, 28, 27, 43, 43, 88, 70,
114 108,105,119,103,111,107, 14,110, 0, 79,106, 75, 71,109,102,104,
115 82, 83, 80, 76, 77, 72, 69, 98, 0, 96, 81, 0, 78, 73, 55,183,
117 184,185,186,187, 74, 94, 92, 93, 0, 0, 0,125,126,127,112, 0,
118 0,139,150,163,165,115,152,150,166,140,160,154,113,114,167,168,
122 static unsigned char atkbd_unxlate_table[128] = {
123 0,118, 22, 30, 38, 37, 46, 54, 61, 62, 70, 69, 78, 85,102, 13,
124 21, 29, 36, 45, 44, 53, 60, 67, 68, 77, 84, 91, 90, 20, 28, 27,
125 35, 43, 52, 51, 59, 66, 75, 76, 82, 14, 18, 93, 26, 34, 33, 42,
126 50, 49, 58, 65, 73, 74, 89,124, 17, 41, 88, 5, 6, 4, 12, 3,
127 11, 2, 10, 1, 9,119,126,108,117,125,123,107,115,116,121,105,
128 114,122,112,113,127, 96, 97,120, 7, 15, 23, 31, 39, 47, 55, 63,
129 71, 79, 86, 94, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 87,111,
130 19, 25, 57, 81, 83, 92, 95, 98, 99,100,101,103,104,106,109,110
133 #define ATKBD_CMD_SETLEDS 0x10ed
134 #define ATKBD_CMD_GSCANSET 0x11f0
135 #define ATKBD_CMD_SSCANSET 0x10f0
136 #define ATKBD_CMD_GETID 0x02f2
137 #define ATKBD_CMD_SETREP 0x10f3
138 #define ATKBD_CMD_ENABLE 0x00f4
139 #define ATKBD_CMD_RESET_DIS 0x00f5
140 #define ATKBD_CMD_SETALL_MBR 0x00fa
141 #define ATKBD_CMD_RESET_BAT 0x02ff
142 #define ATKBD_CMD_RESEND 0x00fe
143 #define ATKBD_CMD_EX_ENABLE 0x10ea
144 #define ATKBD_CMD_EX_SETLEDS 0x20eb
145 #define ATKBD_CMD_OK_GETID 0x02e8
147 #define ATKBD_RET_ACK 0xfa
148 #define ATKBD_RET_NAK 0xfe
149 #define ATKBD_RET_BAT 0xaa
150 #define ATKBD_RET_EMUL0 0xe0
151 #define ATKBD_RET_EMUL1 0xe1
152 #define ATKBD_RET_RELEASE 0xf0
153 #define ATKBD_RET_HANGUEL 0xf1
154 #define ATKBD_RET_HANJA 0xf2
155 #define ATKBD_RET_ERR 0xff
157 #define ATKBD_KEY_UNKNOWN 0
158 #define ATKBD_KEY_NULL 255
160 #define ATKBD_SCR_1 254
161 #define ATKBD_SCR_2 253
162 #define ATKBD_SCR_4 252
163 #define ATKBD_SCR_8 251
164 #define ATKBD_SCR_CLICK 250
165 #define ATKBD_SCR_LEFT 249
166 #define ATKBD_SCR_RIGHT 248
168 #define ATKBD_SPECIAL 248
170 #define ATKBD_LED_EVENT_BIT 0
171 #define ATKBD_REP_EVENT_BIT 1
174 unsigned char keycode;
176 } atkbd_scroll_keys[] = {
177 { ATKBD_SCR_1, 0xc5 },
178 { ATKBD_SCR_2, 0x9d },
179 { ATKBD_SCR_4, 0xa4 },
180 { ATKBD_SCR_8, 0x9b },
181 { ATKBD_SCR_CLICK, 0xe0 },
182 { ATKBD_SCR_LEFT, 0xcb },
183 { ATKBD_SCR_RIGHT, 0xd2 },
187 * The atkbd control structure
192 struct ps2dev ps2dev;
193 struct input_dev *dev;
195 /* Written only during init */
200 unsigned char keycode[512];
202 unsigned char translated;
205 unsigned char softrepeat;
206 unsigned char softraw;
207 unsigned char scroll;
208 unsigned char enabled;
210 /* Accessed only from interrupt */
212 unsigned char resend;
213 unsigned char release;
214 unsigned char bat_xl;
215 unsigned char err_xl;
219 struct work_struct event_work;
220 struct mutex event_mutex;
221 unsigned long event_mask;
224 static ssize_t atkbd_attr_show_helper(struct device *dev, char *buf,
225 ssize_t (*handler)(struct atkbd *, char *));
226 static ssize_t atkbd_attr_set_helper(struct device *dev, const char *buf, size_t count,
227 ssize_t (*handler)(struct atkbd *, const char *, size_t));
228 #define ATKBD_DEFINE_ATTR(_name) \
229 static ssize_t atkbd_show_##_name(struct atkbd *, char *); \
230 static ssize_t atkbd_set_##_name(struct atkbd *, const char *, size_t); \
231 static ssize_t atkbd_do_show_##_name(struct device *d, struct device_attribute *attr, char *b) \
233 return atkbd_attr_show_helper(d, b, atkbd_show_##_name); \
235 static ssize_t atkbd_do_set_##_name(struct device *d, struct device_attribute *attr, const char *b, size_t s) \
237 return atkbd_attr_set_helper(d, b, s, atkbd_set_##_name); \
239 static struct device_attribute atkbd_attr_##_name = \
240 __ATTR(_name, S_IWUSR | S_IRUGO, atkbd_do_show_##_name, atkbd_do_set_##_name);
242 ATKBD_DEFINE_ATTR(extra);
243 ATKBD_DEFINE_ATTR(scroll);
244 ATKBD_DEFINE_ATTR(set);
245 ATKBD_DEFINE_ATTR(softrepeat);
246 ATKBD_DEFINE_ATTR(softraw);
249 static void atkbd_report_key(struct input_dev *dev, struct pt_regs *regs, int code, int value)
251 input_regs(dev, regs);
253 input_report_key(dev, code, 1);
255 input_report_key(dev, code, 0);
257 input_event(dev, EV_KEY, code, value);
262 * atkbd_interrupt(). Here takes place processing of data received from
263 * the keyboard into events.
266 static irqreturn_t atkbd_interrupt(struct serio *serio, unsigned char data,
267 unsigned int flags, struct pt_regs *regs)
269 struct atkbd *atkbd = serio_get_drvdata(serio);
270 unsigned int code = data;
271 int scroll = 0, hscroll = 0, click = -1;
275 printk(KERN_DEBUG "atkbd.c: Received %02x flags %02x\n", data, flags);
278 #if !defined(__i386__) && !defined (__x86_64__)
279 if ((flags & (SERIO_FRAME | SERIO_PARITY)) && (~flags & SERIO_TIMEOUT) && !atkbd->resend && atkbd->write) {
280 printk(KERN_WARNING "atkbd.c: frame/parity error: %02x\n", flags);
281 serio_write(serio, ATKBD_CMD_RESEND);
286 if (!flags && data == ATKBD_RET_ACK)
290 if (unlikely(atkbd->ps2dev.flags & PS2_FLAG_ACK))
291 if (ps2_handle_ack(&atkbd->ps2dev, data))
294 if (unlikely(atkbd->ps2dev.flags & PS2_FLAG_CMD))
295 if (ps2_handle_response(&atkbd->ps2dev, data))
301 input_event(atkbd->dev, EV_MSC, MSC_RAW, code);
303 if (atkbd->translated) {
306 (code != ATKBD_RET_EMUL0 && code != ATKBD_RET_EMUL1 &&
307 code != ATKBD_RET_HANGUEL && code != ATKBD_RET_HANJA &&
308 (code != ATKBD_RET_ERR || atkbd->err_xl) &&
309 (code != ATKBD_RET_BAT || atkbd->bat_xl))) {
310 atkbd->release = code >> 7;
315 if ((code & 0x7f) == (ATKBD_RET_BAT & 0x7f))
316 atkbd->bat_xl = !(data >> 7);
317 if ((code & 0x7f) == (ATKBD_RET_ERR & 0x7f))
318 atkbd->err_xl = !(data >> 7);
325 serio_reconnect(atkbd->ps2dev.serio);
327 case ATKBD_RET_EMUL0:
330 case ATKBD_RET_EMUL1:
333 case ATKBD_RET_RELEASE:
336 case ATKBD_RET_HANGUEL:
337 atkbd_report_key(atkbd->dev, regs, KEY_HANGUEL, 3);
339 case ATKBD_RET_HANJA:
340 atkbd_report_key(atkbd->dev, regs, KEY_HANJA, 3);
343 // printk(KERN_DEBUG "atkbd.c: Keyboard on %s reports too many keys pressed.\n", serio->phys);
348 code = (code & 0x7f) | ((code & 0x80) << 1);
352 code |= (atkbd->set != 3) ? 0x80 : 0x100;
355 if (atkbd->keycode[code] != ATKBD_KEY_NULL)
356 input_event(atkbd->dev, EV_MSC, MSC_SCAN, code);
358 switch (atkbd->keycode[code]) {
361 case ATKBD_KEY_UNKNOWN:
362 if (data == ATKBD_RET_ACK || data == ATKBD_RET_NAK) {
364 /* Quite a few key switchers and other tools trigger this and it confuses
365 people who can do nothing about it */
366 printk(KERN_WARNING "atkbd.c: Spurious %s on %s. Some program, "
367 "like XFree86, might be trying access hardware directly.\n",
368 data == ATKBD_RET_ACK ? "ACK" : "NAK", serio->phys);
371 printk(KERN_WARNING "atkbd.c: Unknown key %s "
372 "(%s set %d, code %#x on %s).\n",
373 atkbd->release ? "released" : "pressed",
374 atkbd->translated ? "translated" : "raw",
375 atkbd->set, code, serio->phys);
376 printk(KERN_WARNING "atkbd.c: Use 'setkeycodes %s%02x <keycode>' "
377 "to make it known.\n",
378 code & 0x80 ? "e0" : "", code & 0x7f);
380 input_sync(atkbd->dev);
383 scroll = 1 - atkbd->release * 2;
386 scroll = 2 - atkbd->release * 4;
389 scroll = 4 - atkbd->release * 8;
392 scroll = 8 - atkbd->release * 16;
394 case ATKBD_SCR_CLICK:
395 click = !atkbd->release;
400 case ATKBD_SCR_RIGHT:
404 value = atkbd->release ? 0 :
405 (1 + (!atkbd->softrepeat && test_bit(atkbd->keycode[code], atkbd->dev->key)));
407 switch (value) { /* Workaround Toshiba laptop multiple keypress */
413 atkbd->time = jiffies + msecs_to_jiffies(atkbd->dev->rep[REP_DELAY]) / 2;
416 if (!time_after(jiffies, atkbd->time) && atkbd->last == code)
421 atkbd_report_key(atkbd->dev, regs, atkbd->keycode[code], value);
425 input_regs(atkbd->dev, regs);
427 input_report_key(atkbd->dev, BTN_MIDDLE, click);
428 input_report_rel(atkbd->dev, REL_WHEEL, scroll);
429 input_report_rel(atkbd->dev, REL_HWHEEL, hscroll);
430 input_sync(atkbd->dev);
439 * atkbd_event_work() is used to complete processing of events that
440 * can not be processed by input_event() which is often called from
444 static void atkbd_event_work(void *data)
446 const short period[32] =
447 { 33, 37, 42, 46, 50, 54, 58, 63, 67, 75, 83, 92, 100, 109, 116, 125,
448 133, 149, 167, 182, 200, 217, 232, 250, 270, 303, 333, 370, 400, 435, 470, 500 };
449 const short delay[4] =
450 { 250, 500, 750, 1000 };
452 struct atkbd *atkbd = data;
453 struct input_dev *dev = atkbd->dev;
454 unsigned char param[2];
457 mutex_lock(&atkbd->event_mutex);
459 if (test_and_clear_bit(ATKBD_LED_EVENT_BIT, &atkbd->event_mask)) {
460 param[0] = (test_bit(LED_SCROLLL, dev->led) ? 1 : 0)
461 | (test_bit(LED_NUML, dev->led) ? 2 : 0)
462 | (test_bit(LED_CAPSL, dev->led) ? 4 : 0);
463 ps2_command(&atkbd->ps2dev, param, ATKBD_CMD_SETLEDS);
467 param[1] = (test_bit(LED_COMPOSE, dev->led) ? 0x01 : 0)
468 | (test_bit(LED_SLEEP, dev->led) ? 0x02 : 0)
469 | (test_bit(LED_SUSPEND, dev->led) ? 0x04 : 0)
470 | (test_bit(LED_MISC, dev->led) ? 0x10 : 0)
471 | (test_bit(LED_MUTE, dev->led) ? 0x20 : 0);
472 ps2_command(&atkbd->ps2dev, param, ATKBD_CMD_EX_SETLEDS);
476 if (test_and_clear_bit(ATKBD_REP_EVENT_BIT, &atkbd->event_mask)) {
478 while (i < 31 && period[i] < dev->rep[REP_PERIOD])
480 while (j < 3 && delay[j] < dev->rep[REP_DELAY])
482 dev->rep[REP_PERIOD] = period[i];
483 dev->rep[REP_DELAY] = delay[j];
484 param[0] = i | (j << 5);
485 ps2_command(&atkbd->ps2dev, param, ATKBD_CMD_SETREP);
488 mutex_unlock(&atkbd->event_mutex);
492 * Event callback from the input module. Events that change the state of
493 * the hardware are processed here. If action can not be performed in
494 * interrupt context it is offloaded to atkbd_event_work.
497 static int atkbd_event(struct input_dev *dev, unsigned int type, unsigned int code, int value)
499 struct atkbd *atkbd = dev->private;
507 set_bit(ATKBD_LED_EVENT_BIT, &atkbd->event_mask);
509 schedule_work(&atkbd->event_work);
514 if (!atkbd->softrepeat) {
515 set_bit(ATKBD_REP_EVENT_BIT, &atkbd->event_mask);
517 schedule_work(&atkbd->event_work);
527 * atkbd_enable() signals that interrupt handler is allowed to
528 * generate input events.
531 static inline void atkbd_enable(struct atkbd *atkbd)
533 serio_pause_rx(atkbd->ps2dev.serio);
535 serio_continue_rx(atkbd->ps2dev.serio);
539 * atkbd_disable() tells input handler that all incoming data except
540 * for ACKs and command response should be dropped.
543 static inline void atkbd_disable(struct atkbd *atkbd)
545 serio_pause_rx(atkbd->ps2dev.serio);
547 serio_continue_rx(atkbd->ps2dev.serio);
551 * atkbd_probe() probes for an AT keyboard on a serio port.
554 static int atkbd_probe(struct atkbd *atkbd)
556 struct ps2dev *ps2dev = &atkbd->ps2dev;
557 unsigned char param[2];
560 * Some systems, where the bit-twiddling when testing the io-lines of the
561 * controller may confuse the keyboard need a full reset of the keyboard. On
562 * these systems the BIOS also usually doesn't do it for us.
566 if (ps2_command(ps2dev, NULL, ATKBD_CMD_RESET_BAT))
567 printk(KERN_WARNING "atkbd.c: keyboard reset failed on %s\n", ps2dev->serio->phys);
570 * Then we check the keyboard ID. We should get 0xab83 under normal conditions.
571 * Some keyboards report different values, but the first byte is always 0xab or
572 * 0xac. Some old AT keyboards don't report anything. If a mouse is connected, this
573 * should make sure we don't try to set the LEDs on it.
576 param[0] = param[1] = 0xa5; /* initialize with invalid values */
577 if (ps2_command(ps2dev, param, ATKBD_CMD_GETID)) {
580 * If the get ID command failed, we check if we can at least set the LEDs on
581 * the keyboard. This should work on every keyboard out there. It also turns
582 * the LEDs off, which we want anyway.
585 if (ps2_command(ps2dev, param, ATKBD_CMD_SETLEDS))
591 if (param[0] != 0xab && param[0] != 0xac && /* Regular and NCD Sun keyboards */
592 param[0] != 0x2b && param[0] != 0x5d && /* Trust keyboard, raw and translated */
593 param[0] != 0x60 && param[0] != 0x47) /* NMB SGI keyboard, raw and translated */
596 atkbd->id = (param[0] << 8) | param[1];
598 if (atkbd->id == 0xaca1 && atkbd->translated) {
599 printk(KERN_ERR "atkbd.c: NCD terminal keyboards are only supported on non-translating\n");
600 printk(KERN_ERR "atkbd.c: controllers. Use i8042.direct=1 to disable translation.\n");
608 * atkbd_select_set checks if a keyboard has a working Set 3 support, and
609 * sets it into that. Unfortunately there are keyboards that can be switched
610 * to Set 3, but don't work well in that (BTC Multimedia ...)
613 static int atkbd_select_set(struct atkbd *atkbd, int target_set, int allow_extra)
615 struct ps2dev *ps2dev = &atkbd->ps2dev;
616 unsigned char param[2];
620 * For known special keyboards we can go ahead and set the correct set.
621 * We check for NCD PS/2 Sun, NorthGate OmniKey 101 and
622 * IBM RapidAccess / IBM EzButton / Chicony KBP-8993 keyboards.
625 if (atkbd->translated)
628 if (atkbd->id == 0xaca1) {
630 ps2_command(ps2dev, param, ATKBD_CMD_SSCANSET);
636 if (!ps2_command(ps2dev, param, ATKBD_CMD_EX_ENABLE)) {
645 if (!ps2_command(ps2dev, param, ATKBD_CMD_OK_GETID)) {
646 atkbd->id = param[0] << 8 | param[1];
651 if (ps2_command(ps2dev, param, ATKBD_CMD_SSCANSET))
655 if (ps2_command(ps2dev, param, ATKBD_CMD_GSCANSET))
660 if (ps2_command(ps2dev, param, ATKBD_CMD_SSCANSET))
664 ps2_command(ps2dev, param, ATKBD_CMD_SETALL_MBR);
669 static int atkbd_activate(struct atkbd *atkbd)
671 struct ps2dev *ps2dev = &atkbd->ps2dev;
672 unsigned char param[1];
675 * Set the LEDs to a defined state.
679 if (ps2_command(ps2dev, param, ATKBD_CMD_SETLEDS))
683 * Set autorepeat to fastest possible.
687 if (ps2_command(ps2dev, param, ATKBD_CMD_SETREP))
691 * Enable the keyboard to receive keystrokes.
694 if (ps2_command(ps2dev, NULL, ATKBD_CMD_ENABLE)) {
695 printk(KERN_ERR "atkbd.c: Failed to enable keyboard on %s\n",
696 ps2dev->serio->phys);
704 * atkbd_cleanup() restores the keyboard state so that BIOS is happy after a
708 static void atkbd_cleanup(struct serio *serio)
710 struct atkbd *atkbd = serio_get_drvdata(serio);
711 ps2_command(&atkbd->ps2dev, NULL, ATKBD_CMD_RESET_BAT);
716 * atkbd_disconnect() closes and frees.
719 static void atkbd_disconnect(struct serio *serio)
721 struct atkbd *atkbd = serio_get_drvdata(serio);
723 atkbd_disable(atkbd);
725 /* make sure we don't have a command in flight */
726 synchronize_sched(); /* Allow atkbd_interrupt()s to complete. */
727 flush_scheduled_work();
729 device_remove_file(&serio->dev, &atkbd_attr_extra);
730 device_remove_file(&serio->dev, &atkbd_attr_scroll);
731 device_remove_file(&serio->dev, &atkbd_attr_set);
732 device_remove_file(&serio->dev, &atkbd_attr_softrepeat);
733 device_remove_file(&serio->dev, &atkbd_attr_softraw);
735 input_unregister_device(atkbd->dev);
737 serio_set_drvdata(serio, NULL);
743 * atkbd_set_keycode_table() initializes keyboard's keycode table
744 * according to the selected scancode set
747 static void atkbd_set_keycode_table(struct atkbd *atkbd)
751 memset(atkbd->keycode, 0, sizeof(atkbd->keycode));
753 if (atkbd->translated) {
754 for (i = 0; i < 128; i++) {
755 atkbd->keycode[i] = atkbd_set2_keycode[atkbd_unxlate_table[i]];
756 atkbd->keycode[i | 0x80] = atkbd_set2_keycode[atkbd_unxlate_table[i] | 0x80];
758 for (j = 0; j < ARRAY_SIZE(atkbd_scroll_keys); j++)
759 if ((atkbd_unxlate_table[i] | 0x80) == atkbd_scroll_keys[j].set2)
760 atkbd->keycode[i | 0x80] = atkbd_scroll_keys[j].keycode;
762 } else if (atkbd->set == 3) {
763 memcpy(atkbd->keycode, atkbd_set3_keycode, sizeof(atkbd->keycode));
765 memcpy(atkbd->keycode, atkbd_set2_keycode, sizeof(atkbd->keycode));
768 for (i = 0; i < ARRAY_SIZE(atkbd_scroll_keys); i++)
769 atkbd->keycode[atkbd_scroll_keys[i].set2] = atkbd_scroll_keys[i].keycode;
774 * atkbd_set_device_attrs() sets up keyboard's input device structure
777 static void atkbd_set_device_attrs(struct atkbd *atkbd)
779 struct input_dev *input_dev = atkbd->dev;
783 sprintf(atkbd->name, "AT Set 2 Extra keyboard");
785 sprintf(atkbd->name, "AT %s Set %d keyboard",
786 atkbd->translated ? "Translated" : "Raw", atkbd->set);
788 sprintf(atkbd->phys, "%s/input0", atkbd->ps2dev.serio->phys);
790 input_dev->name = atkbd->name;
791 input_dev->phys = atkbd->phys;
792 input_dev->id.bustype = BUS_I8042;
793 input_dev->id.vendor = 0x0001;
794 input_dev->id.product = atkbd->translated ? 1 : atkbd->set;
795 input_dev->id.version = atkbd->id;
796 input_dev->event = atkbd_event;
797 input_dev->private = atkbd;
798 input_dev->cdev.dev = &atkbd->ps2dev.serio->dev;
800 input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP) | BIT(EV_MSC);
803 input_dev->evbit[0] |= BIT(EV_LED);
804 input_dev->ledbit[0] = BIT(LED_NUML) | BIT(LED_CAPSL) | BIT(LED_SCROLLL);
808 input_dev->ledbit[0] |= BIT(LED_COMPOSE) | BIT(LED_SUSPEND) |
809 BIT(LED_SLEEP) | BIT(LED_MUTE) | BIT(LED_MISC);
811 if (!atkbd->softrepeat) {
812 input_dev->rep[REP_DELAY] = 250;
813 input_dev->rep[REP_PERIOD] = 33;
816 input_dev->mscbit[0] = atkbd->softraw ? BIT(MSC_SCAN) : BIT(MSC_RAW) | BIT(MSC_SCAN);
819 input_dev->evbit[0] |= BIT(EV_REL);
820 input_dev->relbit[0] = BIT(REL_WHEEL) | BIT(REL_HWHEEL);
821 set_bit(BTN_MIDDLE, input_dev->keybit);
824 input_dev->keycode = atkbd->keycode;
825 input_dev->keycodesize = sizeof(unsigned char);
826 input_dev->keycodemax = ARRAY_SIZE(atkbd_set2_keycode);
828 for (i = 0; i < 512; i++)
829 if (atkbd->keycode[i] && atkbd->keycode[i] < ATKBD_SPECIAL)
830 set_bit(atkbd->keycode[i], input_dev->keybit);
834 * atkbd_connect() is called when the serio module finds an interface
835 * that isn't handled yet by an appropriate device driver. We check if
836 * there is an AT keyboard out there and if yes, we register ourselves
837 * to the input module.
840 static int atkbd_connect(struct serio *serio, struct serio_driver *drv)
843 struct input_dev *dev;
846 atkbd = kzalloc(sizeof(struct atkbd), GFP_KERNEL);
847 dev = input_allocate_device();
852 ps2_init(&atkbd->ps2dev, serio);
853 INIT_WORK(&atkbd->event_work, atkbd_event_work, atkbd);
854 mutex_init(&atkbd->event_mutex);
856 switch (serio->id.type) {
859 atkbd->translated = 1;
866 atkbd->softraw = atkbd_softraw;
867 atkbd->softrepeat = atkbd_softrepeat;
868 atkbd->scroll = atkbd_scroll;
870 if (atkbd->softrepeat)
873 serio_set_drvdata(serio, atkbd);
875 err = serio_open(serio, drv);
881 if (atkbd_probe(atkbd)) {
887 atkbd->set = atkbd_select_set(atkbd, atkbd_set, atkbd_extra);
888 atkbd_activate(atkbd);
895 atkbd_set_keycode_table(atkbd);
896 atkbd_set_device_attrs(atkbd);
898 device_create_file(&serio->dev, &atkbd_attr_extra);
899 device_create_file(&serio->dev, &atkbd_attr_scroll);
900 device_create_file(&serio->dev, &atkbd_attr_set);
901 device_create_file(&serio->dev, &atkbd_attr_softrepeat);
902 device_create_file(&serio->dev, &atkbd_attr_softraw);
906 input_register_device(atkbd->dev);
910 fail: serio_set_drvdata(serio, NULL);
911 input_free_device(dev);
917 * atkbd_reconnect() tries to restore keyboard into a sane state and is
918 * most likely called on resume.
921 static int atkbd_reconnect(struct serio *serio)
923 struct atkbd *atkbd = serio_get_drvdata(serio);
924 struct serio_driver *drv = serio->drv;
925 unsigned char param[1];
927 if (!atkbd || !drv) {
928 printk(KERN_DEBUG "atkbd: reconnect request, but serio is disconnected, ignoring...\n");
932 atkbd_disable(atkbd);
935 param[0] = (test_bit(LED_SCROLLL, atkbd->dev->led) ? 1 : 0)
936 | (test_bit(LED_NUML, atkbd->dev->led) ? 2 : 0)
937 | (test_bit(LED_CAPSL, atkbd->dev->led) ? 4 : 0);
939 if (atkbd_probe(atkbd))
941 if (atkbd->set != atkbd_select_set(atkbd, atkbd->set, atkbd->extra))
944 atkbd_activate(atkbd);
946 if (ps2_command(&atkbd->ps2dev, param, ATKBD_CMD_SETLEDS))
955 static struct serio_device_id atkbd_serio_ids[] = {
963 .type = SERIO_8042_XL,
970 .proto = SERIO_PS2SER,
977 MODULE_DEVICE_TABLE(serio, atkbd_serio_ids);
979 static struct serio_driver atkbd_drv = {
983 .description = DRIVER_DESC,
984 .id_table = atkbd_serio_ids,
985 .interrupt = atkbd_interrupt,
986 .connect = atkbd_connect,
987 .reconnect = atkbd_reconnect,
988 .disconnect = atkbd_disconnect,
989 .cleanup = atkbd_cleanup,
992 static ssize_t atkbd_attr_show_helper(struct device *dev, char *buf,
993 ssize_t (*handler)(struct atkbd *, char *))
995 struct serio *serio = to_serio_port(dev);
998 retval = serio_pin_driver(serio);
1002 if (serio->drv != &atkbd_drv) {
1007 retval = handler((struct atkbd *)serio_get_drvdata(serio), buf);
1010 serio_unpin_driver(serio);
1014 static ssize_t atkbd_attr_set_helper(struct device *dev, const char *buf, size_t count,
1015 ssize_t (*handler)(struct atkbd *, const char *, size_t))
1017 struct serio *serio = to_serio_port(dev);
1018 struct atkbd *atkbd;
1021 retval = serio_pin_driver(serio);
1025 if (serio->drv != &atkbd_drv) {
1030 atkbd = serio_get_drvdata(serio);
1031 atkbd_disable(atkbd);
1032 retval = handler(atkbd, buf, count);
1033 atkbd_enable(atkbd);
1036 serio_unpin_driver(serio);
1040 static ssize_t atkbd_show_extra(struct atkbd *atkbd, char *buf)
1042 return sprintf(buf, "%d\n", atkbd->extra ? 1 : 0);
1045 static ssize_t atkbd_set_extra(struct atkbd *atkbd, const char *buf, size_t count)
1047 struct input_dev *new_dev;
1048 unsigned long value;
1054 value = simple_strtoul(buf, &rest, 10);
1055 if (*rest || value > 1)
1058 if (atkbd->extra != value) {
1060 * Since device's properties will change we need to
1061 * unregister old device. But allocate new one first
1062 * to make sure we have it.
1064 if (!(new_dev = input_allocate_device()))
1066 input_unregister_device(atkbd->dev);
1067 atkbd->dev = new_dev;
1068 atkbd->set = atkbd_select_set(atkbd, atkbd->set, value);
1069 atkbd_activate(atkbd);
1070 atkbd_set_device_attrs(atkbd);
1071 input_register_device(atkbd->dev);
1076 static ssize_t atkbd_show_scroll(struct atkbd *atkbd, char *buf)
1078 return sprintf(buf, "%d\n", atkbd->scroll ? 1 : 0);
1081 static ssize_t atkbd_set_scroll(struct atkbd *atkbd, const char *buf, size_t count)
1083 struct input_dev *new_dev;
1084 unsigned long value;
1087 value = simple_strtoul(buf, &rest, 10);
1088 if (*rest || value > 1)
1091 if (atkbd->scroll != value) {
1092 if (!(new_dev = input_allocate_device()))
1094 input_unregister_device(atkbd->dev);
1095 atkbd->dev = new_dev;
1096 atkbd->scroll = value;
1097 atkbd_set_keycode_table(atkbd);
1098 atkbd_set_device_attrs(atkbd);
1099 input_register_device(atkbd->dev);
1104 static ssize_t atkbd_show_set(struct atkbd *atkbd, char *buf)
1106 return sprintf(buf, "%d\n", atkbd->set);
1109 static ssize_t atkbd_set_set(struct atkbd *atkbd, const char *buf, size_t count)
1111 struct input_dev *new_dev;
1112 unsigned long value;
1118 value = simple_strtoul(buf, &rest, 10);
1119 if (*rest || (value != 2 && value != 3))
1122 if (atkbd->set != value) {
1123 if (!(new_dev = input_allocate_device()))
1125 input_unregister_device(atkbd->dev);
1126 atkbd->dev = new_dev;
1127 atkbd->set = atkbd_select_set(atkbd, value, atkbd->extra);
1128 atkbd_activate(atkbd);
1129 atkbd_set_keycode_table(atkbd);
1130 atkbd_set_device_attrs(atkbd);
1131 input_register_device(atkbd->dev);
1136 static ssize_t atkbd_show_softrepeat(struct atkbd *atkbd, char *buf)
1138 return sprintf(buf, "%d\n", atkbd->softrepeat ? 1 : 0);
1141 static ssize_t atkbd_set_softrepeat(struct atkbd *atkbd, const char *buf, size_t count)
1143 struct input_dev *new_dev;
1144 unsigned long value;
1150 value = simple_strtoul(buf, &rest, 10);
1151 if (*rest || value > 1)
1154 if (atkbd->softrepeat != value) {
1155 if (!(new_dev = input_allocate_device()))
1157 input_unregister_device(atkbd->dev);
1158 atkbd->dev = new_dev;
1159 atkbd->softrepeat = value;
1160 if (atkbd->softrepeat)
1162 atkbd_set_device_attrs(atkbd);
1163 input_register_device(atkbd->dev);
1169 static ssize_t atkbd_show_softraw(struct atkbd *atkbd, char *buf)
1171 return sprintf(buf, "%d\n", atkbd->softraw ? 1 : 0);
1174 static ssize_t atkbd_set_softraw(struct atkbd *atkbd, const char *buf, size_t count)
1176 struct input_dev *new_dev;
1177 unsigned long value;
1180 value = simple_strtoul(buf, &rest, 10);
1181 if (*rest || value > 1)
1184 if (atkbd->softraw != value) {
1185 if (!(new_dev = input_allocate_device()))
1187 input_unregister_device(atkbd->dev);
1188 atkbd->dev = new_dev;
1189 atkbd->softraw = value;
1190 atkbd_set_device_attrs(atkbd);
1191 input_register_device(atkbd->dev);
1197 static int __init atkbd_init(void)
1199 serio_register_driver(&atkbd_drv);
1203 static void __exit atkbd_exit(void)
1205 serio_unregister_driver(&atkbd_drv);
1208 module_init(atkbd_init);
1209 module_exit(atkbd_exit);