Commit 3b285cb2 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'tty-3.10-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty

Pull tty/serial driver fixes from Greg Kroah-Hartman:
 "Here are some small bugfixes, and one revert, of serial driver issues
  that have been reported"

* tag 'tty-3.10-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty:
  Revert "serial: 8250: Make SERIAL_8250_RUNTIME_UARTS work correctly"
  serial: samsung: enable clock before clearing pending interrupts during init
  serial/imx: disable hardware flow control at startup
parents c6d6b9d1 317a6842
...@@ -2755,7 +2755,7 @@ static void __init serial8250_isa_init_ports(void) ...@@ -2755,7 +2755,7 @@ static void __init serial8250_isa_init_ports(void)
if (nr_uarts > UART_NR) if (nr_uarts > UART_NR)
nr_uarts = UART_NR; nr_uarts = UART_NR;
for (i = 0; i < UART_NR; i++) { for (i = 0; i < nr_uarts; i++) {
struct uart_8250_port *up = &serial8250_ports[i]; struct uart_8250_port *up = &serial8250_ports[i];
struct uart_port *port = &up->port; struct uart_port *port = &up->port;
...@@ -2916,7 +2916,7 @@ static int __init serial8250_console_setup(struct console *co, char *options) ...@@ -2916,7 +2916,7 @@ static int __init serial8250_console_setup(struct console *co, char *options)
* if so, search for the first available port that does have * if so, search for the first available port that does have
* console support. * console support.
*/ */
if (co->index >= UART_NR) if (co->index >= nr_uarts)
co->index = 0; co->index = 0;
port = &serial8250_ports[co->index].port; port = &serial8250_ports[co->index].port;
if (!port->iobase && !port->membase) if (!port->iobase && !port->membase)
...@@ -2957,7 +2957,7 @@ int serial8250_find_port(struct uart_port *p) ...@@ -2957,7 +2957,7 @@ int serial8250_find_port(struct uart_port *p)
int line; int line;
struct uart_port *port; struct uart_port *port;
for (line = 0; line < UART_NR; line++) { for (line = 0; line < nr_uarts; line++) {
port = &serial8250_ports[line].port; port = &serial8250_ports[line].port;
if (uart_match_port(p, port)) if (uart_match_port(p, port))
return line; return line;
...@@ -3110,7 +3110,7 @@ static int serial8250_remove(struct platform_device *dev) ...@@ -3110,7 +3110,7 @@ static int serial8250_remove(struct platform_device *dev)
{ {
int i; int i;
for (i = 0; i < UART_NR; i++) { for (i = 0; i < nr_uarts; i++) {
struct uart_8250_port *up = &serial8250_ports[i]; struct uart_8250_port *up = &serial8250_ports[i];
if (up->port.dev == &dev->dev) if (up->port.dev == &dev->dev)
...@@ -3178,7 +3178,7 @@ static struct uart_8250_port *serial8250_find_match_or_unused(struct uart_port * ...@@ -3178,7 +3178,7 @@ static struct uart_8250_port *serial8250_find_match_or_unused(struct uart_port *
/* /*
* First, find a port entry which matches. * First, find a port entry which matches.
*/ */
for (i = 0; i < UART_NR; i++) for (i = 0; i < nr_uarts; i++)
if (uart_match_port(&serial8250_ports[i].port, port)) if (uart_match_port(&serial8250_ports[i].port, port))
return &serial8250_ports[i]; return &serial8250_ports[i];
...@@ -3187,7 +3187,7 @@ static struct uart_8250_port *serial8250_find_match_or_unused(struct uart_port * ...@@ -3187,7 +3187,7 @@ static struct uart_8250_port *serial8250_find_match_or_unused(struct uart_port *
* free entry. We look for one which hasn't been previously * free entry. We look for one which hasn't been previously
* used (indicated by zero iobase). * used (indicated by zero iobase).
*/ */
for (i = 0; i < UART_NR; i++) for (i = 0; i < nr_uarts; i++)
if (serial8250_ports[i].port.type == PORT_UNKNOWN && if (serial8250_ports[i].port.type == PORT_UNKNOWN &&
serial8250_ports[i].port.iobase == 0) serial8250_ports[i].port.iobase == 0)
return &serial8250_ports[i]; return &serial8250_ports[i];
...@@ -3196,7 +3196,7 @@ static struct uart_8250_port *serial8250_find_match_or_unused(struct uart_port * ...@@ -3196,7 +3196,7 @@ static struct uart_8250_port *serial8250_find_match_or_unused(struct uart_port *
* That also failed. Last resort is to find any entry which * That also failed. Last resort is to find any entry which
* doesn't have a real port associated with it. * doesn't have a real port associated with it.
*/ */
for (i = 0; i < UART_NR; i++) for (i = 0; i < nr_uarts; i++)
if (serial8250_ports[i].port.type == PORT_UNKNOWN) if (serial8250_ports[i].port.type == PORT_UNKNOWN)
return &serial8250_ports[i]; return &serial8250_ports[i];
......
...@@ -761,6 +761,8 @@ static int imx_startup(struct uart_port *port) ...@@ -761,6 +761,8 @@ static int imx_startup(struct uart_port *port)
temp = readl(sport->port.membase + UCR2); temp = readl(sport->port.membase + UCR2);
temp |= (UCR2_RXEN | UCR2_TXEN); temp |= (UCR2_RXEN | UCR2_TXEN);
if (!sport->have_rtscts)
temp |= UCR2_IRTS;
writel(temp, sport->port.membase + UCR2); writel(temp, sport->port.membase + UCR2);
if (USE_IRDA(sport)) { if (USE_IRDA(sport)) {
......
...@@ -1166,6 +1166,18 @@ static int s3c24xx_serial_init_port(struct s3c24xx_uart_port *ourport, ...@@ -1166,6 +1166,18 @@ static int s3c24xx_serial_init_port(struct s3c24xx_uart_port *ourport,
ourport->tx_irq = ret; ourport->tx_irq = ret;
ourport->clk = clk_get(&platdev->dev, "uart"); ourport->clk = clk_get(&platdev->dev, "uart");
if (IS_ERR(ourport->clk)) {
pr_err("%s: Controller clock not found\n",
dev_name(&platdev->dev));
return PTR_ERR(ourport->clk);
}
ret = clk_prepare_enable(ourport->clk);
if (ret) {
pr_err("uart: clock failed to prepare+enable: %d\n", ret);
clk_put(ourport->clk);
return ret;
}
/* Keep all interrupts masked and cleared */ /* Keep all interrupts masked and cleared */
if (s3c24xx_serial_has_interrupt_mask(port)) { if (s3c24xx_serial_has_interrupt_mask(port)) {
...@@ -1180,6 +1192,7 @@ static int s3c24xx_serial_init_port(struct s3c24xx_uart_port *ourport, ...@@ -1180,6 +1192,7 @@ static int s3c24xx_serial_init_port(struct s3c24xx_uart_port *ourport,
/* reset the fifos (and setup the uart) */ /* reset the fifos (and setup the uart) */
s3c24xx_serial_resetport(port, cfg); s3c24xx_serial_resetport(port, cfg);
clk_disable_unprepare(ourport->clk);
return 0; return 0;
} }
......
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