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
) {
363 printk(KERN_WARNING
"atkbd.c: Spurious %s on %s. Some program, "
364 "like XFree86, might be trying access hardware directly.\n",
365 data
== ATKBD_RET_ACK
? "ACK" : "NAK", serio
->phys
);
367 printk(KERN_WARNING
"atkbd.c: Unknown key %s "
368 "(%s set %d, code %#x on %s).\n",
369 atkbd
->release
? "released" : "pressed",
370 atkbd
->translated
? "translated" : "raw",
371 atkbd
->set
, code
, serio
->phys
);
372 printk(KERN_WARNING
"atkbd.c: Use 'setkeycodes %s%02x <keycode>' "
373 "to make it known.\n",
374 code
& 0x80 ? "e0" : "", code
& 0x7f);
376 input_sync(atkbd
->dev
);
379 scroll
= 1 - atkbd
->release
* 2;
382 scroll
= 2 - atkbd
->release
* 4;
385 scroll
= 4 - atkbd
->release
* 8;
388 scroll
= 8 - atkbd
->release
* 16;
390 case ATKBD_SCR_CLICK
:
391 click
= !atkbd
->release
;
396 case ATKBD_SCR_RIGHT
:
400 value
= atkbd
->release
? 0 :
401 (1 + (!atkbd
->softrepeat
&& test_bit(atkbd
->keycode
[code
], atkbd
->dev
->key
)));
403 switch (value
) { /* Workaround Toshiba laptop multiple keypress */
409 atkbd
->time
= jiffies
+ msecs_to_jiffies(atkbd
->dev
->rep
[REP_DELAY
]) / 2;
412 if (!time_after(jiffies
, atkbd
->time
) && atkbd
->last
== code
)
417 atkbd_report_key(atkbd
->dev
, regs
, atkbd
->keycode
[code
], value
);
421 input_regs(atkbd
->dev
, regs
);
423 input_report_key(atkbd
->dev
, BTN_MIDDLE
, click
);
424 input_report_rel(atkbd
->dev
, REL_WHEEL
, scroll
);
425 input_report_rel(atkbd
->dev
, REL_HWHEEL
, hscroll
);
426 input_sync(atkbd
->dev
);
435 * atkbd_event_work() is used to complete processing of events that
436 * can not be processed by input_event() which is often called from
440 static void atkbd_event_work(void *data
)
442 const short period
[32] =
443 { 33, 37, 42, 46, 50, 54, 58, 63, 67, 75, 83, 92, 100, 109, 116, 125,
444 133, 149, 167, 182, 200, 217, 232, 250, 270, 303, 333, 370, 400, 435, 470, 500 };
445 const short delay
[4] =
446 { 250, 500, 750, 1000 };
448 struct atkbd
*atkbd
= data
;
449 struct input_dev
*dev
= atkbd
->dev
;
450 unsigned char param
[2];
453 mutex_lock(&atkbd
->event_mutex
);
455 if (test_and_clear_bit(ATKBD_LED_EVENT_BIT
, &atkbd
->event_mask
)) {
456 param
[0] = (test_bit(LED_SCROLLL
, dev
->led
) ? 1 : 0)
457 | (test_bit(LED_NUML
, dev
->led
) ? 2 : 0)
458 | (test_bit(LED_CAPSL
, dev
->led
) ? 4 : 0);
459 ps2_command(&atkbd
->ps2dev
, param
, ATKBD_CMD_SETLEDS
);
463 param
[1] = (test_bit(LED_COMPOSE
, dev
->led
) ? 0x01 : 0)
464 | (test_bit(LED_SLEEP
, dev
->led
) ? 0x02 : 0)
465 | (test_bit(LED_SUSPEND
, dev
->led
) ? 0x04 : 0)
466 | (test_bit(LED_MISC
, dev
->led
) ? 0x10 : 0)
467 | (test_bit(LED_MUTE
, dev
->led
) ? 0x20 : 0);
468 ps2_command(&atkbd
->ps2dev
, param
, ATKBD_CMD_EX_SETLEDS
);
472 if (test_and_clear_bit(ATKBD_REP_EVENT_BIT
, &atkbd
->event_mask
)) {
474 while (i
< 31 && period
[i
] < dev
->rep
[REP_PERIOD
])
476 while (j
< 3 && delay
[j
] < dev
->rep
[REP_DELAY
])
478 dev
->rep
[REP_PERIOD
] = period
[i
];
479 dev
->rep
[REP_DELAY
] = delay
[j
];
480 param
[0] = i
| (j
<< 5);
481 ps2_command(&atkbd
->ps2dev
, param
, ATKBD_CMD_SETREP
);
484 mutex_unlock(&atkbd
->event_mutex
);
488 * Event callback from the input module. Events that change the state of
489 * the hardware are processed here. If action can not be performed in
490 * interrupt context it is offloaded to atkbd_event_work.
493 static int atkbd_event(struct input_dev
*dev
, unsigned int type
, unsigned int code
, int value
)
495 struct atkbd
*atkbd
= dev
->private;
503 set_bit(ATKBD_LED_EVENT_BIT
, &atkbd
->event_mask
);
505 schedule_work(&atkbd
->event_work
);
510 if (!atkbd
->softrepeat
) {
511 set_bit(ATKBD_REP_EVENT_BIT
, &atkbd
->event_mask
);
513 schedule_work(&atkbd
->event_work
);
523 * atkbd_enable() signals that interrupt handler is allowed to
524 * generate input events.
527 static inline void atkbd_enable(struct atkbd
*atkbd
)
529 serio_pause_rx(atkbd
->ps2dev
.serio
);
531 serio_continue_rx(atkbd
->ps2dev
.serio
);
535 * atkbd_disable() tells input handler that all incoming data except
536 * for ACKs and command response should be dropped.
539 static inline void atkbd_disable(struct atkbd
*atkbd
)
541 serio_pause_rx(atkbd
->ps2dev
.serio
);
543 serio_continue_rx(atkbd
->ps2dev
.serio
);
547 * atkbd_probe() probes for an AT keyboard on a serio port.
550 static int atkbd_probe(struct atkbd
*atkbd
)
552 struct ps2dev
*ps2dev
= &atkbd
->ps2dev
;
553 unsigned char param
[2];
556 * Some systems, where the bit-twiddling when testing the io-lines of the
557 * controller may confuse the keyboard need a full reset of the keyboard. On
558 * these systems the BIOS also usually doesn't do it for us.
562 if (ps2_command(ps2dev
, NULL
, ATKBD_CMD_RESET_BAT
))
563 printk(KERN_WARNING
"atkbd.c: keyboard reset failed on %s\n", ps2dev
->serio
->phys
);
566 * Then we check the keyboard ID. We should get 0xab83 under normal conditions.
567 * Some keyboards report different values, but the first byte is always 0xab or
568 * 0xac. Some old AT keyboards don't report anything. If a mouse is connected, this
569 * should make sure we don't try to set the LEDs on it.
572 param
[0] = param
[1] = 0xa5; /* initialize with invalid values */
573 if (ps2_command(ps2dev
, param
, ATKBD_CMD_GETID
)) {
576 * If the get ID command failed, we check if we can at least set the LEDs on
577 * the keyboard. This should work on every keyboard out there. It also turns
578 * the LEDs off, which we want anyway.
581 if (ps2_command(ps2dev
, param
, ATKBD_CMD_SETLEDS
))
587 if (param
[0] != 0xab && param
[0] != 0xac && /* Regular and NCD Sun keyboards */
588 param
[0] != 0x2b && param
[0] != 0x5d && /* Trust keyboard, raw and translated */
589 param
[0] != 0x60 && param
[0] != 0x47) /* NMB SGI keyboard, raw and translated */
592 atkbd
->id
= (param
[0] << 8) | param
[1];
594 if (atkbd
->id
== 0xaca1 && atkbd
->translated
) {
595 printk(KERN_ERR
"atkbd.c: NCD terminal keyboards are only supported on non-translating\n");
596 printk(KERN_ERR
"atkbd.c: controllers. Use i8042.direct=1 to disable translation.\n");
604 * atkbd_select_set checks if a keyboard has a working Set 3 support, and
605 * sets it into that. Unfortunately there are keyboards that can be switched
606 * to Set 3, but don't work well in that (BTC Multimedia ...)
609 static int atkbd_select_set(struct atkbd
*atkbd
, int target_set
, int allow_extra
)
611 struct ps2dev
*ps2dev
= &atkbd
->ps2dev
;
612 unsigned char param
[2];
616 * For known special keyboards we can go ahead and set the correct set.
617 * We check for NCD PS/2 Sun, NorthGate OmniKey 101 and
618 * IBM RapidAccess / IBM EzButton / Chicony KBP-8993 keyboards.
621 if (atkbd
->translated
)
624 if (atkbd
->id
== 0xaca1) {
626 ps2_command(ps2dev
, param
, ATKBD_CMD_SSCANSET
);
632 if (!ps2_command(ps2dev
, param
, ATKBD_CMD_EX_ENABLE
)) {
641 if (!ps2_command(ps2dev
, param
, ATKBD_CMD_OK_GETID
)) {
642 atkbd
->id
= param
[0] << 8 | param
[1];
647 if (ps2_command(ps2dev
, param
, ATKBD_CMD_SSCANSET
))
651 if (ps2_command(ps2dev
, param
, ATKBD_CMD_GSCANSET
))
656 if (ps2_command(ps2dev
, param
, ATKBD_CMD_SSCANSET
))
660 ps2_command(ps2dev
, param
, ATKBD_CMD_SETALL_MBR
);
665 static int atkbd_activate(struct atkbd
*atkbd
)
667 struct ps2dev
*ps2dev
= &atkbd
->ps2dev
;
668 unsigned char param
[1];
671 * Set the LEDs to a defined state.
675 if (ps2_command(ps2dev
, param
, ATKBD_CMD_SETLEDS
))
679 * Set autorepeat to fastest possible.
683 if (ps2_command(ps2dev
, param
, ATKBD_CMD_SETREP
))
687 * Enable the keyboard to receive keystrokes.
690 if (ps2_command(ps2dev
, NULL
, ATKBD_CMD_ENABLE
)) {
691 printk(KERN_ERR
"atkbd.c: Failed to enable keyboard on %s\n",
692 ps2dev
->serio
->phys
);
700 * atkbd_cleanup() restores the keyboard state so that BIOS is happy after a
704 static void atkbd_cleanup(struct serio
*serio
)
706 struct atkbd
*atkbd
= serio_get_drvdata(serio
);
707 ps2_command(&atkbd
->ps2dev
, NULL
, ATKBD_CMD_RESET_BAT
);
712 * atkbd_disconnect() closes and frees.
715 static void atkbd_disconnect(struct serio
*serio
)
717 struct atkbd
*atkbd
= serio_get_drvdata(serio
);
719 atkbd_disable(atkbd
);
721 /* make sure we don't have a command in flight */
722 synchronize_sched(); /* Allow atkbd_interrupt()s to complete. */
723 flush_scheduled_work();
725 device_remove_file(&serio
->dev
, &atkbd_attr_extra
);
726 device_remove_file(&serio
->dev
, &atkbd_attr_scroll
);
727 device_remove_file(&serio
->dev
, &atkbd_attr_set
);
728 device_remove_file(&serio
->dev
, &atkbd_attr_softrepeat
);
729 device_remove_file(&serio
->dev
, &atkbd_attr_softraw
);
731 input_unregister_device(atkbd
->dev
);
733 serio_set_drvdata(serio
, NULL
);
739 * atkbd_set_keycode_table() initializes keyboard's keycode table
740 * according to the selected scancode set
743 static void atkbd_set_keycode_table(struct atkbd
*atkbd
)
747 memset(atkbd
->keycode
, 0, sizeof(atkbd
->keycode
));
749 if (atkbd
->translated
) {
750 for (i
= 0; i
< 128; i
++) {
751 atkbd
->keycode
[i
] = atkbd_set2_keycode
[atkbd_unxlate_table
[i
]];
752 atkbd
->keycode
[i
| 0x80] = atkbd_set2_keycode
[atkbd_unxlate_table
[i
] | 0x80];
754 for (j
= 0; j
< ARRAY_SIZE(atkbd_scroll_keys
); j
++)
755 if ((atkbd_unxlate_table
[i
] | 0x80) == atkbd_scroll_keys
[j
].set2
)
756 atkbd
->keycode
[i
| 0x80] = atkbd_scroll_keys
[j
].keycode
;
758 } else if (atkbd
->set
== 3) {
759 memcpy(atkbd
->keycode
, atkbd_set3_keycode
, sizeof(atkbd
->keycode
));
761 memcpy(atkbd
->keycode
, atkbd_set2_keycode
, sizeof(atkbd
->keycode
));
764 for (i
= 0; i
< ARRAY_SIZE(atkbd_scroll_keys
); i
++)
765 atkbd
->keycode
[atkbd_scroll_keys
[i
].set2
] = atkbd_scroll_keys
[i
].keycode
;
770 * atkbd_set_device_attrs() sets up keyboard's input device structure
773 static void atkbd_set_device_attrs(struct atkbd
*atkbd
)
775 struct input_dev
*input_dev
= atkbd
->dev
;
779 snprintf(atkbd
->name
, sizeof(atkbd
->name
),
780 "AT Set 2 Extra keyboard");
782 snprintf(atkbd
->name
, sizeof(atkbd
->name
),
783 "AT %s Set %d keyboard",
784 atkbd
->translated
? "Translated" : "Raw", atkbd
->set
);
786 snprintf(atkbd
->phys
, sizeof(atkbd
->phys
),
787 "%s/input0", atkbd
->ps2dev
.serio
->phys
);
789 input_dev
->name
= atkbd
->name
;
790 input_dev
->phys
= atkbd
->phys
;
791 input_dev
->id
.bustype
= BUS_I8042
;
792 input_dev
->id
.vendor
= 0x0001;
793 input_dev
->id
.product
= atkbd
->translated
? 1 : atkbd
->set
;
794 input_dev
->id
.version
= atkbd
->id
;
795 input_dev
->event
= atkbd_event
;
796 input_dev
->private = atkbd
;
797 input_dev
->cdev
.dev
= &atkbd
->ps2dev
.serio
->dev
;
799 input_dev
->evbit
[0] = BIT(EV_KEY
) | BIT(EV_REP
) | BIT(EV_MSC
);
802 input_dev
->evbit
[0] |= BIT(EV_LED
);
803 input_dev
->ledbit
[0] = BIT(LED_NUML
) | BIT(LED_CAPSL
) | BIT(LED_SCROLLL
);
807 input_dev
->ledbit
[0] |= BIT(LED_COMPOSE
) | BIT(LED_SUSPEND
) |
808 BIT(LED_SLEEP
) | BIT(LED_MUTE
) | BIT(LED_MISC
);
810 if (!atkbd
->softrepeat
) {
811 input_dev
->rep
[REP_DELAY
] = 250;
812 input_dev
->rep
[REP_PERIOD
] = 33;
815 input_dev
->mscbit
[0] = atkbd
->softraw
? BIT(MSC_SCAN
) : BIT(MSC_RAW
) | BIT(MSC_SCAN
);
818 input_dev
->evbit
[0] |= BIT(EV_REL
);
819 input_dev
->relbit
[0] = BIT(REL_WHEEL
) | BIT(REL_HWHEEL
);
820 set_bit(BTN_MIDDLE
, input_dev
->keybit
);
823 input_dev
->keycode
= atkbd
->keycode
;
824 input_dev
->keycodesize
= sizeof(unsigned char);
825 input_dev
->keycodemax
= ARRAY_SIZE(atkbd_set2_keycode
);
827 for (i
= 0; i
< 512; i
++)
828 if (atkbd
->keycode
[i
] && atkbd
->keycode
[i
] < ATKBD_SPECIAL
)
829 set_bit(atkbd
->keycode
[i
], input_dev
->keybit
);
833 * atkbd_connect() is called when the serio module finds an interface
834 * that isn't handled yet by an appropriate device driver. We check if
835 * there is an AT keyboard out there and if yes, we register ourselves
836 * to the input module.
839 static int atkbd_connect(struct serio
*serio
, struct serio_driver
*drv
)
842 struct input_dev
*dev
;
845 atkbd
= kzalloc(sizeof(struct atkbd
), GFP_KERNEL
);
846 dev
= input_allocate_device();
851 ps2_init(&atkbd
->ps2dev
, serio
);
852 INIT_WORK(&atkbd
->event_work
, atkbd_event_work
, atkbd
);
853 mutex_init(&atkbd
->event_mutex
);
855 switch (serio
->id
.type
) {
858 atkbd
->translated
= 1;
865 atkbd
->softraw
= atkbd_softraw
;
866 atkbd
->softrepeat
= atkbd_softrepeat
;
867 atkbd
->scroll
= atkbd_scroll
;
869 if (atkbd
->softrepeat
)
872 serio_set_drvdata(serio
, atkbd
);
874 err
= serio_open(serio
, drv
);
880 if (atkbd_probe(atkbd
)) {
886 atkbd
->set
= atkbd_select_set(atkbd
, atkbd_set
, atkbd_extra
);
887 atkbd_activate(atkbd
);
894 atkbd_set_keycode_table(atkbd
);
895 atkbd_set_device_attrs(atkbd
);
897 device_create_file(&serio
->dev
, &atkbd_attr_extra
);
898 device_create_file(&serio
->dev
, &atkbd_attr_scroll
);
899 device_create_file(&serio
->dev
, &atkbd_attr_set
);
900 device_create_file(&serio
->dev
, &atkbd_attr_softrepeat
);
901 device_create_file(&serio
->dev
, &atkbd_attr_softraw
);
905 input_register_device(atkbd
->dev
);
909 fail
: serio_set_drvdata(serio
, NULL
);
910 input_free_device(dev
);
916 * atkbd_reconnect() tries to restore keyboard into a sane state and is
917 * most likely called on resume.
920 static int atkbd_reconnect(struct serio
*serio
)
922 struct atkbd
*atkbd
= serio_get_drvdata(serio
);
923 struct serio_driver
*drv
= serio
->drv
;
924 unsigned char param
[1];
926 if (!atkbd
|| !drv
) {
927 printk(KERN_DEBUG
"atkbd: reconnect request, but serio is disconnected, ignoring...\n");
931 atkbd_disable(atkbd
);
934 param
[0] = (test_bit(LED_SCROLLL
, atkbd
->dev
->led
) ? 1 : 0)
935 | (test_bit(LED_NUML
, atkbd
->dev
->led
) ? 2 : 0)
936 | (test_bit(LED_CAPSL
, atkbd
->dev
->led
) ? 4 : 0);
938 if (atkbd_probe(atkbd
))
940 if (atkbd
->set
!= atkbd_select_set(atkbd
, atkbd
->set
, atkbd
->extra
))
943 atkbd_activate(atkbd
);
945 if (ps2_command(&atkbd
->ps2dev
, param
, ATKBD_CMD_SETLEDS
))
954 static struct serio_device_id atkbd_serio_ids
[] = {
962 .type
= SERIO_8042_XL
,
969 .proto
= SERIO_PS2SER
,
976 MODULE_DEVICE_TABLE(serio
, atkbd_serio_ids
);
978 static struct serio_driver atkbd_drv
= {
982 .description
= DRIVER_DESC
,
983 .id_table
= atkbd_serio_ids
,
984 .interrupt
= atkbd_interrupt
,
985 .connect
= atkbd_connect
,
986 .reconnect
= atkbd_reconnect
,
987 .disconnect
= atkbd_disconnect
,
988 .cleanup
= atkbd_cleanup
,
991 static ssize_t
atkbd_attr_show_helper(struct device
*dev
, char *buf
,
992 ssize_t (*handler
)(struct atkbd
*, char *))
994 struct serio
*serio
= to_serio_port(dev
);
997 retval
= serio_pin_driver(serio
);
1001 if (serio
->drv
!= &atkbd_drv
) {
1006 retval
= handler((struct atkbd
*)serio_get_drvdata(serio
), buf
);
1009 serio_unpin_driver(serio
);
1013 static ssize_t
atkbd_attr_set_helper(struct device
*dev
, const char *buf
, size_t count
,
1014 ssize_t (*handler
)(struct atkbd
*, const char *, size_t))
1016 struct serio
*serio
= to_serio_port(dev
);
1017 struct atkbd
*atkbd
;
1020 retval
= serio_pin_driver(serio
);
1024 if (serio
->drv
!= &atkbd_drv
) {
1029 atkbd
= serio_get_drvdata(serio
);
1030 atkbd_disable(atkbd
);
1031 retval
= handler(atkbd
, buf
, count
);
1032 atkbd_enable(atkbd
);
1035 serio_unpin_driver(serio
);
1039 static ssize_t
atkbd_show_extra(struct atkbd
*atkbd
, char *buf
)
1041 return sprintf(buf
, "%d\n", atkbd
->extra
? 1 : 0);
1044 static ssize_t
atkbd_set_extra(struct atkbd
*atkbd
, const char *buf
, size_t count
)
1046 struct input_dev
*new_dev
;
1047 unsigned long value
;
1053 value
= simple_strtoul(buf
, &rest
, 10);
1054 if (*rest
|| value
> 1)
1057 if (atkbd
->extra
!= value
) {
1059 * Since device's properties will change we need to
1060 * unregister old device. But allocate new one first
1061 * to make sure we have it.
1063 if (!(new_dev
= input_allocate_device()))
1065 input_unregister_device(atkbd
->dev
);
1066 atkbd
->dev
= new_dev
;
1067 atkbd
->set
= atkbd_select_set(atkbd
, atkbd
->set
, value
);
1068 atkbd_activate(atkbd
);
1069 atkbd_set_device_attrs(atkbd
);
1070 input_register_device(atkbd
->dev
);
1075 static ssize_t
atkbd_show_scroll(struct atkbd
*atkbd
, char *buf
)
1077 return sprintf(buf
, "%d\n", atkbd
->scroll
? 1 : 0);
1080 static ssize_t
atkbd_set_scroll(struct atkbd
*atkbd
, const char *buf
, size_t count
)
1082 struct input_dev
*new_dev
;
1083 unsigned long value
;
1086 value
= simple_strtoul(buf
, &rest
, 10);
1087 if (*rest
|| value
> 1)
1090 if (atkbd
->scroll
!= value
) {
1091 if (!(new_dev
= input_allocate_device()))
1093 input_unregister_device(atkbd
->dev
);
1094 atkbd
->dev
= new_dev
;
1095 atkbd
->scroll
= value
;
1096 atkbd_set_keycode_table(atkbd
);
1097 atkbd_set_device_attrs(atkbd
);
1098 input_register_device(atkbd
->dev
);
1103 static ssize_t
atkbd_show_set(struct atkbd
*atkbd
, char *buf
)
1105 return sprintf(buf
, "%d\n", atkbd
->set
);
1108 static ssize_t
atkbd_set_set(struct atkbd
*atkbd
, const char *buf
, size_t count
)
1110 struct input_dev
*new_dev
;
1111 unsigned long value
;
1117 value
= simple_strtoul(buf
, &rest
, 10);
1118 if (*rest
|| (value
!= 2 && value
!= 3))
1121 if (atkbd
->set
!= value
) {
1122 if (!(new_dev
= input_allocate_device()))
1124 input_unregister_device(atkbd
->dev
);
1125 atkbd
->dev
= new_dev
;
1126 atkbd
->set
= atkbd_select_set(atkbd
, value
, atkbd
->extra
);
1127 atkbd_activate(atkbd
);
1128 atkbd_set_keycode_table(atkbd
);
1129 atkbd_set_device_attrs(atkbd
);
1130 input_register_device(atkbd
->dev
);
1135 static ssize_t
atkbd_show_softrepeat(struct atkbd
*atkbd
, char *buf
)
1137 return sprintf(buf
, "%d\n", atkbd
->softrepeat
? 1 : 0);
1140 static ssize_t
atkbd_set_softrepeat(struct atkbd
*atkbd
, const char *buf
, size_t count
)
1142 struct input_dev
*new_dev
;
1143 unsigned long value
;
1149 value
= simple_strtoul(buf
, &rest
, 10);
1150 if (*rest
|| value
> 1)
1153 if (atkbd
->softrepeat
!= value
) {
1154 if (!(new_dev
= input_allocate_device()))
1156 input_unregister_device(atkbd
->dev
);
1157 atkbd
->dev
= new_dev
;
1158 atkbd
->softrepeat
= value
;
1159 if (atkbd
->softrepeat
)
1161 atkbd_set_device_attrs(atkbd
);
1162 input_register_device(atkbd
->dev
);
1168 static ssize_t
atkbd_show_softraw(struct atkbd
*atkbd
, char *buf
)
1170 return sprintf(buf
, "%d\n", atkbd
->softraw
? 1 : 0);
1173 static ssize_t
atkbd_set_softraw(struct atkbd
*atkbd
, const char *buf
, size_t count
)
1175 struct input_dev
*new_dev
;
1176 unsigned long value
;
1179 value
= simple_strtoul(buf
, &rest
, 10);
1180 if (*rest
|| value
> 1)
1183 if (atkbd
->softraw
!= value
) {
1184 if (!(new_dev
= input_allocate_device()))
1186 input_unregister_device(atkbd
->dev
);
1187 atkbd
->dev
= new_dev
;
1188 atkbd
->softraw
= value
;
1189 atkbd_set_device_attrs(atkbd
);
1190 input_register_device(atkbd
->dev
);
1196 static int __init
atkbd_init(void)
1198 serio_register_driver(&atkbd_drv
);
1202 static void __exit
atkbd_exit(void)
1204 serio_unregister_driver(&atkbd_drv
);
1207 module_init(atkbd_init
);
1208 module_exit(atkbd_exit
);