aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKazutaka YOKOTA <yokota@FreeBSD.org>2001-09-23 08:42:06 +0000
committerKazutaka YOKOTA <yokota@FreeBSD.org>2001-09-23 08:42:06 +0000
commit275658afcc2bbbcd3b4fe29a1768350606584f8f (patch)
tree94f5542a18dfe503cd56fc3fbd8473d83dcdee7d
parent5d78522dd4edc9ac0f695a316abc6c83f47143cd (diff)
downloadsrc-275658afcc2bbbcd3b4fe29a1768350606584f8f.tar.gz
src-275658afcc2bbbcd3b4fe29a1768350606584f8f.zip
Reinitialize the keyboard after the ACPI resume event.
I am not sure if this is absolutely necessary on all systems. Yet, there certainly are motherboards and notebook systems which require this, although there are other systems which just don't. I hope we shall know when to do this on which systems, as the development of our ACPI subsystem progresses... (I know we didn't need this for the APM resume.)
Notes
Notes: svn path=/head/; revision=83855
-rw-r--r--sys/dev/atkbdc/atkbd_atkbdc.c11
-rw-r--r--sys/dev/atkbdc/atkbd_isa.c11
-rw-r--r--sys/isa/atkbd_isa.c11
3 files changed, 30 insertions, 3 deletions
diff --git a/sys/dev/atkbdc/atkbd_atkbdc.c b/sys/dev/atkbdc/atkbd_atkbdc.c
index 5300d2f9f962..0e505dad7721 100644
--- a/sys/dev/atkbdc/atkbd_atkbdc.c
+++ b/sys/dev/atkbdc/atkbd_atkbdc.c
@@ -148,12 +148,21 @@ atkbdattach(device_t dev)
static int
atkbdresume(device_t dev)
{
+ atkbd_softc_t *sc;
keyboard_t *kbd;
+ int args[2];
+ sc = device_get_softc(dev);
kbd = kbd_get_keyboard(kbd_find_keyboard(ATKBD_DRIVER_NAME,
device_get_unit(dev)));
- if (kbd)
+ if (kbd) {
+ kbd->kb_flags &= ~KB_INITIALIZED;
+ args[0] = device_get_unit(device_get_parent(dev));
+ args[1] = rman_get_start(sc->intr);
+ (*kbdsw[kbd->kb_index]->init)(device_get_unit(dev), &kbd,
+ args, device_get_flags(dev));
(*kbdsw[kbd->kb_index]->clear_state)(kbd);
+ }
return 0;
}
diff --git a/sys/dev/atkbdc/atkbd_isa.c b/sys/dev/atkbdc/atkbd_isa.c
index 5300d2f9f962..0e505dad7721 100644
--- a/sys/dev/atkbdc/atkbd_isa.c
+++ b/sys/dev/atkbdc/atkbd_isa.c
@@ -148,12 +148,21 @@ atkbdattach(device_t dev)
static int
atkbdresume(device_t dev)
{
+ atkbd_softc_t *sc;
keyboard_t *kbd;
+ int args[2];
+ sc = device_get_softc(dev);
kbd = kbd_get_keyboard(kbd_find_keyboard(ATKBD_DRIVER_NAME,
device_get_unit(dev)));
- if (kbd)
+ if (kbd) {
+ kbd->kb_flags &= ~KB_INITIALIZED;
+ args[0] = device_get_unit(device_get_parent(dev));
+ args[1] = rman_get_start(sc->intr);
+ (*kbdsw[kbd->kb_index]->init)(device_get_unit(dev), &kbd,
+ args, device_get_flags(dev));
(*kbdsw[kbd->kb_index]->clear_state)(kbd);
+ }
return 0;
}
diff --git a/sys/isa/atkbd_isa.c b/sys/isa/atkbd_isa.c
index 5300d2f9f962..0e505dad7721 100644
--- a/sys/isa/atkbd_isa.c
+++ b/sys/isa/atkbd_isa.c
@@ -148,12 +148,21 @@ atkbdattach(device_t dev)
static int
atkbdresume(device_t dev)
{
+ atkbd_softc_t *sc;
keyboard_t *kbd;
+ int args[2];
+ sc = device_get_softc(dev);
kbd = kbd_get_keyboard(kbd_find_keyboard(ATKBD_DRIVER_NAME,
device_get_unit(dev)));
- if (kbd)
+ if (kbd) {
+ kbd->kb_flags &= ~KB_INITIALIZED;
+ args[0] = device_get_unit(device_get_parent(dev));
+ args[1] = rman_get_start(sc->intr);
+ (*kbdsw[kbd->kb_index]->init)(device_get_unit(dev), &kbd,
+ args, device_get_flags(dev));
(*kbdsw[kbd->kb_index]->clear_state)(kbd);
+ }
return 0;
}