x86: i8042: Remove unused codes
Subsystems (3)
PATCH v3 1/7 x86: i8042: Remove unused codes
Remove unused CONFIG_USE_CPCIDVI wrapped codes.
---
Changes in v3:
- Keep i8042_flush(), i8042_disable() and board_i8042_skip()
Changes in v2:
- Split the removing of unused codes into this patch
drivers/input/i8042.c | 17 ----------------- 1 file changed, 17 deletions(-)
drivers/input/i8042.c +0 -17
@@ -10,16 +10,6 @@/* includes */ #include <common.h> -#include <linux/compiler.h> - -#ifdef CONFIG_USE_CPCIDVI -extern u8 gt_cpcidvi_in8 (u32 offset); -extern void gt_cpcidvi_out8 (u32 offset,u8 data); - -#define in8 (a) gt_cpcidvi_in8(a) -#define out8 (a, b) gt_cpcidvi_out8(a, b) -#endif -#include <i8042.h> /* defines */
@@ -365,13 +355,6 @@ int i8042_kbd_init(void)if (!kbd_controller_present () ||board_i8042_skip ())return -1 ; -#ifdef CONFIG_USE_CPCIDVI - penv =getenv ("console" ); -if (penv !=NULL ) { -if (strncmp (penv,"serial" ,7 ) ==0 ) -return -1 ; - } -#endif /* Init keyboard device (default US layout) */ keymap =KBD_US ; penv =getenv ("keymap" );
Signature · 1 line
1.8.2.1
PATCH v3 2/7 x86: i8042: Reorder static functions
Reorder those static function so that their declarations can be removed.
---
Changes in v3: None
Changes in v2:
- Split of reordering static functions into this patch
drivers/input/i8042.c | 490 +++++++++++++++++++++++--------------------------- 1 file changed, 222 insertions(+), 268 deletions(-)
drivers/input/i8042.c +222 -268
@@ -27,18 +27,6 @@ static int kbd_mapping = KBD_US; /* default US keyboard */static int kbd_flags =NORMAL ;/* after reset */ static int kbd_state;/* unshift code */ -static void kbd_conv_char (unsigned char scan_code); -static void kbd_led_set (void ); -static void kbd_normal (unsigned char scan_code); -static void kbd_shift (unsigned char scan_code); -static void kbd_ctrl (unsigned char scan_code); -static void kbd_num (unsigned char scan_code); -static void kbd_caps (unsigned char scan_code); -static void kbd_scroll (unsigned char scan_code); -static void kbd_alt (unsigned char scan_code); -static int kbd_input_empty (void ); -static int kbd_reset (void ); -static unsigned char kbd_fct_map[144 ] = {/* kbd_fct_map table for scan code */ 0 ,AS ,AS ,AS ,AS ,AS ,AS ,AS ,/* scan 0- 7 */
@@ -288,8 +276,230 @@ static unsigned char ext_key_map[] = {0x00 /* map end */ }; +static int kbd_input_empty (void ) +{ +int kbdTimeout =KBD_TIMEOUT *1000 ; + +while ((in8 (I8042_STATUS_REG ) &I8042_STATUS_IN_DATA ) && kbdTimeout--) +udelay (1 ); + +return kbdTimeout !=-1 ; +} + +static int wait_until_kbd_output_full (void ) +{ +int kbdTimeout =KBD_TIMEOUT *1000 ; + +while (((in8 (I8042_STATUS_REG ) &0x01 ) ==0 ) && kbdTimeout--) +udelay (1 ); + +return kbdTimeout !=-1 ; +} + +static void kbd_led_set (void ) +{ +kbd_input_empty (); +out8 (I8042_DATA_REG ,0xed );/* SET LED command */ +kbd_input_empty (); +out8 (I8042_DATA_REG , (kbd_flags &0x7 ));/* LED bits only */ +} + +static void kbd_normal (unsigned char scan_code) +{ +unsigned char chr; + +if ((kbd_flags &BRK ) ==NORMAL ) { + chr = kbd_key_map[kbd_mapping][kbd_state][scan_code]; +if ((chr ==0xff ) || (chr ==0x00 )) +return ; + +/* if caps lock convert upper to lower */ +if (((kbd_flags &CAPS ) ==CAPS ) && + (chr >='a' && chr <='z' )) { + chr -='a' -'A' ; + } + kbd_input = chr; + } +} + +static void kbd_shift (unsigned char scan_code) +{ +if ((kbd_flags &BRK ) ==BRK ) { + kbd_state =AS ; + kbd_flags &= (~SHIFT ); + }else { + kbd_state =SH ; + kbd_flags |=SHIFT ; + } +} + +static void kbd_ctrl (unsigned char scan_code) +{ +if ((kbd_flags &BRK ) ==BRK ) { + kbd_state =AS ; + kbd_flags &= (~CTRL ); + }else { + kbd_state =CN ; + kbd_flags |=CTRL ; + } +} + +static void kbd_num (unsigned char scan_code) +{ +if ((kbd_flags &BRK ) ==NORMAL ) { + kbd_flags ^=NUM ; + kbd_state = (kbd_flags &NUM ) ?AS :NM ; +kbd_led_set ();/* update keyboard LED */ + } +} + +static void kbd_alt (unsigned char scan_code) +{ +if ((kbd_flags &BRK ) ==BRK ) { + kbd_state =AS ; + kbd_flags &= (~ALT ); + }else { + kbd_state =AK ; + kbd_flags &=ALT ; + } +} + +static void kbd_caps (unsigned char scan_code) +{ +if ((kbd_flags &BRK ) ==NORMAL ) { + kbd_flags ^=CAPS ; +kbd_led_set ();/* update keyboard LED */ + } +} + +static void kbd_scroll (unsigned char scan_code) +{ +if ((kbd_flags &BRK ) ==NORMAL ) { + kbd_flags ^=STP ; +kbd_led_set ();/* update keyboard LED */ +if (kbd_flags &STP ) + kbd_input =0x13 ; +else + kbd_input =0x11 ; + } +} + +static void kbd_conv_char (unsigned char scan_code) +{ +if (scan_code ==0xe0 ) { + kbd_flags |=EXT ; +return ; + } + +/* if high bit of scan_code, set break flag */ +if (scan_code &0x80 ) + kbd_flags |=BRK ; +else + kbd_flags &= ~BRK ; + +if ((scan_code ==0xe1 ) || (kbd_flags &E1 )) { +if (scan_code ==0xe1 ) { + kbd_flags ^=BRK ;/* reset the break flag */ + kbd_flags ^=E1 ;/* bitwise EXOR with E1 flag */ + } +return ; + } + + scan_code &=0x7f ; + +if (kbd_flags &EXT ) { +int i; + + kbd_flags ^=EXT ; +for (i =0 ; ext_key_map[i]; i++) { +if (ext_key_map[i] == scan_code) { + scan_code =0x80 + i; +break ; + } + } +/* not found ? */ +if (!ext_key_map[i]) +return ; + } + +switch (kbd_fct_map[scan_code]) { +case AS : +kbd_normal (scan_code); +break ; +case SH : +kbd_shift (scan_code); +break ; +case CN : +kbd_ctrl (scan_code); +break ; +case NM : +kbd_num (scan_code); +break ; +case AK : +kbd_alt (scan_code); +break ; +case CP : +kbd_caps (scan_code); +break ; +case ST : +kbd_scroll (scan_code); +break ; + } +return ; +} +/******************************************************************************/ +static int kbd_reset (void ) +{ +/* KB Reset */ +if (kbd_input_empty () ==0 ) +return -1 ; + +out8 (I8042_DATA_REG ,0xff ); + +if (wait_until_kbd_output_full () ==0 ) +return -1 ; + +if (in8 (I8042_DATA_REG ) !=0xfa )/* ACK */ +return -1 ; + +if (wait_until_kbd_output_full () ==0 ) +return -1 ; + +if (in8 (I8042_DATA_REG ) !=0xaa )/* Test Pass*/ +return -1 ; + +if (kbd_input_empty () ==0 ) +return -1 ; + +/* Set KBC mode */ +out8 (I8042_COMMAND_REG ,0x60 ); + +if (kbd_input_empty () ==0 ) +return -1 ; + +out8 (I8042_DATA_REG ,0x45 ); + +if (kbd_input_empty () ==0 ) +return -1 ; + +/* Enable Keyboard */ +out8 (I8042_COMMAND_REG ,0xae ); +if (kbd_input_empty () ==0 ) +return -1 ; + +out8 (I8042_COMMAND_REG ,0x60 ); +if (kbd_input_empty () ==0 ) +return -1 ; + +out8 (I8042_DATA_REG ,0xf4 ); +if (kbd_input_empty () ==0 ) +return -1 ; + +return 0 ; +} +static int kbd_controller_present (void ) {return in8 (I8042_STATUS_REG ) !=0xff ;
@@ -342,7 +552,6 @@ int i8042_disable(void)return 0 ; } -/******************************************************************************* * * i8042_kbd_init - reset keyboard and init state flags
@@ -439,258 +648,3 @@ int i8042_getc(struct stdio_dev *dev) kbd_input =-1 ;return ret_chr; } - - -/******************************************************************************/ - -static void kbd_conv_char (unsigned char scan_code) -{ -if (scan_code ==0xe0 ) { - kbd_flags |=EXT ; -return ; - } - -/* if high bit of scan_code, set break flag */ -if (scan_code &0x80 ) - kbd_flags |=BRK ; -else - kbd_flags &= ~BRK ; - -if ((scan_code ==0xe1 ) || (kbd_flags &E1 )) { -if (scan_code ==0xe1 ) { - kbd_flags ^=BRK ;/* reset the break flag */ - kbd_flags ^=E1 ;/* bitwise EXOR with E1 flag */ - } -return ; - } - - scan_code &=0x7f ; - -if (kbd_flags &EXT ) { -int i; - - kbd_flags ^=EXT ; -for (i =0 ; ext_key_map[i]; i++) { -if (ext_key_map[i] == scan_code) { - scan_code =0x80 + i; -break ; - } - } -/* not found ? */ -if (!ext_key_map[i]) -return ; - } - -switch (kbd_fct_map[scan_code]) { -case AS : -kbd_normal (scan_code); -break ; -case SH : -kbd_shift (scan_code); -break ; -case CN : -kbd_ctrl (scan_code); -break ; -case NM : -kbd_num (scan_code); -break ; -case CP : -kbd_caps (scan_code); -break ; -case ST : -kbd_scroll (scan_code); -break ; -case AK : -kbd_alt (scan_code); -break ; - } -return ; -} - - -/******************************************************************************/ - -static void kbd_normal (unsigned char scan_code) -{ -unsigned char chr; - -if ((kbd_flags &BRK ) ==NORMAL ) { - chr = kbd_key_map[kbd_mapping][kbd_state][scan_code]; -if ((chr ==0xff ) || (chr ==0x00 )) -return ; - -/* if caps lock convert upper to lower */ -if (((kbd_flags &CAPS ) ==CAPS ) && - (chr >='a' && chr <='z' )) { - chr -='a' -'A' ; - } - kbd_input = chr; - } -} - - -/******************************************************************************/ - -static void kbd_shift (unsigned char scan_code) -{ -if ((kbd_flags &BRK ) ==BRK ) { - kbd_state =AS ; - kbd_flags &= (~SHIFT ); - }else { - kbd_state =SH ; - kbd_flags |=SHIFT ; - } -} - - -/******************************************************************************/ - -static void kbd_ctrl (unsigned char scan_code) -{ -if ((kbd_flags &BRK ) ==BRK ) { - kbd_state =AS ; - kbd_flags &= (~CTRL ); - }else { - kbd_state =CN ; - kbd_flags |=CTRL ; - } -} - - -/******************************************************************************/ - -static void kbd_caps (unsigned char scan_code) -{ -if ((kbd_flags &BRK ) ==NORMAL ) { - kbd_flags ^=CAPS ; -kbd_led_set ();/* update keyboard LED */ - } -} - - -/******************************************************************************/ - -static void kbd_num (unsigned char scan_code) -{ -if ((kbd_flags &BRK ) ==NORMAL ) { - kbd_flags ^=NUM ; - kbd_state = (kbd_flags &NUM ) ?AS :NM ; -kbd_led_set ();/* update keyboard LED */ - } -} - - -/******************************************************************************/ - -static void kbd_scroll (unsigned char scan_code) -{ -if ((kbd_flags &BRK ) ==NORMAL ) { - kbd_flags ^=STP ; -kbd_led_set ();/* update keyboard LED */ -if (kbd_flags &STP ) - kbd_input =0x13 ; -else - kbd_input =0x11 ; - } -} - -/******************************************************************************/ - -static void kbd_alt (unsigned char scan_code) -{ -if ((kbd_flags &BRK ) ==BRK ) { - kbd_state =AS ; - kbd_flags &= (~ALT ); - }else { - kbd_state =AK ; - kbd_flags &=ALT ; - } -} - - -/******************************************************************************/ - -static void kbd_led_set (void ) -{ -kbd_input_empty (); -out8 (I8042_DATA_REG ,0xed );/* SET LED command */ -kbd_input_empty (); -out8 (I8042_DATA_REG , (kbd_flags &0x7 ));/* LED bits only */ -} - - -/******************************************************************************/ - -static int kbd_input_empty (void ) -{ -int kbdTimeout =KBD_TIMEOUT *1000 ; - -while ((in8 (I8042_STATUS_REG ) &I8042_STATUS_IN_DATA ) && kbdTimeout--) -udelay (1 ); - -return kbdTimeout !=-1 ; -} - -/******************************************************************************/ - -static int wait_until_kbd_output_full (void ) -{ -int kbdTimeout =KBD_TIMEOUT *1000 ; - -while (((in8 (I8042_STATUS_REG ) &0x01 ) ==0 ) && kbdTimeout--) -udelay (1 ); - -return kbdTimeout !=-1 ; -} - -/******************************************************************************/ - -static int kbd_reset (void ) -{ -/* KB Reset */ -if (kbd_input_empty () ==0 ) -return -1 ; - -out8 (I8042_DATA_REG ,0xff ); - -if (wait_until_kbd_output_full () ==0 ) -return -1 ; - -if (in8 (I8042_DATA_REG ) !=0xfa )/* ACK */ -return -1 ; - -if (wait_until_kbd_output_full () ==0 ) -return -1 ; - -if (in8 (I8042_DATA_REG ) !=0xaa )/* Test Pass*/ -return -1 ; - -if (kbd_input_empty () ==0 ) -return -1 ; - -/* Set KBC mode */ -out8 (I8042_COMMAND_REG ,0x60 ); - -if (kbd_input_empty () ==0 ) -return -1 ; - -out8 (I8042_DATA_REG ,0x45 ); - -if (kbd_input_empty () ==0 ) -return -1 ; - -/* Enable Keyboard */ -out8 (I8042_COMMAND_REG ,0xae ); -if (kbd_input_empty () ==0 ) -return -1 ; - -out8 (I8042_COMMAND_REG ,0x60 ); -if (kbd_input_empty () ==0 ) -return -1 ; - -out8 (I8042_DATA_REG ,0xf4 ); -if (kbd_input_empty () ==0 ) -return -1 ; - -return 0 ; -}
Signature · 1 line
1.8.2.1
PATCH v3 2/7 x86: i8042: Reorder static functions
Quoted 6 lines · Bin Meng
Reorder those static function so that their declarations can be removed.
Signed-off-by Bin Meng <[email protected]>Acked-by Simon Glass <[email protected]>
Quoted 8 lines
---
Changes in v3: None
Changes in v2:
- Split of reordering static functions into this patchdrivers/input/i8042.c | 490 +++++++++++++++++++++++--------------------------- 1 file changed, 222 insertions(+), 268 deletions(-)
Applied to u-boot-x86, thanks!
PATCH v3 3/7 x86: i8042: Clean up the driver per coding convention
In reply to Bin Meng- Rename CamelCase variables to conform U-Boot coding convention
- Rename wait_until_kbd_output_full() to kbd_output_full()
- Change to use macros for i8042 command and control register bits
---
Changes in v3: None
Changes in v2:
- Split the original single patch into 3 patches
drivers/input/i8042.c | 230 ++++++++++++++++++++++++++------------------------ include/i8042.h | 103 ++++++++++++---------- 2 files changed, 177 insertions(+), 156 deletions(-)
drivers/input/i8042.c +118 -112
@@ -10,27 +10,30 @@/* includes */ #include <common.h> +#include <asm/io.h> #include <i8042.h> /* defines */ +#define in8 (p) inb(p) +#define out8 (p, v) outb(v, p)#ifdef CONFIG_CONSOLE_CURSOR extern void console_cursor (int state); -static int blinkCount =CONFIG_SYS_CONSOLE_BLINK_COUNT ; +static int blink_count =CONFIG_SYS_CONSOLE_BLINK_COUNT ;static int cursor_state;#endif /* locals */ -static int kbd_input =-1 ;/* no input yet */ -static int kbd_mapping =KBD_US ;/* default US keyboard */ -static int kbd_flags =NORMAL ;/* after reset */ -static int kbd_state;/* unshift code */ +static int kbd_input =-1 ;/* no input yet */ +static int kbd_mapping =KBD_US ;/* default US keyboard */ +static int kbd_flags =NORMAL ;/* after reset */ +static int kbd_state;/* unshift code */ static unsigned char kbd_fct_map[144 ] = {/* kbd_fct_map table for scan code */ -0 ,AS ,AS ,AS ,AS ,AS ,AS ,AS ,/* scan 0- 7 */ -AS ,AS ,AS ,AS ,AS ,AS ,AS ,AS ,/* scan 8- F */ +0 ,AS ,AS ,AS ,AS ,AS ,AS ,AS ,/* scan 00-07 */ +AS ,AS ,AS ,AS ,AS ,AS ,AS ,AS ,/* scan 08-0F */ AS ,AS ,AS ,AS ,AS ,AS ,AS ,AS ,/* scan 10-17 */ AS ,AS ,AS ,AS ,AS ,CN ,AS ,AS ,/* scan 18-1F */ AS ,AS ,AS ,AS ,AS ,AS ,AS ,AS ,/* scan 20-27 */
@@ -52,8 +55,8 @@ static unsigned char kbd_fct_map[144] = {static unsigned char kbd_key_map[2 ][5 ][144 ] = { {/* US keyboard */ {/* unshift code */ -0 ,0x1b ,'1' ,'2' ,'3' ,'4' ,'5' ,'6' ,/* scan 0- 7 */ -'7' ,'8' ,'9' ,'0' ,'-' ,'=' ,0x08 ,'\t' ,/* scan 8- F */ +0 ,0x1b ,'1' ,'2' ,'3' ,'4' ,'5' ,'6' ,/* scan 00-07 */ +'7' ,'8' ,'9' ,'0' ,'-' ,'=' ,0x08 ,'\t' ,/* scan 08-0F */ 'q' ,'w' ,'e' ,'r' ,'t' ,'y' ,'u' ,'i' ,/* scan 10-17 */ 'o' ,'p' ,'[' ,']' ,'\r' ,CN ,'a' ,'s' ,/* scan 18-1F */ 'd' ,'f' ,'g' ,'h' ,'j' ,'k' ,'l' ,';' ,/* scan 20-27 */
@@ -72,8 +75,8 @@ static unsigned char kbd_key_map[2][5][144] = {0 ,'D' ,'C' ,0 ,'B' ,0 ,'@' ,'P' /* extended */ }, { /* shift code */ -0 ,0x1b ,'!' ,'@' ,'#' ,'$' ,'%' ,'^' ,/* scan 0- 7 */ -'&' ,'*' ,'(' ,')' ,'_' ,'+' ,0x08 ,'\t' ,/* scan 8- F */ +0 ,0x1b ,'!' ,'@' ,'#' ,'$' ,'%' ,'^' ,/* scan 00-07 */ +'&' ,'*' ,'(' ,')' ,'_' ,'+' ,0x08 ,'\t' ,/* scan 08-0F */ 'Q' ,'W' ,'E' ,'R' ,'T' ,'Y' ,'U' ,'I' ,/* scan 10-17 */ 'O' ,'P' ,'{' ,'}' ,'\r' ,CN ,'A' ,'S' ,/* scan 18-1F */ 'D', 'F', 'G', 'H', 'J', 'K', 'L', ':', /* scan 20-27 */
@@ -92,8 +95,8 @@ static unsigned char kbd_key_map[2][5][144] = {0 ,'D' ,'C' ,0 ,'B' ,0 ,'@' ,'P' /* extended */ }, { /* control code */ -0xff ,0x1b ,0xff ,0x00 ,0xff ,0xff ,0xff ,0xff ,/* scan 0- 7 */ -0x1e ,0xff ,0xff ,0xff ,0x1f ,0xff ,0xff ,'\t' ,/* scan 8- F */ +0xff ,0x1b ,0xff ,0x00 ,0xff ,0xff ,0xff ,0xff ,/* scan 00-07 */ +0x1e ,0xff ,0xff ,0xff ,0x1f ,0xff ,0xff ,'\t' ,/* scan 08-0F */ 0x11 ,0x17 ,0x05 ,0x12 ,0x14 ,0x19 ,0x15 ,0x09 ,/* scan 10-17 */ 0x0f ,0x10 ,0x1b ,0x1d ,'\r' ,CN ,0x01 ,0x13 ,/* scan 18-1F */ 0x04, 0x06, 0x07, 0x08, 0x0a, 0x0b, 0x0c, 0xff, /* scan 20-27 */
@@ -112,8 +115,8 @@ static unsigned char kbd_key_map[2][5][144] = {0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff /* extended */ }, { /* non numeric code */ -0 ,0x1b ,'1' ,'2' ,'3' ,'4' ,'5' ,'6' ,/* scan 0- 7 */ -'7' ,'8' ,'9' ,'0' ,'-' ,'=' ,0x08 ,'\t' ,/* scan 8- F */ +0 ,0x1b ,'1' ,'2' ,'3' ,'4' ,'5' ,'6' ,/* scan 00-07 */ +'7' ,'8' ,'9' ,'0' ,'-' ,'=' ,0x08 ,'\t' ,/* scan 08-0F */ 'q' ,'w' ,'e' ,'r' ,'t' ,'y' ,'u' ,'i' ,/* scan 10-17 */ 'o' ,'p' ,'[' ,']' ,'\r' ,CN ,'a' ,'s' ,/* scan 18-1F */ 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';', /* scan 20-27 */
@@ -132,30 +135,30 @@ static unsigned char kbd_key_map[2][5][144] = {0 ,'D' ,'C' ,0 ,'B' ,0 ,'@' ,'P' /* extended */ }, { /* right alt mode - not used in US keyboard */ -0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 0 - 7 */ -0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 8 - F */ -0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 10 -17 */ -0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 18 -1F */ -0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 20 -27 */ -0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 28 -2F */ -0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 30 -37 */ -0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 38 -3F */ -0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 40 -47 */ -0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 48 -4F */ -0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 50 -57 */ -0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 58 -5F */ -0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 60 -67 */ -0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 68 -6F */ -0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 70 -77 */ -0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 78 -7F */ +0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 00-07 */ +0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 08-0F */ +0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 10-17 */ +0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 18-1F */ +0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 20-27 */ +0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 28-2F */ +0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 30-37 */ +0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 38-3F */ +0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 40-47 */ +0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 48-4F */ +0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 50-57 */ +0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 58-5F */ +0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 60-67 */ +0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 68-6F */ +0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 70-77 */ +0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 78-7F */ 0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* extended */ 0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff /* extended */ } }, - { /* german keyboard */ + { /* German keyboard */ { /* unshift code */ -0 ,0x1b ,'1' ,'2' ,'3' ,'4' ,'5' ,'6' ,/* scan 0- 7 */ -'7' ,'8' ,'9' ,'0' ,0xe1 ,'\'' ,0x08 ,'\t' ,/* scan 8- F */ +0 ,0x1b ,'1' ,'2' ,'3' ,'4' ,'5' ,'6' ,/* scan 00-07 */ +'7' ,'8' ,'9' ,'0' ,0xe1 ,'\'' ,0x08 ,'\t' ,/* scan 08-0F */ 'q' ,'w' ,'e' ,'r' ,'t' ,'z' ,'u' ,'i' ,/* scan 10-17 */ 'o' ,'p' ,0x81 ,'+' ,'\r' ,CN ,'a' ,'s' ,/* scan 18-1F */ 'd', 'f', 'g', 'h', 'j', 'k', 'l', 0x94, /* scan 20-27 */
@@ -174,8 +177,8 @@ static unsigned char kbd_key_map[2][5][144] = {0 ,'D' ,'C' ,0 ,'B' ,0 ,'@' ,'P' /* extended */ }, { /* shift code */ -0 ,0x1b ,'!' ,'"' ,0x15 ,'$' ,'%' ,'&' ,/* scan 0- 7 */ -'/' ,'(' ,')' ,'=' ,'?' ,'`' ,0x08 ,'\t' ,/* scan 8- F */ +0 ,0x1b ,'!' ,'"' ,0x15 ,'$' ,'%' ,'&' ,/* scan 00-07 */ +'/' ,'(' ,')' ,'=' ,'?' ,'`' ,0x08 ,'\t' ,/* scan 08-0F */ 'Q' ,'W' ,'E' ,'R' ,'T' ,'Z' ,'U' ,'I' ,/* scan 10-17 */ 'O' ,'P' ,0x9a ,'*' ,'\r' ,CN ,'A' ,'S' ,/* scan 18-1F */ 'D', 'F', 'G', 'H', 'J', 'K', 'L', 0x99, /* scan 20-27 */
@@ -194,8 +197,8 @@ static unsigned char kbd_key_map[2][5][144] = {0 ,'D' ,'C' ,0 ,'B' ,0 ,'@' ,'P' /* extended */ }, { /* control code */ -0xff ,0x1b ,0xff ,0x00 ,0xff ,0xff ,0xff ,0xff ,/* scan 0- 7 */ -0x1e ,0xff ,0xff ,0xff ,0x1f ,0xff ,0xff ,'\t' ,/* scan 8- F */ +0xff ,0x1b ,0xff ,0x00 ,0xff ,0xff ,0xff ,0xff ,/* scan 00-07 */ +0x1e ,0xff ,0xff ,0xff ,0x1f ,0xff ,0xff ,'\t' ,/* scan 08-0F */ 0x11 ,0x17 ,0x05 ,0x12 ,0x14 ,0x19 ,0x15 ,0x09 ,/* scan 10-17 */ 0x0f ,0x10 ,0x1b ,0x1d ,'\r' ,CN ,0x01 ,0x13 ,/* scan 18-1F */ 0x04, 0x06, 0x07, 0x08, 0x0a, 0x0b, 0x0c, 0xff, /* scan 20-27 */
@@ -214,8 +217,8 @@ static unsigned char kbd_key_map[2][5][144] = {0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff /* extended */ }, { /* non numeric code */ -0 ,0x1b ,'1' ,'2' ,'3' ,'4' ,'5' ,'6' ,/* scan 0- 7 */ -'7' ,'8' ,'9' ,'0' ,0xe1 ,'\'' ,0x08 ,'\t' ,/* scan 8- F */ +0 ,0x1b ,'1' ,'2' ,'3' ,'4' ,'5' ,'6' ,/* scan 00-07 */ +'7' ,'8' ,'9' ,'0' ,0xe1 ,'\'' ,0x08 ,'\t' ,/* scan 08-0F */ 'q' ,'w' ,'e' ,'r' ,'t' ,'z' ,'u' ,'i' ,/* scan 10-17 */ 'o' ,'p' ,0x81 ,'+' ,'\r' ,CN ,'a' ,'s' ,/* scan 18-1F */ 'd', 'f', 'g', 'h', 'j', 'k', 'l', 0x94, /* scan 20-27 */
@@ -233,23 +236,23 @@ static unsigned char kbd_key_map[2][5][144] = {'\r' ,CN ,'/' ,'*' ,' ' ,ST ,'F' ,'A' ,/* extended */ 0 ,'D' ,'C' ,0 ,'B' ,0 ,'@' ,'P' /* extended */ }, - { /* Right alt mode - is used in German keyboard */ -0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 0 - 7 */ -'{' ,'[' ,']' ,'}' ,'\\' ,0xff ,0xff ,0xff ,/* scan 8 - F */ -'@' ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 10 -17 */ -0xff ,0xff ,0xff ,'~' ,0xff ,0xff ,0xff ,0xff ,/* scan 18 -1F */ -0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 20 -27 */ -0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 28 -2F */ -0xff ,0xff ,0xe6 ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 30 -37 */ -0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 38 -3F */ -0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 40 -47 */ -0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 48 -4F */ -0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,'|' ,0xff ,/* scan 50 -57 */ -0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 58 -5F */ -0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 60 -67 */ -0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 68 -6F */ -0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 70 -77 */ -0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 78 -7F */ + { /* right alt mode - is used in German keyboard */ +0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 00-07 */ +'{' ,'[' ,']' ,'}' ,'\\' ,0xff ,0xff ,0xff ,/* scan 08-0F */ +'@' ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 10-17 */ +0xff ,0xff ,0xff ,'~' ,0xff ,0xff ,0xff ,0xff ,/* scan 18-1F */ +0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 20-27 */ +0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 28-2F */ +0xff ,0xff ,0xe6 ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 30-37 */ +0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 38-3F */ +0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 40-47 */ +0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 48-4F */ +0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,'|' ,0xff ,/* scan 50-57 */ +0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 58-5F */ +0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 60-67 */ +0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 68-6F */ +0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 70-77 */ +0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* scan 78-7F */ 0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,/* extended */ 0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff /* extended */ }
@@ -278,30 +281,30 @@ static unsigned char ext_key_map[] = {static int kbd_input_empty (void ) { -int kbdTimeout =KBD_TIMEOUT *1000 ; +int kbd_timeout =KBD_TIMEOUT *1000 ; -while ((in8 (I8042_STATUS_REG ) &I8042_STATUS_IN_DATA ) && kbdTimeout--) +while ((in8 (I8042_STS_REG ) &STATUS_IBF ) && kbd_timeout--)udelay (1 ); -return kbdTimeout !=-1 ; +return kbd_timeout !=-1 ; } -static int wait_until_kbd_output_full (void ) +static int kbd_output_full (void ) { -int kbdTimeout =KBD_TIMEOUT *1000 ; +int kbd_timeout =KBD_TIMEOUT *1000 ; -while (((in8 (I8042_STATUS_REG ) &0x01 ) ==0 ) && kbdTimeout--) +while (((in8 (I8042_STS_REG ) &STATUS_OBF ) ==0 ) && kbd_timeout--)udelay (1 ); -return kbdTimeout !=-1 ; +return kbd_timeout !=-1 ; }static void kbd_led_set (void ) {kbd_input_empty (); -out8 (I8042_DATA_REG ,0xed );/* SET LED command */ +out8 (I8042_DATA_REG ,CMD_SET_KBD_LED );kbd_input_empty (); -out8 (I8042_DATA_REG , (kbd_flags &0x7 ));/* LED bits only */ +out8 (I8042_DATA_REG , (kbd_flags &0x7 )); }static void kbd_normal (unsigned char scan_code)
@@ -315,7 +318,7 @@ static void kbd_normal(unsigned char scan_code)/* if caps lock convert upper to lower */ if (((kbd_flags &CAPS ) ==CAPS ) && - (chr >='a' && chr <='z' )) { + (chr >='a' && chr <='z' )) { chr -='a' -'A' ; } kbd_input = chr;
@@ -349,7 +352,7 @@ static void kbd_num(unsigned char scan_code)if ((kbd_flags &BRK ) ==NORMAL ) { kbd_flags ^=NUM ; kbd_state = (kbd_flags &NUM ) ?AS :NM ; -kbd_led_set ();/* update keyboard LED */ +kbd_led_set (); } }
@@ -368,7 +371,7 @@ static void kbd_caps(unsigned char scan_code) {if ((kbd_flags &BRK ) ==NORMAL ) { kbd_flags ^=CAPS ; -kbd_led_set ();/* update keyboard LED */ +kbd_led_set (); } }
@@ -376,7 +379,7 @@ static void kbd_scroll(unsigned char scan_code) {if ((kbd_flags &BRK ) ==NORMAL ) { kbd_flags ^=STP ; -kbd_led_set ();/* update keyboard LED */ +kbd_led_set ();if (kbd_flags &STP ) kbd_input =0x13 ;else
@@ -399,8 +402,8 @@ static void kbd_conv_char(unsigned char scan_code)if ((scan_code ==0xe1 ) || (kbd_flags &E1 )) {if (scan_code ==0xe1 ) { - kbd_flags ^=BRK ;/* reset the break flag */ - kbd_flags ^=E1 ;/* bitwise EXOR with E1 flag */ + kbd_flags ^=BRK ;/* reset the break flag */ + kbd_flags ^=E1 ;/* bitwise EXOR with E1 flag */ }return ; }
@@ -445,55 +448,57 @@ static void kbd_conv_char(unsigned char scan_code)kbd_scroll (scan_code);break ; } +return ; } -/******************************************************************************/ -static int kbd_reset (void ) {/* KB Reset */ if (kbd_input_empty () ==0 )return -1 ; -out8 (I8042_DATA_REG ,0xff ); +out8 (I8042_DATA_REG ,CMD_RESET_KBD ); -if (wait_until_kbd_output_full () ==0 ) +if (kbd_output_full () ==0 )return -1 ; -if (in8 (I8042_DATA_REG ) !=0xfa )/* ACK */ +if (in8 (I8042_DATA_REG ) !=KBD_ACK )return -1 ; -if (wait_until_kbd_output_full () ==0 ) +if (kbd_output_full () ==0 )return -1 ; -if (in8 (I8042_DATA_REG ) !=0xaa )/* Test Pass*/ +if (in8 (I8042_DATA_REG ) !=KBD_POR )return -1 ;if (kbd_input_empty () ==0 )return -1 ;/* Set KBC mode */ -out8 (I8042_COMMAND_REG ,0x60 ); +out8 (I8042_CMD_REG ,CMD_WR_CONFIG );if (kbd_input_empty () ==0 )return -1 ; -out8 (I8042_DATA_REG ,0x45 ); +out8 (I8042_DATA_REG , +CONFIG_AT_TRANS |CONFIG_SET_BIST |CONFIG_KIRQ_EN );if (kbd_input_empty () ==0 )return -1 ;/* Enable Keyboard */ -out8 (I8042_COMMAND_REG ,0xae ); +out8 (I8042_CMD_REG ,CMD_KBD_EN );if (kbd_input_empty () ==0 )return -1 ; -out8 (I8042_COMMAND_REG ,0x60 ); +out8 (I8042_CMD_REG ,CMD_WR_CONFIG );if (kbd_input_empty () ==0 )return -1 ; -out8 (I8042_DATA_REG ,0xf4 ); +out8 (I8042_DATA_REG , +CONFIG_AT_TRANS |CONFIG_MCLK_DIS | +CONFIG_KCLK_DIS |CONFIG_SET_BIST );if (kbd_input_empty () ==0 )return -1 ;
@@ -502,7 +507,7 @@ static int kbd_reset(void)static int kbd_controller_present (void ) { -return in8 (I8042_STATUS_REG ) !=0xff ; +return in8 (I8042_STS_REG ) !=0xff ; }/*
@@ -520,18 +525,18 @@ void i8042_flush(void)int timeout;/* -* The delay is to give the keyboard controller some time to fill the -* next byte. +* 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 )) { + timeout =100 ;/* wait for no longer than 100us */ +while (timeout >0 && !(in8 (I8042_STS_REG ) &STATUS_OBF )) {udelay (1 ); timeout--; } -/* Try to pull next byte if not timeout. */ -if (in8 (I8042_STATUS_REG ) &0x01 ) +/* Try to pull next byte if not timeout */ +if (in8 (I8042_STS_REG ) &STATUS_OBF )in8 (I8042_DATA_REG );else break ;
@@ -544,7 +549,7 @@ int i8042_disable(void)return -1 ;/* Disable keyboard */ -out8 (I8042_COMMAND_REG ,0xad ); +out8 (I8042_CMD_REG ,CMD_KBD_DIS );if (kbd_input_empty () ==0 )return -1 ;
@@ -552,17 +557,16 @@ int i8042_disable(void)return 0 ; } -/******************************************************************************* -* -* i8042_kbd_init - reset keyboard and init state flags -*/ +/* i8042_kbd_init - reset keyboard and init state flags */ int i8042_kbd_init (void ) {int keymap, try;char *penv; -if (!kbd_controller_present () ||board_i8042_skip ()) +if (!kbd_controller_present () ||board_i8042_skip ()) { +debug ("i8042 keyboard controller is not present\n" );return -1 ; + }/* Init keyboard device (default US layout) */ keymap =KBD_US ;
@@ -578,32 +582,33 @@ int i8042_kbd_init(void) kbd_flags =NORMAL ; kbd_state =0 ;kbd_led_set (); +return 0 ; } } +return -1 ; } - -/******************************************************************************* -* +/* * i8042_tstc - test if keyboard input is available -* option: cursor blinking if called in a loop +* +* option: cursor blinking if called in a loop */ int i8042_tstc (struct stdio_dev *dev) {unsigned char scan_code =0 ;#ifdef CONFIG_CONSOLE_CURSOR -if (--blinkCount ==0 ) { +if (--blink_count ==0 ) { cursor_state ^=1 ;console_cursor (cursor_state); - blinkCount =CONFIG_SYS_CONSOLE_BLINK_COUNT ; + blink_count =CONFIG_SYS_CONSOLE_BLINK_COUNT ;udelay (10 ); }#endif -if ((in8 (I8042_STATUS_REG ) &0x01 ) ==0 ) { +if ((in8 (I8042_STS_REG ) &STATUS_OBF ) ==0 ) {return 0 ; }else { scan_code =in8 (I8042_DATA_REG );
@@ -615,14 +620,14 @@ int i8042_tstc(struct stdio_dev *dev)if (kbd_input !=-1 )return 1 ; } +return 0 ; } - -/******************************************************************************* -* +/* * i8042_getc - wait till keyboard input is available -* option: turn on/off cursor while waiting +* +* option: turn on/off cursor while waiting */ int i8042_getc (struct stdio_dev *dev) {
@@ -630,21 +635,22 @@ int i8042_getc(struct stdio_dev *dev)unsigned char scan_code;while (kbd_input ==-1 ) { -while ((in8 (I8042_STATUS_REG ) &0x01 ) ==0 ) { +while ((in8 (I8042_STS_REG ) &STATUS_OBF ) ==0 ) {#ifdef CONFIG_CONSOLE_CURSOR -if (--blinkCount ==0 ) { +if (--blink_count ==0 ) { cursor_state ^=1 ;console_cursor (cursor_state); - blinkCount =CONFIG_SYS_CONSOLE_BLINK_COUNT ; + blink_count =CONFIG_SYS_CONSOLE_BLINK_COUNT ; }udelay (10 );#endif } scan_code =in8 (I8042_DATA_REG );if (scan_code !=0xfa ) -kbd_conv_char (scan_code); +kbd_conv_char (scan_code); } ret_chr = kbd_input; kbd_input =-1 ; +return ret_chr; }
include/i8042.h +59 -44
111 lines not on this page · raw message
Signature · 1 line
1.8.2.1
PATCH v3 3/7 x86: i8042: Clean up the driver per coding convention
Quoted 9 lines · Bin Meng
- Rename CamelCase variables to conform U-Boot coding convention
- Renamewait_until_kbd_output_full()tokbd_output_full()
- Change to use macros for i8042 command and control register bitsSigned-off-by Bin Meng <[email protected]>Acked-by Simon Glass <[email protected]>---
Quoted 7 lines
Changes in v3: None
Changes in v2:
- Split the original single patch into 3 patchesdrivers/input/i8042.c | 230 ++++++++++++++++++++++++++------------------------ include/i8042.h | 103 ++++++++++++---------- 2 files changed, 177 insertions(+), 156 deletions(-)
Applied to u-boot-x86, thanks!
PATCH v3 4/7 x86: i8042: Correctly initialize the controller
In reply to Bin MengThe existing i8042 keyboard controller driver has some issues. First of all, it does not issue a self-test command (0xaa) to the controller at the very beginning. Without this, the controller does not respond to any command at all. Secondly, it initializes the configuration byte register to turn on the keyboard's interrupt, as U-Boot does not normally allow interrupts to be processed. Finally, at the end of the initialization routine, it wrongly sets the controller to disable all interfaces including both keyboard and mouse.
---
Changes in v3:
- Fix commit message per Simon's comments
Changes in v2:
- Reorder this patch to follow the i8042 driver clean up patches
drivers/input/i8042.c | 43 +++++++++++++++++++++---------------------- 1 file changed, 21 insertions(+), 22 deletions(-)
drivers/input/i8042.c +21 -22
@@ -454,51 +454,50 @@ static void kbd_conv_char(unsigned char scan_code)static int kbd_reset (void ) { -/* KB Reset */ +u8 config; + +/* controller self test */ if (kbd_input_empty () ==0 )return -1 ; +out8 (I8042_CMD_REG ,CMD_SELF_TEST ); +if (kbd_output_full () ==0 ) +return -1 ; +if (in8 (I8042_DATA_REG ) !=KBC_TEST_OK ) +return -1 ; +/* keyboard reset */ +if (kbd_input_empty () ==0 ) +return -1 ;out8 (I8042_DATA_REG ,CMD_RESET_KBD ); -if (kbd_output_full () ==0 )return -1 ; -if (in8 (I8042_DATA_REG ) !=KBD_ACK )return -1 ; -if (kbd_output_full () ==0 )return -1 ; -if (in8 (I8042_DATA_REG ) !=KBD_POR )return -1 ; +/* set AT translation and disable irq */ if (kbd_input_empty () ==0 )return -1 ; - -/* Set KBC mode */ -out8 (I8042_CMD_REG ,CMD_WR_CONFIG ); - -if (kbd_input_empty () ==0 ) +out8 (I8042_CMD_REG ,CMD_RD_CONFIG ); +if (kbd_output_full () ==0 )return -1 ; - -out8 (I8042_DATA_REG , -CONFIG_AT_TRANS |CONFIG_SET_BIST |CONFIG_KIRQ_EN ); - + config =in8 (I8042_DATA_REG ); + config |=CONFIG_AT_TRANS ; + config &= ~(CONFIG_KIRQ_EN |CONFIG_MIRQ_EN );if (kbd_input_empty () ==0 )return -1 ; - -/* Enable Keyboard */ -out8 (I8042_CMD_REG ,CMD_KBD_EN ); +out8 (I8042_CMD_REG ,CMD_WR_CONFIG );if (kbd_input_empty () ==0 )return -1 ; +out8 (I8042_DATA_REG , config); -out8 (I8042_CMD_REG ,CMD_WR_CONFIG ); +/* enable keyboard */ if (kbd_input_empty () ==0 )return -1 ; - -out8 (I8042_DATA_REG , -CONFIG_AT_TRANS |CONFIG_MCLK_DIS | -CONFIG_KCLK_DIS |CONFIG_SET_BIST ); +out8 (I8042_CMD_REG ,CMD_KBD_EN );if (kbd_input_empty () ==0 )return -1 ;
Signature · 1 line
1.8.2.1
PATCH v3 4/7 x86: i8042: Correctly initialize the controller
Quoted 15 lines · Bin Meng
The existing i8042 keyboard controller driver has some issues. First of all, it does not issue a self-test command (
0xaa) to the controller at the very beginning. Without this, the controller does not respond to any command at all. Secondly, it initializes the configuration byte register to turn on the keyboard's interrupt, as U-Boot does not normally allow interrupts to be processed. Finally, at the end of the initialization routine, it wrongly sets the controller to disable all interfaces including both keyboard and mouse.Signed-off-by Bin Meng <[email protected]>Acked-by Simon Glass <[email protected]>---
Quoted 8 lines
Changes in v3:
- Fix commit message per Simon's commentsChanges in v2:
- Reorder this patch to follow the i8042 driver clean up patchesdrivers/input/i8042.c | 43 +++++++++++++++++++++---------------------- 1 file changed, 21 insertions(+), 22 deletions(-)
Applied to u-boot-x86, thanks!
PATCH v3 5/7 video: cfb_console: Allow VGA device to work without i8042 keyboard
In reply to Bin MengSo far if CONFIG_VGA_AS_SINGLE_DEVICE is not defined, the VGA device will try to initialize a keyboard device (for x86, it is i8042). But if i8042 controller initialization fails (eg: there is no keyboard connected to the PS/2 port), drv_video_init() just simply returns. This kills the opportunity of using a usb keyboard later with the vga console, as the vga initialization part is actually ok, only keyboard part fails. Change the code logic to allow this.
---
In the long term, we should remove CONFIG_VGA_AS_SINGLE_DEVICE and treat the cfb_concole an output device only. The keyboard part should be moved out of cfb_console driver and be as a input device driver separately.
Changes in v3: None
Changes in v2: None
drivers/video/cfb_console.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-)
drivers/video/cfb_console.c +5 -6
@@ -2247,16 +2247,17 @@ __weak int board_video_skip(void)int drv_video_init (void ) { -int skip_dev_init;struct stdio_dev console_dev;bool have_keyboard; +bool __maybe_unused keyboard_ok = false;/* Check if video initialization should be skipped */ if (board_video_skip ())return 0 ;/* Init video chip - returns with framebuffer cleared */ - skip_dev_init = (video_init () ==-1 ); +if (video_init () ==-1 ) +return 0 ;if (board_cfb_skip ())return 0 ;
@@ -2272,11 +2273,9 @@ int drv_video_init(void)if (have_keyboard) {debug ("KBD: Keyboard init ...\n" );#if !defined(CONFIG_VGA_AS_SINGLE_DEVICE ) - skip_dev_init |= (VIDEO_KBD_INIT_FCT ==-1 ); + keyboard_ok = !(VIDEO_KBD_INIT_FCT ==-1 );#endif } -if (skip_dev_init) -return 0 ;/* Init vga device */ memset (&console_dev,0 ,sizeof (console_dev));
@@ -2287,7 +2286,7 @@ int drv_video_init(void) console_dev.puts = video_puts;/* 'puts' function */ #if !defined(CONFIG_VGA_AS_SINGLE_DEVICE ) -if (have_keyboard) { +if (have_keyboard && keyboard_ok) {/* Also init console device */ console_dev.flags |=DEV_FLAGS_INPUT ; console_dev.tstc =VIDEO_TSTC_FCT ;/* 'tstc' function */
Signature · 1 line
1.8.2.1
PATCH v3 5/7 video: cfb_console: Allow VGA device to work without i8042 keyboard
Hi Anatolkij,
Quoted 10 lines · Bin Meng
So far if
CONFIG_VGA_AS_SINGLE_DEVICEis not defined, the VGA device will try to initialize a keyboard device (for x86, it is i8042). But if i8042 controller initialization fails (eg: there is no keyboard connected to the PS/2 port),drv_video_init()just simply returns. This kills the opportunity of using a usb keyboard later with the vga console, as the vga initialization part is actually ok, only keyboard part fails. Change the code logic to allow this.Signed-off-by Bin Meng <[email protected]>Reviewed-by Simon Glass <[email protected]>
What are your thoughts on this patch, please?
Quoted 60 lines
---
In the long term, we should removeCONFIG_VGA_AS_SINGLE_DEVICEand treat thecfb_concolean output device only. The keyboard part should be moved out ofcfb_consoledriver and be as a input device driver separately.Changes in v3: None
Changes in v2: Nonedrivers/video/cfb_console.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-)drivers/video/cfb_console.c +5
-7@@ -2247,16 +2247,17 @@ __weak int board_video_skip(void)int drv_video_init (void ) { -int skip_dev_init;struct stdio_dev console_dev;bool have_keyboard; +bool __maybe_unused keyboard_ok = false;/* Check if video initialization should be skipped */ if (board_video_skip ())return 0 ;/* Init video chip - returns with framebuffer cleared */ - skip_dev_init = (video_init () ==-1 ); +if (video_init () ==-1 ) +return 0 ;if (board_cfb_skip ())return 0 ;@@ -2272,11 +2273,9 @@ int drv_video_init(void)if (have_keyboard) {debug ("KBD: Keyboard init ...\n" );#if !defined(CONFIG_VGA_AS_SINGLE_DEVICE ) - skip_dev_init |= (VIDEO_KBD_INIT_FCT ==-1 ); + keyboard_ok = !(VIDEO_KBD_INIT_FCT ==-1 );#endif } -if (skip_dev_init) -return 0 ;/* Init vga device */ memset (&console_dev,0 ,sizeof (console_dev));@@ -2287,7 +2286,7 @@ int drv_video_init(void) console_dev.puts = video_puts;/* 'puts' function */ #if !defined(CONFIG_VGA_AS_SINGLE_DEVICE ) -if (have_keyboard) { +if (have_keyboard && keyboard_ok) {/* Also init console device */ console_dev.flags |=DEV_FLAGS_INPUT ; console_dev.tstc =VIDEO_TSTC_FCT ;/* 'tstc' function */ --
Quoted 2 lines
1.8.2.1
Regards,
Simon
PATCH v3 5/7 video: cfb_console: Allow VGA device to work without i8042 keyboard
Hi Simon,
Quoted 9 lines · On Mon, 24 Aug 2015 22:13:41 -0600 Simon Glass <[email protected]> wrote:
Quoted 8 lines · Bin Meng
So far if
CONFIG_VGA_AS_SINGLE_DEVICEis not defined, the VGA device will try to initialize a keyboard device (for x86, it is i8042). But if i8042 controller initialization fails (eg: there is no keyboard connected to the PS/2 port),drv_video_init()just simply returns. This kills the opportunity of using a usb keyboard later with the vga console, as the vga initialization part is actually ok, only keyboard part fails. Change the code logic to allow this.
Quoted 4 lines
Quoted 2 lines
Signed-off-by Bin Meng <[email protected]>Reviewed-by Simon Glass <[email protected]>What are your thoughts on this patch, please?
it is okay for me, please merge it with other patches in this series.
Thanks,
Anatolij
PATCH v3 5/7 video: cfb_console: Allow VGA device to work without i8042 keyboard
Quoted 17 lines · Anatolij Gustschin
Hi Simon,
Quoted 12 lines · On Mon, 24 Aug 2015 22:13:41 -0600 Simon Glass <[email protected]> wrote:
Quoted 10 lines · Bin Meng
So far if
CONFIG_VGA_AS_SINGLE_DEVICEis not defined, the VGA device will try to initialize a keyboard device (for x86, it is i8042). But if i8042 controller initialization fails (eg: there is no keyboard connected to the PS/2 port),drv_video_init()just simply returns. This kills the opportunity of using a usb keyboard later with the vga console, as the vga initialization part is actually ok, only keyboard part fails. Change the code logic to allow this.Signed-off-by Bin Meng <[email protected]>Reviewed-by Simon Glass <[email protected]>
Quoted 7 lines
Quoted 1 line
What are your thoughts on this patch, please?
it is okay for me, please merge it with other patches in this series.
Thanks,
Anatolij
Applied to u-boot-x86, thanks!
PATCH v3 5/7 video: cfb_console: Allow VGA device to work without i8042 keyboard
In reply to Bin MengHi Bin,
Quoted 10 lines · On Mon, 24 Aug 2015 01:00:07 -0700 Bin Meng <[email protected]> wrote:
So far if
CONFIG_VGA_AS_SINGLE_DEVICEis not defined, the VGA device will try to initialize a keyboard device (for x86, it is i8042). But if i8042 controller initialization fails (eg: there is no keyboard connected to the PS/2 port),drv_video_init()just simply returns. This kills the opportunity of using a usb keyboard later with the vga console, as the vga initialization part is actually ok, only keyboard part fails. Change the code logic to allow this.Signed-off-by Bin Meng <[email protected]>Reviewed-by Simon Glass <[email protected]>
PATCH v3 6/7 x86: crownbay: Enable on-board SMSC superio keyboard controller
In reply to Bin MengSo far we only enabled one legacy serial port on the SMSC LPC47m superio chipset on Intel Crown Bay board. As the board also has dual PS/2 ports routed out, enable the keyboard controller which is i8042 compatible so that we can use PS/2 keyboard and mouse.
In order to make PS/2 keyboard work with the VGA console, remove CONFIG_VGA_AS_SINGLE_DEVICE. To boot Linux kernel with PIC mode using PIRQ routing table, adjust the mask in the device tree to reserve irq12 which is used by PS/2 mouse.
---
Changes in v3: None
Changes in v2: None
arch/x86/dts/crownbay.dts | 2 +- board/intel/crownbay/crownbay.c | 7 ++++--- include/configs/crownbay.h | 3 --- 3 files changed, 5 insertions(+), 7 deletions(-)
arch/x86/dts/crownbay.dts +1 -1
@@ -168,7 +168,7 @@ compatible = "intel,irq-router"; intel,pirq-config = "pci"; intel,pirq-link = <0x60 8>; - intel,pirq-mask = <0xdee0>; + intel,pirq-mask = <0xcee0>; intel,pirq-routing = < /* TunnelCreek PCI devices */ PCI_BDF(0, 2, 0) INTA PIRQE
board/intel/crownbay/crownbay.c +4 -3
@@ -10,11 +10,12 @@#include <netdev.h> #include <smsc_lpc47m.h> -#define SERIAL_DEV PNP_DEV(0x2e, 4) -int board_early_init_f (void ) { -lpc47m_enable_serial (SERIAL_DEV ,UART0_BASE ,UART0_IRQ ); +lpc47m_enable_serial (PNP_DEV (LPC47M_IO_PORT ,LPC47M_SP1 ), +UART0_BASE ,UART0_IRQ ); +lpc47m_enable_kbc (PNP_DEV (LPC47M_IO_PORT ,LPC47M_KBC ), +KBD_IRQ ,MSE_IRQ );return 0 ; }
include/configs/crownbay.h +0 -3
@@ -54,9 +54,6 @@#define CONFIG_PCH_GBE #define CONFIG_PHYLIB -/* TunnelCreek IGD support */ -#define CONFIG_VGA_AS_SINGLE_DEVICE -/* Environment configuration */ #define CONFIG_ENV_SECT_SIZE 0x1000#define CONFIG_ENV_OFFSET 0
Signature · 1 line
1.8.2.1
PATCH v3 6/7 x86: crownbay: Enable on-board SMSC superio keyboard controller
Quoted 15 lines · Bin Meng
So far we only enabled one legacy serial port on the SMSC LPC47m superio chipset on Intel Crown Bay board. As the board also has dual PS/2 ports routed out, enable the keyboard controller which is i8042 compatible so that we can use PS/2 keyboard and mouse.
In order to make PS/2 keyboard work with the VGA console, remove
CONFIG_VGA_AS_SINGLE_DEVICE. To boot Linux kernel with PIC mode using PIRQ routing table, adjust the mask in the device tree to reserve irq12 which is used by PS/2 mouse.Signed-off-by Bin Meng <[email protected]>Reviewed-by Simon Glass <[email protected]>---
Quoted 7 lines
Changes in v3: None
Changes in v2: Nonearch/x86/dts/crownbay.dts | 2 +- board/intel/crownbay/crownbay.c | 7 ++++--- include/configs/crownbay.h | 3 --- 3 files changed, 5 insertions(+), 7 deletions(-)
Applied to u-boot-x86, thanks!
PATCH v3 7/7 video: ct69000: Remove unused codes
In reply to Bin MengRemove unused CONFIG_USE_CPCIDVI wrapped codes.
---
Changes in v3:
- New patch to remove unused codes in ct69000 driver
Changes in v2: None
drivers/video/ct69000.c | 21 --------------------- 1 file changed, 21 deletions(-)
drivers/video/ct69000.c +0 -21
@@ -256,9 +256,6 @@ struct ctfb_chips_properties {static const struct ctfb_chips_properties chips[] = { {PCI_DEVICE_ID_CT_69000 ,0x200000 ,1 ,4 ,-2 ,3 ,257 ,100 ,220 }, -#ifdef CONFIG_USE_CPCIDVI - {PCI_DEVICE_ID_CT_69030 ,0x400000 ,1 ,4 ,-2 ,3 ,257 ,100 ,220 }, -#endif {PCI_DEVICE_ID_CT_65555 ,0x100000 ,16 ,4 ,0 ,1 ,255 ,48 ,220 },/* NOT TESTED */ {0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 }/* Terminator */ };
@@ -944,9 +941,6 @@ SetDrawingEngine (int bits_per_pixel)*/ static struct pci_device_id supported[] = { {PCI_VENDOR_ID_CT ,PCI_DEVICE_ID_CT_69000 }, -#ifdef CONFIG_USE_CPCIDVI - {PCI_VENDOR_ID_CT ,PCI_DEVICE_ID_CT_69030 }, -#endif {} };
@@ -1111,22 +1105,7 @@ video_hw_init (void) pGD->cprBase = pci_mem_base;/* Dummy */ /* set up Hardware */ -#ifdef CONFIG_USE_CPCIDVI -if (device_id ==PCI_DEVICE_ID_CT_69030 ) { -ctWrite (CT_MSR_W_O ,0x0b ); -ctWrite (0x3cd ,0x13 ); -ctWrite_i (CT_FP_O ,0x02 ,0x00 ); -ctWrite_i (CT_FP_O ,0x05 ,0x00 ); -ctWrite_i (CT_FP_O ,0x06 ,0x00 ); -ctWrite (0x3c2 ,0x0b ); -ctWrite_i (CT_FP_O ,0x02 ,0x10 ); -ctWrite_i (CT_FP_O ,0x01 ,0x09 ); - }else { -ctWrite (CT_MSR_W_O ,0x01 ); - } -#else ctWrite (CT_MSR_W_O ,0x01 ); -#endif /* set the extended Registers */ ctLoadRegs (CT_XR_O , xreg);
Signature · 1 line
1.8.2.1
PATCH v3 7/7 video: ct69000: Remove unused codes
Quoted 6 lines · Bin Meng
Remove unused
CONFIG_USE_CPCIDVIwrapped codes.Signed-off-by Bin Meng <[email protected]>---
Quoted 7 lines
Changes in v3:
- New patch to remove unused codes in ct69000 driverChanges in v2: None
drivers/video/ct69000.c | 21 --------------------- 1 file changed, 21 deletions(-)
PATCH v3 7/7 video: ct69000: Remove unused codes
In reply to Bin MengQuoted 3 lines · On Mon, 24 Aug 2015 01:00:09 -0700 Bin Meng <[email protected]> wrote:
Remove unused
CONFIG_USE_CPCIDVIwrapped codes.Signed-off-by Bin Meng <[email protected]>
PATCH v3 7/7 video: ct69000: Remove unused codes
Quoted 8 lines · Anatolij Gustschin
Quoted 3 lines · On Mon, 24 Aug 2015 01:00:09 -0700 Bin Meng <[email protected]> wrote:
Remove unused
CONFIG_USE_CPCIDVIwrapped codes.Signed-off-by Bin Meng <[email protected]>
Applied to u-boot-x86, thanks!
PATCH v3 1/7 x86: i8042: Remove unused codes
In reply to Bin MengQuoted 6 lines · Bin Meng
Remove unused
CONFIG_USE_CPCIDVIwrapped codes.Signed-off-by Bin Meng <[email protected]>---
Quoted 8 lines
Changes in v3:
- Keepi8042_flush(),i8042_disable()andboard_i8042_skip()Changes in v2:
- Split the removing of unused codes into this patchdrivers/input/i8042.c | 17 ----------------- 1 file changed, 17 deletions(-)
PATCH v3 1/7 x86: i8042: Remove unused codes
Quoted 10 lines · Simon Glass
Quoted 9 lines · Bin Meng
Remove unused
CONFIG_USE_CPCIDVIwrapped codes.Signed-off-by Bin Meng <[email protected]>---
Changes in v3:
- Keepi8042_flush(),i8042_disable()andboard_i8042_skip()
Quoted 7 lines
Quoted 5 lines
Changes in v2:
- Split the removing of unused codes into this patchdrivers/input/i8042.c | 17 ----------------- 1 file changed, 17 deletions(-)Acked-by Simon Glass <[email protected]>
I'm also going to apply this series as a bug-fix since it corrects the i8042 controller init, etc.
Applied to u-boot-x86, thanks!