diff options
| -rw-r--r-- | common/serial.c | 2 | ||||
| -rw-r--r-- | drivers/serial/serial_pl01x.c | 69 | 
2 files changed, 64 insertions, 7 deletions
| diff --git a/common/serial.c b/common/serial.c index 0c0712bc4..96e69d52b 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 d4c513709..beb0c98b2 100644 --- a/drivers/serial/serial_pl01x.c +++ b/drivers/serial/serial_pl01x.c @@ -30,6 +30,8 @@  #include <common.h>  #include <watchdog.h>  #include <asm/io.h> +#include <serial.h> +#include <linux/compiler.h>  #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 |