summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/input/i8042.c9
-rw-r--r--include/i8042.h6
2 files changed, 9 insertions, 6 deletions
diff --git a/drivers/input/i8042.c b/drivers/input/i8042.c
index c3bc536..6839c6b 100644
--- a/drivers/input/i8042.c
+++ b/drivers/input/i8042.c
@@ -607,11 +607,10 @@ static void kbd_led_set(void)
static int kbd_input_empty(void)
{
- int kbdTimeout = KBD_TIMEOUT;
+ int kbdTimeout = KBD_TIMEOUT * 1000;
- /* wait for input buf empty */
- while ((in8(I8042_STATUS_REG) & 0x02) && kbdTimeout--)
- udelay(1000);
+ while ((in8(I8042_STATUS_REG) & I8042_STATUS_IN_DATA) && kbdTimeout--)
+ udelay(1);
return kbdTimeout != -1;
}
@@ -625,8 +624,6 @@ static int kbd_reset(void)
out8(I8042_DATA_REG, 0xff);
- udelay(250000);
-
if (kbd_input_empty() == 0)
return -1;
diff --git a/include/i8042.h b/include/i8042.h
index 1395289..aeb3f09 100644
--- a/include/i8042.h
+++ b/include/i8042.h
@@ -39,6 +39,12 @@
#define I8042_STATUS_REG (CONFIG_SYS_ISA_IO + 0x0064) /* keyboard status read */
#define I8042_COMMAND_REG (CONFIG_SYS_ISA_IO + 0x0064) /* keyboard ctrl write */
+enum {
+ /* Output register (I8042_DATA_REG) has data for system */
+ I8042_STATUS_OUT_DATA = 1 << 0,
+ I8042_STATUS_IN_DATA = 1 << 1,
+};
+
#define KBD_US 0 /* default US layout */
#define KBD_GER 1 /* german layout */