[APPLIED] [PATCH] OMAP: McBSP: Fix legacy interrupts to clear their status

2009-05-14 Thread Tony Lindgren
This patch has been applied to the linux-omap
by youw fwiendly patch wobot.

Initial commit ID (Likely to change): cffe61bb4de2c8f1ccf7e87ed5d7008d68001ff8

PatchWorks
http://patchwork.kernel.org/patch/13934/

Git (Likely to change, and takes a while to get mirrored)
http://git.kernel.org/?p=linux/kernel/git/tmlind/linux-omap-2.6.git;a=commit;h=cffe61bb4de2c8f1ccf7e87ed5d7008d68001ff8


--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH] OMAP: McBSP: Fix legacy interrupts to clear their status

2009-03-24 Thread ext-eero . nurkkala
From: Eero Nurkkala 

If XSYNCERR or RSYNCERR interrupts are enabled, they are never
cleared causing the IRQ handler to be continuously called.
This patch clears the IRQs in question in the event they are
enabled and taken.

Signed-off-by: Eero Nurkkala 
---
 arch/arm/plat-omap/mcbsp.c |   30 --
 1 files changed, 24 insertions(+), 6 deletions(-)

diff --git a/arch/arm/plat-omap/mcbsp.c b/arch/arm/plat-omap/mcbsp.c
index e2e8b76..6a10f65 100644
--- a/arch/arm/plat-omap/mcbsp.c
+++ b/arch/arm/plat-omap/mcbsp.c
@@ -91,11 +91,20 @@ static void omap_mcbsp_dump_reg(u8 id)
 static irqreturn_t omap_mcbsp_tx_irq_handler(int irq, void *dev_id)
 {
struct omap_mcbsp *mcbsp_tx = dev_id;
+   u16 irqst_spcr2;
 
-   dev_dbg(mcbsp_tx->dev, "TX IRQ callback : 0x%x\n",
-   OMAP_MCBSP_READ(mcbsp_tx->io_base, SPCR2));
+   irqst_spcr2 = OMAP_MCBSP_READ(mcbsp_tx->io_base, SPCR2);
+   dev_dbg(mcbsp_tx->dev, "TX IRQ callback : 0x%x\n", irqst_spcr2);
 
-   complete(&mcbsp_tx->tx_irq_completion);
+   if (irqst_spcr2 & XSYNC_ERR) {
+   dev_err(mcbsp_tx->dev, "TX Frame Sync Error! : 0x%x\n",
+   irqst_spcr2);
+   /* Writing zero to XSYNC_ERR clears the IRQ */
+   OMAP_MCBSP_WRITE(mcbsp_tx->io_base, SPCR2,
+   irqst_spcr2 & ~(XSYNC_ERR));
+   } else {
+   complete(&mcbsp_tx->tx_irq_completion);
+   }
 
return IRQ_HANDLED;
 }
@@ -103,11 +112,20 @@ static irqreturn_t omap_mcbsp_tx_irq_handler(int irq, 
void *dev_id)
 static irqreturn_t omap_mcbsp_rx_irq_handler(int irq, void *dev_id)
 {
struct omap_mcbsp *mcbsp_rx = dev_id;
+   u16 irqst_spcr1;
 
-   dev_dbg(mcbsp_rx->dev, "RX IRQ callback : 0x%x\n",
-   OMAP_MCBSP_READ(mcbsp_rx->io_base, SPCR2));
+   irqst_spcr1 = OMAP_MCBSP_READ(mcbsp_rx->io_base, SPCR1);
+   dev_dbg(mcbsp_rx->dev, "RX IRQ callback : 0x%x\n", irqst_spcr1);
 
-   complete(&mcbsp_rx->rx_irq_completion);
+   if (irqst_spcr1 & RSYNC_ERR) {
+   dev_err(mcbsp_rx->dev, "RX Frame Sync Error! : 0x%x\n",
+   irqst_spcr1);
+   /* Writing zero to RSYNC_ERR clears the IRQ */
+   OMAP_MCBSP_WRITE(mcbsp_rx->io_base, SPCR1,
+   irqst_spcr1 & ~(RSYNC_ERR));
+   } else {
+   complete(&mcbsp_rx->tx_irq_completion);
+   }
 
return IRQ_HANDLED;
 }
-- 
1.5.2

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html