diff --git a/sys/dev/atkbdc/atkbd.c b/sys/dev/atkbdc/atkbd.c --- a/sys/dev/atkbdc/atkbd.c +++ b/sys/dev/atkbdc/atkbd.c @@ -445,6 +445,7 @@ } else { KBD_FOUND_DEVICE(kbd); } + atkbd_clear_state(kbd); state->ks_mode = K_XLATE; /* @@ -1256,7 +1257,8 @@ /* see if something is present */ write_kbd_command(kbdc, KBDC_ECHO); - if (read_kbd_data(kbdc) != KBD_ECHO) { + if (read_kbd_data(kbdc) != KBD_ACK || + read_kbd_data(kbdc) != KBD_ECHO) { empty_both_buffers(kbdc, 10); test_controller(kbdc); test_kbd_port(kbdc); @@ -1306,7 +1308,6 @@ kbdc_lock(kbdc, FALSE); return ENXIO; } - /* * The keyboard may have been screwed up by the boot block. * We may just be able to recover from error by testing the controller