aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/cx18/cx18-firmware.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/video/cx18/cx18-firmware.c')
-rw-r--r--drivers/media/video/cx18/cx18-firmware.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/media/video/cx18/cx18-firmware.c b/drivers/media/video/cx18/cx18-firmware.c
index ab02da727519..06f5563d6d5a 100644
--- a/drivers/media/video/cx18/cx18-firmware.c
+++ b/drivers/media/video/cx18/cx18-firmware.c
@@ -380,6 +380,17 @@ int cx18_firmware_init(struct cx18 *cx)
380 if (sz <= 0) 380 if (sz <= 0)
381 return -EIO; 381 return -EIO;
382 } 382 }
383
384 /*
385 * The CPU firmware apparently sets up to receive an interrupt for it's
386 * outgoing IRQ_CPU_TO_EPU_ACK to us (*boggle*). We get an interrupt
387 * when it sends us an ack, but by the time we process it, that flag in
388 * the SW2 status register has been cleared by the CPU firmware.
389 * We'll prevent that not so useful behavior by clearing the CPU's
390 * interrupt enables for Ack IRQ's we want to process.
391 */
392 cx18_sw2_irq_disable_cpu(cx, IRQ_CPU_TO_EPU_ACK | IRQ_APU_TO_EPU_ACK);
393
383 /* initialize GPIO */ 394 /* initialize GPIO */
384 cx18_write_reg_expect(cx, 0x14001400, 0xc78110, 0x00001400, 0x14001400); 395 cx18_write_reg_expect(cx, 0x14001400, 0xc78110, 0x00001400, 0x14001400);
385 return 0; 396 return 0;