diff options
-rw-r--r-- | arch/mips/cpu/xburst/jz_serial.c | 67 | ||||
-rw-r--r-- | common/serial.c | 2 |
2 files changed, 63 insertions, 6 deletions
diff --git a/arch/mips/cpu/xburst/jz_serial.c b/arch/mips/cpu/xburst/jz_serial.c index e6c48e0..b1e1d27 100644 --- a/arch/mips/cpu/xburst/jz_serial.c +++ b/arch/mips/cpu/xburst/jz_serial.c @@ -23,6 +23,8 @@ #include <common.h> #include <asm/io.h> #include <asm/jz4740.h> +#include <serial.h> +#include <linux/compiler.h> /* * serial_init - initialize a channel @@ -35,7 +37,7 @@ */ struct jz4740_uart *uart = (struct jz4740_uart *)CONFIG_SYS_UART_BASE; -int serial_init(void) +static int jz_serial_init(void) { /* Disable port interrupts while changing hardware */ writeb(0, &uart->dlhr_ier); @@ -62,7 +64,7 @@ int serial_init(void) return 0; } -void serial_setbrg(void) +static void jz_serial_setbrg(void) { u32 baud_div, tmp; @@ -79,7 +81,7 @@ void serial_setbrg(void) writeb(tmp, &uart->lcr); } -int serial_tstc(void) +static int jz_serial_tstc(void) { if (readb(&uart->lsr) & UART_LSR_DR) return 1; @@ -87,7 +89,7 @@ int serial_tstc(void) return 0; } -void serial_putc(const char c) +static void jz_serial_putc(const char c) { if (c == '\n') serial_putc('\r'); @@ -99,7 +101,7 @@ void serial_putc(const char c) writeb((u8)c, &uart->rbr_thr_dllr); } -int serial_getc(void) +static int jz_serial_getc(void) { while (!serial_tstc()) ; @@ -107,8 +109,61 @@ int serial_getc(void) return readb(&uart->rbr_thr_dllr); } -void serial_puts(const char *s) +static void jz_serial_puts(const char *s) { while (*s) serial_putc(*s++); } + +#ifdef CONFIG_SERIAL_MULTI +static struct serial_device jz_serial_drv = { + .name = "jz_serial", + .start = jz_serial_init, + .stop = NULL, + .setbrg = jz_serial_setbrg, + .putc = jz_serial_putc, + .puts = jz_serial_puts, + .getc = jz_serial_getc, + .tstc = jz_serial_tstc, +}; + +void jz_serial_initialize(void) +{ + serial_register(&jz_serial_drv); +} + +__weak struct serial_device *default_serial_console(void) +{ + return &jz_serial_drv; +} +#else +int serial_init(void) +{ + return jz_serial_init(); +} + +void serial_setbrg(void) +{ + jz_serial_setbrg(); +} + +void serial_putc(const char c) +{ + jz_serial_putc(c); +} + +void serial_puts(const char *s) +{ + jz_serial_puts(s); +} + +int serial_getc(void) +{ + return jz_serial_getc(); +} + +int serial_tstc(void) +{ + return jz_serial_tstc(); +} +#endif diff --git a/common/serial.c b/common/serial.c index a5996fe..7f5d455 100644 --- a/common/serial.c +++ b/common/serial.c @@ -52,6 +52,7 @@ serial_initfunc(mpc512x_serial_initialize); serial_initfunc(uartlite_serial_initialize); serial_initfunc(au1x00_serial_initialize); serial_initfunc(asc_serial_initialize); +serial_initfunc(jz_serial_initialize); void serial_register(struct serial_device *dev) { @@ -82,6 +83,7 @@ void serial_initialize(void) zynq_serial_initalize(); au1x00_serial_initialize(); asc_serial_initialize(); + jz_serial_initialize(); serial_assign(default_serial_console()->name); } |