From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Chou Date: Mon, 01 Oct 2012 20:31:00 +0800 Subject: [U-Boot] [PATCH 40/71] serial: arm: Implement CONFIG_SERIAL_MULTI into altera serial driver In-Reply-To: <1347837696-3192-41-git-send-email-marex@denx.de> References: <1347837696-3192-1-git-send-email-marex@denx.de> <1347837696-3192-41-git-send-email-marex@denx.de> Message-ID: <50698D04.7050703@wytron.com.tw> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On 09/17/2012 07:21 AM, Marek Vasut wrote: > Implement support for CONFIG_SERIAL_MULTI into altera serial driver. > This driver was so far only usable directly, but this patch also adds > support for the multi method. This allows using more than one serial > driver alongside the altera driver. Also, add a weak implementation > of default_serial_console() returning this driver. > > Signed-off-by: Marek Vasut > Cc: Marek Vasut > Cc: Tom Rini > Cc: Scott McNutt > --- > common/serial.c | 2 + > drivers/serial/altera_uart.c | 83 ++++++++++++++++++++++++++++++++++++------ > 2 files changed, 73 insertions(+), 12 deletions(-) Dear Marek, Please include the following headers. --- a/drivers/serial/altera_uart.c +++ b/drivers/serial/altera_uart.c @@ -26,6 +26,8 @@ #include #include #include +#include +#include DECLARE_GLOBAL_DATA_PTR; Otherwise, Acked-by: Thomas Chou Best regards, Thomas Chou > > diff --git a/common/serial.c b/common/serial.c > index 24879ec..e6566da 100644 > --- a/common/serial.c > +++ b/common/serial.c > @@ -70,6 +70,7 @@ serial_initfunc(ml2_serial_initialize); > serial_initfunc(sconsole_serial_initialize); > serial_initfunc(p3mx_serial_initialize); > serial_initfunc(altera_jtag_serial_initialize); > +serial_initfunc(altera_serial_initialize); > > void serial_register(struct serial_device *dev) > { > @@ -118,6 +119,7 @@ void serial_initialize(void) > sconsole_serial_initialize(); > p3mx_serial_initialize(); > altera_jtag_serial_initialize(); > + altera_serial_initialize(); > > serial_assign(default_serial_console()->name); > } > diff --git a/drivers/serial/altera_uart.c b/drivers/serial/altera_uart.c > index 045f119..18b820b 100644 > --- a/drivers/serial/altera_uart.c > +++ b/drivers/serial/altera_uart.c > @@ -37,27 +37,33 @@ static nios_uart_t *uart = (nios_uart_t *) CONFIG_SYS_NIOS_CONSOLE; > > #if defined(CONFIG_SYS_NIOS_FIXEDBAUD) > > -/* Everything's already setup for fixed-baud PTF > +/* > + * Everything's already setup for fixed-baud PTF > * assignment > */ > -void serial_setbrg (void){ return; } > -int serial_init (void) { return (0);} > +static void altera_serial_setbrg(void) > +{ > +} > + > +static int altera_serial_init(void) > +{ > + return 0; > +} > > #else > > -void serial_setbrg (void) > +static void altera_serial_setbrg(void) > { > unsigned div; > > div = (CONFIG_SYS_CLK_FREQ/gd->baudrate)-1; > writel (div, &uart->divisor); > - return; > } > > -int serial_init (void) > +static int altera_serial_init(void) > { > - serial_setbrg (); > - return (0); > + serial_setbrg(); > + return 0; > } > > #endif /* CONFIG_SYS_NIOS_FIXEDBAUD */ > @@ -65,7 +71,7 @@ int serial_init (void) > /*----------------------------------------------------------------------- > * UART CONSOLE > *---------------------------------------------------------------------*/ > -void serial_putc (char c) > +static void altera_serial_putc(char c) > { > if (c == '\n') > serial_putc ('\r'); > @@ -74,21 +80,74 @@ void serial_putc (char c) > writel ((unsigned char)c, &uart->txdata); > } > > -void serial_puts (const char *s) > +static void altera_serial_puts(const char *s) > { > while (*s != 0) { > serial_putc (*s++); > } > } > > -int serial_tstc (void) > +static int altera_serial_tstc(void) > { > return (readl (&uart->status) & NIOS_UART_RRDY); > } > > -int serial_getc (void) > +static int altera_serial_getc(void) > { > while (serial_tstc () == 0) > WATCHDOG_RESET (); > return (readl (&uart->rxdata) & 0x00ff ); > } > + > +#ifdef CONFIG_SERIAL_MULTI > +static struct serial_device altera_serial_drv = { > + .name = "altera_serial", > + .start = altera_serial_init, > + .stop = NULL, > + .setbrg = altera_serial_setbrg, > + .putc = altera_serial_putc, > + .puts = altera_serial_puts, > + .getc = altera_serial_getc, > + .tstc = altera_serial_tstc, > +}; > + > +void altera_serial_initialize(void) > +{ > + serial_register(&altera_serial_drv); > +} > + > +__weak struct serial_device *default_serial_console(void) > +{ > + return &altera_serial_drv; > +} > +#else > +int serial_init(void) > +{ > + return altera_serial_init(); > +} > + > +void serial_setbrg(void) > +{ > + altera_serial_setbrg(); > +} > + > +void serial_putc(const char c) > +{ > + altera_serial_putc(c); > +} > + > +void serial_puts(const char *s) > +{ > + altera_serial_puts(s); > +} > + > +int serial_getc(void) > +{ > + return altera_serial_getc(); > +} > + > +int serial_tstc(void) > +{ > + return altera_serial_tstc(); > +} > +#endif >