Commit eae936e2 authored by Yoichi Yuasa's avatar Yoichi Yuasa Committed by Linus Torvalds

[PATCH] serial: update NEC VR4100 series serial support

- 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: default avatarYoichi Yuasa <yuasa@hh.iij4u.or.jp>
Cc: Russell King <rmk@arm.linux.org.uk>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent f26d583e
...@@ -234,7 +234,7 @@ static inline const char *siu_type_name(struct uart_port *port) ...@@ -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) ...@@ -482,9 +482,6 @@ static irqreturn_t siu_interrupt(int irq, void *dev_id, struct pt_regs *regs)
struct uart_port *port; struct uart_port *port;
uint8_t iir, lsr; uint8_t iir, lsr;
if (dev_id == NULL)
return IRQ_NONE;
port = (struct uart_port *)dev_id; port = (struct uart_port *)dev_id;
iir = siu_read(port, UART_IIR); iir = siu_read(port, UART_IIR);
...@@ -507,6 +504,9 @@ static int siu_startup(struct uart_port *port) ...@@ -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); siu_clear_fifo(port);
(void)siu_read(port, UART_LSR); (void)siu_read(port, UART_LSR);
...@@ -545,9 +545,6 @@ static void siu_shutdown(struct uart_port *port) ...@@ -545,9 +545,6 @@ static void siu_shutdown(struct uart_port *port)
unsigned long flags; unsigned long flags;
uint8_t lcr; uint8_t lcr;
if (port->membase == NULL)
return;
siu_write(port, UART_IER, 0); siu_write(port, UART_IER, 0);
spin_lock_irqsave(&port->lock, flags); spin_lock_irqsave(&port->lock, flags);
...@@ -802,53 +799,6 @@ static int siu_init_ports(void) ...@@ -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) #define BOTH_EMPTY (UART_LSR_TEMT | UART_LSR_THRE)
static void wait_for_xmitr(struct uart_port *port) static void wait_for_xmitr(struct uart_port *port)
...@@ -915,7 +865,7 @@ static int siu_console_setup(struct console *con, char *options) ...@@ -915,7 +865,7 @@ static int siu_console_setup(struct console *con, char *options)
if (port->membase == NULL) { if (port->membase == NULL) {
if (port->mapbase == 0) if (port->mapbase == 0)
return -ENODEV; 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) ...@@ -949,7 +899,7 @@ static int __devinit siu_console_init(void)
for (i = 0; i < num; i++) { for (i = 0; i < num; i++) {
port = &siu_uart_ports[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,9 +944,11 @@ static int siu_probe(struct device *dev) ...@@ -994,9 +944,11 @@ static int siu_probe(struct device *dev)
port->dev = dev; port->dev = dev;
retval = uart_add_one_port(&siu_uart_driver, port); 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) {
uart_unregister_driver(&siu_uart_driver); uart_unregister_driver(&siu_uart_driver);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment