From a68d00e3fed024f2b4e3d94064751315b0a9d453 Mon Sep 17 00:00:00 2001 From: Kazutaka YOKOTA Date: Sat, 11 Mar 2000 07:44:10 +0000 Subject: One more patch for the atkbd driver. It will make sure that the keyboard port and interrupt is enabled and the driver is attached even when the keyboard itself is not present when the system is booting. (This has been the behavior through out 2.X and 3.X, but is somehow broken in 4.0.) # I certainly don't recommend people to `hot-plug' the AT keyboard, # because the interface isn't designed for hot-plugging and such act # will often break the keyboard controller. But, so many people want to # do that anyway... Approved by: jkh --- sys/dev/atkbdc/atkbd.c | 12 ++++++++++++ sys/dev/kbd/atkbd.c | 12 ++++++++++++ 2 files changed, 24 insertions(+) (limited to 'sys/dev') diff --git a/sys/dev/atkbdc/atkbd.c b/sys/dev/atkbdc/atkbd.c index 2dc98779e5aec..549dc43e114d8 100644 --- a/sys/dev/atkbdc/atkbd.c +++ b/sys/dev/atkbdc/atkbd.c @@ -1108,6 +1108,17 @@ probe_keyboard(KBDC kbdc, int flags) test_kbd_port(kbdc); err = get_kbd_echo(kbdc); + + /* + * Even if the keyboard doesn't seem to be present (err != 0), + * we shall enable the keyboard port and interrupt so that + * the driver will be operable when the keyboard is attached + * to the system later. It is NOT recommended to hot-plug + * the AT keyboard, but many people do so... + */ + kbdc_set_device_mask(kbdc, m | KBD_KBD_CONTROL_BITS); + setup_kbd_port(kbdc, TRUE, TRUE); +#if 0 if (err == 0) { kbdc_set_device_mask(kbdc, m | KBD_KBD_CONTROL_BITS); } else { @@ -1115,6 +1126,7 @@ probe_keyboard(KBDC kbdc, int flags) set_controller_command_byte(kbdc, 0xff, c); kbdc_set_device_mask(kbdc, m); } +#endif kbdc_lock(kbdc, FALSE); return err; diff --git a/sys/dev/kbd/atkbd.c b/sys/dev/kbd/atkbd.c index 2dc98779e5aec..549dc43e114d8 100644 --- a/sys/dev/kbd/atkbd.c +++ b/sys/dev/kbd/atkbd.c @@ -1108,6 +1108,17 @@ probe_keyboard(KBDC kbdc, int flags) test_kbd_port(kbdc); err = get_kbd_echo(kbdc); + + /* + * Even if the keyboard doesn't seem to be present (err != 0), + * we shall enable the keyboard port and interrupt so that + * the driver will be operable when the keyboard is attached + * to the system later. It is NOT recommended to hot-plug + * the AT keyboard, but many people do so... + */ + kbdc_set_device_mask(kbdc, m | KBD_KBD_CONTROL_BITS); + setup_kbd_port(kbdc, TRUE, TRUE); +#if 0 if (err == 0) { kbdc_set_device_mask(kbdc, m | KBD_KBD_CONTROL_BITS); } else { @@ -1115,6 +1126,7 @@ probe_keyboard(KBDC kbdc, int flags) set_controller_command_byte(kbdc, 0xff, c); kbdc_set_device_mask(kbdc, m); } +#endif kbdc_lock(kbdc, FALSE); return err; -- cgit v1.3