xref: /linux/drivers/input/keyboard/atkbd.c (revision 858259cf7d1c443c836a2022b78cb281f0a9b95e)
1 /*
2  * AT and PS/2 keyboard driver
3  *
4  * Copyright (c) 1999-2002 Vojtech Pavlik
5  */
6 
7 /*
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.
11  */
12 
13 /*
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
17  * converter.
18  */
19 
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 
31 #define DRIVER_DESC	"AT and PS/2 keyboard driver"
32 
33 MODULE_AUTHOR("Vojtech Pavlik <vojtech@suse.cz>");
34 MODULE_DESCRIPTION(DRIVER_DESC);
35 MODULE_LICENSE("GPL");
36 
37 static int atkbd_set = 2;
38 module_param_named(set, atkbd_set, int, 0);
39 MODULE_PARM_DESC(set, "Select keyboard code set (2 = default, 3 = PS/2 native)");
40 
41 #if defined(__i386__) || defined(__x86_64__) || defined(__hppa__)
42 static int atkbd_reset;
43 #else
44 static int atkbd_reset = 1;
45 #endif
46 module_param_named(reset, atkbd_reset, bool, 0);
47 MODULE_PARM_DESC(reset, "Reset keyboard during initialization");
48 
49 static int atkbd_softrepeat;
50 module_param_named(softrepeat, atkbd_softrepeat, bool, 0);
51 MODULE_PARM_DESC(softrepeat, "Use software keyboard repeat");
52 
53 static int atkbd_softraw = 1;
54 module_param_named(softraw, atkbd_softraw, bool, 0);
55 MODULE_PARM_DESC(softraw, "Use software generated rawmode");
56 
57 static int atkbd_scroll = 0;
58 module_param_named(scroll, atkbd_scroll, bool, 0);
59 MODULE_PARM_DESC(scroll, "Enable scroll-wheel on MS Office and similar keyboards");
60 
61 static int atkbd_extra;
62 module_param_named(extra, atkbd_extra, bool, 0);
63 MODULE_PARM_DESC(extra, "Enable extra LEDs and keys on IBM RapidAcces, EzKey and similar keyboards");
64 
65 __obsolete_setup("atkbd_set=");
66 __obsolete_setup("atkbd_reset");
67 __obsolete_setup("atkbd_softrepeat=");
68 
69 /*
70  * Scancode to keycode tables. These are just the default setting, and
71  * are loadable via an userland utility.
72  */
73 
74 static unsigned char atkbd_set2_keycode[512] = {
75 
76 #ifdef CONFIG_KEYBOARD_ATKBD_HP_KEYCODES
77 
78 /* XXX: need a more general approach */
79 
80 #include "hpps2atkbd.h"	/* include the keyboard scancodes */
81 
82 #else
83 	  0, 67, 65, 63, 61, 59, 60, 88,  0, 68, 66, 64, 62, 15, 41,117,
84 	  0, 56, 42, 93, 29, 16,  2,  0,  0,  0, 44, 31, 30, 17,  3,  0,
85 	  0, 46, 45, 32, 18,  5,  4, 95,  0, 57, 47, 33, 20, 19,  6,183,
86 	  0, 49, 48, 35, 34, 21,  7,184,  0,  0, 50, 36, 22,  8,  9,185,
87 	  0, 51, 37, 23, 24, 11, 10,  0,  0, 52, 53, 38, 39, 25, 12,  0,
88 	  0, 89, 40,  0, 26, 13,  0,  0, 58, 54, 28, 27,  0, 43,  0, 85,
89 	  0, 86, 91, 90, 92,  0, 14, 94,  0, 79,124, 75, 71,121,  0,  0,
90 	 82, 83, 80, 76, 77, 72,  1, 69, 87, 78, 81, 74, 55, 73, 70, 99,
91 
92 	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
93 	217,100,255,  0, 97,165,  0,  0,156,  0,  0,  0,  0,  0,  0,125,
94 	173,114,  0,113,  0,  0,  0,126,128,  0,  0,140,  0,  0,  0,127,
95 	159,  0,115,  0,164,  0,  0,116,158,  0,150,166,  0,  0,  0,142,
96 	157,  0,  0,  0,  0,  0,  0,  0,155,  0, 98,  0,  0,163,  0,  0,
97 	226,  0,  0,  0,  0,  0,  0,  0,  0,255, 96,  0,  0,  0,143,  0,
98 	  0,  0,  0,  0,  0,  0,  0,  0,  0,107,  0,105,102,  0,  0,112,
99 	110,111,108,112,106,103,  0,119,  0,118,109,  0, 99,104,119,  0,
100 
101 	  0,  0,  0, 65, 99,
102 #endif
103 };
104 
105 static unsigned char atkbd_set3_keycode[512] = {
106 
107 	  0,  0,  0,  0,  0,  0,  0, 59,  1,138,128,129,130, 15, 41, 60,
108 	131, 29, 42, 86, 58, 16,  2, 61,133, 56, 44, 31, 30, 17,  3, 62,
109 	134, 46, 45, 32, 18,  5,  4, 63,135, 57, 47, 33, 20, 19,  6, 64,
110 	136, 49, 48, 35, 34, 21,  7, 65,137,100, 50, 36, 22,  8,  9, 66,
111 	125, 51, 37, 23, 24, 11, 10, 67,126, 52, 53, 38, 39, 25, 12, 68,
112 	113,114, 40, 43, 26, 13, 87, 99, 97, 54, 28, 27, 43, 43, 88, 70,
113 	108,105,119,103,111,107, 14,110,  0, 79,106, 75, 71,109,102,104,
114 	 82, 83, 80, 76, 77, 72, 69, 98,  0, 96, 81,  0, 78, 73, 55,183,
115 
116 	184,185,186,187, 74, 94, 92, 93,  0,  0,  0,125,126,127,112,  0,
117 	  0,139,150,163,165,115,152,150,166,140,160,154,113,114,167,168,
118 	148,149,147,140
119 };
120 
121 static unsigned char atkbd_unxlate_table[128] = {
122           0,118, 22, 30, 38, 37, 46, 54, 61, 62, 70, 69, 78, 85,102, 13,
123          21, 29, 36, 45, 44, 53, 60, 67, 68, 77, 84, 91, 90, 20, 28, 27,
124          35, 43, 52, 51, 59, 66, 75, 76, 82, 14, 18, 93, 26, 34, 33, 42,
125          50, 49, 58, 65, 73, 74, 89,124, 17, 41, 88,  5,  6,  4, 12,  3,
126          11,  2, 10,  1,  9,119,126,108,117,125,123,107,115,116,121,105,
127         114,122,112,113,127, 96, 97,120,  7, 15, 23, 31, 39, 47, 55, 63,
128          71, 79, 86, 94,  8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 87,111,
129          19, 25, 57, 81, 83, 92, 95, 98, 99,100,101,103,104,106,109,110
130 };
131 
132 #define ATKBD_CMD_SETLEDS	0x10ed
133 #define ATKBD_CMD_GSCANSET	0x11f0
134 #define ATKBD_CMD_SSCANSET	0x10f0
135 #define ATKBD_CMD_GETID		0x02f2
136 #define ATKBD_CMD_SETREP	0x10f3
137 #define ATKBD_CMD_ENABLE	0x00f4
138 #define ATKBD_CMD_RESET_DIS	0x00f5
139 #define ATKBD_CMD_SETALL_MBR	0x00fa
140 #define ATKBD_CMD_RESET_BAT	0x02ff
141 #define ATKBD_CMD_RESEND	0x00fe
142 #define ATKBD_CMD_EX_ENABLE	0x10ea
143 #define ATKBD_CMD_EX_SETLEDS	0x20eb
144 #define ATKBD_CMD_OK_GETID	0x02e8
145 
146 #define ATKBD_RET_ACK		0xfa
147 #define ATKBD_RET_NAK		0xfe
148 #define ATKBD_RET_BAT		0xaa
149 #define ATKBD_RET_EMUL0		0xe0
150 #define ATKBD_RET_EMUL1		0xe1
151 #define ATKBD_RET_RELEASE	0xf0
152 #define ATKBD_RET_HANGUEL	0xf1
153 #define ATKBD_RET_HANJA		0xf2
154 #define ATKBD_RET_ERR		0xff
155 
156 #define ATKBD_KEY_UNKNOWN	  0
157 #define ATKBD_KEY_NULL		255
158 
159 #define ATKBD_SCR_1		254
160 #define ATKBD_SCR_2		253
161 #define ATKBD_SCR_4		252
162 #define ATKBD_SCR_8		251
163 #define ATKBD_SCR_CLICK		250
164 #define ATKBD_SCR_LEFT		249
165 #define ATKBD_SCR_RIGHT		248
166 
167 #define ATKBD_SPECIAL		248
168 
169 static struct {
170 	unsigned char keycode;
171 	unsigned char set2;
172 } atkbd_scroll_keys[] = {
173 	{ ATKBD_SCR_1,     0xc5 },
174 	{ ATKBD_SCR_2,     0x9d },
175 	{ ATKBD_SCR_4,     0xa4 },
176 	{ ATKBD_SCR_8,     0x9b },
177 	{ ATKBD_SCR_CLICK, 0xe0 },
178 	{ ATKBD_SCR_LEFT,  0xcb },
179 	{ ATKBD_SCR_RIGHT, 0xd2 },
180 };
181 
182 /*
183  * The atkbd control structure
184  */
185 
186 struct atkbd {
187 
188 	struct ps2dev ps2dev;
189 	struct input_dev *dev;
190 
191 	/* Written only during init */
192 	char name[64];
193 	char phys[32];
194 
195 	unsigned short id;
196 	unsigned char keycode[512];
197 	unsigned char set;
198 	unsigned char translated;
199 	unsigned char extra;
200 	unsigned char write;
201 	unsigned char softrepeat;
202 	unsigned char softraw;
203 	unsigned char scroll;
204 	unsigned char enabled;
205 
206 	/* Accessed only from interrupt */
207 	unsigned char emul;
208 	unsigned char resend;
209 	unsigned char release;
210 	unsigned char bat_xl;
211 	unsigned char err_xl;
212 	unsigned int last;
213 	unsigned long time;
214 };
215 
216 static ssize_t atkbd_attr_show_helper(struct device *dev, char *buf,
217 				ssize_t (*handler)(struct atkbd *, char *));
218 static ssize_t atkbd_attr_set_helper(struct device *dev, const char *buf, size_t count,
219 				ssize_t (*handler)(struct atkbd *, const char *, size_t));
220 #define ATKBD_DEFINE_ATTR(_name)						\
221 static ssize_t atkbd_show_##_name(struct atkbd *, char *);			\
222 static ssize_t atkbd_set_##_name(struct atkbd *, const char *, size_t);		\
223 static ssize_t atkbd_do_show_##_name(struct device *d, struct device_attribute *attr, char *b)			\
224 {										\
225 	return atkbd_attr_show_helper(d, b, atkbd_show_##_name);		\
226 }										\
227 static ssize_t atkbd_do_set_##_name(struct device *d, struct device_attribute *attr, const char *b, size_t s)	\
228 {										\
229 	return atkbd_attr_set_helper(d, b, s, atkbd_set_##_name);		\
230 }										\
231 static struct device_attribute atkbd_attr_##_name =				\
232 	__ATTR(_name, S_IWUSR | S_IRUGO, atkbd_do_show_##_name, atkbd_do_set_##_name);
233 
234 ATKBD_DEFINE_ATTR(extra);
235 ATKBD_DEFINE_ATTR(scroll);
236 ATKBD_DEFINE_ATTR(set);
237 ATKBD_DEFINE_ATTR(softrepeat);
238 ATKBD_DEFINE_ATTR(softraw);
239 
240 
241 static void atkbd_report_key(struct input_dev *dev, struct pt_regs *regs, int code, int value)
242 {
243 	input_regs(dev, regs);
244 	if (value == 3) {
245 		input_report_key(dev, code, 1);
246 		input_sync(dev);
247 		input_report_key(dev, code, 0);
248 	} else
249 		input_event(dev, EV_KEY, code, value);
250 	input_sync(dev);
251 }
252 
253 /*
254  * atkbd_interrupt(). Here takes place processing of data received from
255  * the keyboard into events.
256  */
257 
258 static irqreturn_t atkbd_interrupt(struct serio *serio, unsigned char data,
259 			unsigned int flags, struct pt_regs *regs)
260 {
261 	struct atkbd *atkbd = serio_get_drvdata(serio);
262 	unsigned int code = data;
263 	int scroll = 0, hscroll = 0, click = -1;
264 	int value;
265 
266 #ifdef ATKBD_DEBUG
267 	printk(KERN_DEBUG "atkbd.c: Received %02x flags %02x\n", data, flags);
268 #endif
269 
270 #if !defined(__i386__) && !defined (__x86_64__)
271 	if ((flags & (SERIO_FRAME | SERIO_PARITY)) && (~flags & SERIO_TIMEOUT) && !atkbd->resend && atkbd->write) {
272 		printk(KERN_WARNING "atkbd.c: frame/parity error: %02x\n", flags);
273 		serio_write(serio, ATKBD_CMD_RESEND);
274 		atkbd->resend = 1;
275 		goto out;
276 	}
277 
278 	if (!flags && data == ATKBD_RET_ACK)
279 		atkbd->resend = 0;
280 #endif
281 
282 	if (unlikely(atkbd->ps2dev.flags & PS2_FLAG_ACK))
283 		if  (ps2_handle_ack(&atkbd->ps2dev, data))
284 			goto out;
285 
286 	if (unlikely(atkbd->ps2dev.flags & PS2_FLAG_CMD))
287 		if  (ps2_handle_response(&atkbd->ps2dev, data))
288 			goto out;
289 
290 	if (!atkbd->enabled)
291 		goto out;
292 
293 	input_event(atkbd->dev, EV_MSC, MSC_RAW, code);
294 
295 	if (atkbd->translated) {
296 
297 		if (atkbd->emul ||
298 		    !(code == ATKBD_RET_EMUL0 || code == ATKBD_RET_EMUL1 ||
299 		      code == ATKBD_RET_HANGUEL || code == ATKBD_RET_HANJA ||
300 		     (code == ATKBD_RET_ERR && !atkbd->err_xl) ||
301 	             (code == ATKBD_RET_BAT && !atkbd->bat_xl))) {
302 			atkbd->release = code >> 7;
303 			code &= 0x7f;
304 		}
305 
306 		if (!atkbd->emul) {
307 		     if ((code & 0x7f) == (ATKBD_RET_BAT & 0x7f))
308 			atkbd->bat_xl = !atkbd->release;
309 		     if ((code & 0x7f) == (ATKBD_RET_ERR & 0x7f))
310 			atkbd->err_xl = !atkbd->release;
311 		}
312 	}
313 
314 	switch (code) {
315 		case ATKBD_RET_BAT:
316 			atkbd->enabled = 0;
317 			serio_rescan(atkbd->ps2dev.serio);
318 			goto out;
319 		case ATKBD_RET_EMUL0:
320 			atkbd->emul = 1;
321 			goto out;
322 		case ATKBD_RET_EMUL1:
323 			atkbd->emul = 2;
324 			goto out;
325 		case ATKBD_RET_RELEASE:
326 			atkbd->release = 1;
327 			goto out;
328 		case ATKBD_RET_HANGUEL:
329 			atkbd_report_key(atkbd->dev, regs, KEY_HANGUEL, 3);
330 			goto out;
331 		case ATKBD_RET_HANJA:
332 			atkbd_report_key(atkbd->dev, regs, KEY_HANJA, 3);
333 			goto out;
334 		case ATKBD_RET_ERR:
335 			printk(KERN_DEBUG "atkbd.c: Keyboard on %s reports too many keys pressed.\n", serio->phys);
336 			goto out;
337 	}
338 
339 	if (atkbd->set != 3)
340 		code = (code & 0x7f) | ((code & 0x80) << 1);
341 	if (atkbd->emul) {
342 		if (--atkbd->emul)
343 			goto out;
344 		code |= (atkbd->set != 3) ? 0x80 : 0x100;
345 	}
346 
347 	if (atkbd->keycode[code] != ATKBD_KEY_NULL)
348 		input_event(atkbd->dev, EV_MSC, MSC_SCAN, code);
349 
350 	switch (atkbd->keycode[code]) {
351 		case ATKBD_KEY_NULL:
352 			break;
353 		case ATKBD_KEY_UNKNOWN:
354 			if (data == ATKBD_RET_ACK || data == ATKBD_RET_NAK) {
355 				printk(KERN_WARNING "atkbd.c: Spurious %s on %s. Some program, "
356 				       "like XFree86, might be trying access hardware directly.\n",
357 				       data == ATKBD_RET_ACK ? "ACK" : "NAK", serio->phys);
358 			} else {
359 				printk(KERN_WARNING "atkbd.c: Unknown key %s "
360 				       "(%s set %d, code %#x on %s).\n",
361 				       atkbd->release ? "released" : "pressed",
362 				       atkbd->translated ? "translated" : "raw",
363 				       atkbd->set, code, serio->phys);
364 				printk(KERN_WARNING "atkbd.c: Use 'setkeycodes %s%02x <keycode>' "
365 				       "to make it known.\n",
366 				       code & 0x80 ? "e0" : "", code & 0x7f);
367 			}
368 			input_sync(atkbd->dev);
369 			break;
370 		case ATKBD_SCR_1:
371 			scroll = 1 - atkbd->release * 2;
372 			break;
373 		case ATKBD_SCR_2:
374 			scroll = 2 - atkbd->release * 4;
375 			break;
376 		case ATKBD_SCR_4:
377 			scroll = 4 - atkbd->release * 8;
378 			break;
379 		case ATKBD_SCR_8:
380 			scroll = 8 - atkbd->release * 16;
381 			break;
382 		case ATKBD_SCR_CLICK:
383 			click = !atkbd->release;
384 			break;
385 		case ATKBD_SCR_LEFT:
386 			hscroll = -1;
387 			break;
388 		case ATKBD_SCR_RIGHT:
389 			hscroll = 1;
390 			break;
391 		default:
392 			value = atkbd->release ? 0 :
393 				(1 + (!atkbd->softrepeat && test_bit(atkbd->keycode[code], atkbd->dev->key)));
394 
395 			switch (value) {	/* Workaround Toshiba laptop multiple keypress */
396 				case 0:
397 					atkbd->last = 0;
398 					break;
399 				case 1:
400 					atkbd->last = code;
401 					atkbd->time = jiffies + msecs_to_jiffies(atkbd->dev->rep[REP_DELAY]) / 2;
402 					break;
403 				case 2:
404 					if (!time_after(jiffies, atkbd->time) && atkbd->last == code)
405 						value = 1;
406 					break;
407 			}
408 
409 			atkbd_report_key(atkbd->dev, regs, atkbd->keycode[code], value);
410 	}
411 
412 	if (atkbd->scroll) {
413 		input_regs(atkbd->dev, regs);
414 		if (click != -1)
415 			input_report_key(atkbd->dev, BTN_MIDDLE, click);
416 		input_report_rel(atkbd->dev, REL_WHEEL, scroll);
417 		input_report_rel(atkbd->dev, REL_HWHEEL, hscroll);
418 		input_sync(atkbd->dev);
419 	}
420 
421 	atkbd->release = 0;
422 out:
423 	return IRQ_HANDLED;
424 }
425 
426 /*
427  * Event callback from the input module. Events that change the state of
428  * the hardware are processed here.
429  */
430 
431 static int atkbd_event(struct input_dev *dev, unsigned int type, unsigned int code, int value)
432 {
433 	struct atkbd *atkbd = dev->private;
434 	const short period[32] =
435 		{ 33,  37,  42,  46,  50,  54,  58,  63,  67,  75,  83,  92, 100, 109, 116, 125,
436 		 133, 149, 167, 182, 200, 217, 232, 250, 270, 303, 333, 370, 400, 435, 470, 500 };
437 	const short delay[4] =
438 		{ 250, 500, 750, 1000 };
439 	unsigned char param[2];
440 	int i, j;
441 
442 	if (!atkbd->write)
443 		return -1;
444 
445 	switch (type) {
446 
447 		case EV_LED:
448 
449 			param[0] = (test_bit(LED_SCROLLL, dev->led) ? 1 : 0)
450 			         | (test_bit(LED_NUML,    dev->led) ? 2 : 0)
451 			         | (test_bit(LED_CAPSL,   dev->led) ? 4 : 0);
452 		        ps2_schedule_command(&atkbd->ps2dev, param, ATKBD_CMD_SETLEDS);
453 
454 			if (atkbd->extra) {
455 				param[0] = 0;
456 				param[1] = (test_bit(LED_COMPOSE, dev->led) ? 0x01 : 0)
457 					 | (test_bit(LED_SLEEP,   dev->led) ? 0x02 : 0)
458 					 | (test_bit(LED_SUSPEND, dev->led) ? 0x04 : 0)
459 				         | (test_bit(LED_MISC,    dev->led) ? 0x10 : 0)
460 				         | (test_bit(LED_MUTE,    dev->led) ? 0x20 : 0);
461 				ps2_schedule_command(&atkbd->ps2dev, param, ATKBD_CMD_EX_SETLEDS);
462 			}
463 
464 			return 0;
465 
466 		case EV_REP:
467 
468 			if (atkbd->softrepeat) return 0;
469 
470 			i = j = 0;
471 			while (i < 31 && period[i] < dev->rep[REP_PERIOD])
472 				i++;
473 			while (j < 3 && delay[j] < dev->rep[REP_DELAY])
474 				j++;
475 			dev->rep[REP_PERIOD] = period[i];
476 			dev->rep[REP_DELAY] = delay[j];
477 			param[0] = i | (j << 5);
478 			ps2_schedule_command(&atkbd->ps2dev, param, ATKBD_CMD_SETREP);
479 
480 			return 0;
481 	}
482 
483 	return -1;
484 }
485 
486 /*
487  * atkbd_enable() signals that interrupt handler is allowed to
488  * generate input events.
489  */
490 
491 static inline void atkbd_enable(struct atkbd *atkbd)
492 {
493 	serio_pause_rx(atkbd->ps2dev.serio);
494 	atkbd->enabled = 1;
495 	serio_continue_rx(atkbd->ps2dev.serio);
496 }
497 
498 /*
499  * atkbd_disable() tells input handler that all incoming data except
500  * for ACKs and command response should be dropped.
501  */
502 
503 static inline void atkbd_disable(struct atkbd *atkbd)
504 {
505 	serio_pause_rx(atkbd->ps2dev.serio);
506 	atkbd->enabled = 0;
507 	serio_continue_rx(atkbd->ps2dev.serio);
508 }
509 
510 /*
511  * atkbd_probe() probes for an AT keyboard on a serio port.
512  */
513 
514 static int atkbd_probe(struct atkbd *atkbd)
515 {
516 	struct ps2dev *ps2dev = &atkbd->ps2dev;
517 	unsigned char param[2];
518 
519 /*
520  * Some systems, where the bit-twiddling when testing the io-lines of the
521  * controller may confuse the keyboard need a full reset of the keyboard. On
522  * these systems the BIOS also usually doesn't do it for us.
523  */
524 
525 	if (atkbd_reset)
526 		if (ps2_command(ps2dev, NULL, ATKBD_CMD_RESET_BAT))
527 			printk(KERN_WARNING "atkbd.c: keyboard reset failed on %s\n", ps2dev->serio->phys);
528 
529 /*
530  * Then we check the keyboard ID. We should get 0xab83 under normal conditions.
531  * Some keyboards report different values, but the first byte is always 0xab or
532  * 0xac. Some old AT keyboards don't report anything. If a mouse is connected, this
533  * should make sure we don't try to set the LEDs on it.
534  */
535 
536 	param[0] = param[1] = 0xa5;	/* initialize with invalid values */
537 	if (ps2_command(ps2dev, param, ATKBD_CMD_GETID)) {
538 
539 /*
540  * If the get ID command failed, we check if we can at least set the LEDs on
541  * the keyboard. This should work on every keyboard out there. It also turns
542  * the LEDs off, which we want anyway.
543  */
544 		param[0] = 0;
545 		if (ps2_command(ps2dev, param, ATKBD_CMD_SETLEDS))
546 			return -1;
547 		atkbd->id = 0xabba;
548 		return 0;
549 	}
550 
551 	if (param[0] != 0xab && param[0] != 0xac &&	/* Regular and NCD Sun keyboards */
552 	    param[0] != 0x2b && param[0] != 0x5d &&	/* Trust keyboard, raw and translated */
553 	    param[0] != 0x60 && param[0] != 0x47)	/* NMB SGI keyboard, raw and translated */
554 		return -1;
555 
556 	atkbd->id = (param[0] << 8) | param[1];
557 
558 	if (atkbd->id == 0xaca1 && atkbd->translated) {
559 		printk(KERN_ERR "atkbd.c: NCD terminal keyboards are only supported on non-translating\n");
560 		printk(KERN_ERR "atkbd.c: controllers. Use i8042.direct=1 to disable translation.\n");
561 		return -1;
562 	}
563 
564 	return 0;
565 }
566 
567 /*
568  * atkbd_select_set checks if a keyboard has a working Set 3 support, and
569  * sets it into that. Unfortunately there are keyboards that can be switched
570  * to Set 3, but don't work well in that (BTC Multimedia ...)
571  */
572 
573 static int atkbd_select_set(struct atkbd *atkbd, int target_set, int allow_extra)
574 {
575 	struct ps2dev *ps2dev = &atkbd->ps2dev;
576 	unsigned char param[2];
577 
578 	atkbd->extra = 0;
579 /*
580  * For known special keyboards we can go ahead and set the correct set.
581  * We check for NCD PS/2 Sun, NorthGate OmniKey 101 and
582  * IBM RapidAccess / IBM EzButton / Chicony KBP-8993 keyboards.
583  */
584 
585 	if (atkbd->translated)
586 		return 2;
587 
588 	if (atkbd->id == 0xaca1) {
589 		param[0] = 3;
590 		ps2_command(ps2dev, param, ATKBD_CMD_SSCANSET);
591 		return 3;
592 	}
593 
594 	if (allow_extra) {
595 		param[0] = 0x71;
596 		if (!ps2_command(ps2dev, param, ATKBD_CMD_EX_ENABLE)) {
597 			atkbd->extra = 1;
598 			return 2;
599 		}
600 	}
601 
602 	if (target_set != 3)
603 		return 2;
604 
605 	if (!ps2_command(ps2dev, param, ATKBD_CMD_OK_GETID)) {
606 		atkbd->id = param[0] << 8 | param[1];
607 		return 2;
608 	}
609 
610 	param[0] = 3;
611 	if (ps2_command(ps2dev, param, ATKBD_CMD_SSCANSET))
612 		return 2;
613 
614 	param[0] = 0;
615 	if (ps2_command(ps2dev, param, ATKBD_CMD_GSCANSET))
616 		return 2;
617 
618 	if (param[0] != 3) {
619 		param[0] = 2;
620 		if (ps2_command(ps2dev, param, ATKBD_CMD_SSCANSET))
621 		return 2;
622 	}
623 
624 	ps2_command(ps2dev, param, ATKBD_CMD_SETALL_MBR);
625 
626 	return 3;
627 }
628 
629 static int atkbd_activate(struct atkbd *atkbd)
630 {
631 	struct ps2dev *ps2dev = &atkbd->ps2dev;
632 	unsigned char param[1];
633 
634 /*
635  * Set the LEDs to a defined state.
636  */
637 
638 	param[0] = 0;
639 	if (ps2_command(ps2dev, param, ATKBD_CMD_SETLEDS))
640 		return -1;
641 
642 /*
643  * Set autorepeat to fastest possible.
644  */
645 
646 	param[0] = 0;
647 	if (ps2_command(ps2dev, param, ATKBD_CMD_SETREP))
648 		return -1;
649 
650 /*
651  * Enable the keyboard to receive keystrokes.
652  */
653 
654 	if (ps2_command(ps2dev, NULL, ATKBD_CMD_ENABLE)) {
655 		printk(KERN_ERR "atkbd.c: Failed to enable keyboard on %s\n",
656 			ps2dev->serio->phys);
657 		return -1;
658 	}
659 
660 	return 0;
661 }
662 
663 /*
664  * atkbd_cleanup() restores the keyboard state so that BIOS is happy after a
665  * reboot.
666  */
667 
668 static void atkbd_cleanup(struct serio *serio)
669 {
670 	struct atkbd *atkbd = serio_get_drvdata(serio);
671 	ps2_command(&atkbd->ps2dev, NULL, ATKBD_CMD_RESET_BAT);
672 }
673 
674 
675 /*
676  * atkbd_disconnect() closes and frees.
677  */
678 
679 static void atkbd_disconnect(struct serio *serio)
680 {
681 	struct atkbd *atkbd = serio_get_drvdata(serio);
682 
683 	atkbd_disable(atkbd);
684 
685 	/* make sure we don't have a command in flight */
686 	synchronize_sched();  /* Allow atkbd_interrupt()s to complete. */
687 	flush_scheduled_work();
688 
689 	device_remove_file(&serio->dev, &atkbd_attr_extra);
690 	device_remove_file(&serio->dev, &atkbd_attr_scroll);
691 	device_remove_file(&serio->dev, &atkbd_attr_set);
692 	device_remove_file(&serio->dev, &atkbd_attr_softrepeat);
693 	device_remove_file(&serio->dev, &atkbd_attr_softraw);
694 
695 	input_unregister_device(atkbd->dev);
696 	serio_close(serio);
697 	serio_set_drvdata(serio, NULL);
698 	kfree(atkbd);
699 }
700 
701 
702 /*
703  * atkbd_set_keycode_table() initializes keyboard's keycode table
704  * according to the selected scancode set
705  */
706 
707 static void atkbd_set_keycode_table(struct atkbd *atkbd)
708 {
709 	int i, j;
710 
711 	memset(atkbd->keycode, 0, sizeof(atkbd->keycode));
712 
713 	if (atkbd->translated) {
714 		for (i = 0; i < 128; i++) {
715 			atkbd->keycode[i] = atkbd_set2_keycode[atkbd_unxlate_table[i]];
716 			atkbd->keycode[i | 0x80] = atkbd_set2_keycode[atkbd_unxlate_table[i] | 0x80];
717 			if (atkbd->scroll)
718 				for (j = 0; j < ARRAY_SIZE(atkbd_scroll_keys); j++)
719 					if ((atkbd_unxlate_table[i] | 0x80) == atkbd_scroll_keys[j].set2)
720 						atkbd->keycode[i | 0x80] = atkbd_scroll_keys[j].keycode;
721 		}
722 	} else if (atkbd->set == 3) {
723 		memcpy(atkbd->keycode, atkbd_set3_keycode, sizeof(atkbd->keycode));
724 	} else {
725 		memcpy(atkbd->keycode, atkbd_set2_keycode, sizeof(atkbd->keycode));
726 
727 		if (atkbd->scroll)
728 			for (i = 0; i < ARRAY_SIZE(atkbd_scroll_keys); i++)
729 				atkbd->keycode[atkbd_scroll_keys[i].set2] = atkbd_scroll_keys[i].keycode;
730 	}
731 }
732 
733 /*
734  * atkbd_set_device_attrs() sets up keyboard's input device structure
735  */
736 
737 static void atkbd_set_device_attrs(struct atkbd *atkbd)
738 {
739 	struct input_dev *input_dev = atkbd->dev;
740 	int i;
741 
742 	if (atkbd->extra)
743 		sprintf(atkbd->name, "AT Set 2 Extra keyboard");
744 	else
745 		sprintf(atkbd->name, "AT %s Set %d keyboard",
746 			atkbd->translated ? "Translated" : "Raw", atkbd->set);
747 
748 	sprintf(atkbd->phys, "%s/input0", atkbd->ps2dev.serio->phys);
749 
750 	input_dev->name = atkbd->name;
751 	input_dev->phys = atkbd->phys;
752 	input_dev->id.bustype = BUS_I8042;
753 	input_dev->id.vendor = 0x0001;
754 	input_dev->id.product = atkbd->translated ? 1 : atkbd->set;
755 	input_dev->id.version = atkbd->id;
756 	input_dev->event = atkbd_event;
757 	input_dev->private = atkbd;
758 	input_dev->cdev.dev = &atkbd->ps2dev.serio->dev;
759 
760 	input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP) | BIT(EV_MSC);
761 
762 	if (atkbd->write) {
763 		input_dev->evbit[0] |= BIT(EV_LED);
764 		input_dev->ledbit[0] = BIT(LED_NUML) | BIT(LED_CAPSL) | BIT(LED_SCROLLL);
765 	}
766 
767 	if (atkbd->extra)
768 		input_dev->ledbit[0] |= BIT(LED_COMPOSE) | BIT(LED_SUSPEND) |
769 					BIT(LED_SLEEP) | BIT(LED_MUTE) | BIT(LED_MISC);
770 
771 	if (!atkbd->softrepeat) {
772 		input_dev->rep[REP_DELAY] = 250;
773 		input_dev->rep[REP_PERIOD] = 33;
774 	}
775 
776 	input_dev->mscbit[0] = atkbd->softraw ? BIT(MSC_SCAN) : BIT(MSC_RAW) | BIT(MSC_SCAN);
777 
778 	if (atkbd->scroll) {
779 		input_dev->evbit[0] |= BIT(EV_REL);
780 		input_dev->relbit[0] = BIT(REL_WHEEL) | BIT(REL_HWHEEL);
781 		set_bit(BTN_MIDDLE, input_dev->keybit);
782 	}
783 
784 	input_dev->keycode = atkbd->keycode;
785 	input_dev->keycodesize = sizeof(unsigned char);
786 	input_dev->keycodemax = ARRAY_SIZE(atkbd_set2_keycode);
787 
788 	for (i = 0; i < 512; i++)
789 		if (atkbd->keycode[i] && atkbd->keycode[i] < ATKBD_SPECIAL)
790 			set_bit(atkbd->keycode[i], input_dev->keybit);
791 }
792 
793 /*
794  * atkbd_connect() is called when the serio module finds an interface
795  * that isn't handled yet by an appropriate device driver. We check if
796  * there is an AT keyboard out there and if yes, we register ourselves
797  * to the input module.
798  */
799 
800 static int atkbd_connect(struct serio *serio, struct serio_driver *drv)
801 {
802 	struct atkbd *atkbd;
803 	struct input_dev *dev;
804 	int err = -ENOMEM;
805 
806 	atkbd = kzalloc(sizeof(struct atkbd), GFP_KERNEL);
807 	dev = input_allocate_device();
808 	if (!atkbd || !dev)
809 		goto fail;
810 
811 	atkbd->dev = dev;
812 	ps2_init(&atkbd->ps2dev, serio);
813 
814 	switch (serio->id.type) {
815 
816 		case SERIO_8042_XL:
817 			atkbd->translated = 1;
818 		case SERIO_8042:
819 			if (serio->write)
820 				atkbd->write = 1;
821 			break;
822 	}
823 
824 	atkbd->softraw = atkbd_softraw;
825 	atkbd->softrepeat = atkbd_softrepeat;
826 	atkbd->scroll = atkbd_scroll;
827 
828 	if (!atkbd->write)
829 		atkbd->softrepeat = 1;
830 
831 	if (atkbd->softrepeat)
832 		atkbd->softraw = 1;
833 
834 	serio_set_drvdata(serio, atkbd);
835 
836 	err = serio_open(serio, drv);
837 	if (err)
838 		goto fail;
839 
840 	if (atkbd->write) {
841 
842 		if (atkbd_probe(atkbd)) {
843 			serio_close(serio);
844 			err = -ENODEV;
845 			goto fail;
846 		}
847 
848 		atkbd->set = atkbd_select_set(atkbd, atkbd_set, atkbd_extra);
849 		atkbd_activate(atkbd);
850 
851 	} else {
852 		atkbd->set = 2;
853 		atkbd->id = 0xab00;
854 	}
855 
856 	atkbd_set_keycode_table(atkbd);
857 	atkbd_set_device_attrs(atkbd);
858 
859 	device_create_file(&serio->dev, &atkbd_attr_extra);
860 	device_create_file(&serio->dev, &atkbd_attr_scroll);
861 	device_create_file(&serio->dev, &atkbd_attr_set);
862 	device_create_file(&serio->dev, &atkbd_attr_softrepeat);
863 	device_create_file(&serio->dev, &atkbd_attr_softraw);
864 
865 	atkbd_enable(atkbd);
866 
867 	input_register_device(atkbd->dev);
868 
869 	return 0;
870 
871  fail:	serio_set_drvdata(serio, NULL);
872 	input_free_device(dev);
873 	kfree(atkbd);
874 	return err;
875 }
876 
877 /*
878  * atkbd_reconnect() tries to restore keyboard into a sane state and is
879  * most likely called on resume.
880  */
881 
882 static int atkbd_reconnect(struct serio *serio)
883 {
884 	struct atkbd *atkbd = serio_get_drvdata(serio);
885 	struct serio_driver *drv = serio->drv;
886 	unsigned char param[1];
887 
888 	if (!atkbd || !drv) {
889 		printk(KERN_DEBUG "atkbd: reconnect request, but serio is disconnected, ignoring...\n");
890 		return -1;
891 	}
892 
893 	atkbd_disable(atkbd);
894 
895 	if (atkbd->write) {
896 		param[0] = (test_bit(LED_SCROLLL, atkbd->dev->led) ? 1 : 0)
897 		         | (test_bit(LED_NUML,    atkbd->dev->led) ? 2 : 0)
898 		         | (test_bit(LED_CAPSL,   atkbd->dev->led) ? 4 : 0);
899 
900 		if (atkbd_probe(atkbd))
901 			return -1;
902 		if (atkbd->set != atkbd_select_set(atkbd, atkbd->set, atkbd->extra))
903 			return -1;
904 
905 		atkbd_activate(atkbd);
906 
907 		if (ps2_command(&atkbd->ps2dev, param, ATKBD_CMD_SETLEDS))
908 			return -1;
909 	}
910 
911 	atkbd_enable(atkbd);
912 
913 	return 0;
914 }
915 
916 static struct serio_device_id atkbd_serio_ids[] = {
917 	{
918 		.type	= SERIO_8042,
919 		.proto	= SERIO_ANY,
920 		.id	= SERIO_ANY,
921 		.extra	= SERIO_ANY,
922 	},
923 	{
924 		.type	= SERIO_8042_XL,
925 		.proto	= SERIO_ANY,
926 		.id	= SERIO_ANY,
927 		.extra	= SERIO_ANY,
928 	},
929 	{
930 		.type	= SERIO_RS232,
931 		.proto	= SERIO_PS2SER,
932 		.id	= SERIO_ANY,
933 		.extra	= SERIO_ANY,
934 	},
935 	{ 0 }
936 };
937 
938 MODULE_DEVICE_TABLE(serio, atkbd_serio_ids);
939 
940 static struct serio_driver atkbd_drv = {
941 	.driver		= {
942 		.name	= "atkbd",
943 	},
944 	.description	= DRIVER_DESC,
945 	.id_table	= atkbd_serio_ids,
946 	.interrupt	= atkbd_interrupt,
947 	.connect	= atkbd_connect,
948 	.reconnect	= atkbd_reconnect,
949 	.disconnect	= atkbd_disconnect,
950 	.cleanup	= atkbd_cleanup,
951 };
952 
953 static ssize_t atkbd_attr_show_helper(struct device *dev, char *buf,
954 				ssize_t (*handler)(struct atkbd *, char *))
955 {
956 	struct serio *serio = to_serio_port(dev);
957 	int retval;
958 
959 	retval = serio_pin_driver(serio);
960 	if (retval)
961 		return retval;
962 
963 	if (serio->drv != &atkbd_drv) {
964 		retval = -ENODEV;
965 		goto out;
966 	}
967 
968 	retval = handler((struct atkbd *)serio_get_drvdata(serio), buf);
969 
970 out:
971 	serio_unpin_driver(serio);
972 	return retval;
973 }
974 
975 static ssize_t atkbd_attr_set_helper(struct device *dev, const char *buf, size_t count,
976 				ssize_t (*handler)(struct atkbd *, const char *, size_t))
977 {
978 	struct serio *serio = to_serio_port(dev);
979 	struct atkbd *atkbd;
980 	int retval;
981 
982 	retval = serio_pin_driver(serio);
983 	if (retval)
984 		return retval;
985 
986 	if (serio->drv != &atkbd_drv) {
987 		retval = -ENODEV;
988 		goto out;
989 	}
990 
991 	atkbd = serio_get_drvdata(serio);
992 	atkbd_disable(atkbd);
993 	retval = handler(atkbd, buf, count);
994 	atkbd_enable(atkbd);
995 
996 out:
997 	serio_unpin_driver(serio);
998 	return retval;
999 }
1000 
1001 static ssize_t atkbd_show_extra(struct atkbd *atkbd, char *buf)
1002 {
1003 	return sprintf(buf, "%d\n", atkbd->extra ? 1 : 0);
1004 }
1005 
1006 static ssize_t atkbd_set_extra(struct atkbd *atkbd, const char *buf, size_t count)
1007 {
1008 	struct input_dev *new_dev;
1009 	unsigned long value;
1010 	char *rest;
1011 
1012 	if (!atkbd->write)
1013 		return -EIO;
1014 
1015 	value = simple_strtoul(buf, &rest, 10);
1016 	if (*rest || value > 1)
1017 		return -EINVAL;
1018 
1019 	if (atkbd->extra != value) {
1020 		/*
1021 		 * Since device's properties will change we need to
1022 		 * unregister old device. But allocate new one first
1023 		 * to make sure we have it.
1024 		 */
1025 		if (!(new_dev = input_allocate_device()))
1026 			return -ENOMEM;
1027 		input_unregister_device(atkbd->dev);
1028 		atkbd->dev = new_dev;
1029 		atkbd->set = atkbd_select_set(atkbd, atkbd->set, value);
1030 		atkbd_activate(atkbd);
1031 		atkbd_set_device_attrs(atkbd);
1032 		input_register_device(atkbd->dev);
1033 	}
1034 	return count;
1035 }
1036 
1037 static ssize_t atkbd_show_scroll(struct atkbd *atkbd, char *buf)
1038 {
1039 	return sprintf(buf, "%d\n", atkbd->scroll ? 1 : 0);
1040 }
1041 
1042 static ssize_t atkbd_set_scroll(struct atkbd *atkbd, const char *buf, size_t count)
1043 {
1044 	struct input_dev *new_dev;
1045 	unsigned long value;
1046 	char *rest;
1047 
1048 	value = simple_strtoul(buf, &rest, 10);
1049 	if (*rest || value > 1)
1050 		return -EINVAL;
1051 
1052 	if (atkbd->scroll != value) {
1053 		if (!(new_dev = input_allocate_device()))
1054 			return -ENOMEM;
1055 		input_unregister_device(atkbd->dev);
1056 		atkbd->dev = new_dev;
1057 		atkbd->scroll = value;
1058 		atkbd_set_keycode_table(atkbd);
1059 		atkbd_set_device_attrs(atkbd);
1060 		input_register_device(atkbd->dev);
1061 	}
1062 	return count;
1063 }
1064 
1065 static ssize_t atkbd_show_set(struct atkbd *atkbd, char *buf)
1066 {
1067 	return sprintf(buf, "%d\n", atkbd->set);
1068 }
1069 
1070 static ssize_t atkbd_set_set(struct atkbd *atkbd, const char *buf, size_t count)
1071 {
1072 	struct input_dev *new_dev;
1073 	unsigned long value;
1074 	char *rest;
1075 
1076 	if (!atkbd->write)
1077 		return -EIO;
1078 
1079 	value = simple_strtoul(buf, &rest, 10);
1080 	if (*rest || (value != 2 && value != 3))
1081 		return -EINVAL;
1082 
1083 	if (atkbd->set != value) {
1084 		if (!(new_dev = input_allocate_device()))
1085 			return -ENOMEM;
1086 		input_unregister_device(atkbd->dev);
1087 		atkbd->dev = new_dev;
1088 		atkbd->set = atkbd_select_set(atkbd, value, atkbd->extra);
1089 		atkbd_activate(atkbd);
1090 		atkbd_set_keycode_table(atkbd);
1091 		atkbd_set_device_attrs(atkbd);
1092 		input_register_device(atkbd->dev);
1093 	}
1094 	return count;
1095 }
1096 
1097 static ssize_t atkbd_show_softrepeat(struct atkbd *atkbd, char *buf)
1098 {
1099 	return sprintf(buf, "%d\n", atkbd->softrepeat ? 1 : 0);
1100 }
1101 
1102 static ssize_t atkbd_set_softrepeat(struct atkbd *atkbd, const char *buf, size_t count)
1103 {
1104 	struct input_dev *new_dev;
1105 	unsigned long value;
1106 	char *rest;
1107 
1108 	if (!atkbd->write)
1109 		return -EIO;
1110 
1111 	value = simple_strtoul(buf, &rest, 10);
1112 	if (*rest || value > 1)
1113 		return -EINVAL;
1114 
1115 	if (atkbd->softrepeat != value) {
1116 		if (!(new_dev = input_allocate_device()))
1117 			return -ENOMEM;
1118 		input_unregister_device(atkbd->dev);
1119 		atkbd->dev = new_dev;
1120 		atkbd->softrepeat = value;
1121 		if (atkbd->softrepeat)
1122 			atkbd->softraw = 1;
1123 		atkbd_set_device_attrs(atkbd);
1124 		input_register_device(atkbd->dev);
1125 	}
1126 	return count;
1127 }
1128 
1129 
1130 static ssize_t atkbd_show_softraw(struct atkbd *atkbd, char *buf)
1131 {
1132 	return sprintf(buf, "%d\n", atkbd->softraw ? 1 : 0);
1133 }
1134 
1135 static ssize_t atkbd_set_softraw(struct atkbd *atkbd, const char *buf, size_t count)
1136 {
1137 	struct input_dev *new_dev;
1138 	unsigned long value;
1139 	char *rest;
1140 
1141 	value = simple_strtoul(buf, &rest, 10);
1142 	if (*rest || value > 1)
1143 		return -EINVAL;
1144 
1145 	if (atkbd->softraw != value) {
1146 		if (!(new_dev = input_allocate_device()))
1147 			return -ENOMEM;
1148 		input_unregister_device(atkbd->dev);
1149 		atkbd->dev = new_dev;
1150 		atkbd->softraw = value;
1151 		atkbd_set_device_attrs(atkbd);
1152 		input_register_device(atkbd->dev);
1153 	}
1154 	return count;
1155 }
1156 
1157 
1158 static int __init atkbd_init(void)
1159 {
1160 	serio_register_driver(&atkbd_drv);
1161 	return 0;
1162 }
1163 
1164 static void __exit atkbd_exit(void)
1165 {
1166 	serio_unregister_driver(&atkbd_drv);
1167 }
1168 
1169 module_init(atkbd_init);
1170 module_exit(atkbd_exit);
1171