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;
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_HANJA 0xf1
154 #define ATKBD_RET_HANGEUL 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
173 #define ATKBD_XL_ERR 0x01
174 #define ATKBD_XL_BAT 0x02
175 #define ATKBD_XL_ACK 0x04
176 #define ATKBD_XL_NAK 0x08
177 #define ATKBD_XL_HANGEUL 0x10
178 #define ATKBD_XL_HANJA 0x20
181 unsigned char keycode;
183 } atkbd_scroll_keys[] = {
184 { ATKBD_SCR_1, 0xc5 },
185 { ATKBD_SCR_2, 0x9d },
186 { ATKBD_SCR_4, 0xa4 },
187 { ATKBD_SCR_8, 0x9b },
188 { ATKBD_SCR_CLICK, 0xe0 },
189 { ATKBD_SCR_LEFT, 0xcb },
190 { ATKBD_SCR_RIGHT, 0xd2 },
194 * The atkbd control structure
199 struct ps2dev ps2dev;
200 struct input_dev *dev;
202 /* Written only during init */
207 unsigned char keycode[512];
209 unsigned char translated;
212 unsigned char softrepeat;
213 unsigned char softraw;
214 unsigned char scroll;
215 unsigned char enabled;
217 /* Accessed only from interrupt */
219 unsigned char resend;
220 unsigned char release;
221 unsigned long xl_bit;
224 unsigned long err_count;
226 struct work_struct event_work;
227 struct mutex event_mutex;
228 unsigned long event_mask;
231 static ssize_t atkbd_attr_show_helper(struct device *dev, char *buf,
232 ssize_t (*handler)(struct atkbd *, char *));
233 static ssize_t atkbd_attr_set_helper(struct device *dev, const char *buf, size_t count,
234 ssize_t (*handler)(struct atkbd *, const char *, size_t));
235 #define ATKBD_DEFINE_ATTR(_name) \
236 static ssize_t atkbd_show_##_name(struct atkbd *, char *); \
237 static ssize_t atkbd_set_##_name(struct atkbd *, const char *, size_t); \
238 static ssize_t atkbd_do_show_##_name(struct device *d, \
239 struct device_attribute *attr, char *b) \
241 return atkbd_attr_show_helper(d, b, atkbd_show_##_name); \
243 static ssize_t atkbd_do_set_##_name(struct device *d, \
244 struct device_attribute *attr, const char *b, size_t s) \
246 return atkbd_attr_set_helper(d, b, s, atkbd_set_##_name); \
248 static struct device_attribute atkbd_attr_##_name = \
249 __ATTR(_name, S_IWUSR | S_IRUGO, atkbd_do_show_##_name, atkbd_do_set_##_name);
251 ATKBD_DEFINE_ATTR(extra);
252 ATKBD_DEFINE_ATTR(scroll);
253 ATKBD_DEFINE_ATTR(set);
254 ATKBD_DEFINE_ATTR(softrepeat);
255 ATKBD_DEFINE_ATTR(softraw);
257 #define ATKBD_DEFINE_RO_ATTR(_name) \
258 static ssize_t atkbd_show_##_name(struct atkbd *, char *); \
259 static ssize_t atkbd_do_show_##_name(struct device *d, \
260 struct device_attribute *attr, char *b) \
262 return atkbd_attr_show_helper(d, b, atkbd_show_##_name); \
264 static struct device_attribute atkbd_attr_##_name = \
265 __ATTR(_name, S_IRUGO, atkbd_do_show_##_name, NULL);
267 ATKBD_DEFINE_RO_ATTR(err_count);
269 static struct attribute *atkbd_attributes[] = {
270 &atkbd_attr_extra.attr,
271 &atkbd_attr_scroll.attr,
272 &atkbd_attr_set.attr,
273 &atkbd_attr_softrepeat.attr,
274 &atkbd_attr_softraw.attr,
275 &atkbd_attr_err_count.attr,
279 static struct attribute_group atkbd_attribute_group = {
280 .attrs = atkbd_attributes,
283 static const unsigned int xl_table[] = {
284 ATKBD_RET_BAT, ATKBD_RET_ERR, ATKBD_RET_ACK,
285 ATKBD_RET_NAK, ATKBD_RET_HANJA, ATKBD_RET_HANGEUL,
289 * Checks if we should mangle the scancode to extract 'release' bit
290 * in translated mode.
292 static int atkbd_need_xlate(unsigned long xl_bit, unsigned char code)
296 if (code == ATKBD_RET_EMUL0 || code == ATKBD_RET_EMUL1)
299 for (i = 0; i < ARRAY_SIZE(xl_table); i++)
300 if (code == xl_table[i])
301 return test_bit(i, &xl_bit);
307 * Calculates new value of xl_bit so the driver can distinguish
308 * between make/break pair of scancodes for select keys and PS/2
309 * protocol responses.
311 static void atkbd_calculate_xl_bit(struct atkbd *atkbd, unsigned char code)
315 for (i = 0; i < ARRAY_SIZE(xl_table); i++) {
316 if (!((code ^ xl_table[i]) & 0x7f)) {
318 __clear_bit(i, &atkbd->xl_bit);
320 __set_bit(i, &atkbd->xl_bit);
327 * Encode the scancode, 0xe0 prefix, and high bit into a single integer,
328 * keeping kernel 2.4 compatibility for set 2
330 static unsigned int atkbd_compat_scancode(struct atkbd *atkbd, unsigned int code)
332 if (atkbd->set == 3) {
333 if (atkbd->emul == 1)
336 code = (code & 0x7f) | ((code & 0x80) << 1);
337 if (atkbd->emul == 1)
345 * atkbd_interrupt(). Here takes place processing of data received from
346 * the keyboard into events.
349 static irqreturn_t atkbd_interrupt(struct serio *serio, unsigned char data,
352 struct atkbd *atkbd = serio_get_drvdata(serio);
353 struct input_dev *dev = atkbd->dev;
354 unsigned int code = data;
355 int scroll = 0, hscroll = 0, click = -1, add_release_event = 0;
357 unsigned char keycode;
360 printk(KERN_DEBUG "atkbd.c: Received %02x flags %02x\n", data, flags);
363 #if !defined(__i386__) && !defined (__x86_64__)
364 if ((flags & (SERIO_FRAME | SERIO_PARITY)) && (~flags & SERIO_TIMEOUT) && !atkbd->resend && atkbd->write) {
365 printk(KERN_WARNING "atkbd.c: frame/parity error: %02x\n", flags);
366 serio_write(serio, ATKBD_CMD_RESEND);
371 if (!flags && data == ATKBD_RET_ACK)
375 if (unlikely(atkbd->ps2dev.flags & PS2_FLAG_ACK))
376 if (ps2_handle_ack(&atkbd->ps2dev, data))
379 if (unlikely(atkbd->ps2dev.flags & PS2_FLAG_CMD))
380 if (ps2_handle_response(&atkbd->ps2dev, data))
386 input_event(dev, EV_MSC, MSC_RAW, code);
388 if (atkbd->translated) {
390 if (atkbd->emul || atkbd_need_xlate(atkbd->xl_bit, code)) {
391 atkbd->release = code >> 7;
396 atkbd_calculate_xl_bit(atkbd, data);
402 serio_reconnect(atkbd->ps2dev.serio);
404 case ATKBD_RET_EMUL0:
407 case ATKBD_RET_EMUL1:
410 case ATKBD_RET_RELEASE:
415 printk(KERN_WARNING "atkbd.c: Spurious %s on %s. "
416 "Some program might be trying access hardware directly.\n",
417 data == ATKBD_RET_ACK ? "ACK" : "NAK", serio->phys);
419 case ATKBD_RET_HANGEUL:
420 case ATKBD_RET_HANJA:
422 * These keys do not report release and thus need to be
425 add_release_event = 1;
430 printk(KERN_DEBUG "atkbd.c: Keyboard on %s reports too many keys pressed.\n", serio->phys);
435 code = atkbd_compat_scancode(atkbd, code);
437 if (atkbd->emul && --atkbd->emul)
440 keycode = atkbd->keycode[code];
442 if (keycode != ATKBD_KEY_NULL)
443 input_event(dev, EV_MSC, MSC_SCAN, code);
448 case ATKBD_KEY_UNKNOWN:
450 "atkbd.c: Unknown key %s (%s set %d, code %#x on %s).\n",
451 atkbd->release ? "released" : "pressed",
452 atkbd->translated ? "translated" : "raw",
453 atkbd->set, code, serio->phys);
455 "atkbd.c: Use 'setkeycodes %s%02x <keycode>' to make it known.\n",
456 code & 0x80 ? "e0" : "", code & 0x7f);
460 scroll = 1 - atkbd->release * 2;
463 scroll = 2 - atkbd->release * 4;
466 scroll = 4 - atkbd->release * 8;
469 scroll = 8 - atkbd->release * 16;
471 case ATKBD_SCR_CLICK:
472 click = !atkbd->release;
477 case ATKBD_SCR_RIGHT:
481 if (atkbd->release) {
484 } else if (!atkbd->softrepeat && test_bit(keycode, dev->key)) {
485 /* Workaround Toshiba laptop multiple keypress */
486 value = time_before(jiffies, atkbd->time) && atkbd->last == code ? 1 : 2;
490 atkbd->time = jiffies + msecs_to_jiffies(dev->rep[REP_DELAY]) / 2;
493 input_event(dev, EV_KEY, keycode, value);
496 if (value && add_release_event) {
497 input_report_key(dev, keycode, 0);
504 input_report_key(dev, BTN_MIDDLE, click);
505 input_report_rel(dev, REL_WHEEL, scroll);
506 input_report_rel(dev, REL_HWHEEL, hscroll);
515 static int atkbd_set_repeat_rate(struct atkbd *atkbd)
517 const short period[32] =
518 { 33, 37, 42, 46, 50, 54, 58, 63, 67, 75, 83, 92, 100, 109, 116, 125,
519 133, 149, 167, 182, 200, 217, 232, 250, 270, 303, 333, 370, 400, 435, 470, 500 };
520 const short delay[4] =
521 { 250, 500, 750, 1000 };
523 struct input_dev *dev = atkbd->dev;
527 while (i < ARRAY_SIZE(period) - 1 && period[i] < dev->rep[REP_PERIOD])
529 dev->rep[REP_PERIOD] = period[i];
531 while (j < ARRAY_SIZE(delay) - 1 && delay[j] < dev->rep[REP_DELAY])
533 dev->rep[REP_DELAY] = delay[j];
535 param = i | (j << 5);
536 return ps2_command(&atkbd->ps2dev, ¶m, ATKBD_CMD_SETREP);
539 static int atkbd_set_leds(struct atkbd *atkbd)
541 struct input_dev *dev = atkbd->dev;
542 unsigned char param[2];
544 param[0] = (test_bit(LED_SCROLLL, dev->led) ? 1 : 0)
545 | (test_bit(LED_NUML, dev->led) ? 2 : 0)
546 | (test_bit(LED_CAPSL, dev->led) ? 4 : 0);
547 if (ps2_command(&atkbd->ps2dev, param, ATKBD_CMD_SETLEDS))
552 param[1] = (test_bit(LED_COMPOSE, dev->led) ? 0x01 : 0)
553 | (test_bit(LED_SLEEP, dev->led) ? 0x02 : 0)
554 | (test_bit(LED_SUSPEND, dev->led) ? 0x04 : 0)
555 | (test_bit(LED_MISC, dev->led) ? 0x10 : 0)
556 | (test_bit(LED_MUTE, dev->led) ? 0x20 : 0);
557 if (ps2_command(&atkbd->ps2dev, param, ATKBD_CMD_EX_SETLEDS))
565 * atkbd_event_work() is used to complete processing of events that
566 * can not be processed by input_event() which is often called from
570 static void atkbd_event_work(void *data)
572 struct atkbd *atkbd = data;
574 mutex_lock(&atkbd->event_mutex);
576 if (test_and_clear_bit(ATKBD_LED_EVENT_BIT, &atkbd->event_mask))
577 atkbd_set_leds(atkbd);
579 if (test_and_clear_bit(ATKBD_REP_EVENT_BIT, &atkbd->event_mask))
580 atkbd_set_repeat_rate(atkbd);
582 mutex_unlock(&atkbd->event_mutex);
586 * Event callback from the input module. Events that change the state of
587 * the hardware are processed here. If action can not be performed in
588 * interrupt context it is offloaded to atkbd_event_work.
591 static int atkbd_event(struct input_dev *dev, unsigned int type, unsigned int code, int value)
593 struct atkbd *atkbd = dev->private;
601 set_bit(ATKBD_LED_EVENT_BIT, &atkbd->event_mask);
603 schedule_work(&atkbd->event_work);
608 if (!atkbd->softrepeat) {
609 set_bit(ATKBD_REP_EVENT_BIT, &atkbd->event_mask);
611 schedule_work(&atkbd->event_work);
621 * atkbd_enable() signals that interrupt handler is allowed to
622 * generate input events.
625 static inline void atkbd_enable(struct atkbd *atkbd)
627 serio_pause_rx(atkbd->ps2dev.serio);
629 serio_continue_rx(atkbd->ps2dev.serio);
633 * atkbd_disable() tells input handler that all incoming data except
634 * for ACKs and command response should be dropped.
637 static inline void atkbd_disable(struct atkbd *atkbd)
639 serio_pause_rx(atkbd->ps2dev.serio);
641 serio_continue_rx(atkbd->ps2dev.serio);
645 * atkbd_probe() probes for an AT keyboard on a serio port.
648 static int atkbd_probe(struct atkbd *atkbd)
650 struct ps2dev *ps2dev = &atkbd->ps2dev;
651 unsigned char param[2];
654 * Some systems, where the bit-twiddling when testing the io-lines of the
655 * controller may confuse the keyboard need a full reset of the keyboard. On
656 * these systems the BIOS also usually doesn't do it for us.
660 if (ps2_command(ps2dev, NULL, ATKBD_CMD_RESET_BAT))
661 printk(KERN_WARNING "atkbd.c: keyboard reset failed on %s\n", ps2dev->serio->phys);
664 * Then we check the keyboard ID. We should get 0xab83 under normal conditions.
665 * Some keyboards report different values, but the first byte is always 0xab or
666 * 0xac. Some old AT keyboards don't report anything. If a mouse is connected, this
667 * should make sure we don't try to set the LEDs on it.
670 param[0] = param[1] = 0xa5; /* initialize with invalid values */
671 if (ps2_command(ps2dev, param, ATKBD_CMD_GETID)) {
674 * If the get ID command failed, we check if we can at least set the LEDs on
675 * the keyboard. This should work on every keyboard out there. It also turns
676 * the LEDs off, which we want anyway.
679 if (ps2_command(ps2dev, param, ATKBD_CMD_SETLEDS))
685 if (!ps2_is_keyboard_id(param[0]))
688 atkbd->id = (param[0] << 8) | param[1];
690 if (atkbd->id == 0xaca1 && atkbd->translated) {
691 printk(KERN_ERR "atkbd.c: NCD terminal keyboards are only supported on non-translating\n");
692 printk(KERN_ERR "atkbd.c: controllers. Use i8042.direct=1 to disable translation.\n");
700 * atkbd_select_set checks if a keyboard has a working Set 3 support, and
701 * sets it into that. Unfortunately there are keyboards that can be switched
702 * to Set 3, but don't work well in that (BTC Multimedia ...)
705 static int atkbd_select_set(struct atkbd *atkbd, int target_set, int allow_extra)
707 struct ps2dev *ps2dev = &atkbd->ps2dev;
708 unsigned char param[2];
712 * For known special keyboards we can go ahead and set the correct set.
713 * We check for NCD PS/2 Sun, NorthGate OmniKey 101 and
714 * IBM RapidAccess / IBM EzButton / Chicony KBP-8993 keyboards.
717 if (atkbd->translated)
720 if (atkbd->id == 0xaca1) {
722 ps2_command(ps2dev, param, ATKBD_CMD_SSCANSET);
728 if (!ps2_command(ps2dev, param, ATKBD_CMD_EX_ENABLE)) {
737 if (!ps2_command(ps2dev, param, ATKBD_CMD_OK_GETID)) {
738 atkbd->id = param[0] << 8 | param[1];
743 if (ps2_command(ps2dev, param, ATKBD_CMD_SSCANSET))
747 if (ps2_command(ps2dev, param, ATKBD_CMD_GSCANSET))
752 if (ps2_command(ps2dev, param, ATKBD_CMD_SSCANSET))
756 ps2_command(ps2dev, param, ATKBD_CMD_SETALL_MBR);
761 static int atkbd_activate(struct atkbd *atkbd)
763 struct ps2dev *ps2dev = &atkbd->ps2dev;
764 unsigned char param[1];
767 * Set the LEDs to a defined state.
771 if (ps2_command(ps2dev, param, ATKBD_CMD_SETLEDS))
775 * Set autorepeat to fastest possible.
779 if (ps2_command(ps2dev, param, ATKBD_CMD_SETREP))
783 * Enable the keyboard to receive keystrokes.
786 if (ps2_command(ps2dev, NULL, ATKBD_CMD_ENABLE)) {
787 printk(KERN_ERR "atkbd.c: Failed to enable keyboard on %s\n",
788 ps2dev->serio->phys);
796 * atkbd_cleanup() restores the keyboard state so that BIOS is happy after a
800 static void atkbd_cleanup(struct serio *serio)
802 struct atkbd *atkbd = serio_get_drvdata(serio);
803 ps2_command(&atkbd->ps2dev, NULL, ATKBD_CMD_RESET_BAT);
808 * atkbd_disconnect() closes and frees.
811 static void atkbd_disconnect(struct serio *serio)
813 struct atkbd *atkbd = serio_get_drvdata(serio);
815 atkbd_disable(atkbd);
817 /* make sure we don't have a command in flight */
818 synchronize_sched(); /* Allow atkbd_interrupt()s to complete. */
819 flush_scheduled_work();
821 sysfs_remove_group(&serio->dev.kobj, &atkbd_attribute_group);
822 input_unregister_device(atkbd->dev);
824 serio_set_drvdata(serio, NULL);
830 * atkbd_set_keycode_table() initializes keyboard's keycode table
831 * according to the selected scancode set
834 static void atkbd_set_keycode_table(struct atkbd *atkbd)
838 memset(atkbd->keycode, 0, sizeof(atkbd->keycode));
840 if (atkbd->translated) {
841 for (i = 0; i < 128; i++) {
842 atkbd->keycode[i] = atkbd_set2_keycode[atkbd_unxlate_table[i]];
843 atkbd->keycode[i | 0x80] = atkbd_set2_keycode[atkbd_unxlate_table[i] | 0x80];
845 for (j = 0; j < ARRAY_SIZE(atkbd_scroll_keys); j++)
846 if ((atkbd_unxlate_table[i] | 0x80) == atkbd_scroll_keys[j].set2)
847 atkbd->keycode[i | 0x80] = atkbd_scroll_keys[j].keycode;
849 } else if (atkbd->set == 3) {
850 memcpy(atkbd->keycode, atkbd_set3_keycode, sizeof(atkbd->keycode));
852 memcpy(atkbd->keycode, atkbd_set2_keycode, sizeof(atkbd->keycode));
855 for (i = 0; i < ARRAY_SIZE(atkbd_scroll_keys); i++)
856 atkbd->keycode[atkbd_scroll_keys[i].set2] = atkbd_scroll_keys[i].keycode;
859 atkbd->keycode[atkbd_compat_scancode(atkbd, ATKBD_RET_HANGEUL)] = KEY_HANGUEL;
860 atkbd->keycode[atkbd_compat_scancode(atkbd, ATKBD_RET_HANJA)] = KEY_HANJA;
864 * atkbd_set_device_attrs() sets up keyboard's input device structure
867 static void atkbd_set_device_attrs(struct atkbd *atkbd)
869 struct input_dev *input_dev = atkbd->dev;
873 snprintf(atkbd->name, sizeof(atkbd->name),
874 "AT Set 2 Extra keyboard");
876 snprintf(atkbd->name, sizeof(atkbd->name),
877 "AT %s Set %d keyboard",
878 atkbd->translated ? "Translated" : "Raw", atkbd->set);
880 snprintf(atkbd->phys, sizeof(atkbd->phys),
881 "%s/input0", atkbd->ps2dev.serio->phys);
883 input_dev->name = atkbd->name;
884 input_dev->phys = atkbd->phys;
885 input_dev->id.bustype = BUS_I8042;
886 input_dev->id.vendor = 0x0001;
887 input_dev->id.product = atkbd->translated ? 1 : atkbd->set;
888 input_dev->id.version = atkbd->id;
889 input_dev->event = atkbd_event;
890 input_dev->private = atkbd;
891 input_dev->cdev.dev = &atkbd->ps2dev.serio->dev;
893 input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP) | BIT(EV_MSC);
896 input_dev->evbit[0] |= BIT(EV_LED);
897 input_dev->ledbit[0] = BIT(LED_NUML) | BIT(LED_CAPSL) | BIT(LED_SCROLLL);
901 input_dev->ledbit[0] |= BIT(LED_COMPOSE) | BIT(LED_SUSPEND) |
902 BIT(LED_SLEEP) | BIT(LED_MUTE) | BIT(LED_MISC);
904 if (!atkbd->softrepeat) {
905 input_dev->rep[REP_DELAY] = 250;
906 input_dev->rep[REP_PERIOD] = 33;
909 input_dev->mscbit[0] = atkbd->softraw ? BIT(MSC_SCAN) : BIT(MSC_RAW) | BIT(MSC_SCAN);
912 input_dev->evbit[0] |= BIT(EV_REL);
913 input_dev->relbit[0] = BIT(REL_WHEEL) | BIT(REL_HWHEEL);
914 set_bit(BTN_MIDDLE, input_dev->keybit);
917 input_dev->keycode = atkbd->keycode;
918 input_dev->keycodesize = sizeof(unsigned char);
919 input_dev->keycodemax = ARRAY_SIZE(atkbd_set2_keycode);
921 for (i = 0; i < 512; i++)
922 if (atkbd->keycode[i] && atkbd->keycode[i] < ATKBD_SPECIAL)
923 set_bit(atkbd->keycode[i], input_dev->keybit);
927 * atkbd_connect() is called when the serio module finds an interface
928 * that isn't handled yet by an appropriate device driver. We check if
929 * there is an AT keyboard out there and if yes, we register ourselves
930 * to the input module.
933 static int atkbd_connect(struct serio *serio, struct serio_driver *drv)
936 struct input_dev *dev;
939 atkbd = kzalloc(sizeof(struct atkbd), GFP_KERNEL);
940 dev = input_allocate_device();
945 ps2_init(&atkbd->ps2dev, serio);
946 INIT_WORK(&atkbd->event_work, atkbd_event_work, atkbd);
947 mutex_init(&atkbd->event_mutex);
949 switch (serio->id.type) {
952 atkbd->translated = 1;
959 atkbd->softraw = atkbd_softraw;
960 atkbd->softrepeat = atkbd_softrepeat;
961 atkbd->scroll = atkbd_scroll;
963 if (atkbd->softrepeat)
966 serio_set_drvdata(serio, atkbd);
968 err = serio_open(serio, drv);
974 if (atkbd_probe(atkbd)) {
980 atkbd->set = atkbd_select_set(atkbd, atkbd_set, atkbd_extra);
981 atkbd_activate(atkbd);
988 atkbd_set_keycode_table(atkbd);
989 atkbd_set_device_attrs(atkbd);
991 sysfs_create_group(&serio->dev.kobj, &atkbd_attribute_group);
995 input_register_device(atkbd->dev);
999 fail: serio_set_drvdata(serio, NULL);
1000 input_free_device(dev);
1006 * atkbd_reconnect() tries to restore keyboard into a sane state and is
1007 * most likely called on resume.
1010 static int atkbd_reconnect(struct serio *serio)
1012 struct atkbd *atkbd = serio_get_drvdata(serio);
1013 struct serio_driver *drv = serio->drv;
1015 if (!atkbd || !drv) {
1016 printk(KERN_DEBUG "atkbd: reconnect request, but serio is disconnected, ignoring...\n");
1020 atkbd_disable(atkbd);
1023 if (atkbd_probe(atkbd))
1025 if (atkbd->set != atkbd_select_set(atkbd, atkbd->set, atkbd->extra))
1028 atkbd_activate(atkbd);
1031 * Restore repeat rate and LEDs (that were reset by atkbd_activate)
1032 * to pre-resume state
1034 if (!atkbd->softrepeat)
1035 atkbd_set_repeat_rate(atkbd);
1036 atkbd_set_leds(atkbd);
1039 atkbd_enable(atkbd);
1044 static struct serio_device_id atkbd_serio_ids[] = {
1052 .type = SERIO_8042_XL,
1058 .type = SERIO_RS232,
1059 .proto = SERIO_PS2SER,
1066 MODULE_DEVICE_TABLE(serio, atkbd_serio_ids);
1068 static struct serio_driver atkbd_drv = {
1072 .description = DRIVER_DESC,
1073 .id_table = atkbd_serio_ids,
1074 .interrupt = atkbd_interrupt,
1075 .connect = atkbd_connect,
1076 .reconnect = atkbd_reconnect,
1077 .disconnect = atkbd_disconnect,
1078 .cleanup = atkbd_cleanup,
1081 static ssize_t atkbd_attr_show_helper(struct device *dev, char *buf,
1082 ssize_t (*handler)(struct atkbd *, char *))
1084 struct serio *serio = to_serio_port(dev);
1087 retval = serio_pin_driver(serio);
1091 if (serio->drv != &atkbd_drv) {
1096 retval = handler((struct atkbd *)serio_get_drvdata(serio), buf);
1099 serio_unpin_driver(serio);
1103 static ssize_t atkbd_attr_set_helper(struct device *dev, const char *buf, size_t count,
1104 ssize_t (*handler)(struct atkbd *, const char *, size_t))
1106 struct serio *serio = to_serio_port(dev);
1107 struct atkbd *atkbd;
1110 retval = serio_pin_driver(serio);
1114 if (serio->drv != &atkbd_drv) {
1119 atkbd = serio_get_drvdata(serio);
1120 atkbd_disable(atkbd);
1121 retval = handler(atkbd, buf, count);
1122 atkbd_enable(atkbd);
1125 serio_unpin_driver(serio);
1129 static ssize_t atkbd_show_extra(struct atkbd *atkbd, char *buf)
1131 return sprintf(buf, "%d\n", atkbd->extra ? 1 : 0);
1134 static ssize_t atkbd_set_extra(struct atkbd *atkbd, const char *buf, size_t count)
1136 struct input_dev *new_dev;
1137 unsigned long value;
1143 value = simple_strtoul(buf, &rest, 10);
1144 if (*rest || value > 1)
1147 if (atkbd->extra != value) {
1149 * Since device's properties will change we need to
1150 * unregister old device. But allocate new one first
1151 * to make sure we have it.
1153 if (!(new_dev = input_allocate_device()))
1155 input_unregister_device(atkbd->dev);
1156 atkbd->dev = new_dev;
1157 atkbd->set = atkbd_select_set(atkbd, atkbd->set, value);
1158 atkbd_activate(atkbd);
1159 atkbd_set_device_attrs(atkbd);
1160 input_register_device(atkbd->dev);
1165 static ssize_t atkbd_show_scroll(struct atkbd *atkbd, char *buf)
1167 return sprintf(buf, "%d\n", atkbd->scroll ? 1 : 0);
1170 static ssize_t atkbd_set_scroll(struct atkbd *atkbd, const char *buf, size_t count)
1172 struct input_dev *new_dev;
1173 unsigned long value;
1176 value = simple_strtoul(buf, &rest, 10);
1177 if (*rest || value > 1)
1180 if (atkbd->scroll != value) {
1181 if (!(new_dev = input_allocate_device()))
1183 input_unregister_device(atkbd->dev);
1184 atkbd->dev = new_dev;
1185 atkbd->scroll = value;
1186 atkbd_set_keycode_table(atkbd);
1187 atkbd_set_device_attrs(atkbd);
1188 input_register_device(atkbd->dev);
1193 static ssize_t atkbd_show_set(struct atkbd *atkbd, char *buf)
1195 return sprintf(buf, "%d\n", atkbd->set);
1198 static ssize_t atkbd_set_set(struct atkbd *atkbd, const char *buf, size_t count)
1200 struct input_dev *new_dev;
1201 unsigned long value;
1207 value = simple_strtoul(buf, &rest, 10);
1208 if (*rest || (value != 2 && value != 3))
1211 if (atkbd->set != value) {
1212 if (!(new_dev = input_allocate_device()))
1214 input_unregister_device(atkbd->dev);
1215 atkbd->dev = new_dev;
1216 atkbd->set = atkbd_select_set(atkbd, value, atkbd->extra);
1217 atkbd_activate(atkbd);
1218 atkbd_set_keycode_table(atkbd);
1219 atkbd_set_device_attrs(atkbd);
1220 input_register_device(atkbd->dev);
1225 static ssize_t atkbd_show_softrepeat(struct atkbd *atkbd, char *buf)
1227 return sprintf(buf, "%d\n", atkbd->softrepeat ? 1 : 0);
1230 static ssize_t atkbd_set_softrepeat(struct atkbd *atkbd, const char *buf, size_t count)
1232 struct input_dev *new_dev;
1233 unsigned long value;
1239 value = simple_strtoul(buf, &rest, 10);
1240 if (*rest || value > 1)
1243 if (atkbd->softrepeat != value) {
1244 if (!(new_dev = input_allocate_device()))
1246 input_unregister_device(atkbd->dev);
1247 atkbd->dev = new_dev;
1248 atkbd->softrepeat = value;
1249 if (atkbd->softrepeat)
1251 atkbd_set_device_attrs(atkbd);
1252 input_register_device(atkbd->dev);
1258 static ssize_t atkbd_show_softraw(struct atkbd *atkbd, char *buf)
1260 return sprintf(buf, "%d\n", atkbd->softraw ? 1 : 0);
1263 static ssize_t atkbd_set_softraw(struct atkbd *atkbd, const char *buf, size_t count)
1265 struct input_dev *new_dev;
1266 unsigned long value;
1269 value = simple_strtoul(buf, &rest, 10);
1270 if (*rest || value > 1)
1273 if (atkbd->softraw != value) {
1274 if (!(new_dev = input_allocate_device()))
1276 input_unregister_device(atkbd->dev);
1277 atkbd->dev = new_dev;
1278 atkbd->softraw = value;
1279 atkbd_set_device_attrs(atkbd);
1280 input_register_device(atkbd->dev);
1285 static ssize_t atkbd_show_err_count(struct atkbd *atkbd, char *buf)
1287 return sprintf(buf, "%lu\n", atkbd->err_count);
1291 static int __init atkbd_init(void)
1293 serio_register_driver(&atkbd_drv);
1297 static void __exit atkbd_exit(void)
1299 serio_unregister_driver(&atkbd_drv);
1302 module_init(atkbd_init);
1303 module_exit(atkbd_exit);