serial/nwpserial: Fix wrong register read address and add interrupt acknowledge.
authorBenjamin Krill <ben@codiert.org>
Wed, 13 May 2009 05:56:54 +0000 (05:56 +0000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Fri, 15 May 2009 06:43:42 +0000 (16:43 +1000)
The receive interrupt routine checks the wrong register if the
receive fifo is empty. Further an explicit interrupt acknowledge
write is introduced. In some circumstances another interrupt was
issued.

Signed-off-by: Benjamin Krill <ben@codiert.org>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
drivers/serial/nwpserial.c

index 32f3eaf0d262942dd2708c59cfe875fb88e69743..9e150b19d72678d6592a50cb34f6d2da29d899c3 100644 (file)
@@ -145,11 +145,13 @@ static irqreturn_t nwpserial_interrupt(int irq, void *dev_id)
                ch = dcr_read(up->dcr_host, UART_RX);
                if (up->port.ignore_status_mask != NWPSERIAL_STATUS_RXVALID)
                        tty_insert_flip_char(tty, ch, TTY_NORMAL);
-       } while (dcr_read(up->dcr_host, UART_RX) & UART_LSR_DR);
+       } while (dcr_read(up->dcr_host, UART_LSR) & UART_LSR_DR);
 
        tty_flip_buffer_push(tty);
        ret = IRQ_HANDLED;
 
+       /* clear interrupt */
+       dcr_write(up->dcr_host, UART_IIR, 1);
 out:
        spin_unlock(&up->port.lock);
        return ret;