input: i8042: Provide feature to disable keyboard before booting kernel
The BIOS leaves the keyboard enabled during boot time so that any keystroke would interfere kernel driver initialization. Add a way to disable the keyboard to make sure no scancode will be generated during the boot time. Note that the keyboard will be re-enabled again after the kernel driver is up. This code can be called from the board functions. Signed-off-by: Louis Yung-Chieh Lo <yjlou@chromium.org> Signed-off-by: Louis Yung-Chieh Lo <yjlou@chromium.org> Signed-off-by: Simon Glass <sjg@chromium.org> Signed-off-by: Tom Rini <trini@ti.com>
This commit is contained in:
parent
48edb304d0
commit
45fe668f5f
|
@ -331,6 +331,44 @@ int __weak board_i8042_skip(void)
|
||||||
return 0;
|
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
|
* i8042_kbd_init - reset keyboard and init state flags
|
||||||
|
|
|
@ -75,6 +75,19 @@ enum {
|
||||||
|
|
||||||
/* exports */
|
/* exports */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Flush all buffer from keyboard controller to host.
|
||||||
|
*/
|
||||||
|
void i8042_flush(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disables the keyboard so that key strokes no longer generate scancodes to
|
||||||
|
* the host.
|
||||||
|
*
|
||||||
|
* @return 0 if ok, -1 if keyboard input was found while disabling
|
||||||
|
*/
|
||||||
|
int i8042_disable(void);
|
||||||
|
|
||||||
int i8042_kbd_init(void);
|
int i8042_kbd_init(void);
|
||||||
int i8042_tstc(void);
|
int i8042_tstc(void);
|
||||||
int i8042_getc(void);
|
int i8042_getc(void);
|
||||||
|
|
Loading…
Reference in New Issue