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.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/freebsd/sys/dev/kbd/kbd.c b/freebsd/sys/dev/kbd/kbd.c
index b157e57e..235e8f78 100644
--- a/freebsd/sys/dev/kbd/kbd.c
+++ b/freebsd/sys/dev/kbd/kbd.c
@@ -178,6 +178,10 @@ kbd_add_driver(keyboard_driver_t *driver)
{
if (SLIST_NEXT(driver, link))
return (EINVAL);
+ if (driver->kbdsw->get_fkeystr == NULL)
+ driver->kbdsw->get_fkeystr = genkbd_get_fkeystr;
+ if (driver->kbdsw->diag == NULL)
+ driver->kbdsw->diag = genkbd_diag;
SLIST_INSERT_HEAD(&keyboard_drivers, driver, link);
return (0);
}
@@ -1516,3 +1520,20 @@ kbd_ev_event(keyboard_t *kbd, uint16_t type, uint16_t code, int32_t value)
kbdd_ioctl(kbd, KDSETREPEAT, (caddr_t)delay);
}
}
+
+static void
+kbd_drv_init(void)
+{
+ const keyboard_driver_t **list;
+ const keyboard_driver_t *p;
+
+ SET_FOREACH(list, kbddriver_set) {
+ p = *list;
+ if (p->kbdsw->get_fkeystr == NULL)
+ p->kbdsw->get_fkeystr = genkbd_get_fkeystr;
+ if (p->kbdsw->diag == NULL)
+ p->kbdsw->diag = genkbd_diag;
+ }
+}
+
+SYSINIT(kbd_drv_init, SI_SUB_DRIVERS, SI_ORDER_FIRST, kbd_drv_init, NULL);