summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>2018-01-25 14:30:45 +0100
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2018-02-28 13:30:09 +0100
commiteefadcbca7f394fb9248384f2c759ebbe81e20c7 (patch)
tree189526ccec551d899566c00164d504760dd8da0f
parent2ea6ad8bc60f66a5d323ca7e93fddf2363c3ed80 (diff)
serial: altera: set RRDY flag also without irq
The UART can be operated without an irq. In this case a timer is setup that regularily calls altera_uart_interrupt(). The receiving part depends on pp->imr having the bit ALTERA_UART_STATUS_RRDY_MSK set, otherwise altera_uart_rx_chars() is never called. So ensure that the bit gets set (disguised as ALTERA_UART_CONTROL_RRDY_MSK) by not returning early from altera_uart_startup() if port->irq is 0. This doesn't affect the hardware as the ALTERA_UART_CONTROL_RRDY_MSK bit isn't actually written to the control register. Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> Acked-by: Tobias Klauser <tklauser@distanz.ch> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/tty/serial/altera_uart.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/drivers/tty/serial/altera_uart.c b/drivers/tty/serial/altera_uart.c
index 427843761d32..0e487ce091ac 100644
--- a/drivers/tty/serial/altera_uart.c
+++ b/drivers/tty/serial/altera_uart.c
@@ -321,20 +321,20 @@ static int altera_uart_startup(struct uart_port *port)
{
struct altera_uart *pp = container_of(port, struct altera_uart, port);
unsigned long flags;
- int ret;
if (!port->irq) {
timer_setup(&pp->tmr, altera_uart_timer, 0);
mod_timer(&pp->tmr, jiffies + uart_poll_timeout(port));
- return 0;
- }
-
- ret = request_irq(port->irq, altera_uart_interrupt, 0,
- DRV_NAME, port);
- if (ret) {
- pr_err(DRV_NAME ": unable to attach Altera UART %d "
- "interrupt vector=%d\n", port->line, port->irq);
- return ret;
+ } else {
+ int ret;
+
+ ret = request_irq(port->irq, altera_uart_interrupt, 0,
+ DRV_NAME, port);
+ if (ret) {
+ pr_err(DRV_NAME ": unable to attach Altera UART %d "
+ "interrupt vector=%d\n", port->line, port->irq);
+ return ret;
+ }
}
spin_lock_irqsave(&port->lock, flags);