• Home
  • Raw
  • Download

Lines Matching +full:leds +full:- +full:trigger +full:- +full:pattern

1 // SPDX-License-Identifier: GPL-2.0
15 * 11-11-96: SAK should now work in the raw mode (Martin Mares)
18 * Merge with the m68k keyboard driver and split-off of the PC low-level
21 * 27-05-97: Added support for the Magic SysRq Key (Martin Mares)
22 * 30-07-98: Dead keys redone, aeb@cwi.nl.
23 * 21-08-02: Converted to input API, major cleanup. (Vojtech Pavlik)
38 #include <linux/leds.h>
116 255, ARRAY_SIZE(func_table) - 1, ARRAY_SIZE(fn_handler) - 1, NR_PAD - 1,
117 NR_DEAD - 1, 255, 3, NR_SHIFT - 1, 255, NR_ASCII - 1, NR_LOCK - 1,
118 255, NR_LOCK - 1, 255, NR_BRL - 1
140 static unsigned int ledstate = -1U; /* undefined */
179 d->error = input_get_keycode(handle->dev, &d->ke); in getkeycode_helper()
181 return d->error == 0; /* stop as soon as we successfully get one */ in getkeycode_helper()
192 .error = -ENODEV, in getkeycode()
206 d->error = input_set_keycode(handle->dev, &d->ke); in setkeycode_helper()
208 return d->error == 0; /* stop as soon as we successfully set one */ in setkeycode_helper()
219 .error = -ENODEV, in setkeycode()
237 struct input_dev *dev = handle->dev; in kd_sound_helper()
239 if (test_bit(EV_SND, dev->evbit)) { in kd_sound_helper()
240 if (test_bit(SND_TONE, dev->sndbit)) { in kd_sound_helper()
245 if (test_bit(SND_BELL, dev->sndbit)) in kd_sound_helper()
278 struct input_dev *dev = handle->dev; in kbd_rate_helper()
281 if (test_bit(EV_REP, dev->evbit)) { in kbd_rate_helper()
290 rpt[1].delay = dev->rep[REP_DELAY]; in kbd_rate_helper()
291 rpt[1].period = dev->rep[REP_PERIOD]; in kbd_rate_helper()
312 tty_insert_flip_char(&vc->port, ch, 0); in put_queue()
313 tty_schedule_flip(&vc->port); in put_queue()
319 tty_insert_flip_char(&vc->port, *cp, 0); in puts_queue()
322 tty_schedule_flip(&vc->port); in puts_queue()
336 * they produce ASCII, or they produce some user-assigned
338 * in utf-8 already.
368 * Called after returning from RAW mode or when changing consoles - recompute
430 if (kbd->kbdmode == VC_UNICODE) in handle_diacr()
434 if (c != -1) in handle_diacr()
447 if (kbd->kbdmode == VC_UNICODE) in fn_enter()
451 if (c != -1) in fn_enter()
488 struct tty_struct *tty = vc->port.tty; in fn_hold()
498 if (tty->stopped) in fn_hold()
513 * Bind this to Shift-NumLock if you work in application keypad mode
535 if (want_console != -1) in fn_dec_console()
538 for (i = cur - 1; i != cur; i--) { in fn_dec_console()
539 if (i == -1) in fn_dec_console()
540 i = MAX_NR_CONSOLES - 1; in fn_dec_console()
552 if (want_console != -1) in fn_inc_console()
566 tty_insert_flip_char(&vc->port, 0, TTY_BREAK); in fn_send_intr()
567 tty_schedule_flip(&vc->port); in fn_send_intr()
635 if ((kbd->kbdmode == VC_RAW || in k_spec()
636 kbd->kbdmode == VC_MEDIUMRAW || in k_spec()
637 kbd->kbdmode == VC_OFF) && in k_spec()
645 pr_err("k_lowercase was called - impossible\n"); in k_lowercase()
661 if (kbd->kbdmode == VC_UNICODE) in k_unicode()
665 if (c != -1) in k_unicode()
694 * Obsolete - for backwards compatibility only
718 '-', /* dead_stroke */ in k_dead()
768 static const char pad_chars[] = "0123456789+-*/\015,.?()#"; in k_pad()
847 shift_down[value]--; in k_shift()
858 if (kbd->kbdmode == VC_UNICODE) in k_shift()
890 value -= 10; in k_ascii()
918 if (!key_maps[kbd->lockstate ^ kbd->slockstate]) { in k_slock()
919 kbd->slockstate = 0; in k_slock()
930 MODULE_PARM_DESC(brl_nbchords, "Number of chords that produce a braille pattern (0 for dead chords)…
933 static void k_brlcommit(struct vc_data *vc, unsigned int pattern, char up_flag) in k_brlcommit() argument
939 k_deadunicode(vc, BRL_UC_ROW | pattern, up_flag); in k_brlcommit()
941 committed |= pattern; in k_brlcommit()
956 if (kbd->kbdmode != VC_UNICODE) { in k_brl()
971 pressed |= 1 << (value - 1); in k_brl()
981 pressed &= ~(1 << (value - 1)); in k_brl()
991 pressed &= ~(1 << (value - 1)); in k_brl()
998 struct led_trigger trigger; member
1004 struct kbd_led_trigger *trigger = in kbd_led_trigger_activate() local
1005 container_of(cdev->trigger, struct kbd_led_trigger, trigger); in kbd_led_trigger_activate()
1008 if (ledstate != -1U) in kbd_led_trigger_activate()
1009 led_trigger_event(&trigger->trigger, in kbd_led_trigger_activate()
1010 ledstate & trigger->mask ? in kbd_led_trigger_activate()
1018 .trigger = { \
1029 KBD_LED_TRIGGER(VC_SCROLLOCK, "kbd-scrolllock"),
1030 KBD_LED_TRIGGER(VC_NUMLOCK, "kbd-numlock"),
1031 KBD_LED_TRIGGER(VC_CAPSLOCK, "kbd-capslock"),
1032 KBD_LED_TRIGGER(VC_KANALOCK, "kbd-kanalock"),
1034 KBD_LOCKSTATE_TRIGGER(VC_SHIFTLOCK, "kbd-shiftlock"),
1035 KBD_LOCKSTATE_TRIGGER(VC_ALTGRLOCK, "kbd-altgrlock"),
1036 KBD_LOCKSTATE_TRIGGER(VC_CTRLLOCK, "kbd-ctrllock"),
1037 KBD_LOCKSTATE_TRIGGER(VC_ALTLOCK, "kbd-altlock"),
1038 KBD_LOCKSTATE_TRIGGER(VC_SHIFTLLOCK, "kbd-shiftllock"),
1039 KBD_LOCKSTATE_TRIGGER(VC_SHIFTRLOCK, "kbd-shiftrlock"),
1040 KBD_LOCKSTATE_TRIGGER(VC_CTRLLLOCK, "kbd-ctrlllock"),
1041 KBD_LOCKSTATE_TRIGGER(VC_CTRLRLOCK, "kbd-ctrlrlock"),
1047 struct kbd_led_trigger *trigger; in kbd_propagate_led_state() local
1052 trigger = &kbd_led_triggers[i]; in kbd_propagate_led_state()
1054 if (changed & trigger->mask) in kbd_propagate_led_state()
1055 led_trigger_event(&trigger->trigger, in kbd_propagate_led_state()
1056 new_state & trigger->mask ? in kbd_propagate_led_state()
1065 if (test_bit(EV_LED, handle->dev->evbit)) in kbd_update_leds_helper()
1077 error = led_trigger_register(&kbd_led_triggers[i].trigger); in kbd_init_leds()
1079 pr_err("error %d while registering trigger %s\n", in kbd_init_leds()
1080 error, kbd_led_triggers[i].trigger.name); in kbd_init_leds()
1088 unsigned int leds = *(unsigned int *)data; in kbd_update_leds_helper() local
1090 if (test_bit(EV_LED, handle->dev->evbit)) { in kbd_update_leds_helper()
1091 input_inject_event(handle, EV_LED, LED_SCROLLL, !!(leds & 0x01)); in kbd_update_leds_helper()
1092 input_inject_event(handle, EV_LED, LED_NUML, !!(leds & 0x02)); in kbd_update_leds_helper()
1093 input_inject_event(handle, EV_LED, LED_CAPSL, !!(leds & 0x04)); in kbd_update_leds_helper()
1114 * The leds display either (i) the status of NumLock, CapsLock, ScrollLock,
1115 * or (ii) whatever pattern of lights people want to show using KDSETLED,
1129 kb->ledmode = LED_SHOW_IOCTL; in setledstate()
1131 kb->ledmode = LED_SHOW_FLAGS; in setledstate()
1141 if (kb->ledmode == LED_SHOW_IOCTL) in getleds()
1144 return kb->ledflagstate; in getleds()
1148 * vt_get_leds - helper for braille console
1169 * vt_set_led_state - set LED state of a console
1171 * @leds: LED bits
1173 * Set the LEDs on a console. This is a wrapper for the VT layer
1176 void vt_set_led_state(int console, int leds) in vt_set_led_state() argument
1179 setledstate(kb, leds); in vt_set_led_state()
1183 * vt_kbd_con_start - Keyboard side of console start
1193 * but not during an -rc release!
1206 * vt_kbd_con_stop - Keyboard side of console stop
1223 * This is the tasklet that updates LED state of LEDs using standard
1230 unsigned int leds; in kbd_bh() local
1234 leds = getleds(); in kbd_bh()
1235 leds |= (unsigned int)kbd->lockstate << 8; in kbd_bh()
1238 if (leds != ledstate) { in kbd_bh()
1239 kbd_propagate_led_state(ledstate, leds); in kbd_bh()
1240 ledstate = leds; in kbd_bh()
1251 #define HW_RAW(dev) (test_bit(EV_MSC, dev->evbit) && test_bit(MSC_RAW, dev->mscbit) &&\
1252 … ((dev)->id.bustype == BUS_I8042) && ((dev)->id.vendor == 0x0001) && ((dev)->id.product == 0x0001))
1319 return -1; in emulate_raw()
1323 return -1; in emulate_raw()
1342 return -1; in emulate_raw()
1353 kbd = kbd_table + vc->vc_num; in kbd_rawcode()
1354 if (kbd->kbdmode == VC_RAW) in kbd_rawcode()
1369 tty = vc->port.tty; in kbd_keycode()
1371 if (tty && (!tty->driver_data)) { in kbd_keycode()
1373 tty->driver_data = vc; in kbd_keycode()
1376 kbd = kbd_table + vc->vc_num; in kbd_keycode()
1385 raw_mode = (kbd->kbdmode == VC_RAW); in kbd_keycode()
1399 if (kbd->kbdmode == VC_MEDIUMRAW) { in kbd_keycode()
1435 param.shift = shift_final = (shift_state | kbd->slockstate) ^ kbd->lockstate; in kbd_keycode()
1436 param.ledstate = kbd->ledflagstate; in kbd_keycode()
1445 kbd->slockstate = 0; in kbd_keycode()
1452 keysym = U(K(KT_BRL, keycode - KEY_BRL_DOT1 + 1)); in kbd_keycode()
1468 type -= 0xf0; in kbd_keycode()
1485 if ((raw_mode || kbd->kbdmode == VC_OFF) && type != KT_SPEC && type != KT_SHIFT) in kbd_keycode()
1490 param.ledstate = kbd->ledflagstate; in kbd_keycode()
1494 kbd->slockstate = 0; in kbd_keycode()
1503 if (event_type == EV_MSC && event_code == MSC_RAW && HW_RAW(handle->dev)) in kbd_event()
1506 kbd_keycode(event_code, value, HW_RAW(handle->dev)); in kbd_event()
1519 if (test_bit(EV_SND, dev->evbit)) in kbd_match()
1522 if (test_bit(EV_KEY, dev->evbit)) { in kbd_match()
1524 if (test_bit(i, dev->keybit)) in kbd_match()
1527 if (test_bit(i, dev->keybit)) in kbd_match()
1548 return -ENOMEM; in kbd_connect()
1550 handle->dev = dev; in kbd_connect()
1551 handle->handler = handler; in kbd_connect()
1552 handle->name = "kbd"; in kbd_connect()
1586 if (ledstate != -1U) in kbd_start()
1648 * vt_do_diacrit - diacritical table updates
1672 return -ENOMEM; in vt_do_diacrit()
1689 if (put_user(asize, &a->kb_cnt)) in vt_do_diacrit()
1690 ret = -EFAULT; in vt_do_diacrit()
1691 else if (copy_to_user(a->kbdiacr, dia, in vt_do_diacrit()
1693 ret = -EFAULT; in vt_do_diacrit()
1705 return -ENOMEM; in vt_do_diacrit()
1716 if (put_user(asize, &a->kb_cnt)) in vt_do_diacrit()
1717 ret = -EFAULT; in vt_do_diacrit()
1718 else if (copy_to_user(a->kbdiacruc, buf, in vt_do_diacrit()
1720 ret = -EFAULT; in vt_do_diacrit()
1733 return -EPERM; in vt_do_diacrit()
1734 if (get_user(ct, &a->kb_cnt)) in vt_do_diacrit()
1735 return -EFAULT; in vt_do_diacrit()
1737 return -EINVAL; in vt_do_diacrit()
1741 dia = memdup_user(a->kbdiacr, in vt_do_diacrit()
1770 return -EPERM; in vt_do_diacrit()
1772 if (get_user(ct, &a->kb_cnt)) in vt_do_diacrit()
1773 return -EFAULT; in vt_do_diacrit()
1776 return -EINVAL; in vt_do_diacrit()
1779 buf = memdup_user(a->kbdiacruc, in vt_do_diacrit()
1798 * vt_do_kdskbmode - set keyboard mode ioctl
1814 kb->kbdmode = VC_RAW; in vt_do_kdskbmode()
1817 kb->kbdmode = VC_MEDIUMRAW; in vt_do_kdskbmode()
1820 kb->kbdmode = VC_XLATE; in vt_do_kdskbmode()
1824 kb->kbdmode = VC_UNICODE; in vt_do_kdskbmode()
1828 kb->kbdmode = VC_OFF; in vt_do_kdskbmode()
1831 ret = -EINVAL; in vt_do_kdskbmode()
1838 * vt_do_kdskbmeta - set keyboard meta state
1860 ret = -EINVAL; in vt_do_kdskbmeta()
1873 return -EFAULT; in vt_do_kbkeycode_ioctl()
1878 kc = put_user(kc, &user_kbkc->keycode); in vt_do_kbkeycode_ioctl()
1882 return -EPERM; in vt_do_kbkeycode_ioctl()
1902 return -EFAULT; in vt_do_kdsk_ioctl()
1914 if (kb->kbdmode != VC_UNICODE && KTYP(val) >= NR_TYPES) in vt_do_kdsk_ioctl()
1919 return put_user(val, &user_kbe->kb_value); in vt_do_kdsk_ioctl()
1922 return -EPERM; in vt_do_kdsk_ioctl()
1931 keymap_count--; in vt_do_kdsk_ioctl()
1940 return -EINVAL; in vt_do_kdsk_ioctl()
1942 if (kb->kbdmode != VC_UNICODE) in vt_do_kdsk_ioctl()
1943 return -EINVAL; in vt_do_kdsk_ioctl()
1945 /* ++Geert: non-PC keyboards may generate keycode zero */ in vt_do_kdsk_ioctl()
1954 return -ENOMEM; in vt_do_kdsk_ioctl()
1964 return -EPERM; in vt_do_kdsk_ioctl()
1983 return -EPERM; in vt_do_kdsk_ioctl()
2015 ret = -ENOMEM; in vt_do_kdgkb_ioctl()
2021 ret = -EFAULT; in vt_do_kdgkb_ioctl()
2024 kbs->kb_string[sizeof(kbs->kb_string)-1] = '\0'; in vt_do_kdgkb_ioctl()
2025 i = kbs->kb_func; in vt_do_kdgkb_ioctl()
2030 ssize_t len = sizeof(user_kdgkb->kb_string); in vt_do_kdgkb_ioctl()
2033 len = strlcpy(kbs->kb_string, func_table[i] ? : "", len); in vt_do_kdgkb_ioctl()
2036 ret = copy_to_user(user_kdgkb->kb_string, kbs->kb_string, in vt_do_kdgkb_ioctl()
2037 len + 1) ? -EFAULT : 0; in vt_do_kdgkb_ioctl()
2043 ret = -EPERM; in vt_do_kdgkb_ioctl()
2055 first_free = funcbufptr + (funcbufsize - funcbufleft); in vt_do_kdgkb_ioctl()
2063 delta = (q ? -strlen(q) : 1) + strlen(kbs->kb_string); in vt_do_kdgkb_ioctl()
2068 memmove(fj + delta, fj, first_free - fj); in vt_do_kdgkb_ioctl()
2075 funcbufleft -= delta; in vt_do_kdgkb_ioctl()
2078 while (sz < funcbufsize - funcbufleft + delta) in vt_do_kdgkb_ioctl()
2086 ret = -ENOMEM; in vt_do_kdgkb_ioctl()
2096 memmove(fnw, funcbufptr, fj - funcbufptr); in vt_do_kdgkb_ioctl()
2099 func_table[k] = fnw + (func_table[k] - funcbufptr); in vt_do_kdgkb_ioctl()
2103 memmove(fnw + (fj - funcbufptr) + delta, fj, first_free - fj); in vt_do_kdgkb_ioctl()
2106 func_table[k] = fnw + (func_table[k] - funcbufptr) + delta; in vt_do_kdgkb_ioctl()
2111 funcbufleft = funcbufleft - delta + sz - funcbufsize; in vt_do_kdgkb_ioctl()
2115 strcpy(func_table[i], kbs->kb_string); in vt_do_kdgkb_ioctl()
2132 /* the ioctls below read/set the flags usually shown in the leds */ in vt_do_kdskled()
2133 /* don't use them - they will go away without warning */ in vt_do_kdskled()
2136 ucval = kb->ledflagstate | (kb->default_ledflagstate << 4); in vt_do_kdskled()
2142 return -EPERM; in vt_do_kdskled()
2144 return -EINVAL; in vt_do_kdskled()
2146 kb->ledflagstate = (arg & 7); in vt_do_kdskled()
2147 kb->default_ledflagstate = ((arg >> 4) & 7); in vt_do_kdskled()
2160 return -EPERM; in vt_do_kdskled()
2164 return -ENOIOCTLCMD; in vt_do_kdskled()
2171 switch (kb->kbdmode) { in vt_do_kdgkbmode()
2186 * vt_do_kdgkbmeta - report meta status
2199 * vt_reset_unicode - reset the unicode status
2214 * vt_get_shiftstate - shift bit state
2226 * vt_reset_keyboard - reset keyboard state
2242 kb->lockstate = 0; in vt_reset_keyboard()
2243 kb->slockstate = 0; in vt_reset_keyboard()
2245 kb->ledmode = LED_SHOW_FLAGS; in vt_reset_keyboard()
2246 kb->ledflagstate = kb->default_ledflagstate; in vt_reset_keyboard()
2254 * vt_get_kbd_mode_bit - read keyboard status bits
2269 * vt_set_kbd_mode_bit - read keyboard status bits
2288 * vt_clr_kbd_mode_bit - read keyboard status bits