|
@@ -223,21 +223,26 @@ static int i8042_flush(void)
|
|
|
{
|
|
|
unsigned long flags;
|
|
|
unsigned char data, str;
|
|
|
- int i = 0;
|
|
|
+ int count = 0;
|
|
|
+ int retval = 0;
|
|
|
|
|
|
spin_lock_irqsave(&i8042_lock, flags);
|
|
|
|
|
|
- while (((str = i8042_read_status()) & I8042_STR_OBF) && (i < I8042_BUFFER_SIZE)) {
|
|
|
- udelay(50);
|
|
|
- data = i8042_read_data();
|
|
|
- i++;
|
|
|
- dbg("%02x <- i8042 (flush, %s)\n",
|
|
|
- data, str & I8042_STR_AUXDATA ? "aux" : "kbd");
|
|
|
+ while ((str = i8042_read_status()) & I8042_STR_OBF) {
|
|
|
+ if (count++ < I8042_BUFFER_SIZE) {
|
|
|
+ udelay(50);
|
|
|
+ data = i8042_read_data();
|
|
|
+ dbg("%02x <- i8042 (flush, %s)\n",
|
|
|
+ data, str & I8042_STR_AUXDATA ? "aux" : "kbd");
|
|
|
+ } else {
|
|
|
+ retval = -EIO;
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
spin_unlock_irqrestore(&i8042_lock, flags);
|
|
|
|
|
|
- return i;
|
|
|
+ return retval;
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -849,7 +854,7 @@ static int __init i8042_check_aux(void)
|
|
|
|
|
|
static int i8042_controller_check(void)
|
|
|
{
|
|
|
- if (i8042_flush() == I8042_BUFFER_SIZE) {
|
|
|
+ if (i8042_flush()) {
|
|
|
pr_err("No controller found\n");
|
|
|
return -ENODEV;
|
|
|
}
|