H A D | atkbd.c | 198 * The atkbd control structure 201 struct atkbd { struct 242 static void (*atkbd_platform_fixup)(struct atkbd *, const void *data); 244 static unsigned int (*atkbd_platform_scancode_fixup)(struct atkbd *, unsigned int); 253 ssize_t (*handler)(struct atkbd *, char *)); 255 ssize_t (*handler)(struct atkbd *, const char *, size_t)); 257 static ssize_t atkbd_show_##_name(struct atkbd *, char *); \ 258 static ssize_t atkbd_set_##_name(struct atkbd *, const char *, size_t); \ 280 static ssize_t atkbd_show_##_name(struct atkbd *, char *); \ 334 static void atkbd_calculate_xl_bit(struct atkbd *atkbd, unsigned char code) atkbd_calculate_xl_bit() argument 341 __clear_bit(i, &atkbd->xl_bit); atkbd_calculate_xl_bit() 343 __set_bit(i, &atkbd->xl_bit); atkbd_calculate_xl_bit() 353 static unsigned int atkbd_compat_scancode(struct atkbd *atkbd, unsigned int code) atkbd_compat_scancode() argument 355 if (atkbd->set == 3) { atkbd_compat_scancode() 356 if (atkbd->emul == 1) atkbd_compat_scancode() 360 if (atkbd->emul == 1) atkbd_compat_scancode() 375 struct atkbd *atkbd = serio_get_drvdata(serio); atkbd_interrupt() local 376 struct input_dev *dev = atkbd->dev; atkbd_interrupt() 385 if ((flags & (SERIO_FRAME | SERIO_PARITY)) && (~flags & SERIO_TIMEOUT) && !atkbd->resend && atkbd->write) { atkbd_interrupt() 388 atkbd->resend = true; atkbd_interrupt() 393 atkbd->resend = false; atkbd_interrupt() 396 if (unlikely(atkbd->ps2dev.flags & PS2_FLAG_ACK)) atkbd_interrupt() 397 if (ps2_handle_ack(&atkbd->ps2dev, data)) atkbd_interrupt() 400 if (unlikely(atkbd->ps2dev.flags & PS2_FLAG_CMD)) atkbd_interrupt() 401 if (ps2_handle_response(&atkbd->ps2dev, data)) atkbd_interrupt() 404 if (!atkbd->enabled) atkbd_interrupt() 410 code = atkbd_platform_scancode_fixup(atkbd, code); atkbd_interrupt() 412 if (atkbd->translated) { atkbd_interrupt() 414 if (atkbd->emul || atkbd_need_xlate(atkbd->xl_bit, code)) { atkbd_interrupt() 415 atkbd->release = code >> 7; atkbd_interrupt() 419 if (!atkbd->emul) atkbd_interrupt() 420 atkbd_calculate_xl_bit(atkbd, data); atkbd_interrupt() 425 atkbd->enabled = false; atkbd_interrupt() 426 serio_reconnect(atkbd->ps2dev.serio); atkbd_interrupt() 429 atkbd->emul = 1; atkbd_interrupt() 432 atkbd->emul = 2; atkbd_interrupt() 435 atkbd->release = true; atkbd_interrupt() 446 atkbd->err_count++; atkbd_interrupt() 452 code = atkbd_compat_scancode(atkbd, code); atkbd_interrupt() 454 if (atkbd->emul && --atkbd->emul) atkbd_interrupt() 457 keycode = atkbd->keycode[code]; atkbd_interrupt() 459 if (!(atkbd->release && test_bit(code, atkbd->force_release_mask))) atkbd_interrupt() 469 atkbd->release ? "released" : "pressed", atkbd_interrupt() 470 atkbd->translated ? "translated" : "raw", atkbd_interrupt() 471 atkbd->set, code, serio->phys); atkbd_interrupt() 490 click = !atkbd->release; atkbd_interrupt() 499 if (atkbd->release) { atkbd_interrupt() 501 atkbd->last = 0; atkbd_interrupt() 502 } else if (!atkbd->softrepeat && test_bit(keycode, dev->key)) { atkbd_interrupt() 504 value = time_before(jiffies, atkbd->time) && atkbd->last == code ? 1 : 2; atkbd_interrupt() 507 atkbd->last = code; atkbd_interrupt() 508 atkbd->time = jiffies + msecs_to_jiffies(dev->rep[REP_DELAY]) / 2; atkbd_interrupt() 514 if (value && test_bit(code, atkbd->force_release_mask)) { atkbd_interrupt() 521 if (atkbd->scroll) { atkbd_interrupt() 525 atkbd->release ? -scroll : scroll); atkbd_interrupt() 530 atkbd->release = false; atkbd_interrupt() 535 static int atkbd_set_repeat_rate(struct atkbd *atkbd) atkbd_set_repeat_rate() argument 543 struct input_dev *dev = atkbd->dev; atkbd_set_repeat_rate() 556 return ps2_command(&atkbd->ps2dev, ¶m, ATKBD_CMD_SETREP); atkbd_set_repeat_rate() 559 static int atkbd_set_leds(struct atkbd *atkbd) atkbd_set_leds() argument 561 struct input_dev *dev = atkbd->dev; atkbd_set_leds() 567 if (ps2_command(&atkbd->ps2dev, param, ATKBD_CMD_SETLEDS)) atkbd_set_leds() 570 if (atkbd->extra) { atkbd_set_leds() 577 if (ps2_command(&atkbd->ps2dev, param, ATKBD_CMD_EX_SETLEDS)) atkbd_set_leds() 592 struct atkbd *atkbd = container_of(work, struct atkbd, event_work.work); atkbd_event_work() local 594 mutex_lock(&atkbd->mutex); atkbd_event_work() 596 if (!atkbd->enabled) { atkbd_event_work() 603 schedule_delayed_work(&atkbd->event_work, atkbd_event_work() 606 if (test_and_clear_bit(ATKBD_LED_EVENT_BIT, &atkbd->event_mask)) atkbd_event_work() 607 atkbd_set_leds(atkbd); atkbd_event_work() 609 if (test_and_clear_bit(ATKBD_REP_EVENT_BIT, &atkbd->event_mask)) atkbd_event_work() 610 atkbd_set_repeat_rate(atkbd); atkbd_event_work() 613 mutex_unlock(&atkbd->mutex); atkbd_event_work() 620 static void atkbd_schedule_event_work(struct atkbd *atkbd, int event_bit) atkbd_schedule_event_work() argument 624 if (time_after(jiffies, atkbd->event_jiffies + delay)) atkbd_schedule_event_work() 627 atkbd->event_jiffies = jiffies; atkbd_schedule_event_work() 628 set_bit(event_bit, &atkbd->event_mask); atkbd_schedule_event_work() 630 schedule_delayed_work(&atkbd->event_work, delay); atkbd_schedule_event_work() 642 struct atkbd *atkbd = input_get_drvdata(dev); atkbd_event() local 644 if (!atkbd->write) atkbd_event() 650 atkbd_schedule_event_work(atkbd, ATKBD_LED_EVENT_BIT); atkbd_event() 654 if (!atkbd->softrepeat) atkbd_event() 655 atkbd_schedule_event_work(atkbd, ATKBD_REP_EVENT_BIT); atkbd_event() 668 static inline void atkbd_enable(struct atkbd *atkbd) atkbd_enable() argument 670 serio_pause_rx(atkbd->ps2dev.serio); atkbd_enable() 671 atkbd->enabled = true; atkbd_enable() 672 serio_continue_rx(atkbd->ps2dev.serio); atkbd_enable() 680 static inline void atkbd_disable(struct atkbd *atkbd) atkbd_disable() argument 682 serio_pause_rx(atkbd->ps2dev.serio); atkbd_disable() 683 atkbd->enabled = false; atkbd_disable() 684 serio_continue_rx(atkbd->ps2dev.serio); atkbd_disable() 687 static int atkbd_activate(struct atkbd *atkbd) atkbd_activate() argument 689 struct ps2dev *ps2dev = &atkbd->ps2dev; atkbd_activate() 710 static void atkbd_deactivate(struct atkbd *atkbd) atkbd_deactivate() argument 712 struct ps2dev *ps2dev = &atkbd->ps2dev; atkbd_deactivate() 724 static int atkbd_probe(struct atkbd *atkbd) atkbd_probe() argument 726 struct ps2dev *ps2dev = &atkbd->ps2dev; atkbd_probe() 759 atkbd->id = 0xabba; atkbd_probe() 766 atkbd->id = (param[0] << 8) | param[1]; atkbd_probe() 768 if (atkbd->id == 0xaca1 && atkbd->translated) { atkbd_probe() 780 atkbd_deactivate(atkbd); atkbd_probe() 791 static int atkbd_select_set(struct atkbd *atkbd, int target_set, int allow_extra) atkbd_select_set() argument 793 struct ps2dev *ps2dev = &atkbd->ps2dev; atkbd_select_set() 796 atkbd->extra = false; atkbd_select_set() 803 if (atkbd->translated) atkbd_select_set() 806 if (atkbd->id == 0xaca1) { atkbd_select_set() 815 atkbd->extra = true; atkbd_select_set() 829 atkbd->id = param[0] << 8 | param[1]; atkbd_select_set() 852 static int atkbd_reset_state(struct atkbd *atkbd) atkbd_reset_state() argument 854 struct ps2dev *ps2dev = &atkbd->ps2dev; atkbd_reset_state() 883 struct atkbd *atkbd = serio_get_drvdata(serio); atkbd_cleanup() local 885 atkbd_disable(atkbd); atkbd_cleanup() 886 ps2_command(&atkbd->ps2dev, NULL, ATKBD_CMD_RESET_DEF); atkbd_cleanup() 896 struct atkbd *atkbd = serio_get_drvdata(serio); atkbd_disconnect() local 900 atkbd_disable(atkbd); atkbd_disconnect() 902 input_unregister_device(atkbd->dev); atkbd_disconnect() 906 * Note that since atkbd->enabled is false event work will keep atkbd_disconnect() 910 cancel_delayed_work_sync(&atkbd->event_work); atkbd_disconnect() 914 kfree(atkbd); atkbd_disconnect() 920 static void atkbd_apply_forced_release_keylist(struct atkbd* atkbd, atkbd_apply_forced_release_keylist() argument 926 if (atkbd->set == 2) atkbd_apply_forced_release_keylist() 928 __set_bit(keys[i], atkbd->force_release_mask); atkbd_apply_forced_release_keylist() 987 static unsigned int atkbd_oqo_01plus_scancode_fixup(struct atkbd *atkbd, atkbd_oqo_01plus_scancode_fixup() argument 990 if (atkbd->translated && atkbd->emul == 1 && atkbd_oqo_01plus_scancode_fixup() 992 atkbd->emul = 0; atkbd_oqo_01plus_scancode_fixup() 1004 static void atkbd_set_keycode_table(struct atkbd *atkbd) atkbd_set_keycode_table() argument 1009 memset(atkbd->keycode, 0, sizeof(atkbd->keycode)); atkbd_set_keycode_table() 1010 bitmap_zero(atkbd->force_release_mask, ATKBD_KEYMAP_SIZE); atkbd_set_keycode_table() 1012 if (atkbd->translated) { atkbd_set_keycode_table() 1015 atkbd->keycode[i] = atkbd_set2_keycode[scancode]; atkbd_set_keycode_table() 1016 atkbd->keycode[i | 0x80] = atkbd_set2_keycode[scancode | 0x80]; atkbd_set_keycode_table() 1017 if (atkbd->scroll) atkbd_set_keycode_table() 1020 atkbd->keycode[i | 0x80] = atkbd_scroll_keys[j].keycode; atkbd_set_keycode_table() 1022 } else if (atkbd->set == 3) { atkbd_set_keycode_table() 1023 memcpy(atkbd->keycode, atkbd_set3_keycode, sizeof(atkbd->keycode)); atkbd_set_keycode_table() 1025 memcpy(atkbd->keycode, atkbd_set2_keycode, sizeof(atkbd->keycode)); atkbd_set_keycode_table() 1027 if (atkbd->scroll) atkbd_set_keycode_table() 1030 atkbd->keycode[scancode] = atkbd_scroll_keys[i].keycode; atkbd_set_keycode_table() 1038 scancode = atkbd_compat_scancode(atkbd, ATKBD_RET_HANGEUL); atkbd_set_keycode_table() 1039 atkbd->keycode[scancode] = KEY_HANGEUL; atkbd_set_keycode_table() 1040 __set_bit(scancode, atkbd->force_release_mask); atkbd_set_keycode_table() 1042 scancode = atkbd_compat_scancode(atkbd, ATKBD_RET_HANJA); atkbd_set_keycode_table() 1043 atkbd->keycode[scancode] = KEY_HANJA; atkbd_set_keycode_table() 1044 __set_bit(scancode, atkbd->force_release_mask); atkbd_set_keycode_table() 1050 atkbd_platform_fixup(atkbd, atkbd_platform_fixup_data); atkbd_set_keycode_table() 1057 static void atkbd_set_device_attrs(struct atkbd *atkbd) atkbd_set_device_attrs() argument 1059 struct input_dev *input_dev = atkbd->dev; atkbd_set_device_attrs() 1062 if (atkbd->extra) atkbd_set_device_attrs() 1063 snprintf(atkbd->name, sizeof(atkbd->name), atkbd_set_device_attrs() 1066 snprintf(atkbd->name, sizeof(atkbd->name), atkbd_set_device_attrs() 1068 atkbd->translated ? "Translated" : "Raw", atkbd->set); atkbd_set_device_attrs() 1070 snprintf(atkbd->phys, sizeof(atkbd->phys), atkbd_set_device_attrs() 1071 "%s/input0", atkbd->ps2dev.serio->phys); atkbd_set_device_attrs() 1073 input_dev->name = atkbd->name; atkbd_set_device_attrs() 1074 input_dev->phys = atkbd->phys; atkbd_set_device_attrs() 1077 input_dev->id.product = atkbd->translated ? 1 : atkbd->set; atkbd_set_device_attrs() 1078 input_dev->id.version = atkbd->id; atkbd_set_device_attrs() 1080 input_dev->dev.parent = &atkbd->ps2dev.serio->dev; atkbd_set_device_attrs() 1082 input_set_drvdata(input_dev, atkbd); atkbd_set_device_attrs() 1087 if (atkbd->write) { atkbd_set_device_attrs() 1093 if (atkbd->extra) atkbd_set_device_attrs() 1098 if (!atkbd->softrepeat) { atkbd_set_device_attrs() 1103 input_dev->mscbit[0] = atkbd->softraw ? BIT_MASK(MSC_SCAN) : atkbd_set_device_attrs() 1106 if (atkbd->scroll) { atkbd_set_device_attrs() 1113 input_dev->keycode = atkbd->keycode; atkbd_set_device_attrs() 1118 if (atkbd->keycode[i] != KEY_RESERVED && atkbd_set_device_attrs() 1119 atkbd->keycode[i] != ATKBD_KEY_NULL && atkbd_set_device_attrs() 1120 atkbd->keycode[i] < ATKBD_SPECIAL) { atkbd_set_device_attrs() 1121 __set_bit(atkbd->keycode[i], input_dev->keybit); atkbd_set_device_attrs() 1135 struct atkbd *atkbd; atkbd_connect() local 1139 atkbd = kzalloc(sizeof(struct atkbd), GFP_KERNEL); atkbd_connect() 1141 if (!atkbd || !dev) atkbd_connect() 1144 atkbd->dev = dev; atkbd_connect() 1145 ps2_init(&atkbd->ps2dev, serio); atkbd_connect() 1146 INIT_DELAYED_WORK(&atkbd->event_work, atkbd_event_work); atkbd_connect() 1147 mutex_init(&atkbd->mutex); atkbd_connect() 1152 atkbd->translated = true; atkbd_connect() 1157 atkbd->write = true; atkbd_connect() 1161 atkbd->softraw = atkbd_softraw; atkbd_connect() 1162 atkbd->softrepeat = atkbd_softrepeat; atkbd_connect() 1163 atkbd->scroll = atkbd_scroll; atkbd_connect() 1165 if (atkbd->softrepeat) atkbd_connect() 1166 atkbd->softraw = true; atkbd_connect() 1168 serio_set_drvdata(serio, atkbd); atkbd_connect() 1174 if (atkbd->write) { atkbd_connect() 1176 if (atkbd_probe(atkbd)) { atkbd_connect() 1181 atkbd->set = atkbd_select_set(atkbd, atkbd_set, atkbd_extra); atkbd_connect() 1182 atkbd_reset_state(atkbd); atkbd_connect() 1185 atkbd->set = 2; atkbd_connect() 1186 atkbd->id = 0xab00; atkbd_connect() 1189 atkbd_set_keycode_table(atkbd); atkbd_connect() 1190 atkbd_set_device_attrs(atkbd); atkbd_connect() 1196 atkbd_enable(atkbd); atkbd_connect() 1198 atkbd_activate(atkbd); atkbd_connect() 1200 err = input_register_device(atkbd->dev); atkbd_connect() 1210 kfree(atkbd); atkbd_connect() 1221 struct atkbd *atkbd = serio_get_drvdata(serio); atkbd_reconnect() local 1225 if (!atkbd || !drv) { atkbd_reconnect() 1231 mutex_lock(&atkbd->mutex); atkbd_reconnect() 1233 atkbd_disable(atkbd); atkbd_reconnect() 1235 if (atkbd->write) { atkbd_reconnect() 1236 if (atkbd_probe(atkbd)) atkbd_reconnect() 1239 if (atkbd->set != atkbd_select_set(atkbd, atkbd->set, atkbd->extra)) atkbd_reconnect() 1249 atkbd_set_leds(atkbd); atkbd_reconnect() 1250 if (!atkbd->softrepeat) atkbd_reconnect() 1251 atkbd_set_repeat_rate(atkbd); atkbd_reconnect() 1259 atkbd->xl_bit = 0; atkbd_reconnect() 1260 atkbd->emul = 0; atkbd_reconnect() 1262 atkbd_enable(atkbd); atkbd_reconnect() 1263 if (atkbd->write) atkbd_reconnect() 1264 atkbd_activate(atkbd); atkbd_reconnect() 1269 mutex_unlock(&atkbd->mutex); atkbd_reconnect() 1299 .name = "atkbd", 1311 ssize_t (*handler)(struct atkbd *, char *)) atkbd_attr_show_helper() 1314 struct atkbd *atkbd = serio_get_drvdata(serio); atkbd_attr_show_helper() local 1316 return handler(atkbd, buf); atkbd_attr_show_helper() 1320 ssize_t (*handler)(struct atkbd *, const char *, size_t)) atkbd_attr_set_helper() 1323 struct atkbd *atkbd = serio_get_drvdata(serio); atkbd_attr_set_helper() local 1326 retval = mutex_lock_interruptible(&atkbd->mutex); atkbd_attr_set_helper() 1330 atkbd_disable(atkbd); atkbd_attr_set_helper() 1331 retval = handler(atkbd, buf, count); atkbd_attr_set_helper() 1332 atkbd_enable(atkbd); atkbd_attr_set_helper() 1334 mutex_unlock(&atkbd->mutex); atkbd_attr_set_helper() 1339 static ssize_t atkbd_show_extra(struct atkbd *atkbd, char *buf) atkbd_show_extra() argument 1341 return sprintf(buf, "%d\n", atkbd->extra ? 1 : 0); atkbd_show_extra() 1344 static ssize_t atkbd_set_extra(struct atkbd *atkbd, const char *buf, size_t count) atkbd_set_extra() argument 1352 if (!atkbd->write) atkbd_set_extra() 1362 if (atkbd->extra != value) { atkbd_set_extra() 1368 old_dev = atkbd->dev; atkbd_set_extra() 1369 old_extra = atkbd->extra; atkbd_set_extra() 1370 old_set = atkbd->set; atkbd_set_extra() 1376 atkbd->dev = new_dev; atkbd_set_extra() 1377 atkbd->set = atkbd_select_set(atkbd, atkbd->set, value); atkbd_set_extra() 1378 atkbd_reset_state(atkbd); atkbd_set_extra() 1379 atkbd_activate(atkbd); atkbd_set_extra() 1380 atkbd_set_keycode_table(atkbd); atkbd_set_extra() 1381 atkbd_set_device_attrs(atkbd); atkbd_set_extra() 1383 err = input_register_device(atkbd->dev); atkbd_set_extra() 1387 atkbd->dev = old_dev; atkbd_set_extra() 1388 atkbd->set = atkbd_select_set(atkbd, old_set, old_extra); atkbd_set_extra() 1389 atkbd_set_keycode_table(atkbd); atkbd_set_extra() 1390 atkbd_set_device_attrs(atkbd); atkbd_set_extra() 1400 static ssize_t atkbd_show_force_release(struct atkbd *atkbd, char *buf) atkbd_show_force_release() argument 1403 ATKBD_KEYMAP_SIZE, atkbd->force_release_mask); atkbd_show_force_release() 1411 static ssize_t atkbd_set_force_release(struct atkbd *atkbd, atkbd_set_force_release() argument 1422 memcpy(atkbd->force_release_mask, new_mask, sizeof(atkbd->force_release_mask)); atkbd_set_force_release() 1427 static ssize_t atkbd_show_scroll(struct atkbd *atkbd, char *buf) atkbd_show_scroll() argument 1429 return sprintf(buf, "%d\n", atkbd->scroll ? 1 : 0); atkbd_show_scroll() 1432 static ssize_t atkbd_set_scroll(struct atkbd *atkbd, const char *buf, size_t count) atkbd_set_scroll() argument 1446 if (atkbd->scroll != value) { atkbd_set_scroll() 1447 old_dev = atkbd->dev; atkbd_set_scroll() 1448 old_scroll = atkbd->scroll; atkbd_set_scroll() 1454 atkbd->dev = new_dev; atkbd_set_scroll() 1455 atkbd->scroll = value; atkbd_set_scroll() 1456 atkbd_set_keycode_table(atkbd); atkbd_set_scroll() 1457 atkbd_set_device_attrs(atkbd); atkbd_set_scroll() 1459 err = input_register_device(atkbd->dev); atkbd_set_scroll() 1463 atkbd->scroll = old_scroll; atkbd_set_scroll() 1464 atkbd->dev = old_dev; atkbd_set_scroll() 1465 atkbd_set_keycode_table(atkbd); atkbd_set_scroll() 1466 atkbd_set_device_attrs(atkbd); atkbd_set_scroll() 1475 static ssize_t atkbd_show_set(struct atkbd *atkbd, char *buf) atkbd_show_set() argument 1477 return sprintf(buf, "%d\n", atkbd->set); atkbd_show_set() 1480 static ssize_t atkbd_set_set(struct atkbd *atkbd, const char *buf, size_t count) atkbd_set_set() argument 1488 if (!atkbd->write) atkbd_set_set() 1498 if (atkbd->set != value) { atkbd_set_set() 1499 old_dev = atkbd->dev; atkbd_set_set() 1500 old_extra = atkbd->extra; atkbd_set_set() 1501 old_set = atkbd->set; atkbd_set_set() 1507 atkbd->dev = new_dev; atkbd_set_set() 1508 atkbd->set = atkbd_select_set(atkbd, value, atkbd->extra); atkbd_set_set() 1509 atkbd_reset_state(atkbd); atkbd_set_set() 1510 atkbd_activate(atkbd); atkbd_set_set() 1511 atkbd_set_keycode_table(atkbd); atkbd_set_set() 1512 atkbd_set_device_attrs(atkbd); atkbd_set_set() 1514 err = input_register_device(atkbd->dev); atkbd_set_set() 1518 atkbd->dev = old_dev; atkbd_set_set() 1519 atkbd->set = atkbd_select_set(atkbd, old_set, old_extra); atkbd_set_set() 1520 atkbd_set_keycode_table(atkbd); atkbd_set_set() 1521 atkbd_set_device_attrs(atkbd); atkbd_set_set() 1530 static ssize_t atkbd_show_softrepeat(struct atkbd *atkbd, char *buf) atkbd_show_softrepeat() argument 1532 return sprintf(buf, "%d\n", atkbd->softrepeat ? 1 : 0); atkbd_show_softrepeat() 1535 static ssize_t atkbd_set_softrepeat(struct atkbd *atkbd, const char *buf, size_t count) atkbd_set_softrepeat() argument 1542 if (!atkbd->write) atkbd_set_softrepeat() 1552 if (atkbd->softrepeat != value) { atkbd_set_softrepeat() 1553 old_dev = atkbd->dev; atkbd_set_softrepeat() 1554 old_softrepeat = atkbd->softrepeat; atkbd_set_softrepeat() 1555 old_softraw = atkbd->softraw; atkbd_set_softrepeat() 1561 atkbd->dev = new_dev; atkbd_set_softrepeat() 1562 atkbd->softrepeat = value; atkbd_set_softrepeat() 1563 if (atkbd->softrepeat) atkbd_set_softrepeat() 1564 atkbd->softraw = true; atkbd_set_softrepeat() 1565 atkbd_set_device_attrs(atkbd); atkbd_set_softrepeat() 1567 err = input_register_device(atkbd->dev); atkbd_set_softrepeat() 1571 atkbd->dev = old_dev; atkbd_set_softrepeat() 1572 atkbd->softrepeat = old_softrepeat; atkbd_set_softrepeat() 1573 atkbd->softraw = old_softraw; atkbd_set_softrepeat() 1574 atkbd_set_device_attrs(atkbd); atkbd_set_softrepeat() 1584 static ssize_t atkbd_show_softraw(struct atkbd *atkbd, char *buf) atkbd_show_softraw() argument 1586 return sprintf(buf, "%d\n", atkbd->softraw ? 1 : 0); atkbd_show_softraw() 1589 static ssize_t atkbd_set_softraw(struct atkbd *atkbd, const char *buf, size_t count) atkbd_set_softraw() argument 1603 if (atkbd->softraw != value) { atkbd_set_softraw() 1604 old_dev = atkbd->dev; atkbd_set_softraw() 1605 old_softraw = atkbd->softraw; atkbd_set_softraw() 1611 atkbd->dev = new_dev; atkbd_set_softraw() 1612 atkbd->softraw = value; atkbd_set_softraw() 1613 atkbd_set_device_attrs(atkbd); atkbd_set_softraw() 1615 err = input_register_device(atkbd->dev); atkbd_set_softraw() 1619 atkbd->dev = old_dev; atkbd_set_softraw() 1620 atkbd->softraw = old_softraw; atkbd_set_softraw() 1621 atkbd_set_device_attrs(atkbd); atkbd_set_softraw() 1630 static ssize_t atkbd_show_err_count(struct atkbd *atkbd, char *buf) atkbd_show_err_count() argument 1632 return sprintf(buf, "%lu\n", atkbd->err_count); atkbd_show_err_count()
|