]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
[PATCH] serial: update NEC VR4100 series serial support
authorYoichi Yuasa <yuasa@hh.iij4u.or.jp>
Sat, 4 Jun 2005 22:43:34 +0000 (15:43 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Sun, 5 Jun 2005 00:13:01 +0000 (17:13 -0700)
- Changed the return value of unknown type to NULL.

- Deleted the NULL check of dev_id in siu_interrupt().

- Deleted the NULL check of port->membase in siu_shutdown().

- Added the NULL check of port->membase to siu_startup().

- Removed early_uart_ops. Now using vr41xx_siu standerd one.

- Changed KSEG1ADDR() in siu_console_setup() to ioremap().

- When uart_add_one_port() failed, changed to set NULL to port->dev.

Signed-off-by: Yoichi Yuasa <yuasa@hh.iij4u.or.jp>
Cc: Russell King <rmk@arm.linux.org.uk>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
drivers/serial/vr41xx_siu.c

index 5d2ceb623e6fcebe34319cac6c4bcd72d2c78739..1f985327b0d485ec8b4648073ef39a80d25d28f1 100644 (file)
@@ -234,7 +234,7 @@ static inline const char *siu_type_name(struct uart_port *port)
                return "DSIU";
        }
 
                return "DSIU";
        }
 
-       return "unknown";
+       return NULL;
 }
 
 static unsigned int siu_tx_empty(struct uart_port *port)
 }
 
 static unsigned int siu_tx_empty(struct uart_port *port)
@@ -482,9 +482,6 @@ static irqreturn_t siu_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        struct uart_port *port;
        uint8_t iir, lsr;
 
        struct uart_port *port;
        uint8_t iir, lsr;
 
-       if (dev_id == NULL)
-               return IRQ_NONE;
-
        port = (struct uart_port *)dev_id;
 
        iir = siu_read(port, UART_IIR);
        port = (struct uart_port *)dev_id;
 
        iir = siu_read(port, UART_IIR);
@@ -507,6 +504,9 @@ static int siu_startup(struct uart_port *port)
 {
        int retval;
 
 {
        int retval;
 
+       if (port->membase == NULL)
+               return -ENODEV;
+
        siu_clear_fifo(port);
 
        (void)siu_read(port, UART_LSR);
        siu_clear_fifo(port);
 
        (void)siu_read(port, UART_LSR);
@@ -545,9 +545,6 @@ static void siu_shutdown(struct uart_port *port)
        unsigned long flags;
        uint8_t lcr;
 
        unsigned long flags;
        uint8_t lcr;
 
-       if (port->membase == NULL)
-               return;
-
        siu_write(port, UART_IER, 0);
 
        spin_lock_irqsave(&port->lock, flags);
        siu_write(port, UART_IER, 0);
 
        spin_lock_irqsave(&port->lock, flags);
@@ -802,53 +799,6 @@ static int siu_init_ports(void)
 
 #ifdef CONFIG_SERIAL_VR41XX_CONSOLE
 
 
 #ifdef CONFIG_SERIAL_VR41XX_CONSOLE
 
-static void early_set_termios(struct uart_port *port, struct termios *new,
-                              struct termios *old)
-{
-       tcflag_t c_cflag;
-       uint8_t lcr;
-       unsigned int baud, quot;
-
-       c_cflag = new->c_cflag;
-       switch (c_cflag & CSIZE) {
-       case CS5:
-               lcr = UART_LCR_WLEN5;
-               break;
-       case CS6:
-               lcr = UART_LCR_WLEN6;
-               break;
-       case CS7:
-               lcr = UART_LCR_WLEN7;
-               break;
-       default:
-               lcr = UART_LCR_WLEN8;
-               break;
-       }
-
-       if (c_cflag & CSTOPB)
-               lcr |= UART_LCR_STOP;
-       if (c_cflag & PARENB)
-               lcr |= UART_LCR_PARITY;
-       if ((c_cflag & PARODD) != PARODD)
-               lcr |= UART_LCR_EPAR;
-       if (c_cflag & CMSPAR)
-               lcr |= UART_LCR_SPAR;
-
-       baud = uart_get_baud_rate(port, new, old, 0, port->uartclk/16);
-       quot = uart_get_divisor(port, baud);
-
-       siu_write(port, UART_LCR, lcr | UART_LCR_DLAB);
-
-       siu_write(port, UART_DLL, (uint8_t)quot);
-       siu_write(port, UART_DLM, (uint8_t)(quot >> 8));
-
-       siu_write(port, UART_LCR, lcr);
-}
-
-static struct uart_ops early_uart_ops = {
-       .set_termios    = early_set_termios,
-};
-
 #define BOTH_EMPTY     (UART_LSR_TEMT | UART_LSR_THRE)
 
 static void wait_for_xmitr(struct uart_port *port)
 #define BOTH_EMPTY     (UART_LSR_TEMT | UART_LSR_THRE)
 
 static void wait_for_xmitr(struct uart_port *port)
@@ -915,7 +865,7 @@ static int siu_console_setup(struct console *con, char *options)
        if (port->membase == NULL) {
                if (port->mapbase == 0)
                        return -ENODEV;
        if (port->membase == NULL) {
                if (port->mapbase == 0)
                        return -ENODEV;
-               port->membase = (unsigned char __iomem *)KSEG1ADDR(port->mapbase);
+               port->membase = ioremap(port->mapbase, siu_port_size(port));
        }
 
        vr41xx_select_siu_interface(SIU_INTERFACE_RS232C);
        }
 
        vr41xx_select_siu_interface(SIU_INTERFACE_RS232C);
@@ -949,7 +899,7 @@ static int __devinit siu_console_init(void)
 
        for (i = 0; i < num; i++) {
                port = &siu_uart_ports[i];
 
        for (i = 0; i < num; i++) {
                port = &siu_uart_ports[i];
-               port->ops = &early_uart_ops;
+               port->ops = &siu_uart_ops;
        }
 
        register_console(&siu_console);
        }
 
        register_console(&siu_console);
@@ -994,8 +944,10 @@ static int siu_probe(struct device *dev)
                port->dev = dev;
 
                retval = uart_add_one_port(&siu_uart_driver, port);
                port->dev = dev;
 
                retval = uart_add_one_port(&siu_uart_driver, port);
-               if (retval)
+               if (retval < 0) {
+                       port->dev = NULL;
                        break;
                        break;
+               }
        }
 
        if (i == 0 && retval < 0) {
        }
 
        if (i == 0 && retval < 0) {