|
@@ -678,11 +678,18 @@ static void mxs_auart_settermios(struct uart_port *u,
|
|
|
|
|
|
static irqreturn_t mxs_auart_irq_handle(int irq, void *context)
|
|
|
{
|
|
|
- u32 istatus, istat;
|
|
|
+ u32 istat;
|
|
|
struct mxs_auart_port *s = context;
|
|
|
u32 stat = readl(s->port.membase + AUART_STAT);
|
|
|
|
|
|
- istatus = istat = readl(s->port.membase + AUART_INTR);
|
|
|
+ istat = readl(s->port.membase + AUART_INTR);
|
|
|
+
|
|
|
+ /* ack irq */
|
|
|
+ writel(istat & (AUART_INTR_RTIS
|
|
|
+ | AUART_INTR_TXIS
|
|
|
+ | AUART_INTR_RXIS
|
|
|
+ | AUART_INTR_CTSMIS),
|
|
|
+ s->port.membase + AUART_INTR_CLR);
|
|
|
|
|
|
if (istat & AUART_INTR_CTSMIS) {
|
|
|
uart_handle_cts_change(&s->port, stat & AUART_STAT_CTS);
|
|
@@ -702,12 +709,6 @@ static irqreturn_t mxs_auart_irq_handle(int irq, void *context)
|
|
|
istat &= ~AUART_INTR_TXIS;
|
|
|
}
|
|
|
|
|
|
- writel(istatus & (AUART_INTR_RTIS
|
|
|
- | AUART_INTR_TXIS
|
|
|
- | AUART_INTR_RXIS
|
|
|
- | AUART_INTR_CTSMIS),
|
|
|
- s->port.membase + AUART_INTR_CLR);
|
|
|
-
|
|
|
return IRQ_HANDLED;
|
|
|
}
|
|
|
|