summaryrefslogtreecommitdiffstats
path: root/freebsd/sys/dev/kbd/kbd.c
diff options
context:
space:
mode:
Diffstat (limited to 'freebsd/sys/dev/kbd/kbd.c')
-rw-r--r--freebsd/sys/dev/kbd/kbd.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/freebsd/sys/dev/kbd/kbd.c b/freebsd/sys/dev/kbd/kbd.c
index c7512e89..b157e57e 100644
--- a/freebsd/sys/dev/kbd/kbd.c
+++ b/freebsd/sys/dev/kbd/kbd.c
@@ -49,6 +49,7 @@ __FBSDID("$FreeBSD$");
#include <sys/kbio.h>
+#include <dev/evdev/input-event-codes.h>
#include <dev/kbd/kbdreg.h>
#define KBD_INDEX(dev) dev2unit(dev)
@@ -1477,3 +1478,41 @@ genkbd_keyaction(keyboard_t *kbd, int keycode, int up, int *shiftstate,
}
/* NOT REACHED */
}
+
+void
+kbd_ev_event(keyboard_t *kbd, uint16_t type, uint16_t code, int32_t value)
+{
+ int delay[2], led = 0, leds, oleds;
+
+ if (type == EV_LED) {
+ leds = oleds = KBD_LED_VAL(kbd);
+ switch (code) {
+ case LED_CAPSL:
+ led = CLKED;
+ break;
+ case LED_NUML:
+ led = NLKED;
+ break;
+ case LED_SCROLLL:
+ led = SLKED;
+ break;
+ }
+
+ if (value)
+ leds |= led;
+ else
+ leds &= ~led;
+
+ if (leds != oleds)
+ kbdd_ioctl(kbd, KDSETLED, (caddr_t)&leds);
+
+ } else if (type == EV_REP && code == REP_DELAY) {
+ delay[0] = value;
+ delay[1] = kbd->kb_delay2;
+ kbdd_ioctl(kbd, KDSETREPEAT, (caddr_t)delay);
+ } else if (type == EV_REP && code == REP_PERIOD) {
+ delay[0] = kbd->kb_delay1;
+ delay[1] = value;
+ kbdd_ioctl(kbd, KDSETREPEAT, (caddr_t)delay);
+ }
+}