xref: /linux/drivers/input/keyboard/atkbd.c (revision 5499b45190237ca90dd2ac86395cf464fe1f4cc7)
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/slab.h>
23 #include <linux/interrupt.h>
24 #include <linux/init.h>
25 #include <linux/input.h>
26 #include <linux/serio.h>
27 #include <linux/workqueue.h>
28 #include <linux/libps2.h>
29 #include <linux/mutex.h>
30 #include <linux/dmi.h>
31 
32 #define DRIVER_DESC	"AT and PS/2 keyboard driver"
33 
34 MODULE_AUTHOR("Vojtech Pavlik <vojtech@suse.cz>");
35 MODULE_DESCRIPTION(DRIVER_DESC);
36 MODULE_LICENSE("GPL");
37 
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)");
41 
42 #if defined(__i386__) || defined(__x86_64__) || defined(__hppa__)
43 static int atkbd_reset;
44 #else
45 static int atkbd_reset = 1;
46 #endif
47 module_param_named(reset, atkbd_reset, bool, 0);
48 MODULE_PARM_DESC(reset, "Reset keyboard during initialization");
49 
50 static int atkbd_softrepeat;
51 module_param_named(softrepeat, atkbd_softrepeat, bool, 0);
52 MODULE_PARM_DESC(softrepeat, "Use software keyboard repeat");
53 
54 static int atkbd_softraw = 1;
55 module_param_named(softraw, atkbd_softraw, bool, 0);
56 MODULE_PARM_DESC(softraw, "Use software generated rawmode");
57 
58 static int atkbd_scroll;
59 module_param_named(scroll, atkbd_scroll, bool, 0);
60 MODULE_PARM_DESC(scroll, "Enable scroll-wheel on MS Office and similar keyboards");
61 
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");
65 
66 /*
67  * Scancode to keycode tables. These are just the default setting, and
68  * are loadable via a userland utility.
69  */
70 
71 #define ATKBD_KEYMAP_SIZE	512
72 
73 static const unsigned short atkbd_set2_keycode[ATKBD_KEYMAP_SIZE] = {
74 
75 #ifdef CONFIG_KEYBOARD_ATKBD_HP_KEYCODES
76 
77 /* XXX: need a more general approach */
78 
79 #include "hpps2atkbd.h"	/* include the keyboard scancodes */
80 
81 #else
82 	  0, 67, 65, 63, 61, 59, 60, 88,  0, 68, 66, 64, 62, 15, 41,117,
83 	  0, 56, 42, 93, 29, 16,  2,  0,  0,  0, 44, 31, 30, 17,  3,  0,
84 	  0, 46, 45, 32, 18,  5,  4, 95,  0, 57, 47, 33, 20, 19,  6,183,
85 	  0, 49, 48, 35, 34, 21,  7,184,  0,  0, 50, 36, 22,  8,  9,185,
86 	  0, 51, 37, 23, 24, 11, 10,  0,  0, 52, 53, 38, 39, 25, 12,  0,
87 	  0, 89, 40,  0, 26, 13,  0,  0, 58, 54, 28, 27,  0, 43,  0, 85,
88 	  0, 86, 91, 90, 92,  0, 14, 94,  0, 79,124, 75, 71,121,  0,  0,
89 	 82, 83, 80, 76, 77, 72,  1, 69, 87, 78, 81, 74, 55, 73, 70, 99,
90 
91 	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
92 	217,100,255,  0, 97,165,  0,  0,156,  0,  0,  0,  0,  0,  0,125,
93 	173,114,  0,113,  0,  0,  0,126,128,  0,  0,140,  0,  0,  0,127,
94 	159,  0,115,  0,164,  0,  0,116,158,  0,172,166,  0,  0,  0,142,
95 	157,  0,  0,  0,  0,  0,  0,  0,155,  0, 98,  0,  0,163,  0,  0,
96 	226,  0,  0,  0,  0,  0,  0,  0,  0,255, 96,  0,  0,  0,143,  0,
97 	  0,  0,  0,  0,  0,  0,  0,  0,  0,107,  0,105,102,  0,  0,112,
98 	110,111,108,112,106,103,  0,119,  0,118,109,  0, 99,104,119,  0,
99 
100 	  0,  0,  0, 65, 99,
101 #endif
102 };
103 
104 static const unsigned short atkbd_set3_keycode[ATKBD_KEYMAP_SIZE] = {
105 
106 	  0,  0,  0,  0,  0,  0,  0, 59,  1,138,128,129,130, 15, 41, 60,
107 	131, 29, 42, 86, 58, 16,  2, 61,133, 56, 44, 31, 30, 17,  3, 62,
108 	134, 46, 45, 32, 18,  5,  4, 63,135, 57, 47, 33, 20, 19,  6, 64,
109 	136, 49, 48, 35, 34, 21,  7, 65,137,100, 50, 36, 22,  8,  9, 66,
110 	125, 51, 37, 23, 24, 11, 10, 67,126, 52, 53, 38, 39, 25, 12, 68,
111 	113,114, 40, 43, 26, 13, 87, 99, 97, 54, 28, 27, 43, 43, 88, 70,
112 	108,105,119,103,111,107, 14,110,  0, 79,106, 75, 71,109,102,104,
113 	 82, 83, 80, 76, 77, 72, 69, 98,  0, 96, 81,  0, 78, 73, 55,183,
114 
115 	184,185,186,187, 74, 94, 92, 93,  0,  0,  0,125,126,127,112,  0,
116 	  0,139,172,163,165,115,152,172,166,140,160,154,113,114,167,168,
117 	148,149,147,140
118 };
119 
120 static const unsigned short atkbd_unxlate_table[128] = {
121           0,118, 22, 30, 38, 37, 46, 54, 61, 62, 70, 69, 78, 85,102, 13,
122          21, 29, 36, 45, 44, 53, 60, 67, 68, 77, 84, 91, 90, 20, 28, 27,
123          35, 43, 52, 51, 59, 66, 75, 76, 82, 14, 18, 93, 26, 34, 33, 42,
124          50, 49, 58, 65, 73, 74, 89,124, 17, 41, 88,  5,  6,  4, 12,  3,
125          11,  2, 10,  1,  9,119,126,108,117,125,123,107,115,116,121,105,
126         114,122,112,113,127, 96, 97,120,  7, 15, 23, 31, 39, 47, 55, 63,
127          71, 79, 86, 94,  8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 87,111,
128          19, 25, 57, 81, 83, 92, 95, 98, 99,100,101,103,104,106,109,110
129 };
130 
131 #define ATKBD_CMD_SETLEDS	0x10ed
132 #define ATKBD_CMD_GSCANSET	0x11f0
133 #define ATKBD_CMD_SSCANSET	0x10f0
134 #define ATKBD_CMD_GETID		0x02f2
135 #define ATKBD_CMD_SETREP	0x10f3
136 #define ATKBD_CMD_ENABLE	0x00f4
137 #define ATKBD_CMD_RESET_DIS	0x00f5	/* Reset to defaults and disable */
138 #define ATKBD_CMD_RESET_DEF	0x00f6	/* Reset to defaults */
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_HANJA		0xf1
153 #define ATKBD_RET_HANGEUL	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		ATKBD_SCR_RIGHT
168 
169 #define ATKBD_LED_EVENT_BIT	0
170 #define ATKBD_REP_EVENT_BIT	1
171 
172 #define ATKBD_XL_ERR		0x01
173 #define ATKBD_XL_BAT		0x02
174 #define ATKBD_XL_ACK		0x04
175 #define ATKBD_XL_NAK		0x08
176 #define ATKBD_XL_HANGEUL	0x10
177 #define ATKBD_XL_HANJA		0x20
178 
179 static const struct {
180 	unsigned char keycode;
181 	unsigned char set2;
182 } atkbd_scroll_keys[] = {
183 	{ ATKBD_SCR_1,     0xc5 },
184 	{ ATKBD_SCR_2,     0x9d },
185 	{ ATKBD_SCR_4,     0xa4 },
186 	{ ATKBD_SCR_8,     0x9b },
187 	{ ATKBD_SCR_CLICK, 0xe0 },
188 	{ ATKBD_SCR_LEFT,  0xcb },
189 	{ ATKBD_SCR_RIGHT, 0xd2 },
190 };
191 
192 /*
193  * The atkbd control structure
194  */
195 
196 struct atkbd {
197 
198 	struct ps2dev ps2dev;
199 	struct input_dev *dev;
200 
201 	/* Written only during init */
202 	char name[64];
203 	char phys[32];
204 
205 	unsigned short id;
206 	unsigned short keycode[ATKBD_KEYMAP_SIZE];
207 	DECLARE_BITMAP(force_release_mask, ATKBD_KEYMAP_SIZE);
208 	unsigned char set;
209 	unsigned char translated;
210 	unsigned char extra;
211 	unsigned char write;
212 	unsigned char softrepeat;
213 	unsigned char softraw;
214 	unsigned char scroll;
215 	unsigned char enabled;
216 
217 	/* Accessed only from interrupt */
218 	unsigned char emul;
219 	unsigned char resend;
220 	unsigned char release;
221 	unsigned long xl_bit;
222 	unsigned int last;
223 	unsigned long time;
224 	unsigned long err_count;
225 
226 	struct delayed_work event_work;
227 	unsigned long event_jiffies;
228 	unsigned long event_mask;
229 
230 	/* Serializes reconnect(), attr->set() and event work */
231 	struct mutex mutex;
232 };
233 
234 /*
235  * System-specific keymap fixup routine
236  */
237 static void (*atkbd_platform_fixup)(struct atkbd *, const void *data);
238 static void *atkbd_platform_fixup_data;
239 static unsigned int (*atkbd_platform_scancode_fixup)(struct atkbd *, unsigned int);
240 
241 static ssize_t atkbd_attr_show_helper(struct device *dev, char *buf,
242 				ssize_t (*handler)(struct atkbd *, char *));
243 static ssize_t atkbd_attr_set_helper(struct device *dev, const char *buf, size_t count,
244 				ssize_t (*handler)(struct atkbd *, const char *, size_t));
245 #define ATKBD_DEFINE_ATTR(_name)						\
246 static ssize_t atkbd_show_##_name(struct atkbd *, char *);			\
247 static ssize_t atkbd_set_##_name(struct atkbd *, const char *, size_t);		\
248 static ssize_t atkbd_do_show_##_name(struct device *d,				\
249 				struct device_attribute *attr, char *b)		\
250 {										\
251 	return atkbd_attr_show_helper(d, b, atkbd_show_##_name);		\
252 }										\
253 static ssize_t atkbd_do_set_##_name(struct device *d,				\
254 			struct device_attribute *attr, const char *b, size_t s)	\
255 {										\
256 	return atkbd_attr_set_helper(d, b, s, atkbd_set_##_name);		\
257 }										\
258 static struct device_attribute atkbd_attr_##_name =				\
259 	__ATTR(_name, S_IWUSR | S_IRUGO, atkbd_do_show_##_name, atkbd_do_set_##_name);
260 
261 ATKBD_DEFINE_ATTR(extra);
262 ATKBD_DEFINE_ATTR(force_release);
263 ATKBD_DEFINE_ATTR(scroll);
264 ATKBD_DEFINE_ATTR(set);
265 ATKBD_DEFINE_ATTR(softrepeat);
266 ATKBD_DEFINE_ATTR(softraw);
267 
268 #define ATKBD_DEFINE_RO_ATTR(_name)						\
269 static ssize_t atkbd_show_##_name(struct atkbd *, char *);			\
270 static ssize_t atkbd_do_show_##_name(struct device *d,				\
271 				struct device_attribute *attr, char *b)		\
272 {										\
273 	return atkbd_attr_show_helper(d, b, atkbd_show_##_name);		\
274 }										\
275 static struct device_attribute atkbd_attr_##_name =				\
276 	__ATTR(_name, S_IRUGO, atkbd_do_show_##_name, NULL);
277 
278 ATKBD_DEFINE_RO_ATTR(err_count);
279 
280 static struct attribute *atkbd_attributes[] = {
281 	&atkbd_attr_extra.attr,
282 	&atkbd_attr_force_release.attr,
283 	&atkbd_attr_scroll.attr,
284 	&atkbd_attr_set.attr,
285 	&atkbd_attr_softrepeat.attr,
286 	&atkbd_attr_softraw.attr,
287 	&atkbd_attr_err_count.attr,
288 	NULL
289 };
290 
291 static struct attribute_group atkbd_attribute_group = {
292 	.attrs	= atkbd_attributes,
293 };
294 
295 static const unsigned int xl_table[] = {
296 	ATKBD_RET_BAT, ATKBD_RET_ERR, ATKBD_RET_ACK,
297 	ATKBD_RET_NAK, ATKBD_RET_HANJA, ATKBD_RET_HANGEUL,
298 };
299 
300 /*
301  * Checks if we should mangle the scancode to extract 'release' bit
302  * in translated mode.
303  */
304 static int atkbd_need_xlate(unsigned long xl_bit, unsigned char code)
305 {
306 	int i;
307 
308 	if (code == ATKBD_RET_EMUL0 || code == ATKBD_RET_EMUL1)
309 		return 0;
310 
311 	for (i = 0; i < ARRAY_SIZE(xl_table); i++)
312 		if (code == xl_table[i])
313 			return test_bit(i, &xl_bit);
314 
315 	return 1;
316 }
317 
318 /*
319  * Calculates new value of xl_bit so the driver can distinguish
320  * between make/break pair of scancodes for select keys and PS/2
321  * protocol responses.
322  */
323 static void atkbd_calculate_xl_bit(struct atkbd *atkbd, unsigned char code)
324 {
325 	int i;
326 
327 	for (i = 0; i < ARRAY_SIZE(xl_table); i++) {
328 		if (!((code ^ xl_table[i]) & 0x7f)) {
329 			if (code & 0x80)
330 				__clear_bit(i, &atkbd->xl_bit);
331 			else
332 				__set_bit(i, &atkbd->xl_bit);
333 			break;
334 		}
335 	}
336 }
337 
338 /*
339  * Encode the scancode, 0xe0 prefix, and high bit into a single integer,
340  * keeping kernel 2.4 compatibility for set 2
341  */
342 static unsigned int atkbd_compat_scancode(struct atkbd *atkbd, unsigned int code)
343 {
344 	if (atkbd->set == 3) {
345 		if (atkbd->emul == 1)
346 			code |= 0x100;
347         } else {
348 		code = (code & 0x7f) | ((code & 0x80) << 1);
349 		if (atkbd->emul == 1)
350 			code |= 0x80;
351 	}
352 
353 	return code;
354 }
355 
356 /*
357  * atkbd_interrupt(). Here takes place processing of data received from
358  * the keyboard into events.
359  */
360 
361 static irqreturn_t atkbd_interrupt(struct serio *serio, unsigned char data,
362 			unsigned int flags)
363 {
364 	struct atkbd *atkbd = serio_get_drvdata(serio);
365 	struct input_dev *dev = atkbd->dev;
366 	unsigned int code = data;
367 	int scroll = 0, hscroll = 0, click = -1;
368 	int value;
369 	unsigned short keycode;
370 
371 #ifdef ATKBD_DEBUG
372 	printk(KERN_DEBUG "atkbd.c: Received %02x flags %02x\n", data, flags);
373 #endif
374 
375 #if !defined(__i386__) && !defined (__x86_64__)
376 	if ((flags & (SERIO_FRAME | SERIO_PARITY)) && (~flags & SERIO_TIMEOUT) && !atkbd->resend && atkbd->write) {
377 		printk(KERN_WARNING "atkbd.c: frame/parity error: %02x\n", flags);
378 		serio_write(serio, ATKBD_CMD_RESEND);
379 		atkbd->resend = 1;
380 		goto out;
381 	}
382 
383 	if (!flags && data == ATKBD_RET_ACK)
384 		atkbd->resend = 0;
385 #endif
386 
387 	if (unlikely(atkbd->ps2dev.flags & PS2_FLAG_ACK))
388 		if  (ps2_handle_ack(&atkbd->ps2dev, data))
389 			goto out;
390 
391 	if (unlikely(atkbd->ps2dev.flags & PS2_FLAG_CMD))
392 		if  (ps2_handle_response(&atkbd->ps2dev, data))
393 			goto out;
394 
395 	if (!atkbd->enabled)
396 		goto out;
397 
398 	input_event(dev, EV_MSC, MSC_RAW, code);
399 
400 	if (atkbd_platform_scancode_fixup)
401 		code = atkbd_platform_scancode_fixup(atkbd, code);
402 
403 	if (atkbd->translated) {
404 
405 		if (atkbd->emul || atkbd_need_xlate(atkbd->xl_bit, code)) {
406 			atkbd->release = code >> 7;
407 			code &= 0x7f;
408 		}
409 
410 		if (!atkbd->emul)
411 			atkbd_calculate_xl_bit(atkbd, data);
412 	}
413 
414 	switch (code) {
415 		case ATKBD_RET_BAT:
416 			atkbd->enabled = 0;
417 			serio_reconnect(atkbd->ps2dev.serio);
418 			goto out;
419 		case ATKBD_RET_EMUL0:
420 			atkbd->emul = 1;
421 			goto out;
422 		case ATKBD_RET_EMUL1:
423 			atkbd->emul = 2;
424 			goto out;
425 		case ATKBD_RET_RELEASE:
426 			atkbd->release = 1;
427 			goto out;
428 		case ATKBD_RET_ACK:
429 		case ATKBD_RET_NAK:
430 			if (printk_ratelimit())
431 				printk(KERN_WARNING "atkbd.c: Spurious %s on %s. "
432 				       "Some program might be trying access hardware directly.\n",
433 				       data == ATKBD_RET_ACK ? "ACK" : "NAK", serio->phys);
434 			goto out;
435 		case ATKBD_RET_ERR:
436 			atkbd->err_count++;
437 #ifdef ATKBD_DEBUG
438 			printk(KERN_DEBUG "atkbd.c: Keyboard on %s reports too many keys pressed.\n", serio->phys);
439 #endif
440 			goto out;
441 	}
442 
443 	code = atkbd_compat_scancode(atkbd, code);
444 
445 	if (atkbd->emul && --atkbd->emul)
446 		goto out;
447 
448 	keycode = atkbd->keycode[code];
449 
450 	if (keycode != ATKBD_KEY_NULL)
451 		input_event(dev, EV_MSC, MSC_SCAN, code);
452 
453 	switch (keycode) {
454 		case ATKBD_KEY_NULL:
455 			break;
456 		case ATKBD_KEY_UNKNOWN:
457 			printk(KERN_WARNING
458 			       "atkbd.c: Unknown key %s (%s set %d, code %#x on %s).\n",
459 			       atkbd->release ? "released" : "pressed",
460 			       atkbd->translated ? "translated" : "raw",
461 			       atkbd->set, code, serio->phys);
462 			printk(KERN_WARNING
463 			       "atkbd.c: Use 'setkeycodes %s%02x <keycode>' to make it known.\n",
464 			       code & 0x80 ? "e0" : "", code & 0x7f);
465 			input_sync(dev);
466 			break;
467 		case ATKBD_SCR_1:
468 			scroll = 1 - atkbd->release * 2;
469 			break;
470 		case ATKBD_SCR_2:
471 			scroll = 2 - atkbd->release * 4;
472 			break;
473 		case ATKBD_SCR_4:
474 			scroll = 4 - atkbd->release * 8;
475 			break;
476 		case ATKBD_SCR_8:
477 			scroll = 8 - atkbd->release * 16;
478 			break;
479 		case ATKBD_SCR_CLICK:
480 			click = !atkbd->release;
481 			break;
482 		case ATKBD_SCR_LEFT:
483 			hscroll = -1;
484 			break;
485 		case ATKBD_SCR_RIGHT:
486 			hscroll = 1;
487 			break;
488 		default:
489 			if (atkbd->release) {
490 				value = 0;
491 				atkbd->last = 0;
492 			} else if (!atkbd->softrepeat && test_bit(keycode, dev->key)) {
493 				/* Workaround Toshiba laptop multiple keypress */
494 				value = time_before(jiffies, atkbd->time) && atkbd->last == code ? 1 : 2;
495 			} else {
496 				value = 1;
497 				atkbd->last = code;
498 				atkbd->time = jiffies + msecs_to_jiffies(dev->rep[REP_DELAY]) / 2;
499 			}
500 
501 			input_event(dev, EV_KEY, keycode, value);
502 			input_sync(dev);
503 
504 			if (value && test_bit(code, atkbd->force_release_mask)) {
505 				input_report_key(dev, keycode, 0);
506 				input_sync(dev);
507 			}
508 	}
509 
510 	if (atkbd->scroll) {
511 		if (click != -1)
512 			input_report_key(dev, BTN_MIDDLE, click);
513 		input_report_rel(dev, REL_WHEEL, scroll);
514 		input_report_rel(dev, REL_HWHEEL, hscroll);
515 		input_sync(dev);
516 	}
517 
518 	atkbd->release = 0;
519 out:
520 	return IRQ_HANDLED;
521 }
522 
523 static int atkbd_set_repeat_rate(struct atkbd *atkbd)
524 {
525 	const short period[32] =
526 		{ 33,  37,  42,  46,  50,  54,  58,  63,  67,  75,  83,  92, 100, 109, 116, 125,
527 		 133, 149, 167, 182, 200, 217, 232, 250, 270, 303, 333, 370, 400, 435, 470, 500 };
528 	const short delay[4] =
529 		{ 250, 500, 750, 1000 };
530 
531 	struct input_dev *dev = atkbd->dev;
532 	unsigned char param;
533 	int i = 0, j = 0;
534 
535 	while (i < ARRAY_SIZE(period) - 1 && period[i] < dev->rep[REP_PERIOD])
536 		i++;
537 	dev->rep[REP_PERIOD] = period[i];
538 
539 	while (j < ARRAY_SIZE(delay) - 1 && delay[j] < dev->rep[REP_DELAY])
540 		j++;
541 	dev->rep[REP_DELAY] = delay[j];
542 
543 	param = i | (j << 5);
544 	return ps2_command(&atkbd->ps2dev, &param, ATKBD_CMD_SETREP);
545 }
546 
547 static int atkbd_set_leds(struct atkbd *atkbd)
548 {
549 	struct input_dev *dev = atkbd->dev;
550 	unsigned char param[2];
551 
552 	param[0] = (test_bit(LED_SCROLLL, dev->led) ? 1 : 0)
553 		 | (test_bit(LED_NUML,    dev->led) ? 2 : 0)
554 		 | (test_bit(LED_CAPSL,   dev->led) ? 4 : 0);
555 	if (ps2_command(&atkbd->ps2dev, param, ATKBD_CMD_SETLEDS))
556 		return -1;
557 
558 	if (atkbd->extra) {
559 		param[0] = 0;
560 		param[1] = (test_bit(LED_COMPOSE, dev->led) ? 0x01 : 0)
561 			 | (test_bit(LED_SLEEP,   dev->led) ? 0x02 : 0)
562 			 | (test_bit(LED_SUSPEND, dev->led) ? 0x04 : 0)
563 			 | (test_bit(LED_MISC,    dev->led) ? 0x10 : 0)
564 			 | (test_bit(LED_MUTE,    dev->led) ? 0x20 : 0);
565 		if (ps2_command(&atkbd->ps2dev, param, ATKBD_CMD_EX_SETLEDS))
566 			return -1;
567 	}
568 
569 	return 0;
570 }
571 
572 /*
573  * atkbd_event_work() is used to complete processing of events that
574  * can not be processed by input_event() which is often called from
575  * interrupt context.
576  */
577 
578 static void atkbd_event_work(struct work_struct *work)
579 {
580 	struct atkbd *atkbd = container_of(work, struct atkbd, event_work.work);
581 
582 	mutex_lock(&atkbd->mutex);
583 
584 	if (!atkbd->enabled) {
585 		/*
586 		 * Serio ports are resumed asynchronously so while driver core
587 		 * thinks that device is already fully operational in reality
588 		 * it may not be ready yet. In this case we need to keep
589 		 * rescheduling till reconnect completes.
590 		 */
591 		schedule_delayed_work(&atkbd->event_work,
592 					msecs_to_jiffies(100));
593 	} else {
594 		if (test_and_clear_bit(ATKBD_LED_EVENT_BIT, &atkbd->event_mask))
595 			atkbd_set_leds(atkbd);
596 
597 		if (test_and_clear_bit(ATKBD_REP_EVENT_BIT, &atkbd->event_mask))
598 			atkbd_set_repeat_rate(atkbd);
599 	}
600 
601 	mutex_unlock(&atkbd->mutex);
602 }
603 
604 /*
605  * Schedule switch for execution. We need to throttle requests,
606  * otherwise keyboard may become unresponsive.
607  */
608 static void atkbd_schedule_event_work(struct atkbd *atkbd, int event_bit)
609 {
610 	unsigned long delay = msecs_to_jiffies(50);
611 
612 	if (time_after(jiffies, atkbd->event_jiffies + delay))
613 		delay = 0;
614 
615 	atkbd->event_jiffies = jiffies;
616 	set_bit(event_bit, &atkbd->event_mask);
617 	mb();
618 	schedule_delayed_work(&atkbd->event_work, delay);
619 }
620 
621 /*
622  * Event callback from the input module. Events that change the state of
623  * the hardware are processed here. If action can not be performed in
624  * interrupt context it is offloaded to atkbd_event_work.
625  */
626 
627 static int atkbd_event(struct input_dev *dev,
628 			unsigned int type, unsigned int code, int value)
629 {
630 	struct atkbd *atkbd = input_get_drvdata(dev);
631 
632 	if (!atkbd->write)
633 		return -1;
634 
635 	switch (type) {
636 
637 		case EV_LED:
638 			atkbd_schedule_event_work(atkbd, ATKBD_LED_EVENT_BIT);
639 			return 0;
640 
641 		case EV_REP:
642 			if (!atkbd->softrepeat)
643 				atkbd_schedule_event_work(atkbd, ATKBD_REP_EVENT_BIT);
644 			return 0;
645 	}
646 
647 	return -1;
648 }
649 
650 /*
651  * atkbd_enable() signals that interrupt handler is allowed to
652  * generate input events.
653  */
654 
655 static inline void atkbd_enable(struct atkbd *atkbd)
656 {
657 	serio_pause_rx(atkbd->ps2dev.serio);
658 	atkbd->enabled = 1;
659 	serio_continue_rx(atkbd->ps2dev.serio);
660 }
661 
662 /*
663  * atkbd_disable() tells input handler that all incoming data except
664  * for ACKs and command response should be dropped.
665  */
666 
667 static inline void atkbd_disable(struct atkbd *atkbd)
668 {
669 	serio_pause_rx(atkbd->ps2dev.serio);
670 	atkbd->enabled = 0;
671 	serio_continue_rx(atkbd->ps2dev.serio);
672 }
673 
674 /*
675  * atkbd_probe() probes for an AT keyboard on a serio port.
676  */
677 
678 static int atkbd_probe(struct atkbd *atkbd)
679 {
680 	struct ps2dev *ps2dev = &atkbd->ps2dev;
681 	unsigned char param[2];
682 
683 /*
684  * Some systems, where the bit-twiddling when testing the io-lines of the
685  * controller may confuse the keyboard need a full reset of the keyboard. On
686  * these systems the BIOS also usually doesn't do it for us.
687  */
688 
689 	if (atkbd_reset)
690 		if (ps2_command(ps2dev, NULL, ATKBD_CMD_RESET_BAT))
691 			printk(KERN_WARNING "atkbd.c: keyboard reset failed on %s\n", ps2dev->serio->phys);
692 
693 /*
694  * Then we check the keyboard ID. We should get 0xab83 under normal conditions.
695  * Some keyboards report different values, but the first byte is always 0xab or
696  * 0xac. Some old AT keyboards don't report anything. If a mouse is connected, this
697  * should make sure we don't try to set the LEDs on it.
698  */
699 
700 	param[0] = param[1] = 0xa5;	/* initialize with invalid values */
701 	if (ps2_command(ps2dev, param, ATKBD_CMD_GETID)) {
702 
703 /*
704  * If the get ID command failed, we check if we can at least set the LEDs on
705  * the keyboard. This should work on every keyboard out there. It also turns
706  * the LEDs off, which we want anyway.
707  */
708 		param[0] = 0;
709 		if (ps2_command(ps2dev, param, ATKBD_CMD_SETLEDS))
710 			return -1;
711 		atkbd->id = 0xabba;
712 		return 0;
713 	}
714 
715 	if (!ps2_is_keyboard_id(param[0]))
716 		return -1;
717 
718 	atkbd->id = (param[0] << 8) | param[1];
719 
720 	if (atkbd->id == 0xaca1 && atkbd->translated) {
721 		printk(KERN_ERR "atkbd.c: NCD terminal keyboards are only supported on non-translating\n");
722 		printk(KERN_ERR "atkbd.c: controllers. Use i8042.direct=1 to disable translation.\n");
723 		return -1;
724 	}
725 
726 	return 0;
727 }
728 
729 /*
730  * atkbd_select_set checks if a keyboard has a working Set 3 support, and
731  * sets it into that. Unfortunately there are keyboards that can be switched
732  * to Set 3, but don't work well in that (BTC Multimedia ...)
733  */
734 
735 static int atkbd_select_set(struct atkbd *atkbd, int target_set, int allow_extra)
736 {
737 	struct ps2dev *ps2dev = &atkbd->ps2dev;
738 	unsigned char param[2];
739 
740 	atkbd->extra = 0;
741 /*
742  * For known special keyboards we can go ahead and set the correct set.
743  * We check for NCD PS/2 Sun, NorthGate OmniKey 101 and
744  * IBM RapidAccess / IBM EzButton / Chicony KBP-8993 keyboards.
745  */
746 
747 	if (atkbd->translated)
748 		return 2;
749 
750 	if (atkbd->id == 0xaca1) {
751 		param[0] = 3;
752 		ps2_command(ps2dev, param, ATKBD_CMD_SSCANSET);
753 		return 3;
754 	}
755 
756 	if (allow_extra) {
757 		param[0] = 0x71;
758 		if (!ps2_command(ps2dev, param, ATKBD_CMD_EX_ENABLE)) {
759 			atkbd->extra = 1;
760 			return 2;
761 		}
762 	}
763 
764 	if (target_set != 3)
765 		return 2;
766 
767 	if (!ps2_command(ps2dev, param, ATKBD_CMD_OK_GETID)) {
768 		atkbd->id = param[0] << 8 | param[1];
769 		return 2;
770 	}
771 
772 	param[0] = 3;
773 	if (ps2_command(ps2dev, param, ATKBD_CMD_SSCANSET))
774 		return 2;
775 
776 	param[0] = 0;
777 	if (ps2_command(ps2dev, param, ATKBD_CMD_GSCANSET))
778 		return 2;
779 
780 	if (param[0] != 3) {
781 		param[0] = 2;
782 		if (ps2_command(ps2dev, param, ATKBD_CMD_SSCANSET))
783 		return 2;
784 	}
785 
786 	ps2_command(ps2dev, param, ATKBD_CMD_SETALL_MBR);
787 
788 	return 3;
789 }
790 
791 static int atkbd_reset_state(struct atkbd *atkbd)
792 {
793         struct ps2dev *ps2dev = &atkbd->ps2dev;
794 	unsigned char param[1];
795 
796 /*
797  * Set the LEDs to a predefined state (all off).
798  */
799 
800 	param[0] = 0;
801 	if (ps2_command(ps2dev, param, ATKBD_CMD_SETLEDS))
802 		return -1;
803 
804 /*
805  * Set autorepeat to fastest possible.
806  */
807 
808 	param[0] = 0;
809 	if (ps2_command(ps2dev, param, ATKBD_CMD_SETREP))
810 		return -1;
811 
812 	return 0;
813 }
814 
815 static int atkbd_activate(struct atkbd *atkbd)
816 {
817 	struct ps2dev *ps2dev = &atkbd->ps2dev;
818 
819 /*
820  * Enable the keyboard to receive keystrokes.
821  */
822 
823 	if (ps2_command(ps2dev, NULL, ATKBD_CMD_ENABLE)) {
824 		printk(KERN_ERR "atkbd.c: Failed to enable keyboard on %s\n",
825 			ps2dev->serio->phys);
826 		return -1;
827 	}
828 
829 	return 0;
830 }
831 
832 /*
833  * atkbd_cleanup() restores the keyboard state so that BIOS is happy after a
834  * reboot.
835  */
836 
837 static void atkbd_cleanup(struct serio *serio)
838 {
839 	struct atkbd *atkbd = serio_get_drvdata(serio);
840 
841 	atkbd_disable(atkbd);
842 	ps2_command(&atkbd->ps2dev, NULL, ATKBD_CMD_RESET_DEF);
843 }
844 
845 
846 /*
847  * atkbd_disconnect() closes and frees.
848  */
849 
850 static void atkbd_disconnect(struct serio *serio)
851 {
852 	struct atkbd *atkbd = serio_get_drvdata(serio);
853 
854 	sysfs_remove_group(&serio->dev.kobj, &atkbd_attribute_group);
855 
856 	atkbd_disable(atkbd);
857 
858 	input_unregister_device(atkbd->dev);
859 
860 	/*
861 	 * Make sure we don't have a command in flight.
862 	 * Note that since atkbd->enabled is false event work will keep
863 	 * rescheduling itself until it gets canceled and will not try
864 	 * accessing freed input device or serio port.
865 	 */
866 	cancel_delayed_work_sync(&atkbd->event_work);
867 
868 	serio_close(serio);
869 	serio_set_drvdata(serio, NULL);
870 	kfree(atkbd);
871 }
872 
873 /*
874  * generate release events for the keycodes given in data
875  */
876 static void atkbd_apply_forced_release_keylist(struct atkbd* atkbd,
877 						const void *data)
878 {
879 	const unsigned int *keys = data;
880 	unsigned int i;
881 
882 	if (atkbd->set == 2)
883 		for (i = 0; keys[i] != -1U; i++)
884 			__set_bit(keys[i], atkbd->force_release_mask);
885 }
886 
887 /*
888  * Most special keys (Fn+F?) on Dell laptops do not generate release
889  * events so we have to do it ourselves.
890  */
891 static unsigned int atkbd_dell_laptop_forced_release_keys[] = {
892 	0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8f, 0x93, -1U
893 };
894 
895 /*
896  * Perform fixup for HP system that doesn't generate release
897  * for its video switch
898  */
899 static unsigned int atkbd_hp_forced_release_keys[] = {
900 	0x94, -1U
901 };
902 
903 /*
904  * Samsung NC10,NC20 with Fn+F? key release not working
905  */
906 static unsigned int atkbd_samsung_forced_release_keys[] = {
907 	0x82, 0x83, 0x84, 0x86, 0x88, 0x89, 0xb3, 0xf7, 0xf9, -1U
908 };
909 
910 /*
911  * Amilo Pi 3525 key release for Fn+Volume keys not working
912  */
913 static unsigned int atkbd_amilo_pi3525_forced_release_keys[] = {
914 	0x20, 0xa0, 0x2e, 0xae, 0x30, 0xb0, -1U
915 };
916 
917 /*
918  * Amilo Xi 3650 key release for light touch bar not working
919  */
920 static unsigned int atkbd_amilo_xi3650_forced_release_keys[] = {
921 	0x67, 0xed, 0x90, 0xa2, 0x99, 0xa4, 0xae, 0xb0, -1U
922 };
923 
924 /*
925  * Soltech TA12 system with broken key release on volume keys and mute key
926  */
927 static unsigned int atkdb_soltech_ta12_forced_release_keys[] = {
928 	0xa0, 0xae, 0xb0, -1U
929 };
930 
931 /*
932  * Many notebooks don't send key release event for volume up/down
933  * keys, with key list below common among them
934  */
935 static unsigned int atkbd_volume_forced_release_keys[] = {
936 	0xae, 0xb0, -1U
937 };
938 
939 /*
940  * OQO 01+ multimedia keys (64--66) generate e0 6x upon release whereas
941  * they should be generating e4-e6 (0x80 | code).
942  */
943 static unsigned int atkbd_oqo_01plus_scancode_fixup(struct atkbd *atkbd,
944 						    unsigned int code)
945 {
946 	if (atkbd->translated && atkbd->emul == 1 &&
947 	    (code == 0x64 || code == 0x65 || code == 0x66)) {
948 		atkbd->emul = 0;
949 		code |= 0x80;
950 	}
951 
952 	return code;
953 }
954 
955 /*
956  * atkbd_set_keycode_table() initializes keyboard's keycode table
957  * according to the selected scancode set
958  */
959 
960 static void atkbd_set_keycode_table(struct atkbd *atkbd)
961 {
962 	unsigned int scancode;
963 	int i, j;
964 
965 	memset(atkbd->keycode, 0, sizeof(atkbd->keycode));
966 	bitmap_zero(atkbd->force_release_mask, ATKBD_KEYMAP_SIZE);
967 
968 	if (atkbd->translated) {
969 		for (i = 0; i < 128; i++) {
970 			scancode = atkbd_unxlate_table[i];
971 			atkbd->keycode[i] = atkbd_set2_keycode[scancode];
972 			atkbd->keycode[i | 0x80] = atkbd_set2_keycode[scancode | 0x80];
973 			if (atkbd->scroll)
974 				for (j = 0; j < ARRAY_SIZE(atkbd_scroll_keys); j++)
975 					if ((scancode | 0x80) == atkbd_scroll_keys[j].set2)
976 						atkbd->keycode[i | 0x80] = atkbd_scroll_keys[j].keycode;
977 		}
978 	} else if (atkbd->set == 3) {
979 		memcpy(atkbd->keycode, atkbd_set3_keycode, sizeof(atkbd->keycode));
980 	} else {
981 		memcpy(atkbd->keycode, atkbd_set2_keycode, sizeof(atkbd->keycode));
982 
983 		if (atkbd->scroll)
984 			for (i = 0; i < ARRAY_SIZE(atkbd_scroll_keys); i++) {
985 				scancode = atkbd_scroll_keys[i].set2;
986 				atkbd->keycode[scancode] = atkbd_scroll_keys[i].keycode;
987 		}
988 	}
989 
990 /*
991  * HANGEUL and HANJA keys do not send release events so we need to
992  * generate such events ourselves
993  */
994 	scancode = atkbd_compat_scancode(atkbd, ATKBD_RET_HANGEUL);
995 	atkbd->keycode[scancode] = KEY_HANGEUL;
996 	__set_bit(scancode, atkbd->force_release_mask);
997 
998 	scancode = atkbd_compat_scancode(atkbd, ATKBD_RET_HANJA);
999 	atkbd->keycode[scancode] = KEY_HANJA;
1000 	__set_bit(scancode, atkbd->force_release_mask);
1001 
1002 /*
1003  * Perform additional fixups
1004  */
1005 	if (atkbd_platform_fixup)
1006 		atkbd_platform_fixup(atkbd, atkbd_platform_fixup_data);
1007 }
1008 
1009 /*
1010  * atkbd_set_device_attrs() sets up keyboard's input device structure
1011  */
1012 
1013 static void atkbd_set_device_attrs(struct atkbd *atkbd)
1014 {
1015 	struct input_dev *input_dev = atkbd->dev;
1016 	int i;
1017 
1018 	if (atkbd->extra)
1019 		snprintf(atkbd->name, sizeof(atkbd->name),
1020 			 "AT Set 2 Extra keyboard");
1021 	else
1022 		snprintf(atkbd->name, sizeof(atkbd->name),
1023 			 "AT %s Set %d keyboard",
1024 			 atkbd->translated ? "Translated" : "Raw", atkbd->set);
1025 
1026 	snprintf(atkbd->phys, sizeof(atkbd->phys),
1027 		 "%s/input0", atkbd->ps2dev.serio->phys);
1028 
1029 	input_dev->name = atkbd->name;
1030 	input_dev->phys = atkbd->phys;
1031 	input_dev->id.bustype = BUS_I8042;
1032 	input_dev->id.vendor = 0x0001;
1033 	input_dev->id.product = atkbd->translated ? 1 : atkbd->set;
1034 	input_dev->id.version = atkbd->id;
1035 	input_dev->event = atkbd_event;
1036 	input_dev->dev.parent = &atkbd->ps2dev.serio->dev;
1037 
1038 	input_set_drvdata(input_dev, atkbd);
1039 
1040 	input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP) |
1041 		BIT_MASK(EV_MSC);
1042 
1043 	if (atkbd->write) {
1044 		input_dev->evbit[0] |= BIT_MASK(EV_LED);
1045 		input_dev->ledbit[0] = BIT_MASK(LED_NUML) |
1046 			BIT_MASK(LED_CAPSL) | BIT_MASK(LED_SCROLLL);
1047 	}
1048 
1049 	if (atkbd->extra)
1050 		input_dev->ledbit[0] |= BIT_MASK(LED_COMPOSE) |
1051 			BIT_MASK(LED_SUSPEND) | BIT_MASK(LED_SLEEP) |
1052 			BIT_MASK(LED_MUTE) | BIT_MASK(LED_MISC);
1053 
1054 	if (!atkbd->softrepeat) {
1055 		input_dev->rep[REP_DELAY] = 250;
1056 		input_dev->rep[REP_PERIOD] = 33;
1057 	}
1058 
1059 	input_dev->mscbit[0] = atkbd->softraw ? BIT_MASK(MSC_SCAN) :
1060 		BIT_MASK(MSC_RAW) | BIT_MASK(MSC_SCAN);
1061 
1062 	if (atkbd->scroll) {
1063 		input_dev->evbit[0] |= BIT_MASK(EV_REL);
1064 		input_dev->relbit[0] = BIT_MASK(REL_WHEEL) |
1065 			BIT_MASK(REL_HWHEEL);
1066 		__set_bit(BTN_MIDDLE, input_dev->keybit);
1067 	}
1068 
1069 	input_dev->keycode = atkbd->keycode;
1070 	input_dev->keycodesize = sizeof(unsigned short);
1071 	input_dev->keycodemax = ARRAY_SIZE(atkbd_set2_keycode);
1072 
1073 	for (i = 0; i < ATKBD_KEYMAP_SIZE; i++)
1074 		if (atkbd->keycode[i] && atkbd->keycode[i] < ATKBD_SPECIAL)
1075 			__set_bit(atkbd->keycode[i], input_dev->keybit);
1076 }
1077 
1078 /*
1079  * atkbd_connect() is called when the serio module finds an interface
1080  * that isn't handled yet by an appropriate device driver. We check if
1081  * there is an AT keyboard out there and if yes, we register ourselves
1082  * to the input module.
1083  */
1084 
1085 static int atkbd_connect(struct serio *serio, struct serio_driver *drv)
1086 {
1087 	struct atkbd *atkbd;
1088 	struct input_dev *dev;
1089 	int err = -ENOMEM;
1090 
1091 	atkbd = kzalloc(sizeof(struct atkbd), GFP_KERNEL);
1092 	dev = input_allocate_device();
1093 	if (!atkbd || !dev)
1094 		goto fail1;
1095 
1096 	atkbd->dev = dev;
1097 	ps2_init(&atkbd->ps2dev, serio);
1098 	INIT_DELAYED_WORK(&atkbd->event_work, atkbd_event_work);
1099 	mutex_init(&atkbd->mutex);
1100 
1101 	switch (serio->id.type) {
1102 
1103 		case SERIO_8042_XL:
1104 			atkbd->translated = 1;
1105 		case SERIO_8042:
1106 			if (serio->write)
1107 				atkbd->write = 1;
1108 			break;
1109 	}
1110 
1111 	atkbd->softraw = atkbd_softraw;
1112 	atkbd->softrepeat = atkbd_softrepeat;
1113 	atkbd->scroll = atkbd_scroll;
1114 
1115 	if (atkbd->softrepeat)
1116 		atkbd->softraw = 1;
1117 
1118 	serio_set_drvdata(serio, atkbd);
1119 
1120 	err = serio_open(serio, drv);
1121 	if (err)
1122 		goto fail2;
1123 
1124 	if (atkbd->write) {
1125 
1126 		if (atkbd_probe(atkbd)) {
1127 			err = -ENODEV;
1128 			goto fail3;
1129 		}
1130 
1131 		atkbd->set = atkbd_select_set(atkbd, atkbd_set, atkbd_extra);
1132 		atkbd_reset_state(atkbd);
1133 		atkbd_activate(atkbd);
1134 
1135 	} else {
1136 		atkbd->set = 2;
1137 		atkbd->id = 0xab00;
1138 	}
1139 
1140 	atkbd_set_keycode_table(atkbd);
1141 	atkbd_set_device_attrs(atkbd);
1142 
1143 	err = sysfs_create_group(&serio->dev.kobj, &atkbd_attribute_group);
1144 	if (err)
1145 		goto fail3;
1146 
1147 	atkbd_enable(atkbd);
1148 
1149 	err = input_register_device(atkbd->dev);
1150 	if (err)
1151 		goto fail4;
1152 
1153 	return 0;
1154 
1155  fail4: sysfs_remove_group(&serio->dev.kobj, &atkbd_attribute_group);
1156  fail3:	serio_close(serio);
1157  fail2:	serio_set_drvdata(serio, NULL);
1158  fail1:	input_free_device(dev);
1159 	kfree(atkbd);
1160 	return err;
1161 }
1162 
1163 /*
1164  * atkbd_reconnect() tries to restore keyboard into a sane state and is
1165  * most likely called on resume.
1166  */
1167 
1168 static int atkbd_reconnect(struct serio *serio)
1169 {
1170 	struct atkbd *atkbd = serio_get_drvdata(serio);
1171 	struct serio_driver *drv = serio->drv;
1172 	int retval = -1;
1173 
1174 	if (!atkbd || !drv) {
1175 		printk(KERN_DEBUG "atkbd: reconnect request, but serio is disconnected, ignoring...\n");
1176 		return -1;
1177 	}
1178 
1179 	mutex_lock(&atkbd->mutex);
1180 
1181 	atkbd_disable(atkbd);
1182 
1183 	if (atkbd->write) {
1184 		if (atkbd_probe(atkbd))
1185 			goto out;
1186 
1187 		if (atkbd->set != atkbd_select_set(atkbd, atkbd->set, atkbd->extra))
1188 			goto out;
1189 
1190 		atkbd_activate(atkbd);
1191 
1192 		/*
1193 		 * Restore LED state and repeat rate. While input core
1194 		 * will do this for us at resume time reconnect may happen
1195 		 * because user requested it via sysfs or simply because
1196 		 * keyboard was unplugged and plugged in again so we need
1197 		 * to do it ourselves here.
1198 		 */
1199 		atkbd_set_leds(atkbd);
1200 		if (!atkbd->softrepeat)
1201 			atkbd_set_repeat_rate(atkbd);
1202 
1203 	}
1204 
1205 	atkbd_enable(atkbd);
1206 	retval = 0;
1207 
1208  out:
1209 	mutex_unlock(&atkbd->mutex);
1210 	return retval;
1211 }
1212 
1213 static struct serio_device_id atkbd_serio_ids[] = {
1214 	{
1215 		.type	= SERIO_8042,
1216 		.proto	= SERIO_ANY,
1217 		.id	= SERIO_ANY,
1218 		.extra	= SERIO_ANY,
1219 	},
1220 	{
1221 		.type	= SERIO_8042_XL,
1222 		.proto	= SERIO_ANY,
1223 		.id	= SERIO_ANY,
1224 		.extra	= SERIO_ANY,
1225 	},
1226 	{
1227 		.type	= SERIO_RS232,
1228 		.proto	= SERIO_PS2SER,
1229 		.id	= SERIO_ANY,
1230 		.extra	= SERIO_ANY,
1231 	},
1232 	{ 0 }
1233 };
1234 
1235 MODULE_DEVICE_TABLE(serio, atkbd_serio_ids);
1236 
1237 static struct serio_driver atkbd_drv = {
1238 	.driver		= {
1239 		.name	= "atkbd",
1240 	},
1241 	.description	= DRIVER_DESC,
1242 	.id_table	= atkbd_serio_ids,
1243 	.interrupt	= atkbd_interrupt,
1244 	.connect	= atkbd_connect,
1245 	.reconnect	= atkbd_reconnect,
1246 	.disconnect	= atkbd_disconnect,
1247 	.cleanup	= atkbd_cleanup,
1248 };
1249 
1250 static ssize_t atkbd_attr_show_helper(struct device *dev, char *buf,
1251 				ssize_t (*handler)(struct atkbd *, char *))
1252 {
1253 	struct serio *serio = to_serio_port(dev);
1254 	struct atkbd *atkbd = serio_get_drvdata(serio);
1255 
1256 	return handler(atkbd, buf);
1257 }
1258 
1259 static ssize_t atkbd_attr_set_helper(struct device *dev, const char *buf, size_t count,
1260 				ssize_t (*handler)(struct atkbd *, const char *, size_t))
1261 {
1262 	struct serio *serio = to_serio_port(dev);
1263 	struct atkbd *atkbd = serio_get_drvdata(serio);
1264 	int retval;
1265 
1266 	retval = mutex_lock_interruptible(&atkbd->mutex);
1267 	if (retval)
1268 		return retval;
1269 
1270 	atkbd_disable(atkbd);
1271 	retval = handler(atkbd, buf, count);
1272 	atkbd_enable(atkbd);
1273 
1274 	mutex_unlock(&atkbd->mutex);
1275 
1276 	return retval;
1277 }
1278 
1279 static ssize_t atkbd_show_extra(struct atkbd *atkbd, char *buf)
1280 {
1281 	return sprintf(buf, "%d\n", atkbd->extra ? 1 : 0);
1282 }
1283 
1284 static ssize_t atkbd_set_extra(struct atkbd *atkbd, const char *buf, size_t count)
1285 {
1286 	struct input_dev *old_dev, *new_dev;
1287 	unsigned long value;
1288 	int err;
1289 	unsigned char old_extra, old_set;
1290 
1291 	if (!atkbd->write)
1292 		return -EIO;
1293 
1294 	if (strict_strtoul(buf, 10, &value) || value > 1)
1295 		return -EINVAL;
1296 
1297 	if (atkbd->extra != value) {
1298 		/*
1299 		 * Since device's properties will change we need to
1300 		 * unregister old device. But allocate and register
1301 		 * new one first to make sure we have it.
1302 		 */
1303 		old_dev = atkbd->dev;
1304 		old_extra = atkbd->extra;
1305 		old_set = atkbd->set;
1306 
1307 		new_dev = input_allocate_device();
1308 		if (!new_dev)
1309 			return -ENOMEM;
1310 
1311 		atkbd->dev = new_dev;
1312 		atkbd->set = atkbd_select_set(atkbd, atkbd->set, value);
1313 		atkbd_reset_state(atkbd);
1314 		atkbd_activate(atkbd);
1315 		atkbd_set_keycode_table(atkbd);
1316 		atkbd_set_device_attrs(atkbd);
1317 
1318 		err = input_register_device(atkbd->dev);
1319 		if (err) {
1320 			input_free_device(new_dev);
1321 
1322 			atkbd->dev = old_dev;
1323 			atkbd->set = atkbd_select_set(atkbd, old_set, old_extra);
1324 			atkbd_set_keycode_table(atkbd);
1325 			atkbd_set_device_attrs(atkbd);
1326 
1327 			return err;
1328 		}
1329 		input_unregister_device(old_dev);
1330 
1331 	}
1332 	return count;
1333 }
1334 
1335 static ssize_t atkbd_show_force_release(struct atkbd *atkbd, char *buf)
1336 {
1337 	size_t len = bitmap_scnlistprintf(buf, PAGE_SIZE - 2,
1338 			atkbd->force_release_mask, ATKBD_KEYMAP_SIZE);
1339 
1340 	buf[len++] = '\n';
1341 	buf[len] = '\0';
1342 
1343 	return len;
1344 }
1345 
1346 static ssize_t atkbd_set_force_release(struct atkbd *atkbd,
1347 					const char *buf, size_t count)
1348 {
1349 	/* 64 bytes on stack should be acceptable */
1350 	DECLARE_BITMAP(new_mask, ATKBD_KEYMAP_SIZE);
1351 	int err;
1352 
1353 	err = bitmap_parselist(buf, new_mask, ATKBD_KEYMAP_SIZE);
1354 	if (err)
1355 		return err;
1356 
1357 	memcpy(atkbd->force_release_mask, new_mask, sizeof(atkbd->force_release_mask));
1358 	return count;
1359 }
1360 
1361 
1362 static ssize_t atkbd_show_scroll(struct atkbd *atkbd, char *buf)
1363 {
1364 	return sprintf(buf, "%d\n", atkbd->scroll ? 1 : 0);
1365 }
1366 
1367 static ssize_t atkbd_set_scroll(struct atkbd *atkbd, const char *buf, size_t count)
1368 {
1369 	struct input_dev *old_dev, *new_dev;
1370 	unsigned long value;
1371 	int err;
1372 	unsigned char old_scroll;
1373 
1374 	if (strict_strtoul(buf, 10, &value) || value > 1)
1375 		return -EINVAL;
1376 
1377 	if (atkbd->scroll != value) {
1378 		old_dev = atkbd->dev;
1379 		old_scroll = atkbd->scroll;
1380 
1381 		new_dev = input_allocate_device();
1382 		if (!new_dev)
1383 			return -ENOMEM;
1384 
1385 		atkbd->dev = new_dev;
1386 		atkbd->scroll = value;
1387 		atkbd_set_keycode_table(atkbd);
1388 		atkbd_set_device_attrs(atkbd);
1389 
1390 		err = input_register_device(atkbd->dev);
1391 		if (err) {
1392 			input_free_device(new_dev);
1393 
1394 			atkbd->scroll = old_scroll;
1395 			atkbd->dev = old_dev;
1396 			atkbd_set_keycode_table(atkbd);
1397 			atkbd_set_device_attrs(atkbd);
1398 
1399 			return err;
1400 		}
1401 		input_unregister_device(old_dev);
1402 	}
1403 	return count;
1404 }
1405 
1406 static ssize_t atkbd_show_set(struct atkbd *atkbd, char *buf)
1407 {
1408 	return sprintf(buf, "%d\n", atkbd->set);
1409 }
1410 
1411 static ssize_t atkbd_set_set(struct atkbd *atkbd, const char *buf, size_t count)
1412 {
1413 	struct input_dev *old_dev, *new_dev;
1414 	unsigned long value;
1415 	int err;
1416 	unsigned char old_set, old_extra;
1417 
1418 	if (!atkbd->write)
1419 		return -EIO;
1420 
1421 	if (strict_strtoul(buf, 10, &value) || (value != 2 && value != 3))
1422 		return -EINVAL;
1423 
1424 	if (atkbd->set != value) {
1425 		old_dev = atkbd->dev;
1426 		old_extra = atkbd->extra;
1427 		old_set = atkbd->set;
1428 
1429 		new_dev = input_allocate_device();
1430 		if (!new_dev)
1431 			return -ENOMEM;
1432 
1433 		atkbd->dev = new_dev;
1434 		atkbd->set = atkbd_select_set(atkbd, value, atkbd->extra);
1435 		atkbd_reset_state(atkbd);
1436 		atkbd_activate(atkbd);
1437 		atkbd_set_keycode_table(atkbd);
1438 		atkbd_set_device_attrs(atkbd);
1439 
1440 		err = input_register_device(atkbd->dev);
1441 		if (err) {
1442 			input_free_device(new_dev);
1443 
1444 			atkbd->dev = old_dev;
1445 			atkbd->set = atkbd_select_set(atkbd, old_set, old_extra);
1446 			atkbd_set_keycode_table(atkbd);
1447 			atkbd_set_device_attrs(atkbd);
1448 
1449 			return err;
1450 		}
1451 		input_unregister_device(old_dev);
1452 	}
1453 	return count;
1454 }
1455 
1456 static ssize_t atkbd_show_softrepeat(struct atkbd *atkbd, char *buf)
1457 {
1458 	return sprintf(buf, "%d\n", atkbd->softrepeat ? 1 : 0);
1459 }
1460 
1461 static ssize_t atkbd_set_softrepeat(struct atkbd *atkbd, const char *buf, size_t count)
1462 {
1463 	struct input_dev *old_dev, *new_dev;
1464 	unsigned long value;
1465 	int err;
1466 	unsigned char old_softrepeat, old_softraw;
1467 
1468 	if (!atkbd->write)
1469 		return -EIO;
1470 
1471 	if (strict_strtoul(buf, 10, &value) || value > 1)
1472 		return -EINVAL;
1473 
1474 	if (atkbd->softrepeat != value) {
1475 		old_dev = atkbd->dev;
1476 		old_softrepeat = atkbd->softrepeat;
1477 		old_softraw = atkbd->softraw;
1478 
1479 		new_dev = input_allocate_device();
1480 		if (!new_dev)
1481 			return -ENOMEM;
1482 
1483 		atkbd->dev = new_dev;
1484 		atkbd->softrepeat = value;
1485 		if (atkbd->softrepeat)
1486 			atkbd->softraw = 1;
1487 		atkbd_set_device_attrs(atkbd);
1488 
1489 		err = input_register_device(atkbd->dev);
1490 		if (err) {
1491 			input_free_device(new_dev);
1492 
1493 			atkbd->dev = old_dev;
1494 			atkbd->softrepeat = old_softrepeat;
1495 			atkbd->softraw = old_softraw;
1496 			atkbd_set_device_attrs(atkbd);
1497 
1498 			return err;
1499 		}
1500 		input_unregister_device(old_dev);
1501 	}
1502 	return count;
1503 }
1504 
1505 
1506 static ssize_t atkbd_show_softraw(struct atkbd *atkbd, char *buf)
1507 {
1508 	return sprintf(buf, "%d\n", atkbd->softraw ? 1 : 0);
1509 }
1510 
1511 static ssize_t atkbd_set_softraw(struct atkbd *atkbd, const char *buf, size_t count)
1512 {
1513 	struct input_dev *old_dev, *new_dev;
1514 	unsigned long value;
1515 	int err;
1516 	unsigned char old_softraw;
1517 
1518 	if (strict_strtoul(buf, 10, &value) || value > 1)
1519 		return -EINVAL;
1520 
1521 	if (atkbd->softraw != value) {
1522 		old_dev = atkbd->dev;
1523 		old_softraw = atkbd->softraw;
1524 
1525 		new_dev = input_allocate_device();
1526 		if (!new_dev)
1527 			return -ENOMEM;
1528 
1529 		atkbd->dev = new_dev;
1530 		atkbd->softraw = value;
1531 		atkbd_set_device_attrs(atkbd);
1532 
1533 		err = input_register_device(atkbd->dev);
1534 		if (err) {
1535 			input_free_device(new_dev);
1536 
1537 			atkbd->dev = old_dev;
1538 			atkbd->softraw = old_softraw;
1539 			atkbd_set_device_attrs(atkbd);
1540 
1541 			return err;
1542 		}
1543 		input_unregister_device(old_dev);
1544 	}
1545 	return count;
1546 }
1547 
1548 static ssize_t atkbd_show_err_count(struct atkbd *atkbd, char *buf)
1549 {
1550 	return sprintf(buf, "%lu\n", atkbd->err_count);
1551 }
1552 
1553 static int __init atkbd_setup_forced_release(const struct dmi_system_id *id)
1554 {
1555 	atkbd_platform_fixup = atkbd_apply_forced_release_keylist;
1556 	atkbd_platform_fixup_data = id->driver_data;
1557 
1558 	return 0;
1559 }
1560 
1561 static int __init atkbd_setup_scancode_fixup(const struct dmi_system_id *id)
1562 {
1563 	atkbd_platform_scancode_fixup = id->driver_data;
1564 
1565 	return 0;
1566 }
1567 
1568 static const struct dmi_system_id atkbd_dmi_quirk_table[] __initconst = {
1569 	{
1570 		.matches = {
1571 			DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
1572 			DMI_MATCH(DMI_CHASSIS_TYPE, "8"), /* Portable */
1573 		},
1574 		.callback = atkbd_setup_forced_release,
1575 		.driver_data = atkbd_dell_laptop_forced_release_keys,
1576 	},
1577 	{
1578 		.matches = {
1579 			DMI_MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"),
1580 			DMI_MATCH(DMI_CHASSIS_TYPE, "8"), /* Portable */
1581 		},
1582 		.callback = atkbd_setup_forced_release,
1583 		.driver_data = atkbd_dell_laptop_forced_release_keys,
1584 	},
1585 	{
1586 		.matches = {
1587 			DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
1588 			DMI_MATCH(DMI_PRODUCT_NAME, "HP 2133"),
1589 		},
1590 		.callback = atkbd_setup_forced_release,
1591 		.driver_data = atkbd_hp_forced_release_keys,
1592 	},
1593 	{
1594 		.matches = {
1595 			DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
1596 			DMI_MATCH(DMI_PRODUCT_NAME, "Pavilion ZV6100"),
1597 		},
1598 		.callback = atkbd_setup_forced_release,
1599 		.driver_data = atkbd_volume_forced_release_keys,
1600 	},
1601 	{
1602 		.matches = {
1603 			DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
1604 			DMI_MATCH(DMI_PRODUCT_NAME, "Presario R4000"),
1605 		},
1606 		.callback = atkbd_setup_forced_release,
1607 		.driver_data = atkbd_volume_forced_release_keys,
1608 	},
1609 	{
1610 		.matches = {
1611 			DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
1612 			DMI_MATCH(DMI_PRODUCT_NAME, "Presario R4100"),
1613 		},
1614 		.callback = atkbd_setup_forced_release,
1615 		.driver_data = atkbd_volume_forced_release_keys,
1616 	},
1617 	{
1618 		.matches = {
1619 			DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
1620 			DMI_MATCH(DMI_PRODUCT_NAME, "Presario R4200"),
1621 		},
1622 		.callback = atkbd_setup_forced_release,
1623 		.driver_data = atkbd_volume_forced_release_keys,
1624 	},
1625 	{
1626 		/* Inventec Symphony */
1627 		.matches = {
1628 			DMI_MATCH(DMI_SYS_VENDOR, "INVENTEC"),
1629 			DMI_MATCH(DMI_PRODUCT_NAME, "SYMPHONY 6.0/7.0"),
1630 		},
1631 		.callback = atkbd_setup_forced_release,
1632 		.driver_data = atkbd_volume_forced_release_keys,
1633 	},
1634 	{
1635 		/* Samsung NC10 */
1636 		.matches = {
1637 			DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
1638 			DMI_MATCH(DMI_PRODUCT_NAME, "NC10"),
1639 		},
1640 		.callback = atkbd_setup_forced_release,
1641 		.driver_data = atkbd_samsung_forced_release_keys,
1642 	},
1643 	{
1644 		/* Samsung NC20 */
1645 		.matches = {
1646 			DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
1647 			DMI_MATCH(DMI_PRODUCT_NAME, "NC20"),
1648 		},
1649 		.callback = atkbd_setup_forced_release,
1650 		.driver_data = atkbd_samsung_forced_release_keys,
1651 	},
1652 	{
1653 		/* Samsung SQ45S70S */
1654 		.matches = {
1655 			DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
1656 			DMI_MATCH(DMI_PRODUCT_NAME, "SQ45S70S"),
1657 		},
1658 		.callback = atkbd_setup_forced_release,
1659 		.driver_data = atkbd_samsung_forced_release_keys,
1660 	},
1661 	{
1662 		/* Fujitsu Amilo PA 1510 */
1663 		.matches = {
1664 			DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
1665 			DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Pa 1510"),
1666 		},
1667 		.callback = atkbd_setup_forced_release,
1668 		.driver_data = atkbd_volume_forced_release_keys,
1669 	},
1670 	{
1671 		/* Fujitsu Amilo Pi 3525 */
1672 		.matches = {
1673 			DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
1674 			DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Pi 3525"),
1675 		},
1676 		.callback = atkbd_setup_forced_release,
1677 		.driver_data = atkbd_amilo_pi3525_forced_release_keys,
1678 	},
1679 	{
1680 		/* Fujitsu Amilo Xi 3650 */
1681 		.matches = {
1682 			DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
1683 			DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Xi 3650"),
1684 		},
1685 		.callback = atkbd_setup_forced_release,
1686 		.driver_data = atkbd_amilo_xi3650_forced_release_keys,
1687 	},
1688 	{
1689 		.matches = {
1690 			DMI_MATCH(DMI_SYS_VENDOR, "Soltech Corporation"),
1691 			DMI_MATCH(DMI_PRODUCT_NAME, "TA12"),
1692 		},
1693 		.callback = atkbd_setup_forced_release,
1694 		.driver_data = atkdb_soltech_ta12_forced_release_keys,
1695 	},
1696 	{
1697 		/* OQO Model 01+ */
1698 		.matches = {
1699 			DMI_MATCH(DMI_SYS_VENDOR, "OQO"),
1700 			DMI_MATCH(DMI_PRODUCT_NAME, "ZEPTO"),
1701 		},
1702 		.callback = atkbd_setup_scancode_fixup,
1703 		.driver_data = atkbd_oqo_01plus_scancode_fixup,
1704 	},
1705 	{ }
1706 };
1707 
1708 static int __init atkbd_init(void)
1709 {
1710 	dmi_check_system(atkbd_dmi_quirk_table);
1711 
1712 	return serio_register_driver(&atkbd_drv);
1713 }
1714 
1715 static void __exit atkbd_exit(void)
1716 {
1717 	serio_unregister_driver(&atkbd_drv);
1718 }
1719 
1720 module_init(atkbd_init);
1721 module_exit(atkbd_exit);
1722