Version:  2.0.40 2.2.26 2.4.37 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 3.12 3.13 3.14 3.15 3.16 3.17 3.18

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

This page was automatically generated by LXR 0.3.1 (source).  •  Linux is a registered trademark of Linus Torvalds  •  Contact us