diff options
Diffstat (limited to 'drivers/input')
| -rw-r--r-- | drivers/input/i8042.c | 38 | 
1 files changed, 38 insertions, 0 deletions
| diff --git a/drivers/input/i8042.c b/drivers/input/i8042.c index 3a4c467c5..691aabf40 100644 --- a/drivers/input/i8042.c +++ b/drivers/input/i8042.c @@ -331,6 +331,44 @@ int __weak board_i8042_skip(void)  	return 0;  } +void i8042_flush(void) +{ +	int timeout; + +	/* +	 * The delay is to give the keyboard controller some time to fill the +	 * next byte. +	 */ +	while (1) { +		timeout = 100;  /* wait for no longer than 100us */ +		while (timeout > 0 && !(in8(I8042_STATUS_REG) & 0x01)) { +			udelay(1); +			timeout--; +		} + +		/* Try to pull next byte if not timeout. */ +		if (in8(I8042_STATUS_REG) & 0x01) +			in8(I8042_DATA_REG); +		else +			break; +	} +} + +int i8042_disable(void) +{ +	if (kbd_input_empty() == 0) +		return -1; + +	/* Disable keyboard */ +	out8(I8042_COMMAND_REG, 0xad); + +	if (kbd_input_empty() == 0) +		return -1; + +	return 0; +} + +  /*******************************************************************************   *   * i8042_kbd_init - reset keyboard and init state flags |