altera_uart: Simplify altera_uart_console_putc
authorTobias Klauser <tklauser@distanz.ch>
Tue, 25 May 2010 15:00:08 +0000 (17:00 +0200)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 4 Jun 2010 20:37:18 +0000 (13:37 -0700)
The check for the TRDY flag after writing the character is not needed.
Also do a cpu_relax() inside the loop.

Pass a struct uart_port to altera_uart_console_putc, so we do not need
to get it (and dereference pointers) for every character.

Cc: Thomas Chou <thomas@wytron.com.tw>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/serial/altera_uart.c

index b1609cca0ec41126df0a1048cd891cf4e5488a87..7d6afc9755d528d1d19511b452b931fc2da44e8c 100644 (file)
@@ -391,31 +391,24 @@ int __init early_altera_uart_setup(struct altera_uart_platform_uart *platp)
        return 0;
 }
 
-static void altera_uart_console_putc(struct console *co, const char c)
+static void altera_uart_console_putc(struct uart_port *port, const char c)
 {
-       struct uart_port *port = &(altera_uart_ports + co->index)->port;
-       int i;
+       while (!(readl(port->membase + ALTERA_UART_STATUS_REG) &
+                ALTERA_UART_STATUS_TRDY_MSK))
+               cpu_relax();
 
-       for (i = 0; i < 0x10000; i++) {
-               if (readl(port->membase + ALTERA_UART_STATUS_REG) &
-                   ALTERA_UART_STATUS_TRDY_MSK)
-                       break;
-       }
        writel(c, port->membase + ALTERA_UART_TXDATA_REG);
-       for (i = 0; i < 0x10000; i++) {
-               if (readl(port->membase + ALTERA_UART_STATUS_REG) &
-                   ALTERA_UART_STATUS_TRDY_MSK)
-                       break;
-       }
 }
 
 static void altera_uart_console_write(struct console *co, const char *s,
                                      unsigned int count)
 {
+       struct uart_port *port = &(altera_uart_ports + co->index)->port;
+
        for (; count; count--, s++) {
-               altera_uart_console_putc(co, *s);
+               altera_uart_console_putc(port, *s);
                if (*s == '\n')
-                       altera_uart_console_putc(co, '\r');
+                       altera_uart_console_putc(port, '\r');
        }
 }