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
This commit is contained in:
parent
edd0b509ba
commit
bd3143f040
11
CHANGELOG
11
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
|
||||
|
||||
|
@ -27,10 +27,6 @@
|
||||
* 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
|
||||
/*
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -178,11 +178,13 @@
|
||||
{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
|
||||
|
Loading…
Reference in New Issue
Block a user