Lines Matching +full:fn +full:- +full:keymap
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
57 MODULE_PARM_DESC(scroll, "Enable scroll-wheel on MS Office and similar keyboards");
69 #define SCANCODE(keymap) ((keymap >> 16) & 0xFFFF) argument
70 #define KEYCODE(keymap) (keymap & 0xFFFF) argument
237 /* Serializes reconnect(), attr->set() and event work */
245 * System-specific keymap fixup routine
314 if (!atkbd->num_function_row_keys) in atkbd_show_function_row_physmap()
317 for (i = 0; i < atkbd->num_function_row_keys; i++) in atkbd_show_function_row_physmap()
318 size += scnprintf(buf + size, PAGE_SIZE - size, "%02X ", in atkbd_show_function_row_physmap()
319 atkbd->function_row_physmap[i]); in atkbd_show_function_row_physmap()
320 size += scnprintf(buf + size, PAGE_SIZE - size, "\n"); in atkbd_show_function_row_physmap()
332 !atkbd->num_function_row_keys) in atkbd_attr_is_visible()
335 return attr->mode; in atkbd_attr_is_visible()
378 __clear_bit(i, &atkbd->xl_bit); in atkbd_calculate_xl_bit()
380 __set_bit(i, &atkbd->xl_bit); in atkbd_calculate_xl_bit()
392 if (atkbd->set == 3) { in atkbd_compat_scancode()
393 if (atkbd->emul == 1) in atkbd_compat_scancode()
397 if (atkbd->emul == 1) in atkbd_compat_scancode()
413 struct input_dev *dev = atkbd->dev; in atkbd_interrupt()
415 int scroll = 0, hscroll = 0, click = -1; in atkbd_interrupt()
419 dev_dbg(&serio->dev, "Received %02x flags %02x\n", data, flags); in atkbd_interrupt()
422 …if ((flags & (SERIO_FRAME | SERIO_PARITY)) && (~flags & SERIO_TIMEOUT) && !atkbd->resend && atkbd-… in atkbd_interrupt()
423 dev_warn(&serio->dev, "Frame/parity error: %02x\n", flags); in atkbd_interrupt()
425 atkbd->resend = true; in atkbd_interrupt()
430 atkbd->resend = false; in atkbd_interrupt()
433 if (unlikely(atkbd->ps2dev.flags & PS2_FLAG_ACK)) in atkbd_interrupt()
434 if (ps2_handle_ack(&atkbd->ps2dev, data)) in atkbd_interrupt()
437 if (unlikely(atkbd->ps2dev.flags & PS2_FLAG_CMD)) in atkbd_interrupt()
438 if (ps2_handle_response(&atkbd->ps2dev, data)) in atkbd_interrupt()
441 pm_wakeup_event(&serio->dev, 0); in atkbd_interrupt()
443 if (!atkbd->enabled) in atkbd_interrupt()
451 if (atkbd->translated) { in atkbd_interrupt()
453 if (atkbd->emul || atkbd_need_xlate(atkbd->xl_bit, code)) { in atkbd_interrupt()
454 atkbd->release = code >> 7; in atkbd_interrupt()
458 if (!atkbd->emul) in atkbd_interrupt()
464 atkbd->enabled = false; in atkbd_interrupt()
465 serio_reconnect(atkbd->ps2dev.serio); in atkbd_interrupt()
468 atkbd->emul = 1; in atkbd_interrupt()
471 atkbd->emul = 2; in atkbd_interrupt()
474 atkbd->release = true; in atkbd_interrupt()
479 dev_warn(&serio->dev, in atkbd_interrupt()
482 data == ATKBD_RET_ACK ? "ACK" : "NAK", serio->phys); in atkbd_interrupt()
485 atkbd->err_count++; in atkbd_interrupt()
486 dev_dbg(&serio->dev, "Keyboard on %s reports too many keys pressed.\n", in atkbd_interrupt()
487 serio->phys); in atkbd_interrupt()
493 if (atkbd->emul && --atkbd->emul) in atkbd_interrupt()
496 keycode = atkbd->keycode[code]; in atkbd_interrupt()
498 if (!(atkbd->release && test_bit(code, atkbd->force_release_mask))) in atkbd_interrupt()
506 dev_warn(&serio->dev, in atkbd_interrupt()
508 atkbd->release ? "released" : "pressed", in atkbd_interrupt()
509 atkbd->translated ? "translated" : "raw", in atkbd_interrupt()
510 atkbd->set, code, serio->phys); in atkbd_interrupt()
511 dev_warn(&serio->dev, in atkbd_interrupt()
529 click = !atkbd->release; in atkbd_interrupt()
532 hscroll = -1; in atkbd_interrupt()
538 if (atkbd->release) { in atkbd_interrupt()
540 atkbd->last = 0; in atkbd_interrupt()
541 } else if (!atkbd->softrepeat && test_bit(keycode, dev->key)) { in atkbd_interrupt()
543 value = time_before(jiffies, atkbd->time) && atkbd->last == code ? 1 : 2; in atkbd_interrupt()
546 atkbd->last = code; in atkbd_interrupt()
547 atkbd->time = jiffies + msecs_to_jiffies(dev->rep[REP_DELAY]) / 2; in atkbd_interrupt()
553 if (value && test_bit(code, atkbd->force_release_mask)) { in atkbd_interrupt()
560 if (atkbd->scroll) { in atkbd_interrupt()
561 if (click != -1) in atkbd_interrupt()
564 atkbd->release ? -scroll : scroll); in atkbd_interrupt()
569 atkbd->release = false; in atkbd_interrupt()
582 struct input_dev *dev = atkbd->dev; in atkbd_set_repeat_rate()
586 while (i < ARRAY_SIZE(period) - 1 && period[i] < dev->rep[REP_PERIOD]) in atkbd_set_repeat_rate()
588 dev->rep[REP_PERIOD] = period[i]; in atkbd_set_repeat_rate()
590 while (j < ARRAY_SIZE(delay) - 1 && delay[j] < dev->rep[REP_DELAY]) in atkbd_set_repeat_rate()
592 dev->rep[REP_DELAY] = delay[j]; in atkbd_set_repeat_rate()
595 return ps2_command(&atkbd->ps2dev, ¶m, ATKBD_CMD_SETREP); in atkbd_set_repeat_rate()
600 struct input_dev *dev = atkbd->dev; in atkbd_set_leds()
603 param[0] = (test_bit(LED_SCROLLL, dev->led) ? 1 : 0) in atkbd_set_leds()
604 | (test_bit(LED_NUML, dev->led) ? 2 : 0) in atkbd_set_leds()
605 | (test_bit(LED_CAPSL, dev->led) ? 4 : 0); in atkbd_set_leds()
606 if (ps2_command(&atkbd->ps2dev, param, ATKBD_CMD_SETLEDS)) in atkbd_set_leds()
607 return -1; in atkbd_set_leds()
609 if (atkbd->extra) { in atkbd_set_leds()
611 param[1] = (test_bit(LED_COMPOSE, dev->led) ? 0x01 : 0) in atkbd_set_leds()
612 | (test_bit(LED_SLEEP, dev->led) ? 0x02 : 0) in atkbd_set_leds()
613 | (test_bit(LED_SUSPEND, dev->led) ? 0x04 : 0) in atkbd_set_leds()
614 | (test_bit(LED_MISC, dev->led) ? 0x10 : 0) in atkbd_set_leds()
615 | (test_bit(LED_MUTE, dev->led) ? 0x20 : 0); in atkbd_set_leds()
616 if (ps2_command(&atkbd->ps2dev, param, ATKBD_CMD_EX_SETLEDS)) in atkbd_set_leds()
617 return -1; in atkbd_set_leds()
633 mutex_lock(&atkbd->mutex); in atkbd_event_work()
635 if (!atkbd->enabled) { in atkbd_event_work()
642 schedule_delayed_work(&atkbd->event_work, in atkbd_event_work()
645 if (test_and_clear_bit(ATKBD_LED_EVENT_BIT, &atkbd->event_mask)) in atkbd_event_work()
648 if (test_and_clear_bit(ATKBD_REP_EVENT_BIT, &atkbd->event_mask)) in atkbd_event_work()
652 mutex_unlock(&atkbd->mutex); in atkbd_event_work()
663 if (time_after(jiffies, atkbd->event_jiffies + delay)) in atkbd_schedule_event_work()
666 atkbd->event_jiffies = jiffies; in atkbd_schedule_event_work()
667 set_bit(event_bit, &atkbd->event_mask); in atkbd_schedule_event_work()
669 schedule_delayed_work(&atkbd->event_work, delay); in atkbd_schedule_event_work()
683 if (!atkbd->write) in atkbd_event()
684 return -1; in atkbd_event()
693 if (!atkbd->softrepeat) in atkbd_event()
698 return -1; in atkbd_event()
709 serio_pause_rx(atkbd->ps2dev.serio); in atkbd_enable()
710 atkbd->enabled = true; in atkbd_enable()
711 serio_continue_rx(atkbd->ps2dev.serio); in atkbd_enable()
721 serio_pause_rx(atkbd->ps2dev.serio); in atkbd_disable()
722 atkbd->enabled = false; in atkbd_disable()
723 serio_continue_rx(atkbd->ps2dev.serio); in atkbd_disable()
728 struct ps2dev *ps2dev = &atkbd->ps2dev; in atkbd_activate()
735 dev_err(&ps2dev->serio->dev, in atkbd_activate()
737 ps2dev->serio->phys); in atkbd_activate()
738 return -1; in atkbd_activate()
751 struct ps2dev *ps2dev = &atkbd->ps2dev; in atkbd_deactivate()
754 dev_err(&ps2dev->serio->dev, in atkbd_deactivate()
756 ps2dev->serio->phys); in atkbd_deactivate()
765 struct ps2dev *ps2dev = &atkbd->ps2dev; in atkbd_probe()
769 * Some systems, where the bit-twiddling when testing the io-lines of the in atkbd_probe()
776 dev_warn(&ps2dev->serio->dev, in atkbd_probe()
778 ps2dev->serio->phys); in atkbd_probe()
797 return -1; in atkbd_probe()
798 atkbd->id = 0xabba; in atkbd_probe()
803 return -1; in atkbd_probe()
805 atkbd->id = (param[0] << 8) | param[1]; in atkbd_probe()
807 if (atkbd->id == 0xaca1 && atkbd->translated) { in atkbd_probe()
808 dev_err(&ps2dev->serio->dev, in atkbd_probe()
809 "NCD terminal keyboards are only supported on non-translating controllers. " in atkbd_probe()
811 return -1; in atkbd_probe()
832 struct ps2dev *ps2dev = &atkbd->ps2dev; in atkbd_select_set()
835 atkbd->extra = false; in atkbd_select_set()
839 * IBM RapidAccess / IBM EzButton / Chicony KBP-8993 keyboards. in atkbd_select_set()
842 if (atkbd->translated) in atkbd_select_set()
845 if (atkbd->id == 0xaca1) { in atkbd_select_set()
854 atkbd->extra = true; in atkbd_select_set()
868 atkbd->id = param[0] << 8 | param[1]; in atkbd_select_set()
893 struct ps2dev *ps2dev = &atkbd->ps2dev; in atkbd_reset_state()
902 return -1; in atkbd_reset_state()
910 return -1; in atkbd_reset_state()
925 ps2_command(&atkbd->ps2dev, NULL, ATKBD_CMD_RESET_DEF); in atkbd_cleanup()
937 sysfs_remove_group(&serio->dev.kobj, &atkbd_attribute_group); in atkbd_disconnect()
941 input_unregister_device(atkbd->dev); in atkbd_disconnect()
945 * Note that since atkbd->enabled is false event work will keep in atkbd_disconnect()
949 cancel_delayed_work_sync(&atkbd->event_work); in atkbd_disconnect()
965 if (atkbd->set == 2) in atkbd_apply_forced_release_keylist()
966 for (i = 0; keys[i] != -1U; i++) in atkbd_apply_forced_release_keylist()
967 __set_bit(keys[i], atkbd->force_release_mask); in atkbd_apply_forced_release_keylist()
971 * Most special keys (Fn+F?) on Dell laptops do not generate release
975 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8f, 0x93, -1U
983 0x94, -1U
987 * Samsung NC10,NC20 with Fn+F? key release not working
990 0x82, 0x83, 0x84, 0x86, 0x88, 0x89, 0xb3, 0xf7, 0xf9, -1U
994 * Amilo Pi 3525 key release for Fn+Volume keys not working
997 0x20, 0xa0, 0x2e, 0xae, 0x30, 0xb0, -1U
1004 0x67, 0xed, 0x90, 0xa2, 0x99, 0xa4, 0xae, 0xb0, -1U
1011 0xa0, 0xae, 0xb0, -1U
1019 0xae, 0xb0, -1U
1023 * OQO 01+ multimedia keys (64--66) generate e0 6x upon release whereas
1024 * they should be generating e4-e6 (0x80 | code).
1029 if (atkbd->translated && atkbd->emul == 1 && in atkbd_oqo_01plus_scancode_fixup()
1031 atkbd->emul = 0; in atkbd_oqo_01plus_scancode_fixup()
1040 struct device *dev = &atkbd->ps2dev.serio->dev; in atkbd_get_keymap_from_fwnode()
1045 /* Parse "linux,keymap" property */ in atkbd_get_keymap_from_fwnode()
1046 n = device_property_count_u32(dev, "linux,keymap"); in atkbd_get_keymap_from_fwnode()
1048 return -ENXIO; in atkbd_get_keymap_from_fwnode()
1052 return -ENOMEM; in atkbd_get_keymap_from_fwnode()
1054 if (device_property_read_u32_array(dev, "linux,keymap", ptr, n)) { in atkbd_get_keymap_from_fwnode()
1055 dev_err(dev, "problem parsing FW keymap property\n"); in atkbd_get_keymap_from_fwnode()
1057 return -EINVAL; in atkbd_get_keymap_from_fwnode()
1060 memset(atkbd->keycode, 0, sizeof(atkbd->keycode)); in atkbd_get_keymap_from_fwnode()
1064 atkbd->keycode[scancode] = keycode; in atkbd_get_keymap_from_fwnode()
1078 struct device *dev = &atkbd->ps2dev.serio->dev; in atkbd_set_keycode_table()
1082 memset(atkbd->keycode, 0, sizeof(atkbd->keycode)); in atkbd_set_keycode_table()
1083 bitmap_zero(atkbd->force_release_mask, ATKBD_KEYMAP_SIZE); in atkbd_set_keycode_table()
1086 dev_dbg(dev, "Using FW keymap\n"); in atkbd_set_keycode_table()
1087 } else if (atkbd->translated) { in atkbd_set_keycode_table()
1090 atkbd->keycode[i] = atkbd_set2_keycode[scancode]; in atkbd_set_keycode_table()
1091 atkbd->keycode[i | 0x80] = atkbd_set2_keycode[scancode | 0x80]; in atkbd_set_keycode_table()
1092 if (atkbd->scroll) in atkbd_set_keycode_table()
1095 atkbd->keycode[i | 0x80] = atkbd_scroll_keys[j].keycode; in atkbd_set_keycode_table()
1097 } else if (atkbd->set == 3) { in atkbd_set_keycode_table()
1098 memcpy(atkbd->keycode, atkbd_set3_keycode, sizeof(atkbd->keycode)); in atkbd_set_keycode_table()
1100 memcpy(atkbd->keycode, atkbd_set2_keycode, sizeof(atkbd->keycode)); in atkbd_set_keycode_table()
1102 if (atkbd->scroll) in atkbd_set_keycode_table()
1105 atkbd->keycode[scancode] = atkbd_scroll_keys[i].keycode; in atkbd_set_keycode_table()
1114 atkbd->keycode[scancode] = KEY_HANGEUL; in atkbd_set_keycode_table()
1115 __set_bit(scancode, atkbd->force_release_mask); in atkbd_set_keycode_table()
1118 atkbd->keycode[scancode] = KEY_HANJA; in atkbd_set_keycode_table()
1119 __set_bit(scancode, atkbd->force_release_mask); in atkbd_set_keycode_table()
1134 struct input_dev *input_dev = atkbd->dev; in atkbd_set_device_attrs()
1137 if (atkbd->extra) in atkbd_set_device_attrs()
1138 snprintf(atkbd->name, sizeof(atkbd->name), in atkbd_set_device_attrs()
1141 snprintf(atkbd->name, sizeof(atkbd->name), in atkbd_set_device_attrs()
1143 atkbd->translated ? "Translated" : "Raw", atkbd->set); in atkbd_set_device_attrs()
1145 snprintf(atkbd->phys, sizeof(atkbd->phys), in atkbd_set_device_attrs()
1146 "%s/input0", atkbd->ps2dev.serio->phys); in atkbd_set_device_attrs()
1148 input_dev->name = atkbd->name; in atkbd_set_device_attrs()
1149 input_dev->phys = atkbd->phys; in atkbd_set_device_attrs()
1150 input_dev->id.bustype = BUS_I8042; in atkbd_set_device_attrs()
1151 input_dev->id.vendor = 0x0001; in atkbd_set_device_attrs()
1152 input_dev->id.product = atkbd->translated ? 1 : atkbd->set; in atkbd_set_device_attrs()
1153 input_dev->id.version = atkbd->id; in atkbd_set_device_attrs()
1154 input_dev->event = atkbd_event; in atkbd_set_device_attrs()
1155 input_dev->dev.parent = &atkbd->ps2dev.serio->dev; in atkbd_set_device_attrs()
1159 input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP) | in atkbd_set_device_attrs()
1162 if (atkbd->write) { in atkbd_set_device_attrs()
1163 input_dev->evbit[0] |= BIT_MASK(EV_LED); in atkbd_set_device_attrs()
1164 input_dev->ledbit[0] = BIT_MASK(LED_NUML) | in atkbd_set_device_attrs()
1168 if (atkbd->extra) in atkbd_set_device_attrs()
1169 input_dev->ledbit[0] |= BIT_MASK(LED_COMPOSE) | in atkbd_set_device_attrs()
1173 if (!atkbd->softrepeat) { in atkbd_set_device_attrs()
1174 input_dev->rep[REP_DELAY] = 250; in atkbd_set_device_attrs()
1175 input_dev->rep[REP_PERIOD] = 33; in atkbd_set_device_attrs()
1178 input_dev->mscbit[0] = atkbd->softraw ? BIT_MASK(MSC_SCAN) : in atkbd_set_device_attrs()
1181 if (atkbd->scroll) { in atkbd_set_device_attrs()
1182 input_dev->evbit[0] |= BIT_MASK(EV_REL); in atkbd_set_device_attrs()
1183 input_dev->relbit[0] = BIT_MASK(REL_WHEEL) | in atkbd_set_device_attrs()
1185 __set_bit(BTN_MIDDLE, input_dev->keybit); in atkbd_set_device_attrs()
1188 input_dev->keycode = atkbd->keycode; in atkbd_set_device_attrs()
1189 input_dev->keycodesize = sizeof(unsigned short); in atkbd_set_device_attrs()
1190 input_dev->keycodemax = ARRAY_SIZE(atkbd_set2_keycode); in atkbd_set_device_attrs()
1193 if (atkbd->keycode[i] != KEY_RESERVED && in atkbd_set_device_attrs()
1194 atkbd->keycode[i] != ATKBD_KEY_NULL && in atkbd_set_device_attrs()
1195 atkbd->keycode[i] < ATKBD_SPECIAL) { in atkbd_set_device_attrs()
1196 __set_bit(atkbd->keycode[i], input_dev->keybit); in atkbd_set_device_attrs()
1204 struct device *dev = &serio->dev; in atkbd_parse_fwnode_data()
1207 /* Parse "function-row-physmap" property */ in atkbd_parse_fwnode_data()
1208 n = device_property_count_u32(dev, "function-row-physmap"); in atkbd_parse_fwnode_data()
1210 !device_property_read_u32_array(dev, "function-row-physmap", in atkbd_parse_fwnode_data()
1211 atkbd->function_row_physmap, n)) { in atkbd_parse_fwnode_data()
1212 atkbd->num_function_row_keys = n; in atkbd_parse_fwnode_data()
1213 dev_dbg(dev, "FW reported %d function-row key locations\n", n); in atkbd_parse_fwnode_data()
1228 int err = -ENOMEM; in atkbd_connect()
1235 atkbd->dev = dev; in atkbd_connect()
1236 ps2_init(&atkbd->ps2dev, serio); in atkbd_connect()
1237 INIT_DELAYED_WORK(&atkbd->event_work, atkbd_event_work); in atkbd_connect()
1238 mutex_init(&atkbd->mutex); in atkbd_connect()
1240 switch (serio->id.type) { in atkbd_connect()
1243 atkbd->translated = true; in atkbd_connect()
1247 if (serio->write) in atkbd_connect()
1248 atkbd->write = true; in atkbd_connect()
1252 atkbd->softraw = atkbd_softraw; in atkbd_connect()
1253 atkbd->softrepeat = atkbd_softrepeat; in atkbd_connect()
1254 atkbd->scroll = atkbd_scroll; in atkbd_connect()
1256 if (atkbd->softrepeat) in atkbd_connect()
1257 atkbd->softraw = true; in atkbd_connect()
1265 if (atkbd->write) { in atkbd_connect()
1268 err = -ENODEV; in atkbd_connect()
1272 atkbd->set = atkbd_select_set(atkbd, atkbd_set, atkbd_extra); in atkbd_connect()
1276 atkbd->set = 2; in atkbd_connect()
1277 atkbd->id = 0xab00; in atkbd_connect()
1285 err = sysfs_create_group(&serio->dev.kobj, &atkbd_attribute_group); in atkbd_connect()
1290 if (serio->write) in atkbd_connect()
1293 err = input_register_device(atkbd->dev); in atkbd_connect()
1299 fail4: sysfs_remove_group(&serio->dev.kobj, &atkbd_attribute_group); in atkbd_connect()
1315 struct serio_driver *drv = serio->drv; in atkbd_reconnect()
1316 int retval = -1; in atkbd_reconnect()
1319 dev_dbg(&serio->dev, in atkbd_reconnect()
1321 return -1; in atkbd_reconnect()
1324 mutex_lock(&atkbd->mutex); in atkbd_reconnect()
1328 if (atkbd->write) { in atkbd_reconnect()
1332 if (atkbd->set != atkbd_select_set(atkbd, atkbd->set, atkbd->extra)) in atkbd_reconnect()
1343 if (!atkbd->softrepeat) in atkbd_reconnect()
1350 * of multi-byte scancode. in atkbd_reconnect()
1352 atkbd->xl_bit = 0; in atkbd_reconnect()
1353 atkbd->emul = 0; in atkbd_reconnect()
1356 if (atkbd->write) in atkbd_reconnect()
1362 mutex_unlock(&atkbd->mutex); in atkbd_reconnect()
1419 retval = mutex_lock_interruptible(&atkbd->mutex); in atkbd_attr_set_helper()
1427 mutex_unlock(&atkbd->mutex); in atkbd_attr_set_helper()
1434 return sprintf(buf, "%d\n", atkbd->extra ? 1 : 0); in atkbd_show_extra()
1445 if (!atkbd->write) in atkbd_set_extra()
1446 return -EIO; in atkbd_set_extra()
1453 return -EINVAL; in atkbd_set_extra()
1455 if (atkbd->extra != value) { in atkbd_set_extra()
1461 old_dev = atkbd->dev; in atkbd_set_extra()
1462 old_extra = atkbd->extra; in atkbd_set_extra()
1463 old_set = atkbd->set; in atkbd_set_extra()
1467 return -ENOMEM; in atkbd_set_extra()
1469 atkbd->dev = new_dev; in atkbd_set_extra()
1470 atkbd->set = atkbd_select_set(atkbd, atkbd->set, value); in atkbd_set_extra()
1476 err = input_register_device(atkbd->dev); in atkbd_set_extra()
1480 atkbd->dev = old_dev; in atkbd_set_extra()
1481 atkbd->set = atkbd_select_set(atkbd, old_set, old_extra); in atkbd_set_extra()
1495 size_t len = scnprintf(buf, PAGE_SIZE - 1, "%*pbl", in atkbd_show_force_release()
1496 ATKBD_KEYMAP_SIZE, atkbd->force_release_mask); in atkbd_show_force_release()
1515 memcpy(atkbd->force_release_mask, new_mask, sizeof(atkbd->force_release_mask)); in atkbd_set_force_release()
1522 return sprintf(buf, "%d\n", atkbd->scroll ? 1 : 0); in atkbd_show_scroll()
1537 return -EINVAL; in atkbd_set_scroll()
1539 if (atkbd->scroll != value) { in atkbd_set_scroll()
1540 old_dev = atkbd->dev; in atkbd_set_scroll()
1541 old_scroll = atkbd->scroll; in atkbd_set_scroll()
1545 return -ENOMEM; in atkbd_set_scroll()
1547 atkbd->dev = new_dev; in atkbd_set_scroll()
1548 atkbd->scroll = value; in atkbd_set_scroll()
1552 err = input_register_device(atkbd->dev); in atkbd_set_scroll()
1556 atkbd->scroll = old_scroll; in atkbd_set_scroll()
1557 atkbd->dev = old_dev; in atkbd_set_scroll()
1570 return sprintf(buf, "%d\n", atkbd->set); in atkbd_show_set()
1581 if (!atkbd->write) in atkbd_set_set()
1582 return -EIO; in atkbd_set_set()
1589 return -EINVAL; in atkbd_set_set()
1591 if (atkbd->set != value) { in atkbd_set_set()
1592 old_dev = atkbd->dev; in atkbd_set_set()
1593 old_extra = atkbd->extra; in atkbd_set_set()
1594 old_set = atkbd->set; in atkbd_set_set()
1598 return -ENOMEM; in atkbd_set_set()
1600 atkbd->dev = new_dev; in atkbd_set_set()
1601 atkbd->set = atkbd_select_set(atkbd, value, atkbd->extra); in atkbd_set_set()
1607 err = input_register_device(atkbd->dev); in atkbd_set_set()
1611 atkbd->dev = old_dev; in atkbd_set_set()
1612 atkbd->set = atkbd_select_set(atkbd, old_set, old_extra); in atkbd_set_set()
1625 return sprintf(buf, "%d\n", atkbd->softrepeat ? 1 : 0); in atkbd_show_softrepeat()
1635 if (!atkbd->write) in atkbd_set_softrepeat()
1636 return -EIO; in atkbd_set_softrepeat()
1643 return -EINVAL; in atkbd_set_softrepeat()
1645 if (atkbd->softrepeat != value) { in atkbd_set_softrepeat()
1646 old_dev = atkbd->dev; in atkbd_set_softrepeat()
1647 old_softrepeat = atkbd->softrepeat; in atkbd_set_softrepeat()
1648 old_softraw = atkbd->softraw; in atkbd_set_softrepeat()
1652 return -ENOMEM; in atkbd_set_softrepeat()
1654 atkbd->dev = new_dev; in atkbd_set_softrepeat()
1655 atkbd->softrepeat = value; in atkbd_set_softrepeat()
1656 if (atkbd->softrepeat) in atkbd_set_softrepeat()
1657 atkbd->softraw = true; in atkbd_set_softrepeat()
1660 err = input_register_device(atkbd->dev); in atkbd_set_softrepeat()
1664 atkbd->dev = old_dev; in atkbd_set_softrepeat()
1665 atkbd->softrepeat = old_softrepeat; in atkbd_set_softrepeat()
1666 atkbd->softraw = old_softraw; in atkbd_set_softrepeat()
1679 return sprintf(buf, "%d\n", atkbd->softraw ? 1 : 0); in atkbd_show_softraw()
1694 return -EINVAL; in atkbd_set_softraw()
1696 if (atkbd->softraw != value) { in atkbd_set_softraw()
1697 old_dev = atkbd->dev; in atkbd_set_softraw()
1698 old_softraw = atkbd->softraw; in atkbd_set_softraw()
1702 return -ENOMEM; in atkbd_set_softraw()
1704 atkbd->dev = new_dev; in atkbd_set_softraw()
1705 atkbd->softraw = value; in atkbd_set_softraw()
1708 err = input_register_device(atkbd->dev); in atkbd_set_softraw()
1712 atkbd->dev = old_dev; in atkbd_set_softraw()
1713 atkbd->softraw = old_softraw; in atkbd_set_softraw()
1725 return sprintf(buf, "%lu\n", atkbd->err_count); in atkbd_show_err_count()
1731 atkbd_platform_fixup_data = id->driver_data; in atkbd_setup_forced_release()
1738 atkbd_platform_scancode_fixup = id->driver_data; in atkbd_setup_scancode_fixup()
1774 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
1782 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
1790 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
1798 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
1806 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),