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/timer.h>
31 MODULE_AUTHOR("Vojtech Pavlik <vojtech@suse.cz>");
32 MODULE_DESCRIPTION("AT and PS/2 keyboard driver");
33 MODULE_LICENSE("GPL");
35 static int atkbd_set = 2;
36 module_param_named(set, atkbd_set, int, 0);
37 MODULE_PARM_DESC(set, "Select keyboard code set (2 = default, 3 = PS/2 native)");
39 #if defined(__i386__) || defined(__x86_64__) || defined(__hppa__)
40 static int atkbd_reset;
42 static int atkbd_reset = 1;
44 module_param_named(reset, atkbd_reset, bool, 0);
45 MODULE_PARM_DESC(reset, "Reset keyboard during initialization");
47 static int atkbd_softrepeat;
48 module_param_named(softrepeat, atkbd_softrepeat, bool, 0);
49 MODULE_PARM_DESC(softrepeat, "Use software keyboard repeat");
51 static int atkbd_scroll;
52 module_param_named(scroll, atkbd_scroll, bool, 0);
53 MODULE_PARM_DESC(scroll, "Enable scroll-wheel on MS Office and similar keyboards");
55 static int atkbd_extra;
56 module_param_named(extra, atkbd_extra, bool, 0);
57 MODULE_PARM_DESC(extra, "Enable extra LEDs and keys on IBM RapidAcces, EzKey and similar keyboards");
59 __obsolete_setup("atkbd_set=");
60 __obsolete_setup("atkbd_reset");
61 __obsolete_setup("atkbd_softrepeat=");
64 * Scancode to keycode tables. These are just the default setting, and
65 * are loadable via an userland utility.
69 #include "hpps2atkbd.h"
72 static unsigned char atkbd_set2_keycode[512] = {
74 0, 67, 65, 63, 61, 59, 60, 88, 0, 68, 66, 64, 62, 15, 41,117,
75 0, 56, 42, 93, 29, 16, 2, 0, 0, 0, 44, 31, 30, 17, 3, 0,
76 0, 46, 45, 32, 18, 5, 4, 95, 0, 57, 47, 33, 20, 19, 6,183,
77 0, 49, 48, 35, 34, 21, 7,184, 0, 0, 50, 36, 22, 8, 9,185,
78 0, 51, 37, 23, 24, 11, 10, 0, 0, 52, 53, 38, 39, 25, 12, 0,
79 0, 89, 40, 0, 26, 13, 0, 0, 58, 54, 28, 27, 0, 43, 0, 85,
80 0, 86, 91, 90, 92, 0, 14, 94, 0, 79,124, 75, 71,121, 0, 0,
81 82, 83, 80, 76, 77, 72, 1, 69, 87, 78, 81, 74, 55, 73, 70, 99,
83 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
84 217,100,255, 0, 97,165, 0, 0,156, 0, 0, 0, 0, 0, 0,125,
85 173,114, 0,113, 0, 0, 0,126,128, 0, 0,140, 0, 0, 0,127,
86 159, 0,115, 0,164, 0, 0,116,158, 0,150,166, 0, 0, 0,142,
87 157, 0, 0, 0, 0, 0, 0, 0,155, 0, 98, 0, 0,163, 0, 0,
88 226, 0, 0, 0, 0, 0, 0, 0, 0,255, 96, 0, 0, 0,143, 0,
89 0, 0, 0, 0, 0, 0, 0, 0, 0,107, 0,105,102, 0, 0,112,
90 110,111,108,112,106,103, 0,119, 0,118,109, 0, 99,104,119, 0,
97 static unsigned char atkbd_set3_keycode[512] = {
99 0, 0, 0, 0, 0, 0, 0, 59, 1,138,128,129,130, 15, 41, 60,
100 131, 29, 42, 86, 58, 16, 2, 61,133, 56, 44, 31, 30, 17, 3, 62,
101 134, 46, 45, 32, 18, 5, 4, 63,135, 57, 47, 33, 20, 19, 6, 64,
102 136, 49, 48, 35, 34, 21, 7, 65,137,100, 50, 36, 22, 8, 9, 66,
103 125, 51, 37, 23, 24, 11, 10, 67,126, 52, 53, 38, 39, 25, 12, 68,
104 113,114, 40, 43, 26, 13, 87, 99, 97, 54, 28, 27, 43, 43, 88, 70,
105 108,105,119,103,111,107, 14,110, 0, 79,106, 75, 71,109,102,104,
106 82, 83, 80, 76, 77, 72, 69, 98, 0, 96, 81, 0, 78, 73, 55,183,
108 184,185,186,187, 74, 94, 92, 93, 0, 0, 0,125,126,127,112, 0,
109 0,139,150,163,165,115,152,150,166,140,160,154,113,114,167,168,
113 static unsigned char atkbd_unxlate_table[128] = {
114 0,118, 22, 30, 38, 37, 46, 54, 61, 62, 70, 69, 78, 85,102, 13,
115 21, 29, 36, 45, 44, 53, 60, 67, 68, 77, 84, 91, 90, 20, 28, 27,
116 35, 43, 52, 51, 59, 66, 75, 76, 82, 14, 18, 93, 26, 34, 33, 42,
117 50, 49, 58, 65, 73, 74, 89,124, 17, 41, 88, 5, 6, 4, 12, 3,
118 11, 2, 10, 1, 9,119,126,108,117,125,123,107,115,116,121,105,
119 114,122,112,113,127, 96, 97,120, 7, 15, 23, 31, 39, 47, 55, 63,
120 71, 79, 86, 94, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 87,111,
121 19, 25, 57, 81, 83, 92, 95, 98, 99,100,101,103,104,106,109,110
124 #define ATKBD_CMD_SETLEDS 0x10ed
125 #define ATKBD_CMD_GSCANSET 0x11f0
126 #define ATKBD_CMD_SSCANSET 0x10f0
127 #define ATKBD_CMD_GETID 0x02f2
128 #define ATKBD_CMD_SETREP 0x10f3
129 #define ATKBD_CMD_ENABLE 0x00f4
130 #define ATKBD_CMD_RESET_DIS 0x00f5
131 #define ATKBD_CMD_SETALL_MBR 0x00fa
132 #define ATKBD_CMD_RESET_BAT 0x02ff
133 #define ATKBD_CMD_RESEND 0x00fe
134 #define ATKBD_CMD_EX_ENABLE 0x10ea
135 #define ATKBD_CMD_EX_SETLEDS 0x20eb
136 #define ATKBD_CMD_OK_GETID 0x02e8
139 #define ATKBD_RET_ACK 0xfa
140 #define ATKBD_RET_NAK 0xfe
141 #define ATKBD_RET_BAT 0xaa
142 #define ATKBD_RET_EMUL0 0xe0
143 #define ATKBD_RET_EMUL1 0xe1
144 #define ATKBD_RET_RELEASE 0xf0
145 #define ATKBD_RET_HANGUEL 0xf1
146 #define ATKBD_RET_HANJA 0xf2
147 #define ATKBD_RET_ERR 0xff
149 #define ATKBD_KEY_UNKNOWN 0
150 #define ATKBD_KEY_NULL 255
152 #define ATKBD_SCR_1 254
153 #define ATKBD_SCR_2 253
154 #define ATKBD_SCR_4 252
155 #define ATKBD_SCR_8 251
156 #define ATKBD_SCR_CLICK 250
158 #define ATKBD_SPECIAL 250
160 static unsigned char atkbd_scroll_keys[5][2] = {
161 { ATKBD_SCR_1, 0x45 },
162 { ATKBD_SCR_2, 0x29 },
163 { ATKBD_SCR_4, 0x36 },
164 { ATKBD_SCR_8, 0x27 },
165 { ATKBD_SCR_CLICK, 0x60 },
169 * The atkbd control structure
173 unsigned char keycode[512];
174 struct input_dev dev;
176 struct timer_list timer;
179 unsigned char cmdbuf[4];
180 unsigned char cmdcnt;
183 unsigned char release;
185 volatile signed char ack;
189 unsigned char translated;
190 unsigned char resend;
191 unsigned char bat_xl;
196 static void atkbd_report_key(struct input_dev *dev, struct pt_regs *regs, int code, int value)
198 input_regs(dev, regs);
200 input_report_key(dev, code, 1);
201 input_report_key(dev, code, 0);
203 input_event(dev, EV_KEY, code, value);
208 * atkbd_interrupt(). Here takes place processing of data received from
209 * the keyboard into events.
212 static irqreturn_t atkbd_interrupt(struct serio *serio, unsigned char data,
213 unsigned int flags, struct pt_regs *regs)
215 struct atkbd *atkbd = serio->private;
216 unsigned int code = data;
217 int scroll = 0, click = -1;
221 printk(KERN_DEBUG "atkbd.c: Received %02x flags %02x\n", data, flags);
224 #if !defined(__i386__) && !defined (__x86_64__)
225 if ((flags & (SERIO_FRAME | SERIO_PARITY)) && (~flags & SERIO_TIMEOUT) && !atkbd->resend && atkbd->write) {
226 printk("atkbd.c: frame/parity error: %02x\n", flags);
227 serio_write(serio, ATKBD_CMD_RESEND);
232 if (!flags && data == ATKBD_RET_ACK)
247 atkbd->cmdbuf[--atkbd->cmdcnt] = code;
251 if (atkbd->translated) {
254 !(code == ATKBD_RET_EMUL0 || code == ATKBD_RET_EMUL1 ||
255 code == ATKBD_RET_HANGUEL || code == ATKBD_RET_HANJA ||
256 code == ATKBD_RET_ERR ||
257 (code == ATKBD_RET_BAT && !atkbd->bat_xl))) {
258 atkbd->release = code >> 7;
263 (code & 0x7f) == (ATKBD_RET_BAT & 0x7f))
264 atkbd->bat_xl = !atkbd->release;
269 serio_rescan(atkbd->serio);
271 case ATKBD_RET_EMUL0:
274 case ATKBD_RET_EMUL1:
277 case ATKBD_RET_RELEASE:
280 case ATKBD_RET_HANGUEL:
281 atkbd_report_key(&atkbd->dev, regs, KEY_HANGUEL, 3);
283 case ATKBD_RET_HANJA:
284 atkbd_report_key(&atkbd->dev, regs, KEY_HANJA, 3);
287 printk(KERN_WARNING "atkbd.c: Keyboard on %s reports too many keys pressed.\n", serio->phys);
292 code = (code & 0x7f) | ((code & 0x80) << 1);
296 code |= (atkbd->set != 3) ? 0x80 : 0x100;
299 switch (atkbd->keycode[code]) {
302 case ATKBD_KEY_UNKNOWN:
303 printk(KERN_WARNING "atkbd.c: Unknown key %s (%s set %d, code %#x on %s).\n",
304 atkbd->release ? "released" : "pressed",
305 atkbd->translated ? "translated" : "raw",
306 atkbd->set, code, serio->phys);
307 if (atkbd->translated && atkbd->set == 2 && code == 0x7a)
308 printk(KERN_WARNING "atkbd.c: This is an XFree86 bug. It shouldn't access"
309 " hardware directly.\n");
311 printk(KERN_WARNING "atkbd.c: Use 'setkeycodes %s%02x <keycode>' to make it known.\n", code & 0x80 ? "e0" : "", code & 0x7f);
314 scroll = 1 - atkbd->release * 2;
317 scroll = 2 - atkbd->release * 4;
320 scroll = 4 - atkbd->release * 8;
323 scroll = 8 - atkbd->release * 16;
325 case ATKBD_SCR_CLICK:
326 click = !atkbd->release;
329 value = atkbd->release ? 0 :
330 (1 + (!atkbd_softrepeat && test_bit(atkbd->keycode[code], atkbd->dev.key)));
332 switch (value) { /* Workaround Toshiba laptop multiple keypress */
338 atkbd->time = jiffies + (atkbd->dev.rep[REP_DELAY] * HZ + 500) / 1000 / 2;
341 if (!time_after(jiffies, atkbd->time) && atkbd->last == code)
346 atkbd_report_key(&atkbd->dev, regs, atkbd->keycode[code], value);
349 if (scroll || click != -1) {
350 input_regs(&atkbd->dev, regs);
351 input_report_key(&atkbd->dev, BTN_MIDDLE, click);
352 input_report_rel(&atkbd->dev, REL_WHEEL, scroll);
353 input_sync(&atkbd->dev);
362 * atkbd_sendbyte() sends a byte to the keyboard, and waits for
363 * acknowledge. It doesn't handle resends according to the keyboard
364 * protocol specs, because if these are needed, the keyboard needs
365 * replacement anyway, and they only make a mess in the protocol.
368 static int atkbd_sendbyte(struct atkbd *atkbd, unsigned char byte)
370 int timeout = 20000; /* 200 msec */
374 printk(KERN_DEBUG "atkbd.c: Sent: %02x\n", byte);
376 if (serio_write(atkbd->serio, byte))
379 while (!atkbd->ack && timeout--) udelay(10);
381 return -(atkbd->ack <= 0);
385 * atkbd_command() sends a command, and its parameters to the keyboard,
386 * then waits for the response and puts it in the param array.
389 static int atkbd_command(struct atkbd *atkbd, unsigned char *param, int command)
391 int timeout = 500000; /* 500 msec */
392 int send = (command >> 12) & 0xf;
393 int receive = (command >> 8) & 0xf;
396 atkbd->cmdcnt = receive;
398 if (command == ATKBD_CMD_RESET_BAT)
399 timeout = 2000000; /* 2 sec */
401 if (receive && param)
402 for (i = 0; i < receive; i++)
403 atkbd->cmdbuf[(receive - 1) - i] = param[i];
406 if (atkbd_sendbyte(atkbd, command & 0xff))
407 return (atkbd->cmdcnt = 0) - 1;
409 for (i = 0; i < send; i++)
410 if (atkbd_sendbyte(atkbd, param[i]))
411 return (atkbd->cmdcnt = 0) - 1;
413 while (atkbd->cmdcnt && timeout--) {
415 if (atkbd->cmdcnt == 1 &&
416 command == ATKBD_CMD_RESET_BAT && timeout > 100000)
419 if (atkbd->cmdcnt == 1 && command == ATKBD_CMD_GETID &&
420 atkbd->cmdbuf[1] != 0xab && atkbd->cmdbuf[1] != 0xac) {
429 for (i = 0; i < receive; i++)
430 param[i] = atkbd->cmdbuf[(receive - 1) - i];
432 if (command == ATKBD_CMD_RESET_BAT && atkbd->cmdcnt == 1)
444 * Event callback from the input module. Events that change the state of
445 * the hardware are processed here.
448 static int atkbd_event(struct input_dev *dev, unsigned int type, unsigned int code, int value)
450 struct atkbd *atkbd = dev->private;
451 const short period[32] =
452 { 33, 37, 42, 46, 50, 54, 58, 63, 67, 75, 83, 92, 100, 109, 116, 125,
453 133, 149, 167, 182, 200, 217, 232, 250, 270, 303, 333, 370, 400, 435, 470, 500 };
454 const short delay[4] =
455 { 250, 500, 750, 1000 };
456 unsigned char param[2];
466 param[0] = (test_bit(LED_SCROLLL, dev->led) ? 1 : 0)
467 | (test_bit(LED_NUML, dev->led) ? 2 : 0)
468 | (test_bit(LED_CAPSL, dev->led) ? 4 : 0);
469 atkbd_command(atkbd, param, ATKBD_CMD_SETLEDS);
473 param[1] = (test_bit(LED_COMPOSE, dev->led) ? 0x01 : 0)
474 | (test_bit(LED_SLEEP, dev->led) ? 0x02 : 0)
475 | (test_bit(LED_SUSPEND, dev->led) ? 0x04 : 0)
476 | (test_bit(LED_MISC, dev->led) ? 0x10 : 0)
477 | (test_bit(LED_MUTE, dev->led) ? 0x20 : 0);
478 atkbd_command(atkbd, param, ATKBD_CMD_EX_SETLEDS);
486 if (atkbd_softrepeat) return 0;
489 while (i < 32 && period[i] < dev->rep[REP_PERIOD]) i++;
490 while (j < 4 && delay[j] < dev->rep[REP_DELAY]) j++;
491 dev->rep[REP_PERIOD] = period[i];
492 dev->rep[REP_DELAY] = delay[j];
493 param[0] = i | (j << 5);
494 atkbd_command(atkbd, param, ATKBD_CMD_SETREP);
503 * atkbd_probe() probes for an AT keyboard on a serio port.
506 static int atkbd_probe(struct atkbd *atkbd)
508 unsigned char param[2];
511 * Some systems, where the bit-twiddling when testing the io-lines of the
512 * controller may confuse the keyboard need a full reset of the keyboard. On
513 * these systems the BIOS also usually doesn't do it for us.
517 if (atkbd_command(atkbd, NULL, ATKBD_CMD_RESET_BAT))
518 printk(KERN_WARNING "atkbd.c: keyboard reset failed on %s\n", atkbd->serio->phys);
521 * Then we check the keyboard ID. We should get 0xab83 under normal conditions.
522 * Some keyboards report different values, but the first byte is always 0xab or
523 * 0xac. Some old AT keyboards don't report anything. If a mouse is connected, this
524 * should make sure we don't try to set the LEDs on it.
527 param[0] = param[1] = 0xa5; /* initialize with invalid values */
528 if (atkbd_command(atkbd, param, ATKBD_CMD_GETID)) {
531 * If the get ID command failed, we check if we can at least set the LEDs on
532 * the keyboard. This should work on every keyboard out there. It also turns
533 * the LEDs off, which we want anyway.
536 if (atkbd_command(atkbd, param, ATKBD_CMD_SETLEDS))
542 if (param[0] != 0xab && param[0] != 0xac)
544 atkbd->id = (param[0] << 8) | param[1];
546 if (atkbd->id == 0xaca1 && atkbd->translated) {
547 printk(KERN_ERR "atkbd.c: NCD terminal keyboards are only supported on non-translating\n");
548 printk(KERN_ERR "atkbd.c: controllers. Use i8042.direct=1 to disable translation.\n");
556 * atkbd_set_3 checks if a keyboard has a working Set 3 support, and
557 * sets it into that. Unfortunately there are keyboards that can be switched
558 * to Set 3, but don't work well in that (BTC Multimedia ...)
561 static int atkbd_set_3(struct atkbd *atkbd)
563 unsigned char param[2];
566 * For known special keyboards we can go ahead and set the correct set.
567 * We check for NCD PS/2 Sun, NorthGate OmniKey 101 and
568 * IBM RapidAccess / IBM EzButton / Chicony KBP-8993 keyboards.
571 if (atkbd->translated)
574 if (atkbd->id == 0xaca1) {
576 atkbd_command(atkbd, param, ATKBD_CMD_SSCANSET);
582 if (!atkbd_command(atkbd, param, ATKBD_CMD_EX_ENABLE)) {
591 if (!atkbd_command(atkbd, param, ATKBD_CMD_OK_GETID)) {
592 atkbd->id = param[0] << 8 | param[1];
597 if (atkbd_command(atkbd, param, ATKBD_CMD_SSCANSET))
601 if (atkbd_command(atkbd, param, ATKBD_CMD_GSCANSET))
606 if (atkbd_command(atkbd, param, ATKBD_CMD_SSCANSET))
610 atkbd_command(atkbd, param, ATKBD_CMD_SETALL_MBR);
615 static int atkbd_enable(struct atkbd *atkbd)
617 unsigned char param[1];
620 * Set the LEDs to a defined state.
624 if (atkbd_command(atkbd, param, ATKBD_CMD_SETLEDS))
628 * Set autorepeat to fastest possible.
632 if (atkbd_command(atkbd, param, ATKBD_CMD_SETREP))
636 * Enable the keyboard to receive keystrokes.
639 if (atkbd_command(atkbd, NULL, ATKBD_CMD_ENABLE)) {
640 printk(KERN_ERR "atkbd.c: Failed to enable keyboard on %s\n",
649 * atkbd_cleanup() restores the keyboard state so that BIOS is happy after a
653 static void atkbd_cleanup(struct serio *serio)
655 struct atkbd *atkbd = serio->private;
656 atkbd_command(atkbd, NULL, ATKBD_CMD_RESET_BAT);
660 * atkbd_disconnect() closes and frees.
663 static void atkbd_disconnect(struct serio *serio)
665 struct atkbd *atkbd = serio->private;
666 input_unregister_device(&atkbd->dev);
672 * atkbd_connect() is called when the serio module finds and interface
673 * that isn't handled yet by an appropriate device driver. We check if
674 * there is an AT keyboard out there and if yes, we register ourselves
675 * to the input module.
678 static void atkbd_connect(struct serio *serio, struct serio_dev *dev)
683 if (!(atkbd = kmalloc(sizeof(struct atkbd), GFP_KERNEL)))
685 memset(atkbd, 0, sizeof(struct atkbd));
687 switch (serio->type & SERIO_TYPE) {
690 atkbd->translated = 1;
696 if ((serio->type & SERIO_PROTO) == SERIO_PS2SER)
704 atkbd->dev.evbit[0] = BIT(EV_KEY) | BIT(EV_LED) | BIT(EV_REP);
705 atkbd->dev.ledbit[0] = BIT(LED_NUML) | BIT(LED_CAPSL) | BIT(LED_SCROLLL);
706 } else atkbd->dev.evbit[0] = BIT(EV_KEY) | BIT(EV_REP);
708 if (!atkbd_softrepeat) {
709 atkbd->dev.rep[REP_DELAY] = 250;
710 atkbd->dev.rep[REP_PERIOD] = 33;
714 atkbd->serio = serio;
716 init_input_dev(&atkbd->dev);
718 atkbd->dev.keycode = atkbd->keycode;
719 atkbd->dev.keycodesize = sizeof(unsigned char);
720 atkbd->dev.keycodemax = ARRAY_SIZE(atkbd_set2_keycode);
721 atkbd->dev.event = atkbd_event;
722 atkbd->dev.private = atkbd;
724 serio->private = atkbd;
726 if (serio_open(serio, dev)) {
733 if (atkbd_probe(atkbd)) {
735 serio->private = NULL;
740 atkbd->set = atkbd_set_3(atkbd);
749 atkbd->dev.ledbit[0] |= BIT(LED_COMPOSE) | BIT(LED_SUSPEND) | BIT(LED_SLEEP) | BIT(LED_MUTE) | BIT(LED_MISC);
750 sprintf(atkbd->name, "AT Set 2 Extra keyboard");
752 sprintf(atkbd->name, "AT %s Set %d keyboard",
753 atkbd->translated ? "Translated" : "Raw", atkbd->set);
755 sprintf(atkbd->phys, "%s/input0", serio->phys);
758 for (i = 0; i < 5; i++)
759 atkbd_set2_keycode[atkbd_scroll_keys[i][1]] = atkbd_scroll_keys[i][0];
760 atkbd->dev.evbit[0] |= BIT(EV_REL);
761 atkbd->dev.relbit[0] = BIT(REL_WHEEL);
762 set_bit(BTN_MIDDLE, atkbd->dev.keybit);
765 if (atkbd->translated) {
766 for (i = 0; i < 128; i++) {
767 atkbd->keycode[i] = atkbd_set2_keycode[atkbd_unxlate_table[i]];
768 atkbd->keycode[i | 0x80] = atkbd_set2_keycode[atkbd_unxlate_table[i] | 0x80];
770 } else if (atkbd->set == 3) {
771 memcpy(atkbd->keycode, atkbd_set3_keycode, sizeof(atkbd->keycode));
773 memcpy(atkbd->keycode, atkbd_set2_keycode, sizeof(atkbd->keycode));
776 atkbd->dev.name = atkbd->name;
777 atkbd->dev.phys = atkbd->phys;
778 atkbd->dev.id.bustype = BUS_I8042;
779 atkbd->dev.id.vendor = 0x0001;
780 atkbd->dev.id.product = atkbd->translated ? 1 : atkbd->set;
781 atkbd->dev.id.version = atkbd->id;
783 for (i = 0; i < 512; i++)
784 if (atkbd->keycode[i] && atkbd->keycode[i] < ATKBD_SPECIAL)
785 set_bit(atkbd->keycode[i], atkbd->dev.keybit);
787 input_register_device(&atkbd->dev);
789 printk(KERN_INFO "input: %s on %s\n", atkbd->name, serio->phys);
793 * atkbd_reconnect() tries to restore keyboard into a sane state and is
794 * most likely called on resume.
797 static int atkbd_reconnect(struct serio *serio)
799 struct atkbd *atkbd = serio->private;
800 struct serio_dev *dev = serio->dev;
801 unsigned char param[1];
804 printk(KERN_DEBUG "atkbd: reconnect request, but serio is disconnected, ignoring...\n");
809 param[0] = (test_bit(LED_SCROLLL, atkbd->dev.led) ? 1 : 0)
810 | (test_bit(LED_NUML, atkbd->dev.led) ? 2 : 0)
811 | (test_bit(LED_CAPSL, atkbd->dev.led) ? 4 : 0);
813 if (atkbd_probe(atkbd))
815 if (atkbd->set != atkbd_set_3(atkbd))
820 if (atkbd_command(atkbd, param, ATKBD_CMD_SETLEDS))
827 static struct serio_dev atkbd_dev = {
828 .interrupt = atkbd_interrupt,
829 .connect = atkbd_connect,
830 .reconnect = atkbd_reconnect,
831 .disconnect = atkbd_disconnect,
832 .cleanup = atkbd_cleanup,
835 int __init atkbd_init(void)
837 serio_register_device(&atkbd_dev);
841 void __exit atkbd_exit(void)
843 serio_unregister_device(&atkbd_dev);
846 module_init(atkbd_init);
847 module_exit(atkbd_exit);