1 // SPDX-License-Identifier: GPL-2.0-only
3 * AT and PS/2 keyboard driver
5 * Copyright (c) 1999-2002 Vojtech Pavlik
10 * This driver can handle standard AT keyboards and PS/2 keyboards in
11 * Translated and Raw Set 2 and Set 3, as well as AT keyboards on dumb
12 * input-only controllers and AT keyboards connected over a one way RS232
16 #include <linux/delay.h>
17 #include <linux/module.h>
18 #include <linux/slab.h>
19 #include <linux/interrupt.h>
20 #include <linux/init.h>
21 #include <linux/input.h>
22 #include <linux/input/vivaldi-fmap.h>
23 #include <linux/serio.h>
24 #include <linux/workqueue.h>
25 #include <linux/libps2.h>
26 #include <linux/mutex.h>
27 #include <linux/dmi.h>
28 #include <linux/property.h>
30 #define DRIVER_DESC "AT and PS/2 keyboard driver"
32 MODULE_AUTHOR("Vojtech Pavlik <vojtech@suse.cz>");
33 MODULE_DESCRIPTION(DRIVER_DESC);
34 MODULE_LICENSE("GPL");
36 static int atkbd_set = 2;
37 module_param_named(set, atkbd_set, int, 0);
38 MODULE_PARM_DESC(set, "Select keyboard code set (2 = default, 3 = PS/2 native)");
40 #if defined(__i386__) || defined(__x86_64__) || defined(__hppa__)
41 static bool atkbd_reset;
43 static bool atkbd_reset = true;
45 module_param_named(reset, atkbd_reset, bool, 0);
46 MODULE_PARM_DESC(reset, "Reset keyboard during initialization");
48 static bool atkbd_softrepeat;
49 module_param_named(softrepeat, atkbd_softrepeat, bool, 0);
50 MODULE_PARM_DESC(softrepeat, "Use software keyboard repeat");
52 static bool atkbd_softraw = true;
53 module_param_named(softraw, atkbd_softraw, bool, 0);
54 MODULE_PARM_DESC(softraw, "Use software generated rawmode");
56 static bool atkbd_scroll;
57 module_param_named(scroll, atkbd_scroll, bool, 0);
58 MODULE_PARM_DESC(scroll, "Enable scroll-wheel on MS Office and similar keyboards");
60 static bool atkbd_extra;
61 module_param_named(extra, atkbd_extra, bool, 0);
62 MODULE_PARM_DESC(extra, "Enable extra LEDs and keys on IBM RapidAcces, EzKey and similar keyboards");
64 static bool atkbd_terminal;
65 module_param_named(terminal, atkbd_terminal, bool, 0);
66 MODULE_PARM_DESC(terminal, "Enable break codes on an IBM Terminal keyboard connected via AT/PS2");
68 #define SCANCODE(keymap) ((keymap >> 16) & 0xFFFF)
69 #define KEYCODE(keymap) (keymap & 0xFFFF)
72 * Scancode to keycode tables. These are just the default setting, and
73 * are loadable via a userland utility.
76 #define ATKBD_KEYMAP_SIZE 512
78 static const unsigned short atkbd_set2_keycode[ATKBD_KEYMAP_SIZE] = {
80 #ifdef CONFIG_KEYBOARD_ATKBD_HP_KEYCODES
82 /* XXX: need a more general approach */
84 #include "hpps2atkbd.h" /* include the keyboard scancodes */
87 0, 67, 65, 63, 61, 59, 60, 88, 0, 68, 66, 64, 62, 15, 41,117,
88 0, 56, 42, 93, 29, 16, 2, 0, 0, 0, 44, 31, 30, 17, 3, 0,
89 0, 46, 45, 32, 18, 5, 4, 95, 0, 57, 47, 33, 20, 19, 6,183,
90 0, 49, 48, 35, 34, 21, 7,184, 0, 0, 50, 36, 22, 8, 9,185,
91 0, 51, 37, 23, 24, 11, 10, 0, 0, 52, 53, 38, 39, 25, 12, 0,
92 0, 89, 40, 0, 26, 13, 0, 0, 58, 54, 28, 27, 0, 43, 0, 85,
93 0, 86, 91, 90, 92, 0, 14, 94, 0, 79,124, 75, 71,121, 0, 0,
94 82, 83, 80, 76, 77, 72, 1, 69, 87, 78, 81, 74, 55, 73, 70, 99,
96 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
97 217,100,255, 0, 97,165, 0, 0,156, 0, 0, 0, 0, 0, 0,125,
98 173,114, 0,113, 0, 0, 0,126,128, 0, 0,140, 0, 0, 0,127,
99 159, 0,115, 0,164, 0, 0,116,158, 0,172,166, 0, 0, 0,142,
100 157, 0, 0, 0, 0, 0, 0, 0,155, 0, 98, 0, 0,163, 0, 0,
101 226, 0, 0, 0, 0, 0, 0, 0, 0,255, 96, 0, 0, 0,143, 0,
102 0, 0, 0, 0, 0, 0, 0, 0, 0,107, 0,105,102, 0, 0,112,
103 110,111,108,112,106,103, 0,119, 0,118,109, 0, 99,104,119, 0,
109 static const unsigned short atkbd_set3_keycode[ATKBD_KEYMAP_SIZE] = {
111 0, 0, 0, 0, 0, 0, 0, 59, 1,138,128,129,130, 15, 41, 60,
112 131, 29, 42, 86, 58, 16, 2, 61,133, 56, 44, 31, 30, 17, 3, 62,
113 134, 46, 45, 32, 18, 5, 4, 63,135, 57, 47, 33, 20, 19, 6, 64,
114 136, 49, 48, 35, 34, 21, 7, 65,137,100, 50, 36, 22, 8, 9, 66,
115 125, 51, 37, 23, 24, 11, 10, 67,126, 52, 53, 38, 39, 25, 12, 68,
116 113,114, 40, 43, 26, 13, 87, 99, 97, 54, 28, 27, 43, 43, 88, 70,
117 108,105,119,103,111,107, 14,110, 0, 79,106, 75, 71,109,102,104,
118 82, 83, 80, 76, 77, 72, 69, 98, 0, 96, 81, 0, 78, 73, 55,183,
120 184,185,186,187, 74, 94, 92, 93, 0, 0, 0,125,126,127,112, 0,
121 0,139,172,163,165,115,152,172,166,140,160,154,113,114,167,168,
125 static const unsigned short atkbd_unxlate_table[128] = {
126 0,118, 22, 30, 38, 37, 46, 54, 61, 62, 70, 69, 78, 85,102, 13,
127 21, 29, 36, 45, 44, 53, 60, 67, 68, 77, 84, 91, 90, 20, 28, 27,
128 35, 43, 52, 51, 59, 66, 75, 76, 82, 14, 18, 93, 26, 34, 33, 42,
129 50, 49, 58, 65, 73, 74, 89,124, 17, 41, 88, 5, 6, 4, 12, 3,
130 11, 2, 10, 1, 9,119,126,108,117,125,123,107,115,116,121,105,
131 114,122,112,113,127, 96, 97,120, 7, 15, 23, 31, 39, 47, 55, 63,
132 71, 79, 86, 94, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 87,111,
133 19, 25, 57, 81, 83, 92, 95, 98, 99,100,101,103,104,106,109,110
136 #define ATKBD_CMD_SETLEDS 0x10ed
137 #define ATKBD_CMD_GSCANSET 0x11f0
138 #define ATKBD_CMD_SSCANSET 0x10f0
139 #define ATKBD_CMD_GETID 0x02f2
140 #define ATKBD_CMD_SETREP 0x10f3
141 #define ATKBD_CMD_ENABLE 0x00f4
142 #define ATKBD_CMD_RESET_DIS 0x00f5 /* Reset to defaults and disable */
143 #define ATKBD_CMD_RESET_DEF 0x00f6 /* Reset to defaults */
144 #define ATKBD_CMD_SETALL_MB 0x00f8 /* Set all keys to give break codes */
145 #define ATKBD_CMD_SETALL_MBR 0x00fa /* ... and repeat */
146 #define ATKBD_CMD_RESET_BAT 0x02ff
147 #define ATKBD_CMD_RESEND 0x00fe
148 #define ATKBD_CMD_EX_ENABLE 0x10ea
149 #define ATKBD_CMD_EX_SETLEDS 0x20eb
150 #define ATKBD_CMD_OK_GETID 0x02e8
152 #define ATKBD_RET_ACK 0xfa
153 #define ATKBD_RET_NAK 0xfe
154 #define ATKBD_RET_BAT 0xaa
155 #define ATKBD_RET_EMUL0 0xe0
156 #define ATKBD_RET_EMUL1 0xe1
157 #define ATKBD_RET_RELEASE 0xf0
158 #define ATKBD_RET_HANJA 0xf1
159 #define ATKBD_RET_HANGEUL 0xf2
160 #define ATKBD_RET_ERR 0xff
162 #define ATKBD_KEY_UNKNOWN 0
163 #define ATKBD_KEY_NULL 255
165 #define ATKBD_SCR_1 0xfffe
166 #define ATKBD_SCR_2 0xfffd
167 #define ATKBD_SCR_4 0xfffc
168 #define ATKBD_SCR_8 0xfffb
169 #define ATKBD_SCR_CLICK 0xfffa
170 #define ATKBD_SCR_LEFT 0xfff9
171 #define ATKBD_SCR_RIGHT 0xfff8
173 #define ATKBD_SPECIAL ATKBD_SCR_RIGHT
175 #define ATKBD_LED_EVENT_BIT 0
176 #define ATKBD_REP_EVENT_BIT 1
178 #define ATKBD_XL_ERR 0x01
179 #define ATKBD_XL_BAT 0x02
180 #define ATKBD_XL_ACK 0x04
181 #define ATKBD_XL_NAK 0x08
182 #define ATKBD_XL_HANGEUL 0x10
183 #define ATKBD_XL_HANJA 0x20
185 static const struct {
186 unsigned short keycode;
188 } atkbd_scroll_keys[] = {
189 { ATKBD_SCR_1, 0xc5 },
190 { ATKBD_SCR_2, 0x9d },
191 { ATKBD_SCR_4, 0xa4 },
192 { ATKBD_SCR_8, 0x9b },
193 { ATKBD_SCR_CLICK, 0xe0 },
194 { ATKBD_SCR_LEFT, 0xcb },
195 { ATKBD_SCR_RIGHT, 0xd2 },
199 * The atkbd control structure
204 struct ps2dev ps2dev;
205 struct input_dev *dev;
207 /* Written only during init */
212 unsigned short keycode[ATKBD_KEYMAP_SIZE];
213 DECLARE_BITMAP(force_release_mask, ATKBD_KEYMAP_SIZE);
223 /* Accessed only from interrupt */
227 unsigned long xl_bit;
230 unsigned long err_count;
232 struct delayed_work event_work;
233 unsigned long event_jiffies;
234 unsigned long event_mask;
236 /* Serializes reconnect(), attr->set() and event work */
239 struct vivaldi_data vdata;
243 * System-specific keymap fixup routine
245 static void (*atkbd_platform_fixup)(struct atkbd *, const void *data);
246 static void *atkbd_platform_fixup_data;
247 static unsigned int (*atkbd_platform_scancode_fixup)(struct atkbd *, unsigned int);
250 * Certain keyboards to not like ATKBD_CMD_RESET_DIS and stop responding
251 * to many commands until full reset (ATKBD_CMD_RESET_BAT) is performed.
253 static bool atkbd_skip_deactivate;
255 static ssize_t atkbd_attr_show_helper(struct device *dev, char *buf,
256 ssize_t (*handler)(struct atkbd *, char *));
257 static ssize_t atkbd_attr_set_helper(struct device *dev, const char *buf, size_t count,
258 ssize_t (*handler)(struct atkbd *, const char *, size_t));
259 #define ATKBD_DEFINE_ATTR(_name) \
260 static ssize_t atkbd_show_##_name(struct atkbd *, char *); \
261 static ssize_t atkbd_set_##_name(struct atkbd *, const char *, size_t); \
262 static ssize_t atkbd_do_show_##_name(struct device *d, \
263 struct device_attribute *attr, char *b) \
265 return atkbd_attr_show_helper(d, b, atkbd_show_##_name); \
267 static ssize_t atkbd_do_set_##_name(struct device *d, \
268 struct device_attribute *attr, const char *b, size_t s) \
270 return atkbd_attr_set_helper(d, b, s, atkbd_set_##_name); \
272 static struct device_attribute atkbd_attr_##_name = \
273 __ATTR(_name, S_IWUSR | S_IRUGO, atkbd_do_show_##_name, atkbd_do_set_##_name);
275 ATKBD_DEFINE_ATTR(extra);
276 ATKBD_DEFINE_ATTR(force_release);
277 ATKBD_DEFINE_ATTR(scroll);
278 ATKBD_DEFINE_ATTR(set);
279 ATKBD_DEFINE_ATTR(softrepeat);
280 ATKBD_DEFINE_ATTR(softraw);
282 #define ATKBD_DEFINE_RO_ATTR(_name) \
283 static ssize_t atkbd_show_##_name(struct atkbd *, char *); \
284 static ssize_t atkbd_do_show_##_name(struct device *d, \
285 struct device_attribute *attr, char *b) \
287 return atkbd_attr_show_helper(d, b, atkbd_show_##_name); \
289 static struct device_attribute atkbd_attr_##_name = \
290 __ATTR(_name, S_IRUGO, atkbd_do_show_##_name, NULL);
292 ATKBD_DEFINE_RO_ATTR(err_count);
293 ATKBD_DEFINE_RO_ATTR(function_row_physmap);
295 static struct attribute *atkbd_attributes[] = {
296 &atkbd_attr_extra.attr,
297 &atkbd_attr_force_release.attr,
298 &atkbd_attr_scroll.attr,
299 &atkbd_attr_set.attr,
300 &atkbd_attr_softrepeat.attr,
301 &atkbd_attr_softraw.attr,
302 &atkbd_attr_err_count.attr,
303 &atkbd_attr_function_row_physmap.attr,
307 static ssize_t atkbd_show_function_row_physmap(struct atkbd *atkbd, char *buf)
309 return vivaldi_function_row_physmap_show(&atkbd->vdata, buf);
312 static umode_t atkbd_attr_is_visible(struct kobject *kobj,
313 struct attribute *attr, int i)
315 struct device *dev = kobj_to_dev(kobj);
316 struct serio *serio = to_serio_port(dev);
317 struct atkbd *atkbd = serio_get_drvdata(serio);
319 if (attr == &atkbd_attr_function_row_physmap.attr &&
320 !atkbd->vdata.num_function_row_keys)
326 static struct attribute_group atkbd_attribute_group = {
327 .attrs = atkbd_attributes,
328 .is_visible = atkbd_attr_is_visible,
331 static const unsigned int xl_table[] = {
332 ATKBD_RET_BAT, ATKBD_RET_ERR, ATKBD_RET_ACK,
333 ATKBD_RET_NAK, ATKBD_RET_HANJA, ATKBD_RET_HANGEUL,
337 * Checks if we should mangle the scancode to extract 'release' bit
338 * in translated mode.
340 static bool atkbd_need_xlate(unsigned long xl_bit, unsigned char code)
344 if (code == ATKBD_RET_EMUL0 || code == ATKBD_RET_EMUL1)
347 for (i = 0; i < ARRAY_SIZE(xl_table); i++)
348 if (code == xl_table[i])
349 return test_bit(i, &xl_bit);
355 * Calculates new value of xl_bit so the driver can distinguish
356 * between make/break pair of scancodes for select keys and PS/2
357 * protocol responses.
359 static void atkbd_calculate_xl_bit(struct atkbd *atkbd, unsigned char code)
363 for (i = 0; i < ARRAY_SIZE(xl_table); i++) {
364 if (!((code ^ xl_table[i]) & 0x7f)) {
366 __clear_bit(i, &atkbd->xl_bit);
368 __set_bit(i, &atkbd->xl_bit);
375 * Encode the scancode, 0xe0 prefix, and high bit into a single integer,
376 * keeping kernel 2.4 compatibility for set 2
378 static unsigned int atkbd_compat_scancode(struct atkbd *atkbd, unsigned int code)
380 if (atkbd->set == 3) {
381 if (atkbd->emul == 1)
384 code = (code & 0x7f) | ((code & 0x80) << 1);
385 if (atkbd->emul == 1)
393 * atkbd_interrupt(). Here takes place processing of data received from
394 * the keyboard into events.
397 static irqreturn_t atkbd_interrupt(struct serio *serio, unsigned char data,
400 struct atkbd *atkbd = serio_get_drvdata(serio);
401 struct input_dev *dev = atkbd->dev;
402 unsigned int code = data;
403 int scroll = 0, hscroll = 0, click = -1;
405 unsigned short keycode;
407 dev_dbg(&serio->dev, "Received %02x flags %02x\n", data, flags);
409 #if !defined(__i386__) && !defined (__x86_64__)
410 if ((flags & (SERIO_FRAME | SERIO_PARITY)) && (~flags & SERIO_TIMEOUT) && !atkbd->resend && atkbd->write) {
411 dev_warn(&serio->dev, "Frame/parity error: %02x\n", flags);
412 serio_write(serio, ATKBD_CMD_RESEND);
413 atkbd->resend = true;
417 if (!flags && data == ATKBD_RET_ACK)
418 atkbd->resend = false;
421 if (unlikely(atkbd->ps2dev.flags & PS2_FLAG_ACK))
422 if (ps2_handle_ack(&atkbd->ps2dev, data))
425 if (unlikely(atkbd->ps2dev.flags & PS2_FLAG_CMD))
426 if (ps2_handle_response(&atkbd->ps2dev, data))
429 pm_wakeup_event(&serio->dev, 0);
434 input_event(dev, EV_MSC, MSC_RAW, code);
436 if (atkbd_platform_scancode_fixup)
437 code = atkbd_platform_scancode_fixup(atkbd, code);
439 if (atkbd->translated) {
441 if (atkbd->emul || atkbd_need_xlate(atkbd->xl_bit, code)) {
442 atkbd->release = code >> 7;
447 atkbd_calculate_xl_bit(atkbd, data);
452 atkbd->enabled = false;
453 serio_reconnect(atkbd->ps2dev.serio);
455 case ATKBD_RET_EMUL0:
458 case ATKBD_RET_EMUL1:
461 case ATKBD_RET_RELEASE:
462 atkbd->release = true;
466 if (printk_ratelimit())
467 dev_warn(&serio->dev,
468 "Spurious %s on %s. "
469 "Some program might be trying to access hardware directly.\n",
470 data == ATKBD_RET_ACK ? "ACK" : "NAK", serio->phys);
474 dev_dbg(&serio->dev, "Keyboard on %s reports too many keys pressed.\n",
479 code = atkbd_compat_scancode(atkbd, code);
481 if (atkbd->emul && --atkbd->emul)
484 keycode = atkbd->keycode[code];
486 if (!(atkbd->release && test_bit(code, atkbd->force_release_mask)))
487 if (keycode != ATKBD_KEY_NULL)
488 input_event(dev, EV_MSC, MSC_SCAN, code);
493 case ATKBD_KEY_UNKNOWN:
494 dev_warn(&serio->dev,
495 "Unknown key %s (%s set %d, code %#x on %s).\n",
496 atkbd->release ? "released" : "pressed",
497 atkbd->translated ? "translated" : "raw",
498 atkbd->set, code, serio->phys);
499 dev_warn(&serio->dev,
500 "Use 'setkeycodes %s%02x <keycode>' to make it known.\n",
501 code & 0x80 ? "e0" : "", code & 0x7f);
516 case ATKBD_SCR_CLICK:
517 click = !atkbd->release;
522 case ATKBD_SCR_RIGHT:
526 if (atkbd->release) {
529 } else if (!atkbd->softrepeat && test_bit(keycode, dev->key)) {
530 /* Workaround Toshiba laptop multiple keypress */
531 value = time_before(jiffies, atkbd->time) && atkbd->last == code ? 1 : 2;
535 atkbd->time = jiffies + msecs_to_jiffies(dev->rep[REP_DELAY]) / 2;
538 input_event(dev, EV_KEY, keycode, value);
541 if (value && test_bit(code, atkbd->force_release_mask)) {
542 input_event(dev, EV_MSC, MSC_SCAN, code);
543 input_report_key(dev, keycode, 0);
550 input_report_key(dev, BTN_MIDDLE, click);
551 input_report_rel(dev, REL_WHEEL,
552 atkbd->release ? -scroll : scroll);
553 input_report_rel(dev, REL_HWHEEL, hscroll);
557 atkbd->release = false;
562 static int atkbd_set_repeat_rate(struct atkbd *atkbd)
564 const short period[32] =
565 { 33, 37, 42, 46, 50, 54, 58, 63, 67, 75, 83, 92, 100, 109, 116, 125,
566 133, 149, 167, 182, 200, 217, 232, 250, 270, 303, 333, 370, 400, 435, 470, 500 };
567 const short delay[4] =
568 { 250, 500, 750, 1000 };
570 struct input_dev *dev = atkbd->dev;
574 while (i < ARRAY_SIZE(period) - 1 && period[i] < dev->rep[REP_PERIOD])
576 dev->rep[REP_PERIOD] = period[i];
578 while (j < ARRAY_SIZE(delay) - 1 && delay[j] < dev->rep[REP_DELAY])
580 dev->rep[REP_DELAY] = delay[j];
582 param = i | (j << 5);
583 return ps2_command(&atkbd->ps2dev, ¶m, ATKBD_CMD_SETREP);
586 static int atkbd_set_leds(struct atkbd *atkbd)
588 struct input_dev *dev = atkbd->dev;
589 unsigned char param[2];
591 param[0] = (test_bit(LED_SCROLLL, dev->led) ? 1 : 0)
592 | (test_bit(LED_NUML, dev->led) ? 2 : 0)
593 | (test_bit(LED_CAPSL, dev->led) ? 4 : 0);
594 if (ps2_command(&atkbd->ps2dev, param, ATKBD_CMD_SETLEDS))
599 param[1] = (test_bit(LED_COMPOSE, dev->led) ? 0x01 : 0)
600 | (test_bit(LED_SLEEP, dev->led) ? 0x02 : 0)
601 | (test_bit(LED_SUSPEND, dev->led) ? 0x04 : 0)
602 | (test_bit(LED_MISC, dev->led) ? 0x10 : 0)
603 | (test_bit(LED_MUTE, dev->led) ? 0x20 : 0);
604 if (ps2_command(&atkbd->ps2dev, param, ATKBD_CMD_EX_SETLEDS))
612 * atkbd_event_work() is used to complete processing of events that
613 * can not be processed by input_event() which is often called from
617 static void atkbd_event_work(struct work_struct *work)
619 struct atkbd *atkbd = container_of(work, struct atkbd, event_work.work);
621 mutex_lock(&atkbd->mutex);
623 if (!atkbd->enabled) {
625 * Serio ports are resumed asynchronously so while driver core
626 * thinks that device is already fully operational in reality
627 * it may not be ready yet. In this case we need to keep
628 * rescheduling till reconnect completes.
630 schedule_delayed_work(&atkbd->event_work,
631 msecs_to_jiffies(100));
633 if (test_and_clear_bit(ATKBD_LED_EVENT_BIT, &atkbd->event_mask))
634 atkbd_set_leds(atkbd);
636 if (test_and_clear_bit(ATKBD_REP_EVENT_BIT, &atkbd->event_mask))
637 atkbd_set_repeat_rate(atkbd);
640 mutex_unlock(&atkbd->mutex);
644 * Schedule switch for execution. We need to throttle requests,
645 * otherwise keyboard may become unresponsive.
647 static void atkbd_schedule_event_work(struct atkbd *atkbd, int event_bit)
649 unsigned long delay = msecs_to_jiffies(50);
651 if (time_after(jiffies, atkbd->event_jiffies + delay))
654 atkbd->event_jiffies = jiffies;
655 set_bit(event_bit, &atkbd->event_mask);
657 schedule_delayed_work(&atkbd->event_work, delay);
661 * Event callback from the input module. Events that change the state of
662 * the hardware are processed here. If action can not be performed in
663 * interrupt context it is offloaded to atkbd_event_work.
666 static int atkbd_event(struct input_dev *dev,
667 unsigned int type, unsigned int code, int value)
669 struct atkbd *atkbd = input_get_drvdata(dev);
677 atkbd_schedule_event_work(atkbd, ATKBD_LED_EVENT_BIT);
681 if (!atkbd->softrepeat)
682 atkbd_schedule_event_work(atkbd, ATKBD_REP_EVENT_BIT);
691 * atkbd_enable() signals that interrupt handler is allowed to
692 * generate input events.
695 static inline void atkbd_enable(struct atkbd *atkbd)
697 serio_pause_rx(atkbd->ps2dev.serio);
698 atkbd->enabled = true;
699 serio_continue_rx(atkbd->ps2dev.serio);
703 * atkbd_disable() tells input handler that all incoming data except
704 * for ACKs and command response should be dropped.
707 static inline void atkbd_disable(struct atkbd *atkbd)
709 serio_pause_rx(atkbd->ps2dev.serio);
710 atkbd->enabled = false;
711 serio_continue_rx(atkbd->ps2dev.serio);
714 static int atkbd_activate(struct atkbd *atkbd)
716 struct ps2dev *ps2dev = &atkbd->ps2dev;
719 * Enable the keyboard to receive keystrokes.
722 if (ps2_command(ps2dev, NULL, ATKBD_CMD_ENABLE)) {
723 dev_err(&ps2dev->serio->dev,
724 "Failed to enable keyboard on %s\n",
725 ps2dev->serio->phys);
733 * atkbd_deactivate() resets and disables the keyboard from sending
737 static void atkbd_deactivate(struct atkbd *atkbd)
739 struct ps2dev *ps2dev = &atkbd->ps2dev;
741 if (ps2_command(ps2dev, NULL, ATKBD_CMD_RESET_DIS))
742 dev_err(&ps2dev->serio->dev,
743 "Failed to deactivate keyboard on %s\n",
744 ps2dev->serio->phys);
748 * atkbd_probe() probes for an AT keyboard on a serio port.
751 static int atkbd_probe(struct atkbd *atkbd)
753 struct ps2dev *ps2dev = &atkbd->ps2dev;
754 unsigned char param[2];
757 * Some systems, where the bit-twiddling when testing the io-lines of the
758 * controller may confuse the keyboard need a full reset of the keyboard. On
759 * these systems the BIOS also usually doesn't do it for us.
763 if (ps2_command(ps2dev, NULL, ATKBD_CMD_RESET_BAT))
764 dev_warn(&ps2dev->serio->dev,
765 "keyboard reset failed on %s\n",
766 ps2dev->serio->phys);
769 * Then we check the keyboard ID. We should get 0xab83 under normal conditions.
770 * Some keyboards report different values, but the first byte is always 0xab or
771 * 0xac. Some old AT keyboards don't report anything. If a mouse is connected, this
772 * should make sure we don't try to set the LEDs on it.
775 param[0] = param[1] = 0xa5; /* initialize with invalid values */
776 if (ps2_command(ps2dev, param, ATKBD_CMD_GETID)) {
779 * If the get ID command failed, we check if we can at least set the LEDs on
780 * the keyboard. This should work on every keyboard out there. It also turns
781 * the LEDs off, which we want anyway.
784 if (ps2_command(ps2dev, param, ATKBD_CMD_SETLEDS))
790 if (!ps2_is_keyboard_id(param[0]))
793 atkbd->id = (param[0] << 8) | param[1];
795 if (atkbd->id == 0xaca1 && atkbd->translated) {
796 dev_err(&ps2dev->serio->dev,
797 "NCD terminal keyboards are only supported on non-translating controllers. "
798 "Use i8042.direct=1 to disable translation.\n");
803 * Make sure nothing is coming from the keyboard and disturbs our
806 if (!atkbd_skip_deactivate)
807 atkbd_deactivate(atkbd);
813 * atkbd_select_set checks if a keyboard has a working Set 3 support, and
814 * sets it into that. Unfortunately there are keyboards that can be switched
815 * to Set 3, but don't work well in that (BTC Multimedia ...)
818 static int atkbd_select_set(struct atkbd *atkbd, int target_set, int allow_extra)
820 struct ps2dev *ps2dev = &atkbd->ps2dev;
821 unsigned char param[2];
823 atkbd->extra = false;
825 * For known special keyboards we can go ahead and set the correct set.
826 * We check for NCD PS/2 Sun, NorthGate OmniKey 101 and
827 * IBM RapidAccess / IBM EzButton / Chicony KBP-8993 keyboards.
830 if (atkbd->translated)
833 if (atkbd->id == 0xaca1) {
835 ps2_command(ps2dev, param, ATKBD_CMD_SSCANSET);
841 if (!ps2_command(ps2dev, param, ATKBD_CMD_EX_ENABLE)) {
847 if (atkbd_terminal) {
848 ps2_command(ps2dev, param, ATKBD_CMD_SETALL_MB);
855 if (!ps2_command(ps2dev, param, ATKBD_CMD_OK_GETID)) {
856 atkbd->id = param[0] << 8 | param[1];
861 if (ps2_command(ps2dev, param, ATKBD_CMD_SSCANSET))
865 if (ps2_command(ps2dev, param, ATKBD_CMD_GSCANSET))
870 if (ps2_command(ps2dev, param, ATKBD_CMD_SSCANSET))
874 ps2_command(ps2dev, param, ATKBD_CMD_SETALL_MBR);
879 static int atkbd_reset_state(struct atkbd *atkbd)
881 struct ps2dev *ps2dev = &atkbd->ps2dev;
882 unsigned char param[1];
885 * Set the LEDs to a predefined state (all off).
889 if (ps2_command(ps2dev, param, ATKBD_CMD_SETLEDS))
893 * Set autorepeat to fastest possible.
897 if (ps2_command(ps2dev, param, ATKBD_CMD_SETREP))
904 * atkbd_cleanup() restores the keyboard state so that BIOS is happy after a
908 static void atkbd_cleanup(struct serio *serio)
910 struct atkbd *atkbd = serio_get_drvdata(serio);
912 atkbd_disable(atkbd);
913 ps2_command(&atkbd->ps2dev, NULL, ATKBD_CMD_RESET_DEF);
918 * atkbd_disconnect() closes and frees.
921 static void atkbd_disconnect(struct serio *serio)
923 struct atkbd *atkbd = serio_get_drvdata(serio);
925 sysfs_remove_group(&serio->dev.kobj, &atkbd_attribute_group);
927 atkbd_disable(atkbd);
929 input_unregister_device(atkbd->dev);
932 * Make sure we don't have a command in flight.
933 * Note that since atkbd->enabled is false event work will keep
934 * rescheduling itself until it gets canceled and will not try
935 * accessing freed input device or serio port.
937 cancel_delayed_work_sync(&atkbd->event_work);
940 serio_set_drvdata(serio, NULL);
945 * generate release events for the keycodes given in data
947 static void atkbd_apply_forced_release_keylist(struct atkbd* atkbd,
950 const unsigned int *keys = data;
954 for (i = 0; keys[i] != -1U; i++)
955 __set_bit(keys[i], atkbd->force_release_mask);
959 * Most special keys (Fn+F?) on Dell laptops do not generate release
960 * events so we have to do it ourselves.
962 static unsigned int atkbd_dell_laptop_forced_release_keys[] = {
963 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8f, 0x93, -1U
967 * Perform fixup for HP system that doesn't generate release
968 * for its video switch
970 static unsigned int atkbd_hp_forced_release_keys[] = {
975 * Samsung NC10,NC20 with Fn+F? key release not working
977 static unsigned int atkbd_samsung_forced_release_keys[] = {
978 0x82, 0x83, 0x84, 0x86, 0x88, 0x89, 0xb3, 0xf7, 0xf9, -1U
982 * Amilo Pi 3525 key release for Fn+Volume keys not working
984 static unsigned int atkbd_amilo_pi3525_forced_release_keys[] = {
985 0x20, 0xa0, 0x2e, 0xae, 0x30, 0xb0, -1U
989 * Amilo Xi 3650 key release for light touch bar not working
991 static unsigned int atkbd_amilo_xi3650_forced_release_keys[] = {
992 0x67, 0xed, 0x90, 0xa2, 0x99, 0xa4, 0xae, 0xb0, -1U
996 * Soltech TA12 system with broken key release on volume keys and mute key
998 static unsigned int atkdb_soltech_ta12_forced_release_keys[] = {
999 0xa0, 0xae, 0xb0, -1U
1003 * Many notebooks don't send key release event for volume up/down
1004 * keys, with key list below common among them
1006 static unsigned int atkbd_volume_forced_release_keys[] = {
1011 * OQO 01+ multimedia keys (64--66) generate e0 6x upon release whereas
1012 * they should be generating e4-e6 (0x80 | code).
1014 static unsigned int atkbd_oqo_01plus_scancode_fixup(struct atkbd *atkbd,
1017 if (atkbd->translated && atkbd->emul == 1 &&
1018 (code == 0x64 || code == 0x65 || code == 0x66)) {
1026 static int atkbd_get_keymap_from_fwnode(struct atkbd *atkbd)
1028 struct device *dev = &atkbd->ps2dev.serio->dev;
1031 u16 scancode, keycode;
1033 /* Parse "linux,keymap" property */
1034 n = device_property_count_u32(dev, "linux,keymap");
1035 if (n <= 0 || n > ATKBD_KEYMAP_SIZE)
1038 ptr = kcalloc(n, sizeof(u32), GFP_KERNEL);
1042 if (device_property_read_u32_array(dev, "linux,keymap", ptr, n)) {
1043 dev_err(dev, "problem parsing FW keymap property\n");
1048 memset(atkbd->keycode, 0, sizeof(atkbd->keycode));
1049 for (i = 0; i < n; i++) {
1050 scancode = SCANCODE(ptr[i]);
1051 keycode = KEYCODE(ptr[i]);
1052 atkbd->keycode[scancode] = keycode;
1060 * atkbd_set_keycode_table() initializes keyboard's keycode table
1061 * according to the selected scancode set
1064 static void atkbd_set_keycode_table(struct atkbd *atkbd)
1066 struct device *dev = &atkbd->ps2dev.serio->dev;
1067 unsigned int scancode;
1070 memset(atkbd->keycode, 0, sizeof(atkbd->keycode));
1071 bitmap_zero(atkbd->force_release_mask, ATKBD_KEYMAP_SIZE);
1073 if (!atkbd_get_keymap_from_fwnode(atkbd)) {
1074 dev_dbg(dev, "Using FW keymap\n");
1075 } else if (atkbd->translated) {
1076 for (i = 0; i < 128; i++) {
1077 scancode = atkbd_unxlate_table[i];
1078 atkbd->keycode[i] = atkbd_set2_keycode[scancode];
1079 atkbd->keycode[i | 0x80] = atkbd_set2_keycode[scancode | 0x80];
1081 for (j = 0; j < ARRAY_SIZE(atkbd_scroll_keys); j++)
1082 if ((scancode | 0x80) == atkbd_scroll_keys[j].set2)
1083 atkbd->keycode[i | 0x80] = atkbd_scroll_keys[j].keycode;
1085 } else if (atkbd->set == 3) {
1086 memcpy(atkbd->keycode, atkbd_set3_keycode, sizeof(atkbd->keycode));
1088 memcpy(atkbd->keycode, atkbd_set2_keycode, sizeof(atkbd->keycode));
1091 for (i = 0; i < ARRAY_SIZE(atkbd_scroll_keys); i++) {
1092 scancode = atkbd_scroll_keys[i].set2;
1093 atkbd->keycode[scancode] = atkbd_scroll_keys[i].keycode;
1098 * HANGEUL and HANJA keys do not send release events so we need to
1099 * generate such events ourselves
1101 scancode = atkbd_compat_scancode(atkbd, ATKBD_RET_HANGEUL);
1102 atkbd->keycode[scancode] = KEY_HANGEUL;
1103 __set_bit(scancode, atkbd->force_release_mask);
1105 scancode = atkbd_compat_scancode(atkbd, ATKBD_RET_HANJA);
1106 atkbd->keycode[scancode] = KEY_HANJA;
1107 __set_bit(scancode, atkbd->force_release_mask);
1110 * Perform additional fixups
1112 if (atkbd_platform_fixup)
1113 atkbd_platform_fixup(atkbd, atkbd_platform_fixup_data);
1117 * atkbd_set_device_attrs() sets up keyboard's input device structure
1120 static void atkbd_set_device_attrs(struct atkbd *atkbd)
1122 struct input_dev *input_dev = atkbd->dev;
1126 snprintf(atkbd->name, sizeof(atkbd->name),
1127 "AT Set 2 Extra keyboard");
1129 snprintf(atkbd->name, sizeof(atkbd->name),
1130 "AT %s Set %d keyboard",
1131 atkbd->translated ? "Translated" : "Raw", atkbd->set);
1133 snprintf(atkbd->phys, sizeof(atkbd->phys),
1134 "%s/input0", atkbd->ps2dev.serio->phys);
1136 input_dev->name = atkbd->name;
1137 input_dev->phys = atkbd->phys;
1138 input_dev->id.bustype = BUS_I8042;
1139 input_dev->id.vendor = 0x0001;
1140 input_dev->id.product = atkbd->translated ? 1 : atkbd->set;
1141 input_dev->id.version = atkbd->id;
1142 input_dev->event = atkbd_event;
1143 input_dev->dev.parent = &atkbd->ps2dev.serio->dev;
1145 input_set_drvdata(input_dev, atkbd);
1147 input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP) |
1151 input_dev->evbit[0] |= BIT_MASK(EV_LED);
1152 input_dev->ledbit[0] = BIT_MASK(LED_NUML) |
1153 BIT_MASK(LED_CAPSL) | BIT_MASK(LED_SCROLLL);
1157 input_dev->ledbit[0] |= BIT_MASK(LED_COMPOSE) |
1158 BIT_MASK(LED_SUSPEND) | BIT_MASK(LED_SLEEP) |
1159 BIT_MASK(LED_MUTE) | BIT_MASK(LED_MISC);
1161 if (!atkbd->softrepeat) {
1162 input_dev->rep[REP_DELAY] = 250;
1163 input_dev->rep[REP_PERIOD] = 33;
1166 input_dev->mscbit[0] = atkbd->softraw ? BIT_MASK(MSC_SCAN) :
1167 BIT_MASK(MSC_RAW) | BIT_MASK(MSC_SCAN);
1169 if (atkbd->scroll) {
1170 input_dev->evbit[0] |= BIT_MASK(EV_REL);
1171 input_dev->relbit[0] = BIT_MASK(REL_WHEEL) |
1172 BIT_MASK(REL_HWHEEL);
1173 __set_bit(BTN_MIDDLE, input_dev->keybit);
1176 input_dev->keycode = atkbd->keycode;
1177 input_dev->keycodesize = sizeof(unsigned short);
1178 input_dev->keycodemax = ARRAY_SIZE(atkbd_set2_keycode);
1180 for (i = 0; i < ATKBD_KEYMAP_SIZE; i++) {
1181 if (atkbd->keycode[i] != KEY_RESERVED &&
1182 atkbd->keycode[i] != ATKBD_KEY_NULL &&
1183 atkbd->keycode[i] < ATKBD_SPECIAL) {
1184 __set_bit(atkbd->keycode[i], input_dev->keybit);
1189 static void atkbd_parse_fwnode_data(struct serio *serio)
1191 struct atkbd *atkbd = serio_get_drvdata(serio);
1192 struct device *dev = &serio->dev;
1195 /* Parse "function-row-physmap" property */
1196 n = device_property_count_u32(dev, "function-row-physmap");
1197 if (n > 0 && n <= VIVALDI_MAX_FUNCTION_ROW_KEYS &&
1198 !device_property_read_u32_array(dev, "function-row-physmap",
1199 atkbd->vdata.function_row_physmap,
1201 atkbd->vdata.num_function_row_keys = n;
1202 dev_dbg(dev, "FW reported %d function-row key locations\n", n);
1207 * atkbd_connect() is called when the serio module finds an interface
1208 * that isn't handled yet by an appropriate device driver. We check if
1209 * there is an AT keyboard out there and if yes, we register ourselves
1210 * to the input module.
1213 static int atkbd_connect(struct serio *serio, struct serio_driver *drv)
1215 struct atkbd *atkbd;
1216 struct input_dev *dev;
1219 atkbd = kzalloc(sizeof(struct atkbd), GFP_KERNEL);
1220 dev = input_allocate_device();
1225 ps2_init(&atkbd->ps2dev, serio);
1226 INIT_DELAYED_WORK(&atkbd->event_work, atkbd_event_work);
1227 mutex_init(&atkbd->mutex);
1229 switch (serio->id.type) {
1232 atkbd->translated = true;
1237 atkbd->write = true;
1241 atkbd->softraw = atkbd_softraw;
1242 atkbd->softrepeat = atkbd_softrepeat;
1243 atkbd->scroll = atkbd_scroll;
1245 if (atkbd->softrepeat)
1246 atkbd->softraw = true;
1248 serio_set_drvdata(serio, atkbd);
1250 err = serio_open(serio, drv);
1256 if (atkbd_probe(atkbd)) {
1261 atkbd->set = atkbd_select_set(atkbd, atkbd_set, atkbd_extra);
1262 atkbd_reset_state(atkbd);
1269 atkbd_parse_fwnode_data(serio);
1271 atkbd_set_keycode_table(atkbd);
1272 atkbd_set_device_attrs(atkbd);
1274 err = sysfs_create_group(&serio->dev.kobj, &atkbd_attribute_group);
1278 atkbd_enable(atkbd);
1280 atkbd_activate(atkbd);
1282 err = input_register_device(atkbd->dev);
1288 fail4: sysfs_remove_group(&serio->dev.kobj, &atkbd_attribute_group);
1289 fail3: serio_close(serio);
1290 fail2: serio_set_drvdata(serio, NULL);
1291 fail1: input_free_device(dev);
1297 * atkbd_reconnect() tries to restore keyboard into a sane state and is
1298 * most likely called on resume.
1301 static int atkbd_reconnect(struct serio *serio)
1303 struct atkbd *atkbd = serio_get_drvdata(serio);
1304 struct serio_driver *drv = serio->drv;
1307 if (!atkbd || !drv) {
1308 dev_dbg(&serio->dev,
1309 "reconnect request, but serio is disconnected, ignoring...\n");
1313 mutex_lock(&atkbd->mutex);
1315 atkbd_disable(atkbd);
1318 if (atkbd_probe(atkbd))
1321 if (atkbd->set != atkbd_select_set(atkbd, atkbd->set, atkbd->extra))
1325 * Restore LED state and repeat rate. While input core
1326 * will do this for us at resume time reconnect may happen
1327 * because user requested it via sysfs or simply because
1328 * keyboard was unplugged and plugged in again so we need
1329 * to do it ourselves here.
1331 atkbd_set_leds(atkbd);
1332 if (!atkbd->softrepeat)
1333 atkbd_set_repeat_rate(atkbd);
1338 * Reset our state machine in case reconnect happened in the middle
1339 * of multi-byte scancode.
1344 atkbd_enable(atkbd);
1346 atkbd_activate(atkbd);
1351 mutex_unlock(&atkbd->mutex);
1355 static const struct serio_device_id atkbd_serio_ids[] = {
1363 .type = SERIO_8042_XL,
1369 .type = SERIO_RS232,
1370 .proto = SERIO_PS2SER,
1377 MODULE_DEVICE_TABLE(serio, atkbd_serio_ids);
1379 static struct serio_driver atkbd_drv = {
1383 .description = DRIVER_DESC,
1384 .id_table = atkbd_serio_ids,
1385 .interrupt = atkbd_interrupt,
1386 .connect = atkbd_connect,
1387 .reconnect = atkbd_reconnect,
1388 .disconnect = atkbd_disconnect,
1389 .cleanup = atkbd_cleanup,
1392 static ssize_t atkbd_attr_show_helper(struct device *dev, char *buf,
1393 ssize_t (*handler)(struct atkbd *, char *))
1395 struct serio *serio = to_serio_port(dev);
1396 struct atkbd *atkbd = serio_get_drvdata(serio);
1398 return handler(atkbd, buf);
1401 static ssize_t atkbd_attr_set_helper(struct device *dev, const char *buf, size_t count,
1402 ssize_t (*handler)(struct atkbd *, const char *, size_t))
1404 struct serio *serio = to_serio_port(dev);
1405 struct atkbd *atkbd = serio_get_drvdata(serio);
1408 retval = mutex_lock_interruptible(&atkbd->mutex);
1412 atkbd_disable(atkbd);
1413 retval = handler(atkbd, buf, count);
1414 atkbd_enable(atkbd);
1416 mutex_unlock(&atkbd->mutex);
1421 static ssize_t atkbd_show_extra(struct atkbd *atkbd, char *buf)
1423 return sprintf(buf, "%d\n", atkbd->extra ? 1 : 0);
1426 static ssize_t atkbd_set_extra(struct atkbd *atkbd, const char *buf, size_t count)
1428 struct input_dev *old_dev, *new_dev;
1432 unsigned char old_set;
1437 err = kstrtouint(buf, 10, &value);
1444 if (atkbd->extra != value) {
1446 * Since device's properties will change we need to
1447 * unregister old device. But allocate and register
1448 * new one first to make sure we have it.
1450 old_dev = atkbd->dev;
1451 old_extra = atkbd->extra;
1452 old_set = atkbd->set;
1454 new_dev = input_allocate_device();
1458 atkbd->dev = new_dev;
1459 atkbd->set = atkbd_select_set(atkbd, atkbd->set, value);
1460 atkbd_reset_state(atkbd);
1461 atkbd_activate(atkbd);
1462 atkbd_set_keycode_table(atkbd);
1463 atkbd_set_device_attrs(atkbd);
1465 err = input_register_device(atkbd->dev);
1467 input_free_device(new_dev);
1469 atkbd->dev = old_dev;
1470 atkbd->set = atkbd_select_set(atkbd, old_set, old_extra);
1471 atkbd_set_keycode_table(atkbd);
1472 atkbd_set_device_attrs(atkbd);
1476 input_unregister_device(old_dev);
1482 static ssize_t atkbd_show_force_release(struct atkbd *atkbd, char *buf)
1484 size_t len = scnprintf(buf, PAGE_SIZE - 1, "%*pbl",
1485 ATKBD_KEYMAP_SIZE, atkbd->force_release_mask);
1493 static ssize_t atkbd_set_force_release(struct atkbd *atkbd,
1494 const char *buf, size_t count)
1496 /* 64 bytes on stack should be acceptable */
1497 DECLARE_BITMAP(new_mask, ATKBD_KEYMAP_SIZE);
1500 err = bitmap_parselist(buf, new_mask, ATKBD_KEYMAP_SIZE);
1504 memcpy(atkbd->force_release_mask, new_mask, sizeof(atkbd->force_release_mask));
1509 static ssize_t atkbd_show_scroll(struct atkbd *atkbd, char *buf)
1511 return sprintf(buf, "%d\n", atkbd->scroll ? 1 : 0);
1514 static ssize_t atkbd_set_scroll(struct atkbd *atkbd, const char *buf, size_t count)
1516 struct input_dev *old_dev, *new_dev;
1521 err = kstrtouint(buf, 10, &value);
1528 if (atkbd->scroll != value) {
1529 old_dev = atkbd->dev;
1530 old_scroll = atkbd->scroll;
1532 new_dev = input_allocate_device();
1536 atkbd->dev = new_dev;
1537 atkbd->scroll = value;
1538 atkbd_set_keycode_table(atkbd);
1539 atkbd_set_device_attrs(atkbd);
1541 err = input_register_device(atkbd->dev);
1543 input_free_device(new_dev);
1545 atkbd->scroll = old_scroll;
1546 atkbd->dev = old_dev;
1547 atkbd_set_keycode_table(atkbd);
1548 atkbd_set_device_attrs(atkbd);
1552 input_unregister_device(old_dev);
1557 static ssize_t atkbd_show_set(struct atkbd *atkbd, char *buf)
1559 return sprintf(buf, "%d\n", atkbd->set);
1562 static ssize_t atkbd_set_set(struct atkbd *atkbd, const char *buf, size_t count)
1564 struct input_dev *old_dev, *new_dev;
1567 unsigned char old_set;
1573 err = kstrtouint(buf, 10, &value);
1577 if (value != 2 && value != 3)
1580 if (atkbd->set != value) {
1581 old_dev = atkbd->dev;
1582 old_extra = atkbd->extra;
1583 old_set = atkbd->set;
1585 new_dev = input_allocate_device();
1589 atkbd->dev = new_dev;
1590 atkbd->set = atkbd_select_set(atkbd, value, atkbd->extra);
1591 atkbd_reset_state(atkbd);
1592 atkbd_activate(atkbd);
1593 atkbd_set_keycode_table(atkbd);
1594 atkbd_set_device_attrs(atkbd);
1596 err = input_register_device(atkbd->dev);
1598 input_free_device(new_dev);
1600 atkbd->dev = old_dev;
1601 atkbd->set = atkbd_select_set(atkbd, old_set, old_extra);
1602 atkbd_set_keycode_table(atkbd);
1603 atkbd_set_device_attrs(atkbd);
1607 input_unregister_device(old_dev);
1612 static ssize_t atkbd_show_softrepeat(struct atkbd *atkbd, char *buf)
1614 return sprintf(buf, "%d\n", atkbd->softrepeat ? 1 : 0);
1617 static ssize_t atkbd_set_softrepeat(struct atkbd *atkbd, const char *buf, size_t count)
1619 struct input_dev *old_dev, *new_dev;
1622 bool old_softrepeat, old_softraw;
1627 err = kstrtouint(buf, 10, &value);
1634 if (atkbd->softrepeat != value) {
1635 old_dev = atkbd->dev;
1636 old_softrepeat = atkbd->softrepeat;
1637 old_softraw = atkbd->softraw;
1639 new_dev = input_allocate_device();
1643 atkbd->dev = new_dev;
1644 atkbd->softrepeat = value;
1645 if (atkbd->softrepeat)
1646 atkbd->softraw = true;
1647 atkbd_set_device_attrs(atkbd);
1649 err = input_register_device(atkbd->dev);
1651 input_free_device(new_dev);
1653 atkbd->dev = old_dev;
1654 atkbd->softrepeat = old_softrepeat;
1655 atkbd->softraw = old_softraw;
1656 atkbd_set_device_attrs(atkbd);
1660 input_unregister_device(old_dev);
1666 static ssize_t atkbd_show_softraw(struct atkbd *atkbd, char *buf)
1668 return sprintf(buf, "%d\n", atkbd->softraw ? 1 : 0);
1671 static ssize_t atkbd_set_softraw(struct atkbd *atkbd, const char *buf, size_t count)
1673 struct input_dev *old_dev, *new_dev;
1678 err = kstrtouint(buf, 10, &value);
1685 if (atkbd->softraw != value) {
1686 old_dev = atkbd->dev;
1687 old_softraw = atkbd->softraw;
1689 new_dev = input_allocate_device();
1693 atkbd->dev = new_dev;
1694 atkbd->softraw = value;
1695 atkbd_set_device_attrs(atkbd);
1697 err = input_register_device(atkbd->dev);
1699 input_free_device(new_dev);
1701 atkbd->dev = old_dev;
1702 atkbd->softraw = old_softraw;
1703 atkbd_set_device_attrs(atkbd);
1707 input_unregister_device(old_dev);
1712 static ssize_t atkbd_show_err_count(struct atkbd *atkbd, char *buf)
1714 return sprintf(buf, "%lu\n", atkbd->err_count);
1717 static int __init atkbd_setup_forced_release(const struct dmi_system_id *id)
1719 atkbd_platform_fixup = atkbd_apply_forced_release_keylist;
1720 atkbd_platform_fixup_data = id->driver_data;
1725 static int __init atkbd_setup_scancode_fixup(const struct dmi_system_id *id)
1727 atkbd_platform_scancode_fixup = id->driver_data;
1732 static int __init atkbd_deactivate_fixup(const struct dmi_system_id *id)
1734 atkbd_skip_deactivate = true;
1739 * NOTE: do not add any more "force release" quirks to this table. The
1740 * task of adjusting list of keys that should be "released" automatically
1741 * by the driver is now delegated to userspace tools, such as udev, so
1742 * submit such quirks there.
1744 static const struct dmi_system_id atkbd_dmi_quirk_table[] __initconst = {
1747 DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
1748 DMI_MATCH(DMI_CHASSIS_TYPE, "8"), /* Portable */
1750 .callback = atkbd_setup_forced_release,
1751 .driver_data = atkbd_dell_laptop_forced_release_keys,
1755 DMI_MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"),
1756 DMI_MATCH(DMI_CHASSIS_TYPE, "8"), /* Portable */
1758 .callback = atkbd_setup_forced_release,
1759 .driver_data = atkbd_dell_laptop_forced_release_keys,
1763 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
1764 DMI_MATCH(DMI_PRODUCT_NAME, "HP 2133"),
1766 .callback = atkbd_setup_forced_release,
1767 .driver_data = atkbd_hp_forced_release_keys,
1771 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
1772 DMI_MATCH(DMI_PRODUCT_NAME, "Pavilion ZV6100"),
1774 .callback = atkbd_setup_forced_release,
1775 .driver_data = atkbd_volume_forced_release_keys,
1779 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
1780 DMI_MATCH(DMI_PRODUCT_NAME, "Presario R4000"),
1782 .callback = atkbd_setup_forced_release,
1783 .driver_data = atkbd_volume_forced_release_keys,
1787 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
1788 DMI_MATCH(DMI_PRODUCT_NAME, "Presario R4100"),
1790 .callback = atkbd_setup_forced_release,
1791 .driver_data = atkbd_volume_forced_release_keys,
1795 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
1796 DMI_MATCH(DMI_PRODUCT_NAME, "Presario R4200"),
1798 .callback = atkbd_setup_forced_release,
1799 .driver_data = atkbd_volume_forced_release_keys,
1802 /* Inventec Symphony */
1804 DMI_MATCH(DMI_SYS_VENDOR, "INVENTEC"),
1805 DMI_MATCH(DMI_PRODUCT_NAME, "SYMPHONY 6.0/7.0"),
1807 .callback = atkbd_setup_forced_release,
1808 .driver_data = atkbd_volume_forced_release_keys,
1813 DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
1814 DMI_MATCH(DMI_PRODUCT_NAME, "NC10"),
1816 .callback = atkbd_setup_forced_release,
1817 .driver_data = atkbd_samsung_forced_release_keys,
1822 DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
1823 DMI_MATCH(DMI_PRODUCT_NAME, "NC20"),
1825 .callback = atkbd_setup_forced_release,
1826 .driver_data = atkbd_samsung_forced_release_keys,
1829 /* Samsung SQ45S70S */
1831 DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
1832 DMI_MATCH(DMI_PRODUCT_NAME, "SQ45S70S"),
1834 .callback = atkbd_setup_forced_release,
1835 .driver_data = atkbd_samsung_forced_release_keys,
1838 /* Fujitsu Amilo PA 1510 */
1840 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
1841 DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Pa 1510"),
1843 .callback = atkbd_setup_forced_release,
1844 .driver_data = atkbd_volume_forced_release_keys,
1847 /* Fujitsu Amilo Pi 3525 */
1849 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
1850 DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Pi 3525"),
1852 .callback = atkbd_setup_forced_release,
1853 .driver_data = atkbd_amilo_pi3525_forced_release_keys,
1856 /* Fujitsu Amilo Xi 3650 */
1858 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
1859 DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Xi 3650"),
1861 .callback = atkbd_setup_forced_release,
1862 .driver_data = atkbd_amilo_xi3650_forced_release_keys,
1866 DMI_MATCH(DMI_SYS_VENDOR, "Soltech Corporation"),
1867 DMI_MATCH(DMI_PRODUCT_NAME, "TA12"),
1869 .callback = atkbd_setup_forced_release,
1870 .driver_data = atkdb_soltech_ta12_forced_release_keys,
1875 DMI_MATCH(DMI_SYS_VENDOR, "OQO"),
1876 DMI_MATCH(DMI_PRODUCT_NAME, "ZEPTO"),
1878 .callback = atkbd_setup_scancode_fixup,
1879 .driver_data = atkbd_oqo_01plus_scancode_fixup,
1883 DMI_MATCH(DMI_SYS_VENDOR, "LG Electronics"),
1885 .callback = atkbd_deactivate_fixup,
1890 static int __init atkbd_init(void)
1892 dmi_check_system(atkbd_dmi_quirk_table);
1894 return serio_register_driver(&atkbd_drv);
1897 static void __exit atkbd_exit(void)
1899 serio_unregister_driver(&atkbd_drv);
1902 module_init(atkbd_init);
1903 module_exit(atkbd_exit);