Lines Matching +full:we +full:- +full:extra +full:- +full:delay
1 // SPDX-License-Identifier: GPL-2.0-only
5 * Copyright (c) 1999-2002 Vojtech Pavlik
12 * input-only controllers and AT keyboards connected over a one way RS232
16 #include <linux/delay.h>
22 #include <linux/input/vivaldi-fmap.h>
58 MODULE_PARM_DESC(scroll, "Enable scroll-wheel on MS Office and similar keyboards");
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"…
216 bool extra; member
236 /* Serializes reconnect(), attr->set() and event work */
243 * System-specific keymap fixup routine
275 ATKBD_DEFINE_ATTR(extra);
309 return vivaldi_function_row_physmap_show(&atkbd->vdata, buf); in atkbd_show_function_row_physmap()
327 !atkbd->vdata.num_function_row_keys) in atkbd_attr_is_visible()
330 return attr->mode; in atkbd_attr_is_visible()
346 * Checks if we should mangle the scancode to extract 'release' bit
375 __clear_bit(i, &atkbd->xl_bit); in atkbd_calculate_xl_bit()
377 __set_bit(i, &atkbd->xl_bit); in atkbd_calculate_xl_bit()
389 if (atkbd->set == 3) { in atkbd_compat_scancode()
390 if (atkbd->emul == 1) in atkbd_compat_scancode()
394 if (atkbd->emul == 1) in atkbd_compat_scancode()
410 struct serio *serio = ps2dev->serio; in atkbd_handle_frame_error()
414 !atkbd->resend && atkbd->write) { in atkbd_handle_frame_error()
415 dev_warn(&serio->dev, "Frame/parity error: %02x\n", flags); in atkbd_handle_frame_error()
417 atkbd->resend = true; in atkbd_handle_frame_error()
422 atkbd->resend = false; in atkbd_handle_frame_error()
430 struct serio *serio = ps2dev->serio; in atkbd_pre_receive_byte()
432 dev_dbg(&serio->dev, "Received %02x flags %02x\n", data, flags); in atkbd_pre_receive_byte()
444 struct serio *serio = ps2dev->serio; in atkbd_receive_byte()
446 struct input_dev *dev = atkbd->dev; in atkbd_receive_byte()
448 int scroll = 0, hscroll = 0, click = -1; in atkbd_receive_byte()
452 pm_wakeup_event(&serio->dev, 0); in atkbd_receive_byte()
454 if (!atkbd->enabled) in atkbd_receive_byte()
462 if (atkbd->translated) { in atkbd_receive_byte()
464 if (atkbd->emul || atkbd_need_xlate(atkbd->xl_bit, code)) { in atkbd_receive_byte()
465 atkbd->release = code >> 7; in atkbd_receive_byte()
469 if (!atkbd->emul) in atkbd_receive_byte()
475 atkbd->enabled = false; in atkbd_receive_byte()
476 serio_reconnect(atkbd->ps2dev.serio); in atkbd_receive_byte()
479 atkbd->emul = 1; in atkbd_receive_byte()
482 atkbd->emul = 2; in atkbd_receive_byte()
485 atkbd->release = true; in atkbd_receive_byte()
490 dev_warn(&serio->dev, in atkbd_receive_byte()
493 data == ATKBD_RET_ACK ? "ACK" : "NAK", serio->phys); in atkbd_receive_byte()
496 atkbd->err_count++; in atkbd_receive_byte()
497 dev_dbg(&serio->dev, "Keyboard on %s reports too many keys pressed.\n", in atkbd_receive_byte()
498 serio->phys); in atkbd_receive_byte()
504 if (atkbd->emul && --atkbd->emul) in atkbd_receive_byte()
507 keycode = atkbd->keycode[code]; in atkbd_receive_byte()
509 if (!(atkbd->release && test_bit(code, atkbd->force_release_mask))) in atkbd_receive_byte()
517 dev_warn(&serio->dev, in atkbd_receive_byte()
519 atkbd->release ? "released" : "pressed", in atkbd_receive_byte()
520 atkbd->translated ? "translated" : "raw", in atkbd_receive_byte()
521 atkbd->set, code, serio->phys); in atkbd_receive_byte()
522 dev_warn(&serio->dev, in atkbd_receive_byte()
540 click = !atkbd->release; in atkbd_receive_byte()
543 hscroll = -1; in atkbd_receive_byte()
549 if (atkbd->release) { in atkbd_receive_byte()
551 atkbd->last = 0; in atkbd_receive_byte()
552 } else if (!atkbd->softrepeat && test_bit(keycode, dev->key)) { in atkbd_receive_byte()
554 value = time_before(jiffies, atkbd->time) && atkbd->last == code ? 1 : 2; in atkbd_receive_byte()
557 atkbd->last = code; in atkbd_receive_byte()
558 atkbd->time = jiffies + msecs_to_jiffies(dev->rep[REP_DELAY]) / 2; in atkbd_receive_byte()
564 if (value && test_bit(code, atkbd->force_release_mask)) { in atkbd_receive_byte()
571 if (atkbd->scroll) { in atkbd_receive_byte()
572 if (click != -1) in atkbd_receive_byte()
575 atkbd->release ? -scroll : scroll); in atkbd_receive_byte()
580 atkbd->release = false; in atkbd_receive_byte()
588 const short delay[4] = in atkbd_set_repeat_rate() local
591 struct input_dev *dev = atkbd->dev; in atkbd_set_repeat_rate()
595 while (i < ARRAY_SIZE(period) - 1 && period[i] < dev->rep[REP_PERIOD]) in atkbd_set_repeat_rate()
597 dev->rep[REP_PERIOD] = period[i]; in atkbd_set_repeat_rate()
599 while (j < ARRAY_SIZE(delay) - 1 && delay[j] < dev->rep[REP_DELAY]) in atkbd_set_repeat_rate()
601 dev->rep[REP_DELAY] = delay[j]; in atkbd_set_repeat_rate()
604 return ps2_command(&atkbd->ps2dev, ¶m, ATKBD_CMD_SETREP); in atkbd_set_repeat_rate()
609 struct input_dev *dev = atkbd->dev; in atkbd_set_leds()
612 param[0] = (test_bit(LED_SCROLLL, dev->led) ? 1 : 0) in atkbd_set_leds()
613 | (test_bit(LED_NUML, dev->led) ? 2 : 0) in atkbd_set_leds()
614 | (test_bit(LED_CAPSL, dev->led) ? 4 : 0); in atkbd_set_leds()
615 if (ps2_command(&atkbd->ps2dev, param, ATKBD_CMD_SETLEDS)) in atkbd_set_leds()
616 return -1; in atkbd_set_leds()
618 if (atkbd->extra) { in atkbd_set_leds()
620 param[1] = (test_bit(LED_COMPOSE, dev->led) ? 0x01 : 0) in atkbd_set_leds()
621 | (test_bit(LED_SLEEP, dev->led) ? 0x02 : 0) in atkbd_set_leds()
622 | (test_bit(LED_SUSPEND, dev->led) ? 0x04 : 0) in atkbd_set_leds()
623 | (test_bit(LED_MISC, dev->led) ? 0x10 : 0) in atkbd_set_leds()
624 | (test_bit(LED_MUTE, dev->led) ? 0x20 : 0); in atkbd_set_leds()
625 if (ps2_command(&atkbd->ps2dev, param, ATKBD_CMD_EX_SETLEDS)) in atkbd_set_leds()
626 return -1; in atkbd_set_leds()
642 guard(mutex)(&atkbd->mutex); in atkbd_event_work()
644 if (!atkbd->enabled) { in atkbd_event_work()
648 * it may not be ready yet. In this case we need to keep in atkbd_event_work()
651 schedule_delayed_work(&atkbd->event_work, in atkbd_event_work()
654 if (test_and_clear_bit(ATKBD_LED_EVENT_BIT, &atkbd->event_mask)) in atkbd_event_work()
657 if (test_and_clear_bit(ATKBD_REP_EVENT_BIT, &atkbd->event_mask)) in atkbd_event_work()
663 * Schedule switch for execution. We need to throttle requests,
668 unsigned long delay = msecs_to_jiffies(50); in atkbd_schedule_event_work() local
670 if (time_after(jiffies, atkbd->event_jiffies + delay)) in atkbd_schedule_event_work()
671 delay = 0; in atkbd_schedule_event_work()
673 atkbd->event_jiffies = jiffies; in atkbd_schedule_event_work()
674 set_bit(event_bit, &atkbd->event_mask); in atkbd_schedule_event_work()
676 schedule_delayed_work(&atkbd->event_work, delay); in atkbd_schedule_event_work()
690 if (!atkbd->write) in atkbd_event()
691 return -1; in atkbd_event()
700 if (!atkbd->softrepeat) in atkbd_event()
705 return -1; in atkbd_event()
716 guard(serio_pause_rx)(atkbd->ps2dev.serio); in atkbd_enable()
718 atkbd->enabled = true; in atkbd_enable()
728 guard(serio_pause_rx)(atkbd->ps2dev.serio); in atkbd_disable()
730 atkbd->enabled = false; in atkbd_disable()
735 struct ps2dev *ps2dev = &atkbd->ps2dev; in atkbd_activate()
742 dev_err(&ps2dev->serio->dev, in atkbd_activate()
744 ps2dev->serio->phys); in atkbd_activate()
745 return -1; in atkbd_activate()
758 struct ps2dev *ps2dev = &atkbd->ps2dev; in atkbd_deactivate()
761 dev_err(&ps2dev->serio->dev, in atkbd_deactivate()
763 ps2dev->serio->phys); in atkbd_deactivate()
773 "14", /* Sub-Notebook */ in atkbd_is_portable_device()
793 * 0xab83 id is ok in translated mode, only atkbd_select_set() checks atkbd->id
794 * and in translated mode that is a no-op.
798 return atkbd->translated && atkbd_is_portable_device(); in atkbd_skip_getid()
810 struct ps2dev *ps2dev = &atkbd->ps2dev; in atkbd_probe()
814 * Some systems, where the bit-twiddling when testing the io-lines of the in atkbd_probe()
821 dev_warn(&ps2dev->serio->dev, in atkbd_probe()
823 ps2dev->serio->phys); in atkbd_probe()
826 atkbd->id = 0xab83; in atkbd_probe()
831 * Then we check the keyboard ID. We should get 0xab83 under normal conditions. in atkbd_probe()
834 * should make sure we don't try to set the LEDs on it. in atkbd_probe()
841 * If the get ID command failed, we check if we can at least set in atkbd_probe()
843 * It also turns the LEDs off, which we want anyway. in atkbd_probe()
847 return -1; in atkbd_probe()
848 atkbd->id = 0xabba; in atkbd_probe()
853 return -1; in atkbd_probe()
855 atkbd->id = (param[0] << 8) | param[1]; in atkbd_probe()
857 if (atkbd->id == 0xaca1 && atkbd->translated) { in atkbd_probe()
858 dev_err(&ps2dev->serio->dev, in atkbd_probe()
859 "NCD terminal keyboards are only supported on non-translating controllers. " in atkbd_probe()
861 return -1; in atkbd_probe()
883 struct ps2dev *ps2dev = &atkbd->ps2dev; in atkbd_select_set()
886 atkbd->extra = false; in atkbd_select_set()
888 * For known special keyboards we can go ahead and set the correct set. in atkbd_select_set()
889 * We check for NCD PS/2 Sun, NorthGate OmniKey 101 and in atkbd_select_set()
890 * IBM RapidAccess / IBM EzButton / Chicony KBP-8993 keyboards. in atkbd_select_set()
893 if (atkbd->translated) in atkbd_select_set()
896 if (atkbd->id == 0xaca1) { in atkbd_select_set()
905 atkbd->extra = true; in atkbd_select_set()
919 atkbd->id = param[0] << 8 | param[1]; in atkbd_select_set()
944 struct ps2dev *ps2dev = &atkbd->ps2dev; in atkbd_reset_state()
953 return -1; in atkbd_reset_state()
961 return -1; in atkbd_reset_state()
976 ps2_command(&atkbd->ps2dev, NULL, ATKBD_CMD_RESET_DEF); in atkbd_cleanup()
990 input_unregister_device(atkbd->dev); in atkbd_disconnect()
993 * Make sure we don't have a command in flight. in atkbd_disconnect()
994 * Note that since atkbd->enabled is false event work will keep in atkbd_disconnect()
998 cancel_delayed_work_sync(&atkbd->event_work); in atkbd_disconnect()
1014 if (atkbd->set == 2) in atkbd_apply_forced_release_keylist()
1015 for (i = 0; keys[i] != -1U; i++) in atkbd_apply_forced_release_keylist()
1016 __set_bit(keys[i], atkbd->force_release_mask); in atkbd_apply_forced_release_keylist()
1021 * events so we have to do it ourselves.
1024 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8f, 0x93, -1U
1032 0x94, -1U
1039 0x82, 0x83, 0x84, 0x86, 0x88, 0x89, 0xb3, 0xf7, 0xf9, -1U
1046 0x20, 0xa0, 0x2e, 0xae, 0x30, 0xb0, -1U
1053 0x67, 0xed, 0x90, 0xa2, 0x99, 0xa4, 0xae, 0xb0, -1U
1060 0xa0, 0xae, 0xb0, -1U
1068 0xae, 0xb0, -1U
1072 * OQO 01+ multimedia keys (64--66) generate e0 6x upon release whereas
1073 * they should be generating e4-e6 (0x80 | code).
1078 if (atkbd->translated && atkbd->emul == 1 && in atkbd_oqo_01plus_scancode_fixup()
1080 atkbd->emul = 0; in atkbd_oqo_01plus_scancode_fixup()
1089 struct device *dev = &atkbd->ps2dev.serio->dev; in atkbd_get_keymap_from_fwnode()
1097 return -ENXIO; in atkbd_get_keymap_from_fwnode()
1101 return -ENOMEM; in atkbd_get_keymap_from_fwnode()
1106 return -EINVAL; in atkbd_get_keymap_from_fwnode()
1109 memset(atkbd->keycode, 0, sizeof(atkbd->keycode)); in atkbd_get_keymap_from_fwnode()
1113 atkbd->keycode[scancode] = keycode; in atkbd_get_keymap_from_fwnode()
1127 struct device *dev = &atkbd->ps2dev.serio->dev; in atkbd_set_keycode_table()
1131 memset(atkbd->keycode, 0, sizeof(atkbd->keycode)); in atkbd_set_keycode_table()
1132 bitmap_zero(atkbd->force_release_mask, ATKBD_KEYMAP_SIZE); in atkbd_set_keycode_table()
1136 } else if (atkbd->translated) { in atkbd_set_keycode_table()
1139 atkbd->keycode[i] = atkbd_set2_keycode[scancode]; in atkbd_set_keycode_table()
1140 atkbd->keycode[i | 0x80] = atkbd_set2_keycode[scancode | 0x80]; in atkbd_set_keycode_table()
1141 if (atkbd->scroll) in atkbd_set_keycode_table()
1144 atkbd->keycode[i | 0x80] = atkbd_scroll_keys[j].keycode; in atkbd_set_keycode_table()
1146 } else if (atkbd->set == 3) { in atkbd_set_keycode_table()
1147 memcpy(atkbd->keycode, atkbd_set3_keycode, sizeof(atkbd->keycode)); in atkbd_set_keycode_table()
1149 memcpy(atkbd->keycode, atkbd_set2_keycode, sizeof(atkbd->keycode)); in atkbd_set_keycode_table()
1151 if (atkbd->scroll) in atkbd_set_keycode_table()
1154 atkbd->keycode[scancode] = atkbd_scroll_keys[i].keycode; in atkbd_set_keycode_table()
1159 * HANGEUL and HANJA keys do not send release events so we need to in atkbd_set_keycode_table()
1163 atkbd->keycode[scancode] = KEY_HANGEUL; in atkbd_set_keycode_table()
1164 __set_bit(scancode, atkbd->force_release_mask); in atkbd_set_keycode_table()
1167 atkbd->keycode[scancode] = KEY_HANJA; in atkbd_set_keycode_table()
1168 __set_bit(scancode, atkbd->force_release_mask); in atkbd_set_keycode_table()
1183 struct input_dev *input_dev = atkbd->dev; in atkbd_set_device_attrs()
1186 if (atkbd->extra) in atkbd_set_device_attrs()
1187 snprintf(atkbd->name, sizeof(atkbd->name), in atkbd_set_device_attrs()
1188 "AT Set 2 Extra keyboard"); in atkbd_set_device_attrs()
1190 snprintf(atkbd->name, sizeof(atkbd->name), in atkbd_set_device_attrs()
1192 atkbd->translated ? "Translated" : "Raw", atkbd->set); in atkbd_set_device_attrs()
1194 snprintf(atkbd->phys, sizeof(atkbd->phys), in atkbd_set_device_attrs()
1195 "%s/input0", atkbd->ps2dev.serio->phys); in atkbd_set_device_attrs()
1197 input_dev->name = atkbd->name; in atkbd_set_device_attrs()
1198 input_dev->phys = atkbd->phys; in atkbd_set_device_attrs()
1199 input_dev->id.bustype = BUS_I8042; in atkbd_set_device_attrs()
1200 input_dev->id.vendor = 0x0001; in atkbd_set_device_attrs()
1201 input_dev->id.product = atkbd->translated ? 1 : atkbd->set; in atkbd_set_device_attrs()
1202 input_dev->id.version = atkbd->id; in atkbd_set_device_attrs()
1203 input_dev->event = atkbd_event; in atkbd_set_device_attrs()
1204 input_dev->dev.parent = &atkbd->ps2dev.serio->dev; in atkbd_set_device_attrs()
1208 input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP) | in atkbd_set_device_attrs()
1211 if (atkbd->write) { in atkbd_set_device_attrs()
1212 input_dev->evbit[0] |= BIT_MASK(EV_LED); in atkbd_set_device_attrs()
1213 input_dev->ledbit[0] = BIT_MASK(LED_NUML) | in atkbd_set_device_attrs()
1217 if (atkbd->extra) in atkbd_set_device_attrs()
1218 input_dev->ledbit[0] |= BIT_MASK(LED_COMPOSE) | in atkbd_set_device_attrs()
1222 if (!atkbd->softrepeat) { in atkbd_set_device_attrs()
1223 input_dev->rep[REP_DELAY] = 250; in atkbd_set_device_attrs()
1224 input_dev->rep[REP_PERIOD] = 33; in atkbd_set_device_attrs()
1227 input_dev->mscbit[0] = atkbd->softraw ? BIT_MASK(MSC_SCAN) : in atkbd_set_device_attrs()
1230 if (atkbd->scroll) { in atkbd_set_device_attrs()
1231 input_dev->evbit[0] |= BIT_MASK(EV_REL); in atkbd_set_device_attrs()
1232 input_dev->relbit[0] = BIT_MASK(REL_WHEEL) | in atkbd_set_device_attrs()
1234 __set_bit(BTN_MIDDLE, input_dev->keybit); in atkbd_set_device_attrs()
1237 input_dev->keycode = atkbd->keycode; in atkbd_set_device_attrs()
1238 input_dev->keycodesize = sizeof(unsigned short); in atkbd_set_device_attrs()
1239 input_dev->keycodemax = ARRAY_SIZE(atkbd_set2_keycode); in atkbd_set_device_attrs()
1242 if (atkbd->keycode[i] != KEY_RESERVED && in atkbd_set_device_attrs()
1243 atkbd->keycode[i] != ATKBD_KEY_NULL && in atkbd_set_device_attrs()
1244 atkbd->keycode[i] < ATKBD_SPECIAL) { in atkbd_set_device_attrs()
1245 __set_bit(atkbd->keycode[i], input_dev->keybit); in atkbd_set_device_attrs()
1253 struct device *dev = &serio->dev; in atkbd_parse_fwnode_data()
1256 /* Parse "function-row-physmap" property */ in atkbd_parse_fwnode_data()
1257 n = device_property_count_u32(dev, "function-row-physmap"); in atkbd_parse_fwnode_data()
1259 !device_property_read_u32_array(dev, "function-row-physmap", in atkbd_parse_fwnode_data()
1260 atkbd->vdata.function_row_physmap, in atkbd_parse_fwnode_data()
1262 atkbd->vdata.num_function_row_keys = n; in atkbd_parse_fwnode_data()
1263 dev_dbg(dev, "FW reported %d function-row key locations\n", n); in atkbd_parse_fwnode_data()
1269 * that isn't handled yet by an appropriate device driver. We check if
1270 * there is an AT keyboard out there and if yes, we register ourselves
1278 int err = -ENOMEM; in atkbd_connect()
1285 atkbd->dev = dev; in atkbd_connect()
1286 ps2_init(&atkbd->ps2dev, serio, in atkbd_connect()
1288 INIT_DELAYED_WORK(&atkbd->event_work, atkbd_event_work); in atkbd_connect()
1289 mutex_init(&atkbd->mutex); in atkbd_connect()
1291 switch (serio->id.type) { in atkbd_connect()
1294 atkbd->translated = true; in atkbd_connect()
1298 if (serio->write) in atkbd_connect()
1299 atkbd->write = true; in atkbd_connect()
1303 atkbd->softraw = atkbd_softraw; in atkbd_connect()
1304 atkbd->softrepeat = atkbd_softrepeat; in atkbd_connect()
1305 atkbd->scroll = atkbd_scroll; in atkbd_connect()
1307 if (atkbd->softrepeat) in atkbd_connect()
1308 atkbd->softraw = true; in atkbd_connect()
1316 if (atkbd->write) { in atkbd_connect()
1319 err = -ENODEV; in atkbd_connect()
1323 atkbd->set = atkbd_select_set(atkbd, atkbd_set, atkbd_extra); in atkbd_connect()
1327 atkbd->set = 2; in atkbd_connect()
1328 atkbd->id = 0xab00; in atkbd_connect()
1337 if (serio->write) in atkbd_connect()
1340 err = input_register_device(atkbd->dev); in atkbd_connect()
1361 struct serio_driver *drv = serio->drv; in atkbd_reconnect()
1365 dev_dbg(&serio->dev, in atkbd_reconnect()
1367 return -1; in atkbd_reconnect()
1370 guard(mutex)(&atkbd->mutex); in atkbd_reconnect()
1374 if (atkbd->write) { in atkbd_reconnect()
1379 if (atkbd->set != atkbd_select_set(atkbd, atkbd->set, atkbd->extra)) in atkbd_reconnect()
1380 return -EIO; in atkbd_reconnect()
1386 * keyboard was unplugged and plugged in again so we need in atkbd_reconnect()
1390 if (!atkbd->softrepeat) in atkbd_reconnect()
1397 * of multi-byte scancode. in atkbd_reconnect()
1399 atkbd->xl_bit = 0; in atkbd_reconnect()
1400 atkbd->emul = 0; in atkbd_reconnect()
1403 if (atkbd->write) in atkbd_reconnect()
1414 .extra = SERIO_ANY,
1420 .extra = SERIO_ANY,
1426 .extra = SERIO_ANY,
1463 scoped_guard(mutex_intr, &atkbd->mutex) { in atkbd_attr_set_helper()
1471 return -EINTR; in atkbd_attr_set_helper()
1476 return sprintf(buf, "%d\n", atkbd->extra ? 1 : 0); in atkbd_show_extra()
1487 if (!atkbd->write) in atkbd_set_extra()
1488 return -EIO; in atkbd_set_extra()
1495 return -EINVAL; in atkbd_set_extra()
1497 if (atkbd->extra != value) { in atkbd_set_extra()
1499 * Since device's properties will change we need to in atkbd_set_extra()
1501 * new one first to make sure we have it. in atkbd_set_extra()
1503 old_dev = atkbd->dev; in atkbd_set_extra()
1504 old_extra = atkbd->extra; in atkbd_set_extra()
1505 old_set = atkbd->set; in atkbd_set_extra()
1509 return -ENOMEM; in atkbd_set_extra()
1511 atkbd->dev = new_dev; in atkbd_set_extra()
1512 atkbd->set = atkbd_select_set(atkbd, atkbd->set, value); in atkbd_set_extra()
1518 err = input_register_device(atkbd->dev); in atkbd_set_extra()
1522 atkbd->dev = old_dev; in atkbd_set_extra()
1523 atkbd->set = atkbd_select_set(atkbd, old_set, old_extra); in atkbd_set_extra()
1537 size_t len = scnprintf(buf, PAGE_SIZE - 1, "%*pbl", in atkbd_show_force_release()
1538 ATKBD_KEYMAP_SIZE, atkbd->force_release_mask); in atkbd_show_force_release()
1557 memcpy(atkbd->force_release_mask, new_mask, sizeof(atkbd->force_release_mask)); in atkbd_set_force_release()
1564 return sprintf(buf, "%d\n", atkbd->scroll ? 1 : 0); in atkbd_show_scroll()
1579 return -EINVAL; in atkbd_set_scroll()
1581 if (atkbd->scroll != value) { in atkbd_set_scroll()
1582 old_dev = atkbd->dev; in atkbd_set_scroll()
1583 old_scroll = atkbd->scroll; in atkbd_set_scroll()
1587 return -ENOMEM; in atkbd_set_scroll()
1589 atkbd->dev = new_dev; in atkbd_set_scroll()
1590 atkbd->scroll = value; in atkbd_set_scroll()
1594 err = input_register_device(atkbd->dev); in atkbd_set_scroll()
1598 atkbd->scroll = old_scroll; in atkbd_set_scroll()
1599 atkbd->dev = old_dev; in atkbd_set_scroll()
1612 return sprintf(buf, "%d\n", atkbd->set); in atkbd_show_set()
1623 if (!atkbd->write) in atkbd_set_set()
1624 return -EIO; in atkbd_set_set()
1631 return -EINVAL; in atkbd_set_set()
1633 if (atkbd->set != value) { in atkbd_set_set()
1634 old_dev = atkbd->dev; in atkbd_set_set()
1635 old_extra = atkbd->extra; in atkbd_set_set()
1636 old_set = atkbd->set; in atkbd_set_set()
1640 return -ENOMEM; in atkbd_set_set()
1642 atkbd->dev = new_dev; in atkbd_set_set()
1643 atkbd->set = atkbd_select_set(atkbd, value, atkbd->extra); in atkbd_set_set()
1649 err = input_register_device(atkbd->dev); in atkbd_set_set()
1653 atkbd->dev = old_dev; in atkbd_set_set()
1654 atkbd->set = atkbd_select_set(atkbd, old_set, old_extra); in atkbd_set_set()
1667 return sprintf(buf, "%d\n", atkbd->softrepeat ? 1 : 0); in atkbd_show_softrepeat()
1677 if (!atkbd->write) in atkbd_set_softrepeat()
1678 return -EIO; in atkbd_set_softrepeat()
1685 return -EINVAL; in atkbd_set_softrepeat()
1687 if (atkbd->softrepeat != value) { in atkbd_set_softrepeat()
1688 old_dev = atkbd->dev; in atkbd_set_softrepeat()
1689 old_softrepeat = atkbd->softrepeat; in atkbd_set_softrepeat()
1690 old_softraw = atkbd->softraw; in atkbd_set_softrepeat()
1694 return -ENOMEM; in atkbd_set_softrepeat()
1696 atkbd->dev = new_dev; in atkbd_set_softrepeat()
1697 atkbd->softrepeat = value; in atkbd_set_softrepeat()
1698 if (atkbd->softrepeat) in atkbd_set_softrepeat()
1699 atkbd->softraw = true; in atkbd_set_softrepeat()
1702 err = input_register_device(atkbd->dev); in atkbd_set_softrepeat()
1706 atkbd->dev = old_dev; in atkbd_set_softrepeat()
1707 atkbd->softrepeat = old_softrepeat; in atkbd_set_softrepeat()
1708 atkbd->softraw = old_softraw; in atkbd_set_softrepeat()
1721 return sprintf(buf, "%d\n", atkbd->softraw ? 1 : 0); in atkbd_show_softraw()
1736 return -EINVAL; in atkbd_set_softraw()
1738 if (atkbd->softraw != value) { in atkbd_set_softraw()
1739 old_dev = atkbd->dev; in atkbd_set_softraw()
1740 old_softraw = atkbd->softraw; in atkbd_set_softraw()
1744 return -ENOMEM; in atkbd_set_softraw()
1746 atkbd->dev = new_dev; in atkbd_set_softraw()
1747 atkbd->softraw = value; in atkbd_set_softraw()
1750 err = input_register_device(atkbd->dev); in atkbd_set_softraw()
1754 atkbd->dev = old_dev; in atkbd_set_softraw()
1755 atkbd->softraw = old_softraw; in atkbd_set_softraw()
1767 return sprintf(buf, "%lu\n", atkbd->err_count); in atkbd_show_err_count()
1773 atkbd_platform_fixup_data = id->driver_data; in atkbd_setup_forced_release()
1780 atkbd_platform_scancode_fixup = id->driver_data; in atkbd_setup_scancode_fixup()
1816 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
1824 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
1832 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
1840 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
1848 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),