diff --git a/common/serial.c b/common/serial.c index 0c0712bc41..96e69d52b9 100644 --- a/common/serial.c +++ b/common/serial.c @@ -89,6 +89,7 @@ serial_initfunc(lpc2292_serial_initialize); serial_initfunc(max3100_serial_initialize); serial_initfunc(mxc_serial_initialize); serial_initfunc(netarm_serial_initialize); +serial_initfunc(pl01x_serial_initialize); void serial_register(struct serial_device *dev) { @@ -156,6 +157,7 @@ void serial_initialize(void) max3100_serial_initialize(); mxc_serial_initialize(); netarm_serial_initialize(); + pl01x_serial_initialize(); serial_assign(default_serial_console()->name); } diff --git a/drivers/serial/serial_pl01x.c b/drivers/serial/serial_pl01x.c index d4c5137092..beb0c98b23 100644 --- a/drivers/serial/serial_pl01x.c +++ b/drivers/serial/serial_pl01x.c @@ -30,6 +30,8 @@ #include #include #include +#include +#include #include "serial_pl01x.h" /* @@ -54,7 +56,7 @@ static struct pl01x_regs *pl01x_get_regs(int portnum) #ifdef CONFIG_PL010_SERIAL -int serial_init (void) +static int pl01x_serial_init(void) { struct pl01x_regs *regs = pl01x_get_regs(CONSOLE_PORT); unsigned int divisor; @@ -104,7 +106,7 @@ int serial_init (void) #ifdef CONFIG_PL011_SERIAL -int serial_init (void) +static int pl01x_serial_init(void) { struct pl01x_regs *regs = pl01x_get_regs(CONSOLE_PORT); unsigned int temp; @@ -169,7 +171,7 @@ int serial_init (void) #endif /* CONFIG_PL011_SERIAL */ -void serial_putc (const char c) +static void pl01x_serial_putc(const char c) { if (c == '\n') pl01x_putc (CONSOLE_PORT, '\r'); @@ -177,24 +179,24 @@ void serial_putc (const char c) pl01x_putc (CONSOLE_PORT, c); } -void serial_puts (const char *s) +static void pl01x_serial_puts(const char *s) { while (*s) { serial_putc (*s++); } } -int serial_getc (void) +static int pl01x_serial_getc(void) { return pl01x_getc (CONSOLE_PORT); } -int serial_tstc (void) +static int pl01x_serial_tstc(void) { return pl01x_tstc (CONSOLE_PORT); } -void serial_setbrg (void) +static void pl01x_serial_setbrg(void) { struct pl01x_regs *regs = pl01x_get_regs(CONSOLE_PORT); @@ -250,3 +252,56 @@ static int pl01x_tstc (int portnum) WATCHDOG_RESET(); return !(readl(®s->fr) & UART_PL01x_FR_RXFE); } + +#ifdef CONFIG_SERIAL_MULTI +static struct serial_device pl01x_serial_drv = { + .name = "pl01x_serial", + .start = pl01x_serial_init, + .stop = NULL, + .setbrg = pl01x_serial_setbrg, + .putc = pl01x_serial_putc, + .puts = pl01x_serial_puts, + .getc = pl01x_serial_getc, + .tstc = pl01x_serial_tstc, +}; + +void pl01x_serial_initialize(void) +{ + serial_register(&pl01x_serial_drv); +} + +__weak struct serial_device *default_serial_console(void) +{ + return &pl01x_serial_drv; +} +#else +int serial_init(void) +{ + return pl01x_serial_init(); +} + +void serial_setbrg(void) +{ + pl01x_serial_setbrg(); +} + +void serial_putc(const char c) +{ + pl01x_serial_putc(c); +} + +void serial_puts(const char *s) +{ + pl01x_serial_puts(s); +} + +int serial_getc(void) +{ + return pl01x_serial_getc(); +} + +int serial_tstc(void) +{ + return pl01x_serial_tstc(); +} +#endif