summaryrefslogtreecommitdiffstats
path: root/sys/i386/isa/pcvt/pcvt_drv.c
diff options
context:
space:
mode:
authoryokota <yokota@FreeBSD.org>1999-01-14 03:17:32 +0000
committeryokota <yokota@FreeBSD.org>1999-01-14 03:17:32 +0000
commitae17a9c668b2bf0a5b4603d66dccae88d98df959 (patch)
tree2214d069a9a077396d394d65c4f45676f20fc62e /sys/i386/isa/pcvt/pcvt_drv.c
parent1f25259af5cdfd3db005fa20e7bac96dcc9b4154 (diff)
downloadFreeBSD-src-ae17a9c668b2bf0a5b4603d66dccae88d98df959.zip
FreeBSD-src-ae17a9c668b2bf0a5b4603d66dccae88d98df959.tar.gz
Fix various breakage after the recent keyboard driver change.
- Don't try to set typematic rate if there is not a keyboard. - Fix wrong test on error code. - Don't try to claim the keyboard twice. The second call will fail.
Diffstat (limited to 'sys/i386/isa/pcvt/pcvt_drv.c')
-rw-r--r--sys/i386/isa/pcvt/pcvt_drv.c24
1 files changed, 12 insertions, 12 deletions
diff --git a/sys/i386/isa/pcvt/pcvt_drv.c b/sys/i386/isa/pcvt/pcvt_drv.c
index c4ed5a1..cb557e1 100644
--- a/sys/i386/isa/pcvt/pcvt_drv.c
+++ b/sys/i386/isa/pcvt/pcvt_drv.c
@@ -169,13 +169,12 @@ pcprobe(struct isa_device *dev)
#ifdef _DEV_KBD_KBDREG_H_
int i;
- kbd = NULL;
- kbd_configure(KB_CONF_PROBE_ONLY);
- i = kbd_allocate("*", -1, (void *)&kbd, pcevent, (void *)dev->id_unit);
- if ((i < 0) || ((kbd = kbd_get_keyboard(i)) == NULL))
- {
+ if (kbd == NULL) {
reset_keyboard = 0;
- return (-1);
+ kbd_configure(KB_CONF_PROBE_ONLY);
+ i = kbd_allocate("*", -1, (void *)&kbd, pcevent, (void *)dev->id_unit);
+ if ((i < 0) || ((kbd = kbd_get_keyboard(i)) == NULL))
+ return (-1);
}
reset_keyboard = 1; /* it's now safe to do kbd reset */
#endif /* _DEV_KBD_KBDREG_H_ */
@@ -898,6 +897,7 @@ pcevent(keyboard_t *thiskbd, int event, void *arg)
pcrint(unit);
return 0;
case KBDIO_UNLOADING:
+ reset_keyboard = 0;
kbd = NULL;
kbd_release(thiskbd, (void *)&kbd);
timeout(detect_kbd, (void *)unit, hz*4);
@@ -1182,17 +1182,17 @@ pccnprobe(struct consdev *cp)
}
#ifdef _DEV_KBD_KBDREG_H_
- kbd = NULL;
- kbd_configure(KB_CONF_PROBE_ONLY);
- i = kbd_allocate("*", -1, (void *)&kbd, pcevent, (void *)dvp->id_unit);
- if (i >= 0)
- kbd = kbd_get_keyboard(i);
-
/*
* Don't reset the keyboard via `kbdio' just yet.
* The system clock has not been calibrated...
*/
reset_keyboard = 0;
+ if (kbd == NULL) {
+ kbd_configure(KB_CONF_PROBE_ONLY);
+ i = kbd_allocate("*", -1, (void *)&kbd, pcevent, (void *)dvp->id_unit);
+ if (i >= 0)
+ kbd = kbd_get_keyboard(i);
+ }
#if PCVT_SCANSET == 2
/*
OpenPOWER on IntegriCloud