summaryrefslogtreecommitdiffstats
path: root/sys/dev/atkbdc/atkbd.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/atkbdc/atkbd.c')
-rw-r--r--sys/dev/atkbdc/atkbd.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/sys/dev/atkbdc/atkbd.c b/sys/dev/atkbdc/atkbd.c
index 5a72ecb..2dc9877 100644
--- a/sys/dev/atkbdc/atkbd.c
+++ b/sys/dev/atkbdc/atkbd.c
@@ -1081,8 +1081,11 @@ probe_keyboard(KBDC kbdc, int flags)
return ENXIO;
}
+ /* temporarily block data transmission from the keyboard */
+ write_controller_command(kbdc, KBDC_DISABLE_KBD_PORT);
+
/* flush any noise in the buffer */
- empty_both_buffers(kbdc, 10);
+ empty_both_buffers(kbdc, 100);
/* save the current keyboard controller command byte */
m = kbdc_get_device_mask(kbdc) & ~KBD_KBD_CONTROL_BITS;
@@ -1108,9 +1111,8 @@ probe_keyboard(KBDC kbdc, int flags)
if (err == 0) {
kbdc_set_device_mask(kbdc, m | KBD_KBD_CONTROL_BITS);
} else {
- if (c != -1)
- /* try to restore the command byte as before */
- set_controller_command_byte(kbdc, 0xff, c);
+ /* try to restore the command byte as before */
+ set_controller_command_byte(kbdc, 0xff, c);
kbdc_set_device_mask(kbdc, m);
}
@@ -1130,6 +1132,9 @@ init_keyboard(KBDC kbdc, int *type, int flags)
return EIO;
}
+ /* temporarily block data transmission from the keyboard */
+ write_controller_command(kbdc, KBDC_DISABLE_KBD_PORT);
+
/* save the current controller command byte */
empty_both_buffers(kbdc, 200);
c = get_controller_command_byte(kbdc);
OpenPOWER on IntegriCloud