summaryrefslogtreecommitdiff
path: root/src/kbd.c
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2009-01-17 23:30:01 -0500
committerKevin O'Connor <kevin@koconnor.net>2009-01-17 23:30:01 -0500
commitb44a852635ef148b5057bc5ca9f37cd29b8a379c (patch)
treec3d8526233ac4c0fcff90222da8eeb238f8449d6 /src/kbd.c
parent0d9e673292d7511631da4568f5513b9be02c9e60 (diff)
downloadqemu-seabios-b44a852635ef148b5057bc5ca9f37cd29b8a379c.tar.gz
Cleanup keyboard reset handling.
Use custom timeouts when issuing a reset. Handle 1-byte returns from reset in ps2 code. Do full keyboard reset even in coreboot mode. Send set scan mode command during reset.
Diffstat (limited to 'src/kbd.c')
-rw-r--r--src/kbd.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/src/kbd.c b/src/kbd.c
index e976350..04f3ff3 100644
--- a/src/kbd.c
+++ b/src/kbd.c
@@ -15,10 +15,6 @@
static void
keyboard_init()
{
- if (CONFIG_COREBOOT)
- // Coreboot already does low-level keyboard init.
- goto end;
-
/* flush incoming keys */
int ret = i8042_flush();
if (ret)
@@ -55,7 +51,7 @@ keyboard_init()
/* ------------------- keyboard side ------------------------*/
/* reset keyboard and self test (keyboard side) */
ret = kbd_command(ATKBD_CMD_RESET_BAT, param);
- if (ret != 0 && ret != 2)
+ if (ret)
return;
if (param[0] != 0xaa) {
dprintf(1, "keyboard self test failed (got %x not 0xaa)\n", param[0]);
@@ -67,7 +63,12 @@ keyboard_init()
if (ret)
return;
-end:
+ // Set scancode command (mode 2)
+ param[0] = 0x02;
+ ret = kbd_command(ATKBD_CMD_SSCANSET, param);
+ if (ret)
+ return;
+
// Keyboard Mode: scan code convert, disable mouse, enable IRQ 1
SET_EBDA(ps2ctr, I8042_CTR_AUXDIS | I8042_CTR_XLATE | I8042_CTR_KBDINT);