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