summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Georgi <patrick.georgi@secunet.com>2011-11-10 15:48:37 +0100
committerStefan Reinauer <stefan.reinauer@coreboot.org>2011-11-10 17:51:53 +0100
commit583abc2eb2f1942fa8384c7e9fcfa830322b4c3b (patch)
tree77aa73537fff0cc7bfabc2a3221ca4d568172c58
parentf5e102d8103982349d1300e50dbce88bf697de9d (diff)
libpayload: Fix handling of CAPS LOCK key on PS/2 keyboards
The PS/2 keyboard driver set and reset the caps LED to show the keyboard status. Unfortunately, that configuration happens over the same path used to transmit keypresses. In face of certain error conditions, the keyboard stopped working. This change makes keyboard handling more robust. Change-Id: I0489a9983ea7dab00357220e09398dd1a8538839 Signed-off-by: Patrick Georgi <patrick.georgi@secunet.com> Reviewed-on: http://review.coreboot.org/430 Tested-by: build bot (Jenkins) Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
-rw-r--r--payloads/libpayload/drivers/keyboard.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/payloads/libpayload/drivers/keyboard.c b/payloads/libpayload/drivers/keyboard.c
index 0663f47bc6..717ee5541c 100644
--- a/payloads/libpayload/drivers/keyboard.c
+++ b/payloads/libpayload/drivers/keyboard.c
@@ -166,11 +166,13 @@ static struct layout_maps keyboard_layouts[] = {
static void keyboard_cmd(unsigned char cmd, unsigned char val)
{
+ while (inb(0x64) & 2);
outb(cmd, 0x60);
- /* wait until keyboard controller accepts cmds: */
+ mdelay(20);
+
while (inb(0x64) & 2);
outb(val, 0x60);
- while (inb(0x64) & 2);
+ mdelay(20);
}
int keyboard_havechar(void)