diff options
Diffstat (limited to 'arch/arm/plat-omap/mcbsp.c')
-rw-r--r-- | 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 28b0a824b8cf..efa0e0111f38 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) | |||
91 | static irqreturn_t omap_mcbsp_tx_irq_handler(int irq, void *dev_id) | 91 | static irqreturn_t omap_mcbsp_tx_irq_handler(int irq, void *dev_id) |
92 | { | 92 | { |
93 | struct omap_mcbsp *mcbsp_tx = dev_id; | 93 | struct omap_mcbsp *mcbsp_tx = dev_id; |
94 | u16 irqst_spcr2; | ||
94 | 95 | ||
95 | dev_dbg(mcbsp_tx->dev, "TX IRQ callback : 0x%x\n", | 96 | irqst_spcr2 = OMAP_MCBSP_READ(mcbsp_tx->io_base, SPCR2); |
96 | OMAP_MCBSP_READ(mcbsp_tx->io_base, SPCR2)); | 97 | dev_dbg(mcbsp_tx->dev, "TX IRQ callback : 0x%x\n", irqst_spcr2); |
97 | 98 | ||
98 | complete(&mcbsp_tx->tx_irq_completion); | 99 | if (irqst_spcr2 & XSYNC_ERR) { |
100 | dev_err(mcbsp_tx->dev, "TX Frame Sync Error! : 0x%x\n", | ||
101 | irqst_spcr2); | ||
102 | /* Writing zero to XSYNC_ERR clears the IRQ */ | ||
103 | OMAP_MCBSP_WRITE(mcbsp_tx->io_base, SPCR2, | ||
104 | irqst_spcr2 & ~(XSYNC_ERR)); | ||
105 | } else { | ||
106 | complete(&mcbsp_tx->tx_irq_completion); | ||
107 | } | ||
99 | 108 | ||
100 | return IRQ_HANDLED; | 109 | return IRQ_HANDLED; |
101 | } | 110 | } |
@@ -103,11 +112,20 @@ static irqreturn_t omap_mcbsp_tx_irq_handler(int irq, void *dev_id) | |||
103 | static irqreturn_t omap_mcbsp_rx_irq_handler(int irq, void *dev_id) | 112 | static irqreturn_t omap_mcbsp_rx_irq_handler(int irq, void *dev_id) |
104 | { | 113 | { |
105 | struct omap_mcbsp *mcbsp_rx = dev_id; | 114 | struct omap_mcbsp *mcbsp_rx = dev_id; |
115 | u16 irqst_spcr1; | ||
106 | 116 | ||
107 | dev_dbg(mcbsp_rx->dev, "RX IRQ callback : 0x%x\n", | 117 | irqst_spcr1 = OMAP_MCBSP_READ(mcbsp_rx->io_base, SPCR1); |
108 | OMAP_MCBSP_READ(mcbsp_rx->io_base, SPCR2)); | 118 | dev_dbg(mcbsp_rx->dev, "RX IRQ callback : 0x%x\n", irqst_spcr1); |
109 | 119 | ||
110 | complete(&mcbsp_rx->rx_irq_completion); | 120 | if (irqst_spcr1 & RSYNC_ERR) { |
121 | dev_err(mcbsp_rx->dev, "RX Frame Sync Error! : 0x%x\n", | ||
122 | irqst_spcr1); | ||
123 | /* Writing zero to RSYNC_ERR clears the IRQ */ | ||
124 | OMAP_MCBSP_WRITE(mcbsp_rx->io_base, SPCR1, | ||
125 | irqst_spcr1 & ~(RSYNC_ERR)); | ||
126 | } else { | ||
127 | complete(&mcbsp_rx->tx_irq_completion); | ||
128 | } | ||
111 | 129 | ||
112 | return IRQ_HANDLED; | 130 | return IRQ_HANDLED; |
113 | } | 131 | } |