summaryrefslogtreecommitdiff
path: root/drivers/media/pci/cobalt/cobalt-irq.c
diff options
context:
space:
mode:
authorHans Verkuil <hans.verkuil@cisco.com>2015-05-21 06:19:28 -0300
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>2015-05-30 11:19:01 -0300
commit86bad00a2fd5327925417eb05a2b3d1819c42a70 (patch)
tree9735dc7106a976f6bd3bfcf150c6f4e2157b1257 /drivers/media/pci/cobalt/cobalt-irq.c
parent1e35c77dd1f8f3c1c8ef419ec422250fecb31fef (diff)
[media] cobalt: fix irqs used for the adv7511 transmitter
The interrupt bit assignments use for the adv7511 were off by one. This means that the current scheme (bit << (4 * stream_index)) can no longer be used. Fix this by precalculating and storing the correct masks in the cobalt_stream struct. This wasn't noticed before because the adv7511 interrupts are very rare. But for CEC support these interrupts are essential, so this made me realize that it wasn't working correctly. Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Diffstat (limited to 'drivers/media/pci/cobalt/cobalt-irq.c')
-rw-r--r--drivers/media/pci/cobalt/cobalt-irq.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/drivers/media/pci/cobalt/cobalt-irq.c b/drivers/media/pci/cobalt/cobalt-irq.c
index e18f49e6f0e3..a133dfcb2ead 100644
--- a/drivers/media/pci/cobalt/cobalt-irq.c
+++ b/drivers/media/pci/cobalt/cobalt-irq.c
@@ -153,8 +153,7 @@ irqreturn_t cobalt_irq_handler(int irq, void *dev_id)
for (i = 0; i < COBALT_NUM_STREAMS; i++) {
struct cobalt_stream *s = &cobalt->streams[i];
- unsigned dma_fifo_mask =
- COBALT_SYSSTAT_VI0_LOST_DATA_MSK << (4 * s->video_channel);
+ unsigned dma_fifo_mask = s->dma_fifo_mask;
if (dma_interrupt & (1 << s->dma_channel)) {
cobalt->irq_dma[i]++;
@@ -169,7 +168,7 @@ irqreturn_t cobalt_irq_handler(int irq, void *dev_id)
}
if (s->is_audio)
continue;
- if (edge & (0x20 << (4 * s->video_channel)))
+ if (edge & s->adv_irq_mask)
set_bit(COBALT_STREAM_FL_ADV_IRQ, &s->flags);
if ((edge & mask & dma_fifo_mask) && vb2_is_streaming(&s->q)) {
cobalt_info("full rx FIFO %d\n", i);
@@ -219,7 +218,7 @@ void cobalt_irq_work_handler(struct work_struct *work)
interrupt_service_routine, 0, NULL);
mask = cobalt_read_bar1(cobalt, COBALT_SYS_STAT_MASK);
cobalt_write_bar1(cobalt, COBALT_SYS_STAT_MASK,
- mask | (0x20 << (4 * s->video_channel)));
+ mask | s->adv_irq_mask);
}
}
}