Fix support for PS/2 keyboard on TQM85xx boards
authorWolfgang Denk <wd@pollux.denx.de>
Wed, 19 Jul 2006 12:49:35 +0000 (14:49 +0200)
committerWolfgang Denk <wd@pollux.denx.de>
Wed, 19 Jul 2006 12:49:35 +0000 (14:49 +0200)
The PS/2 keyobard driver for the TQM85xx modules only supports the
internal DUART of the MPC85xx CPU. Since the MPC8560 doesn't
include a DUART, the TQM8560 modules can't be used with the PS/2
keyboard controller on the STK85xx board.
The PS/2 keyboard driver should work with the modules TQM8540,
TQM8541 and TQM8555, but it only has been tested on a TQM8540, yet.

Make sure the PS/2 controller on the STK85xx is programmed. Jumper
settings: X66 1-2, 9-10; X61 2-3

Patch by Martin Krause, 21 Jun 2006

CHANGELOG
board/tqm85xx/tqm85xx.c
drivers/keyboard.c
drivers/ps2ser.c
include/configs/TQM85xx.h

index 4ad1dd7..854f9d7 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -2,6 +2,17 @@
 Changes since U-Boot 1.1.4:
 ======================================================================
 
+* Fix support for PS/2 keyboard on TQM85xx boards
+  The PS/2 keyobard driver for the TQM85xx modules only supports the
+  internal DUART of the MPC85xx CPU. Since the MPC8560 doesn't
+  include a DUART, the TQM8560 modules can't be used with the PS/2
+  keyboard controller on the STK85xx board.
+  The PS/2 keyboard driver should work with the modules TQM8540,
+  TQM8541 and TQM8555, but it only has been tested on a TQM8540, yet.
+  Make sure the PS/2 controller on the STK85xx is programmed. Jumper
+  settings: X66 1-2, 9-10; X61 2-3
+  Patch by Martin Krause, 21 Jun 2006
+
 * Adjust RTC century handling on STK52xx board to match Linux driver.
   Patch by Martin Krause, 12 Jun 2006
 
index a87affc..be2dd64 100644 (file)
  * MA 02111-1307 USA
  */
 
-#ifdef CONFIG_PS2MULT
-void ps2mult_early_init(void);
-#endif
-
 #include <common.h>
 #include <pci.h>
 #include <asm/processor.h>
@@ -46,6 +42,9 @@ extern flash_info_t flash_info[];     /* FLASH chips info */
 void local_bus_init (void);
 long int fixed_sdram (void);
 ulong flash_get_size (ulong base, int banknum);
+#ifdef CONFIG_PS2MULT
+void ps2mult_early_init(void);
+#endif
 
 #ifdef CONFIG_CPM2
 /*
index 41eccf2..9975202 100644 (file)
@@ -33,7 +33,7 @@
 
 #define        KBD_BUFFER_LEN          0x20  /* size of the keyboardbuffer */
 
-#if defined(CONFIG_MPC5xxx) || defined(CONFIG_MPC85xx)
+#if defined(CONFIG_MPC5xxx) || defined(CONFIG_MPC8540) || defined(CONFIG_MPC8541) || defined(CONFIG_MPC8555)
 int ps2ser_check(void);
 #endif
 
@@ -75,7 +75,7 @@ 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_MPC85xx)
+#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
@@ -90,7 +90,7 @@ static int kbd_getc(void)
 {
        char c;
        while(in_pointer==out_pointer) {
-#if defined(CONFIG_MPC5xxx) || defined(CONFIG_MPC85xx)
+#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
index 8aea8fd..ec32ed2 100644 (file)
@@ -49,7 +49,7 @@ DECLARE_GLOBAL_DATA_PTR;
 #error CONFIG_PS2SERIAL must be in 1 ... 6
 #endif
 
-#elif defined(CONFIG_MPC85xx)
+#elif defined(CONFIG_MPC8540) || defined(CONFIG_MPC8541) || defined(CONFIG_MPC8555)
 
 #if CONFIG_PS2SERIAL == 1
 #define COM_BASE (CFG_CCSRBAR+0x4500)
@@ -59,13 +59,13 @@ DECLARE_GLOBAL_DATA_PTR;
 #error CONFIG_PS2SERIAL must be in 1 ... 2
 #endif
 
-#endif /* CONFIG_MPC5xxx / CONFIG_MPC85xx */
+#endif /* CONFIG_MPC5xxx / CONFIG_MPC8540 / other */
 
 static int     ps2ser_getc_hw(void);
 static void    ps2ser_interrupt(void *dev_id);
 
 extern struct  serial_state rs_table[]; /* in serial.c */
-#if !defined(CONFIG_MPC5xxx) && !defined(CONFIG_MPC85xx)
+#if !defined(CONFIG_MPC5xxx) && !defined(CONFIG_MPC8540) && !defined(CONFIG_MPC8541) && !defined(CONFIG_MPC8555)
 static struct  serial_state *state;
 #endif
 
@@ -120,7 +120,7 @@ int ps2ser_init(void)
        return (0);
 }
 
-#elif defined(CONFIG_MPC85xx)
+#elif defined(CONFIG_MPC8540) || defined(CONFIG_MPC8541) || defined(CONFIG_MPC8555)
 int ps2ser_init(void)
 {
        NS16550_t com_port = (NS16550_t)COM_BASE;
@@ -136,7 +136,7 @@ int ps2ser_init(void)
        return (0);
 }
 
-#else /* !CONFIG_MPC5xxx && !CONFIG_MPC85xx */
+#else /* !CONFIG_MPC5xxx && !CONFIG_MPC8540 / other */
 
 static inline unsigned int ps2ser_in(int offset)
 {
@@ -180,13 +180,13 @@ int ps2ser_init(void)
 
        return 0;
 }
-#endif /* CONFIG_MPC5xxx / CONFIG_MPC85xx / other */
+#endif /* CONFIG_MPC5xxx / CONFIG_MPC8540 / other */
 
 void ps2ser_putc(int chr)
 {
 #ifdef CONFIG_MPC5xxx
        volatile struct mpc5xxx_psc *psc = (struct mpc5xxx_psc *)PSC_BASE;
-#elif defined(CONFIG_MPC85xx)
+#elif defined(CONFIG_MPC8540) || defined(CONFIG_MPC8541) || defined(CONFIG_MPC8555)
        NS16550_t com_port = (NS16550_t)COM_BASE;
 #endif
 #ifdef DEBUG
@@ -197,7 +197,7 @@ void ps2ser_putc(int chr)
        while (!(psc->psc_status & PSC_SR_TXRDY));
 
        psc->psc_buffer_8 = chr;
-#elif defined(CONFIG_MPC85xx)
+#elif defined(CONFIG_MPC8540) || defined(CONFIG_MPC8541) || defined(CONFIG_MPC8555)
        while ((com_port->lsr & LSR_THRE) == 0);
        com_port->thr = chr;
 #else
@@ -211,7 +211,7 @@ static int ps2ser_getc_hw(void)
 {
 #ifdef CONFIG_MPC5xxx
        volatile struct mpc5xxx_psc *psc = (struct mpc5xxx_psc *)PSC_BASE;
-#elif defined(CONFIG_MPC85xx)
+#elif defined(CONFIG_MPC8540) || defined(CONFIG_MPC8541) || defined(CONFIG_MPC8555)
        NS16550_t com_port = (NS16550_t)COM_BASE;
 #endif
        int res = -1;
@@ -220,7 +220,7 @@ static int ps2ser_getc_hw(void)
        if (psc->psc_status & PSC_SR_RXRDY) {
                res = (psc->psc_buffer_8);
        }
-#elif defined(CONFIG_MPC85xx)
+#elif defined(CONFIG_MPC8540) || defined(CONFIG_MPC8541) || defined(CONFIG_MPC8555)
        if (com_port->lsr & LSR_DR) {
                res = com_port->rbr;
        }
@@ -279,7 +279,7 @@ static void ps2ser_interrupt(void *dev_id)
 {
 #ifdef CONFIG_MPC5xxx
        volatile struct mpc5xxx_psc *psc = (struct mpc5xxx_psc *)PSC_BASE;
-#elif defined(CONFIG_MPC85xx)
+#elif defined(CONFIG_MPC8540) || defined(CONFIG_MPC8541) || defined(CONFIG_MPC8555)
        NS16550_t com_port = (NS16550_t)COM_BASE;
 #endif
        int chr;
@@ -289,7 +289,7 @@ static void ps2ser_interrupt(void *dev_id)
                chr = ps2ser_getc_hw();
 #ifdef CONFIG_MPC5xxx
                status = psc->psc_status;
-#elif defined(CONFIG_MPC85xx)
+#elif defined(CONFIG_MPC8540) || defined(CONFIG_MPC8541) || defined(CONFIG_MPC8555)
                status = com_port->lsr;
 #else
                status = ps2ser_in(UART_IIR);
@@ -305,7 +305,7 @@ static void ps2ser_interrupt(void *dev_id)
                }
 #ifdef CONFIG_MPC5xxx
        } while (status & PSC_SR_RXRDY);
-#elif defined(CONFIG_MPC85xx)
+#elif defined(CONFIG_MPC8540) || defined(CONFIG_MPC8541) || defined(CONFIG_MPC8555)
        } while (status & LSR_DR);
 #else
        } while (status & UART_IIR_RDI);
index da6946b..bda85e0 100644 (file)
        {300, 600, 1200, 2400, 4800, 9600, 19200, 38400,115200}
 
 /* PS/2 Keyboard */
+#if !defined(CONFIG_TQM8560)
 #define CONFIG_PS2KBD                  /* AT-PS/2 Keyboard             */
 #define CONFIG_PS2MULT                 /* .. on PS/2 Multiplexer       */
 #define CONFIG_PS2SERIAL       2       /* .. on DUART2                 */
 #define CONFIG_PS2MULT_DELAY   (CFG_HZ/2)      /* Initial delay        */
 #define CONFIG_BOARD_EARLY_INIT_R      1
+#endif /* !CONFIG_TQM8560 */
 
 /* Use the HUSH parser */
 #define CFG_HUSH_PARSER