summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/dev/atkbdc/atkbd_atkbdc.c14
-rw-r--r--sys/dev/atkbdc/atkbd_isa.c14
-rw-r--r--sys/dev/usb/ukbd.c15
-rw-r--r--sys/isa/atkbd_isa.c14
4 files changed, 56 insertions, 1 deletions
diff --git a/sys/dev/atkbdc/atkbd_atkbdc.c b/sys/dev/atkbdc/atkbd_atkbdc.c
index 65f0b23..1941612 100644
--- a/sys/dev/atkbdc/atkbd_atkbdc.c
+++ b/sys/dev/atkbdc/atkbd_atkbdc.c
@@ -53,11 +53,13 @@ devclass_t atkbd_devclass;
static int atkbdprobe(device_t dev);
static int atkbdattach(device_t dev);
+static int atkbdresume(device_t dev);
static void atkbd_isa_intr(void *arg);
static device_method_t atkbd_methods[] = {
DEVMETHOD(device_probe, atkbdprobe),
DEVMETHOD(device_attach, atkbdattach),
+ DEVMETHOD(device_resume, atkbdresume),
{ 0, 0 }
};
@@ -116,6 +118,18 @@ atkbdattach(device_t dev)
return 0;
}
+static int
+atkbdresume(device_t dev)
+{
+ keyboard_t *kbd;
+
+ kbd = kbd_get_keyboard(kbd_find_keyboard(ATKBD_DRIVER_NAME,
+ device_get_unit(dev)));
+ if (kbd)
+ (*kbdsw[kbd->kb_index]->clear_state)(kbd);
+ return 0;
+}
+
static void
atkbd_isa_intr(void *arg)
{
diff --git a/sys/dev/atkbdc/atkbd_isa.c b/sys/dev/atkbdc/atkbd_isa.c
index 65f0b23..1941612 100644
--- a/sys/dev/atkbdc/atkbd_isa.c
+++ b/sys/dev/atkbdc/atkbd_isa.c
@@ -53,11 +53,13 @@ devclass_t atkbd_devclass;
static int atkbdprobe(device_t dev);
static int atkbdattach(device_t dev);
+static int atkbdresume(device_t dev);
static void atkbd_isa_intr(void *arg);
static device_method_t atkbd_methods[] = {
DEVMETHOD(device_probe, atkbdprobe),
DEVMETHOD(device_attach, atkbdattach),
+ DEVMETHOD(device_resume, atkbdresume),
{ 0, 0 }
};
@@ -116,6 +118,18 @@ atkbdattach(device_t dev)
return 0;
}
+static int
+atkbdresume(device_t dev)
+{
+ keyboard_t *kbd;
+
+ kbd = kbd_get_keyboard(kbd_find_keyboard(ATKBD_DRIVER_NAME,
+ device_get_unit(dev)));
+ if (kbd)
+ (*kbdsw[kbd->kb_index]->clear_state)(kbd);
+ return 0;
+}
+
static void
atkbd_isa_intr(void *arg)
{
diff --git a/sys/dev/usb/ukbd.c b/sys/dev/usb/ukbd.c
index 9f3143a..b127b8a 100644
--- a/sys/dev/usb/ukbd.c
+++ b/sys/dev/usb/ukbd.c
@@ -113,10 +113,11 @@ typedef struct ukbd_softc {
typedef void usbd_intr_t(usbd_xfer_handle, usbd_private_handle, usbd_status);
typedef void usbd_disco_t(void *);
+Static int ukbd_resume(device_t self);
Static usbd_intr_t ukbd_intr;
Static int ukbd_driver_load(module_t mod, int what, void *arg);
-USB_DECLARE_DRIVER(ukbd);
+USB_DECLARE_DRIVER_INIT(ukbd, DEVMETHOD(device_resume, ukbd_resume));
USB_MATCH(ukbd)
{
@@ -207,6 +208,18 @@ ukbd_detach(device_t self)
return (0);
}
+Static int
+ukbd_resume(device_t self)
+{
+ keyboard_t *kbd;
+
+ kbd = kbd_get_keyboard(kbd_find_keyboard(DRIVER_NAME,
+ device_get_unit(self)));
+ if (kbd)
+ (*kbdsw[kbd->kb_index]->clear_state)(kbd);
+ return (0);
+}
+
void
ukbd_intr(usbd_xfer_handle xfer, usbd_private_handle addr, usbd_status status)
{
diff --git a/sys/isa/atkbd_isa.c b/sys/isa/atkbd_isa.c
index 65f0b23..1941612 100644
--- a/sys/isa/atkbd_isa.c
+++ b/sys/isa/atkbd_isa.c
@@ -53,11 +53,13 @@ devclass_t atkbd_devclass;
static int atkbdprobe(device_t dev);
static int atkbdattach(device_t dev);
+static int atkbdresume(device_t dev);
static void atkbd_isa_intr(void *arg);
static device_method_t atkbd_methods[] = {
DEVMETHOD(device_probe, atkbdprobe),
DEVMETHOD(device_attach, atkbdattach),
+ DEVMETHOD(device_resume, atkbdresume),
{ 0, 0 }
};
@@ -116,6 +118,18 @@ atkbdattach(device_t dev)
return 0;
}
+static int
+atkbdresume(device_t dev)
+{
+ keyboard_t *kbd;
+
+ kbd = kbd_get_keyboard(kbd_find_keyboard(ATKBD_DRIVER_NAME,
+ device_get_unit(dev)));
+ if (kbd)
+ (*kbdsw[kbd->kb_index]->clear_state)(kbd);
+ return 0;
+}
+
static void
atkbd_isa_intr(void *arg)
{
OpenPOWER on IntegriCloud