]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - drivers/keyboard.c
mpc83xx: add QE ethernet support
[karo-tx-uboot.git] / drivers / keyboard.c
index 7ba87be6855d02956c23c4eb5f1922773ad2348a..9975202d7a226b81a20b685fc46133b3a4ad8664 100644 (file)
 
 #define        KBD_BUFFER_LEN          0x20  /* size of the keyboardbuffer */
 
+#if defined(CONFIG_MPC5xxx) || defined(CONFIG_MPC8540) || defined(CONFIG_MPC8541) || defined(CONFIG_MPC8555)
+int ps2ser_check(void);
+#endif
+
 static volatile char kbd_buffer[KBD_BUFFER_LEN];
 static volatile int in_pointer = 0;
 static volatile int out_pointer = 0;
@@ -71,6 +75,10 @@ static void kbd_put_queue(char data)
 /* test if a character is in the queue */
 static int kbd_testc(void)
 {
+#if defined(CONFIG_MPC5xxx) || defined(CONFIG_MPC8540) || defined(CONFIG_MPC8541) || defined(CONFIG_MPC8555)
+       /* no ISR is used, so received chars must be polled */
+       ps2ser_check();
+#endif
        if(in_pointer==out_pointer)
                return(0); /* no data */
        else
@@ -81,7 +89,12 @@ static int kbd_testc(void)
 static int kbd_getc(void)
 {
        char c;
-       while(in_pointer==out_pointer);
+       while(in_pointer==out_pointer) {
+#if defined(CONFIG_MPC5xxx) || defined(CONFIG_MPC8540) || defined(CONFIG_MPC8541) || defined(CONFIG_MPC8555)
+       /* no ISR is used, so received chars must be polled */
+       ps2ser_check();
+#endif
+       ;}
        if((out_pointer+1)==KBD_BUFFER_LEN)
                out_pointer=0;
        else
@@ -194,8 +207,14 @@ void handle_scancode(unsigned char scancode)
        case 0xBA: /* caps lock released */
                return; /* just swallow */
        }
+#if 1
        if((scancode&0x80)==0x80) /* key released */
                return;
+#else
+       if((scancode&0x80)==0x00) /* key pressed */
+               return;
+       scancode &= ~0x80;
+#endif
        /* now, decide which table we need */
        if(scancode > (sizeof(kbd_plain_xlate)/sizeof(kbd_plain_xlate[0]))) { /* scancode not in list */
                PRINTF("unkown scancode %X\n",scancode);
@@ -243,12 +262,10 @@ void handle_scancode(unsigned char scancode)
 
 #ifdef CFG_CONSOLE_OVERWRITE_ROUTINE
 extern int overwrite_console (void);
+#define OVERWRITE_CONSOLE overwrite_console ()
 #else
-int overwrite_console (void)
-{
-       return (0);
-}
-#endif
+#define OVERWRITE_CONSOLE 0
+#endif /* CFG_CONSOLE_OVERWRITE_ROUTINE */
 
 int kbd_init (void)
 {
@@ -271,7 +288,7 @@ int kbd_init (void)
                /* check if this is the standard input device */
                if(strcmp(stdinname,DEVNAME)==0) {
                        /* reassign the console */
-                       if(overwrite_console()) {
+                       if(OVERWRITE_CONSOLE) {
                                return 1;
                        }
                        error=console_assign(stdin,DEVNAME);