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