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