|
@@ -737,6 +737,7 @@ static irqreturn_t imx_int(int irq, void *dev_id)
|
|
|
struct imx_port *sport = dev_id;
|
|
|
unsigned int sts;
|
|
|
unsigned int sts2;
|
|
|
+ irqreturn_t ret = IRQ_NONE;
|
|
|
|
|
|
sts = readl(sport->port.membase + USR1);
|
|
|
sts2 = readl(sport->port.membase + USR2);
|
|
@@ -746,26 +747,34 @@ static irqreturn_t imx_int(int irq, void *dev_id)
|
|
|
imx_dma_rxint(sport);
|
|
|
else
|
|
|
imx_rxint(irq, dev_id);
|
|
|
+ ret = IRQ_HANDLED;
|
|
|
}
|
|
|
|
|
|
if ((sts & USR1_TRDY &&
|
|
|
readl(sport->port.membase + UCR1) & UCR1_TXMPTYEN) ||
|
|
|
(sts2 & USR2_TXDC &&
|
|
|
- readl(sport->port.membase + UCR4) & UCR4_TCEN))
|
|
|
+ readl(sport->port.membase + UCR4) & UCR4_TCEN)) {
|
|
|
imx_txint(irq, dev_id);
|
|
|
+ ret = IRQ_HANDLED;
|
|
|
+ }
|
|
|
|
|
|
- if (sts & USR1_RTSD)
|
|
|
+ if (sts & USR1_RTSD) {
|
|
|
imx_rtsint(irq, dev_id);
|
|
|
+ ret = IRQ_HANDLED;
|
|
|
+ }
|
|
|
|
|
|
- if (sts & USR1_AWAKE)
|
|
|
+ if (sts & USR1_AWAKE) {
|
|
|
writel(USR1_AWAKE, sport->port.membase + USR1);
|
|
|
+ ret = IRQ_HANDLED;
|
|
|
+ }
|
|
|
|
|
|
if (sts2 & USR2_ORE) {
|
|
|
sport->port.icount.overrun++;
|
|
|
writel(USR2_ORE, sport->port.membase + USR2);
|
|
|
+ ret = IRQ_HANDLED;
|
|
|
}
|
|
|
|
|
|
- return IRQ_HANDLED;
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
/*
|