Lines Matching defs:atkbd

199  * The atkbd control structure
202 struct atkbd {
245 static void (*atkbd_platform_fixup)(struct atkbd *, const void *data);
247 static unsigned int (*atkbd_platform_scancode_fixup)(struct atkbd *, unsigned int);
256 ssize_t (*handler)(struct atkbd *, char *));
258 ssize_t (*handler)(struct atkbd *, const char *, size_t));
260 static ssize_t atkbd_show_##_name(struct atkbd *, char *); \
261 static ssize_t atkbd_set_##_name(struct atkbd *, const char *, size_t); \
283 static ssize_t atkbd_show_##_name(struct atkbd *, char *); \
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 struct atkbd *atkbd_from_serio(struct serio *serio)
316 return container_of(ps2dev, struct atkbd, ps2dev);
324 struct atkbd *atkbd = atkbd_from_serio(serio);
327 !atkbd->vdata.num_function_row_keys)
368 static void atkbd_calculate_xl_bit(struct atkbd *atkbd, unsigned char code)
375 __clear_bit(i, &atkbd->xl_bit);
377 __set_bit(i, &atkbd->xl_bit);
387 static unsigned int atkbd_compat_scancode(struct atkbd *atkbd, unsigned int code)
389 if (atkbd->set == 3) {
390 if (atkbd->emul == 1)
394 if (atkbd->emul == 1)
409 struct atkbd *atkbd = container_of(ps2dev, struct atkbd, ps2dev);
414 !atkbd->resend && atkbd->write) {
417 atkbd->resend = true;
422 atkbd->resend = false;
445 struct atkbd *atkbd = container_of(ps2dev, struct atkbd, ps2dev);
446 struct input_dev *dev = atkbd->dev;
454 if (!atkbd->enabled)
460 code = atkbd_platform_scancode_fixup(atkbd, code);
462 if (atkbd->translated) {
464 if (atkbd->emul || atkbd_need_xlate(atkbd->xl_bit, code)) {
465 atkbd->release = code >> 7;
469 if (!atkbd->emul)
470 atkbd_calculate_xl_bit(atkbd, data);
475 atkbd->enabled = false;
476 serio_reconnect(atkbd->ps2dev.serio);
479 atkbd->emul = 1;
482 atkbd->emul = 2;
485 atkbd->release = true;
496 atkbd->err_count++;
502 code = atkbd_compat_scancode(atkbd, code);
504 if (atkbd->emul && --atkbd->emul)
507 keycode = atkbd->keycode[code];
509 if (!(atkbd->release && test_bit(code, atkbd->force_release_mask)))
519 atkbd->release ? "released" : "pressed",
520 atkbd->translated ? "translated" : "raw",
521 atkbd->set, code, serio->phys);
540 click = !atkbd->release;
549 if (atkbd->release) {
551 atkbd->last = 0;
552 } else if (!atkbd->softrepeat && test_bit(keycode, dev->key)) {
554 value = time_before(jiffies, atkbd->time) && atkbd->last == code ? 1 : 2;
557 atkbd->last = code;
558 atkbd->time = jiffies + msecs_to_jiffies(dev->rep[REP_DELAY]) / 2;
564 if (value && test_bit(code, atkbd->force_release_mask)) {
571 if (atkbd->scroll) {
575 atkbd->release ? -scroll : scroll);
580 atkbd->release = false;
583 static int atkbd_set_repeat_rate(struct atkbd *atkbd)
591 struct input_dev *dev = atkbd->dev;
604 return ps2_command(&atkbd->ps2dev, &param, ATKBD_CMD_SETREP);
607 static int atkbd_set_leds(struct atkbd *atkbd)
609 struct input_dev *dev = atkbd->dev;
615 if (ps2_command(&atkbd->ps2dev, param, ATKBD_CMD_SETLEDS))
618 if (atkbd->extra) {
625 if (ps2_command(&atkbd->ps2dev, param, ATKBD_CMD_EX_SETLEDS))
640 struct atkbd *atkbd = container_of(work, struct atkbd, event_work.work);
642 mutex_lock(&atkbd->mutex);
644 if (!atkbd->enabled) {
651 schedule_delayed_work(&atkbd->event_work,
654 if (test_and_clear_bit(ATKBD_LED_EVENT_BIT, &atkbd->event_mask))
655 atkbd_set_leds(atkbd);
657 if (test_and_clear_bit(ATKBD_REP_EVENT_BIT, &atkbd->event_mask))
658 atkbd_set_repeat_rate(atkbd);
661 mutex_unlock(&atkbd->mutex);
668 static void atkbd_schedule_event_work(struct atkbd *atkbd, int event_bit)
672 if (time_after(jiffies, atkbd->event_jiffies + delay))
675 atkbd->event_jiffies = jiffies;
676 set_bit(event_bit, &atkbd->event_mask);
678 schedule_delayed_work(&atkbd->event_work, delay);
690 struct atkbd *atkbd = input_get_drvdata(dev);
692 if (!atkbd->write)
698 atkbd_schedule_event_work(atkbd, ATKBD_LED_EVENT_BIT);
702 if (!atkbd->softrepeat)
703 atkbd_schedule_event_work(atkbd, ATKBD_REP_EVENT_BIT);
716 static inline void atkbd_enable(struct atkbd *atkbd)
718 serio_pause_rx(atkbd->ps2dev.serio);
719 atkbd->enabled = true;
720 serio_continue_rx(atkbd->ps2dev.serio);
728 static inline void atkbd_disable(struct atkbd *atkbd)
730 serio_pause_rx(atkbd->ps2dev.serio);
731 atkbd->enabled = false;
732 serio_continue_rx(atkbd->ps2dev.serio);
735 static int atkbd_activate(struct atkbd *atkbd)
737 struct ps2dev *ps2dev = &atkbd->ps2dev;
758 static void atkbd_deactivate(struct atkbd *atkbd)
760 struct ps2dev *ps2dev = &atkbd->ps2dev;
795 * 0xab83 id is ok in translated mode, only atkbd_select_set() checks atkbd->id
798 static bool atkbd_skip_getid(struct atkbd *atkbd)
800 return atkbd->translated && atkbd_is_portable_device();
803 static inline bool atkbd_skip_getid(struct atkbd *atkbd) { return false; }
810 static int atkbd_probe(struct atkbd *atkbd)
812 struct ps2dev *ps2dev = &atkbd->ps2dev;
827 if (atkbd_skip_getid(atkbd)) {
828 atkbd->id = 0xab83;
850 atkbd->id = 0xabba;
857 atkbd->id = (param[0] << 8) | param[1];
859 if (atkbd->id == 0xaca1 && atkbd->translated) {
871 atkbd_deactivate(atkbd);
882 static int atkbd_select_set(struct atkbd *atkbd, int target_set, int allow_extra)
884 struct ps2dev *ps2dev = &atkbd->ps2dev;
887 atkbd->extra = false;
894 if (atkbd->translated)
897 if (atkbd->id == 0xaca1) {
906 atkbd->extra = true;
920 atkbd->id = param[0] << 8 | param[1];
943 static int atkbd_reset_state(struct atkbd *atkbd)
945 struct ps2dev *ps2dev = &atkbd->ps2dev;
974 struct atkbd *atkbd = atkbd_from_serio(serio);
976 atkbd_disable(atkbd);
977 ps2_command(&atkbd->ps2dev, NULL, ATKBD_CMD_RESET_DEF);
987 struct atkbd *atkbd = atkbd_from_serio(serio);
989 atkbd_disable(atkbd);
991 input_unregister_device(atkbd->dev);
995 * Note that since atkbd->enabled is false event work will keep
999 cancel_delayed_work_sync(&atkbd->event_work);
1003 kfree(atkbd);
1009 static void atkbd_apply_forced_release_keylist(struct atkbd* atkbd,
1015 if (atkbd->set == 2)
1017 __set_bit(keys[i], atkbd->force_release_mask);
1076 static unsigned int atkbd_oqo_01plus_scancode_fixup(struct atkbd *atkbd,
1079 if (atkbd->translated && atkbd->emul == 1 &&
1081 atkbd->emul = 0;
1088 static int atkbd_get_keymap_from_fwnode(struct atkbd *atkbd)
1090 struct device *dev = &atkbd->ps2dev.serio->dev;
1110 memset(atkbd->keycode, 0, sizeof(atkbd->keycode));
1114 atkbd->keycode[scancode] = keycode;
1126 static void atkbd_set_keycode_table(struct atkbd *atkbd)
1128 struct device *dev = &atkbd->ps2dev.serio->dev;
1132 memset(atkbd->keycode, 0, sizeof(atkbd->keycode));
1133 bitmap_zero(atkbd->force_release_mask, ATKBD_KEYMAP_SIZE);
1135 if (!atkbd_get_keymap_from_fwnode(atkbd)) {
1137 } else if (atkbd->translated) {
1140 atkbd->keycode[i] = atkbd_set2_keycode[scancode];
1141 atkbd->keycode[i | 0x80] = atkbd_set2_keycode[scancode | 0x80];
1142 if (atkbd->scroll)
1145 atkbd->keycode[i | 0x80] = atkbd_scroll_keys[j].keycode;
1147 } else if (atkbd->set == 3) {
1148 memcpy(atkbd->keycode, atkbd_set3_keycode, sizeof(atkbd->keycode));
1150 memcpy(atkbd->keycode, atkbd_set2_keycode, sizeof(atkbd->keycode));
1152 if (atkbd->scroll)
1155 atkbd->keycode[scancode] = atkbd_scroll_keys[i].keycode;
1163 scancode = atkbd_compat_scancode(atkbd, ATKBD_RET_HANGEUL);
1164 atkbd->keycode[scancode] = KEY_HANGEUL;
1165 __set_bit(scancode, atkbd->force_release_mask);
1167 scancode = atkbd_compat_scancode(atkbd, ATKBD_RET_HANJA);
1168 atkbd->keycode[scancode] = KEY_HANJA;
1169 __set_bit(scancode, atkbd->force_release_mask);
1175 atkbd_platform_fixup(atkbd, atkbd_platform_fixup_data);
1182 static void atkbd_set_device_attrs(struct atkbd *atkbd)
1184 struct input_dev *input_dev = atkbd->dev;
1187 if (atkbd->extra)
1188 snprintf(atkbd->name, sizeof(atkbd->name),
1191 snprintf(atkbd->name, sizeof(atkbd->name),
1193 atkbd->translated ? "Translated" : "Raw", atkbd->set);
1195 snprintf(atkbd->phys, sizeof(atkbd->phys),
1196 "%s/input0", atkbd->ps2dev.serio->phys);
1198 input_dev->name = atkbd->name;
1199 input_dev->phys = atkbd->phys;
1202 input_dev->id.product = atkbd->translated ? 1 : atkbd->set;
1203 input_dev->id.version = atkbd->id;
1205 input_dev->dev.parent = &atkbd->ps2dev.serio->dev;
1207 input_set_drvdata(input_dev, atkbd);
1212 if (atkbd->write) {
1218 if (atkbd->extra)
1223 if (!atkbd->softrepeat) {
1228 input_dev->mscbit[0] = atkbd->softraw ? BIT_MASK(MSC_SCAN) :
1231 if (atkbd->scroll) {
1238 input_dev->keycode = atkbd->keycode;
1243 if (atkbd->keycode[i] != KEY_RESERVED &&
1244 atkbd->keycode[i] != ATKBD_KEY_NULL &&
1245 atkbd->keycode[i] < ATKBD_SPECIAL) {
1246 __set_bit(atkbd->keycode[i], input_dev->keybit);
1253 struct atkbd *atkbd = atkbd_from_serio(serio);
1261 atkbd->vdata.function_row_physmap,
1263 atkbd->vdata.num_function_row_keys = n;
1277 struct atkbd *atkbd;
1281 atkbd = kzalloc(sizeof(struct atkbd), GFP_KERNEL);
1283 if (!atkbd || !dev)
1286 atkbd->dev = dev;
1287 ps2_init(&atkbd->ps2dev, serio,
1289 INIT_DELAYED_WORK(&atkbd->event_work, atkbd_event_work);
1290 mutex_init(&atkbd->mutex);
1295 atkbd->translated = true;
1300 atkbd->write = true;
1304 atkbd->softraw = atkbd_softraw;
1305 atkbd->softrepeat = atkbd_softrepeat;
1306 atkbd->scroll = atkbd_scroll;
1308 if (atkbd->softrepeat)
1309 atkbd->softraw = true;
1311 serio_set_drvdata(serio, atkbd);
1317 if (atkbd->write) {
1319 if (atkbd_probe(atkbd)) {
1324 atkbd->set = atkbd_select_set(atkbd, atkbd_set, atkbd_extra);
1325 atkbd_reset_state(atkbd);
1328 atkbd->set = 2;
1329 atkbd->id = 0xab00;
1334 atkbd_set_keycode_table(atkbd);
1335 atkbd_set_device_attrs(atkbd);
1337 atkbd_enable(atkbd);
1339 atkbd_activate(atkbd);
1341 err = input_register_device(atkbd->dev);
1350 kfree(atkbd);
1361 struct atkbd *atkbd = atkbd_from_serio(serio);
1365 if (!atkbd || !drv) {
1371 mutex_lock(&atkbd->mutex);
1373 atkbd_disable(atkbd);
1375 if (atkbd->write) {
1376 if (atkbd_probe(atkbd))
1379 if (atkbd->set != atkbd_select_set(atkbd, atkbd->set, atkbd->extra))
1389 atkbd_set_leds(atkbd);
1390 if (!atkbd->softrepeat)
1391 atkbd_set_repeat_rate(atkbd);
1399 atkbd->xl_bit = 0;
1400 atkbd->emul = 0;
1402 atkbd_enable(atkbd);
1403 if (atkbd->write)
1404 atkbd_activate(atkbd);
1409 mutex_unlock(&atkbd->mutex);
1439 .name = "atkbd",
1452 ssize_t (*handler)(struct atkbd *, char *))
1455 struct atkbd *atkbd = atkbd_from_serio(serio);
1457 return handler(atkbd, buf);
1461 ssize_t (*handler)(struct atkbd *, const char *, size_t))
1464 struct atkbd *atkbd = atkbd_from_serio(serio);
1467 retval = mutex_lock_interruptible(&atkbd->mutex);
1471 atkbd_disable(atkbd);
1472 retval = handler(atkbd, buf, count);
1473 atkbd_enable(atkbd);
1475 mutex_unlock(&atkbd->mutex);
1480 static ssize_t atkbd_show_extra(struct atkbd *atkbd, char *buf)
1482 return sprintf(buf, "%d\n", atkbd->extra ? 1 : 0);
1485 static ssize_t atkbd_set_extra(struct atkbd *atkbd, const char *buf, size_t count)
1493 if (!atkbd->write)
1503 if (atkbd->extra != value) {
1509 old_dev = atkbd->dev;
1510 old_extra = atkbd->extra;
1511 old_set = atkbd->set;
1517 atkbd->dev = new_dev;
1518 atkbd->set = atkbd_select_set(atkbd, atkbd->set, value);
1519 atkbd_reset_state(atkbd);
1520 atkbd_activate(atkbd);
1521 atkbd_set_keycode_table(atkbd);
1522 atkbd_set_device_attrs(atkbd);
1524 err = input_register_device(atkbd->dev);
1528 atkbd->dev = old_dev;
1529 atkbd->set = atkbd_select_set(atkbd, old_set, old_extra);
1530 atkbd_set_keycode_table(atkbd);
1531 atkbd_set_device_attrs(atkbd);
1541 static ssize_t atkbd_show_force_release(struct atkbd *atkbd, char *buf)
1544 ATKBD_KEYMAP_SIZE, atkbd->force_release_mask);
1552 static ssize_t atkbd_set_force_release(struct atkbd *atkbd,
1563 memcpy(atkbd->force_release_mask, new_mask, sizeof(atkbd->force_release_mask));
1568 static ssize_t atkbd_show_scroll(struct atkbd *atkbd, char *buf)
1570 return sprintf(buf, "%d\n", atkbd->scroll ? 1 : 0);
1573 static ssize_t atkbd_set_scroll(struct atkbd *atkbd, const char *buf, size_t count)
1587 if (atkbd->scroll != value) {
1588 old_dev = atkbd->dev;
1589 old_scroll = atkbd->scroll;
1595 atkbd->dev = new_dev;
1596 atkbd->scroll = value;
1597 atkbd_set_keycode_table(atkbd);
1598 atkbd_set_device_attrs(atkbd);
1600 err = input_register_device(atkbd->dev);
1604 atkbd->scroll = old_scroll;
1605 atkbd->dev = old_dev;
1606 atkbd_set_keycode_table(atkbd);
1607 atkbd_set_device_attrs(atkbd);
1616 static ssize_t atkbd_show_set(struct atkbd *atkbd, char *buf)
1618 return sprintf(buf, "%d\n", atkbd->set);
1621 static ssize_t atkbd_set_set(struct atkbd *atkbd, const char *buf, size_t count)
1629 if (!atkbd->write)
1639 if (atkbd->set != value) {
1640 old_dev = atkbd->dev;
1641 old_extra = atkbd->extra;
1642 old_set = atkbd->set;
1648 atkbd->dev = new_dev;
1649 atkbd->set = atkbd_select_set(atkbd, value, atkbd->extra);
1650 atkbd_reset_state(atkbd);
1651 atkbd_activate(atkbd);
1652 atkbd_set_keycode_table(atkbd);
1653 atkbd_set_device_attrs(atkbd);
1655 err = input_register_device(atkbd->dev);
1659 atkbd->dev = old_dev;
1660 atkbd->set = atkbd_select_set(atkbd, old_set, old_extra);
1661 atkbd_set_keycode_table(atkbd);
1662 atkbd_set_device_attrs(atkbd);
1671 static ssize_t atkbd_show_softrepeat(struct atkbd *atkbd, char *buf)
1673 return sprintf(buf, "%d\n", atkbd->softrepeat ? 1 : 0);
1676 static ssize_t atkbd_set_softrepeat(struct atkbd *atkbd, const char *buf, size_t count)
1683 if (!atkbd->write)
1693 if (atkbd->softrepeat != value) {
1694 old_dev = atkbd->dev;
1695 old_softrepeat = atkbd->softrepeat;
1696 old_softraw = atkbd->softraw;
1702 atkbd->dev = new_dev;
1703 atkbd->softrepeat = value;
1704 if (atkbd->softrepeat)
1705 atkbd->softraw = true;
1706 atkbd_set_device_attrs(atkbd);
1708 err = input_register_device(atkbd->dev);
1712 atkbd->dev = old_dev;
1713 atkbd->softrepeat = old_softrepeat;
1714 atkbd->softraw = old_softraw;
1715 atkbd_set_device_attrs(atkbd);
1725 static ssize_t atkbd_show_softraw(struct atkbd *atkbd, char *buf)
1727 return sprintf(buf, "%d\n", atkbd->softraw ? 1 : 0);
1730 static ssize_t atkbd_set_softraw(struct atkbd *atkbd, const char *buf, size_t count)
1744 if (atkbd->softraw != value) {
1745 old_dev = atkbd->dev;
1746 old_softraw = atkbd->softraw;
1752 atkbd->dev = new_dev;
1753 atkbd->softraw = value;
1754 atkbd_set_device_attrs(atkbd);
1756 err = input_register_device(atkbd->dev);
1760 atkbd->dev = old_dev;
1761 atkbd->softraw = old_softraw;
1762 atkbd_set_device_attrs(atkbd);
1771 static ssize_t atkbd_show_err_count(struct atkbd *atkbd, char *buf)
1773 return sprintf(buf, "%lu\n", atkbd->err_count);