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