summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Bugge <marbugge@cisco.com>2013-12-10 11:14:26 -0300
committerChanho Park <chanho61.park@samsung.com>2014-11-18 11:55:28 +0900
commit5d336dc70a93cbb43e09c9d298884f2b6386ad48 (patch)
treea06ac44049e478768282829e06b9cef33fe55418
parenta0451745c0c9896d02246afa0ee49589b5f58265 (diff)
downloadlinux-3.10-5d336dc70a93cbb43e09c9d298884f2b6386ad48.tar.gz
linux-3.10-5d336dc70a93cbb43e09c9d298884f2b6386ad48.tar.bz2
linux-3.10-5d336dc70a93cbb43e09c9d298884f2b6386ad48.zip
upstream: [media] adv7842: properly enable/disable the irqs
The method of disabling the irq-output pin caused many "empty" interrupts. Instead, actually disable/enable the interrupts by changing the interrupt masks. Also enable STORE_MASKED_IRQ in INT1 configuration, otherwise when HDMI events happen while the interrupt is masked those events will be ignored when the interrupt is unmasked. Signed-off-by: Martin Bugge <marbugge@cisco.com> Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
-rw-r--r--drivers/media/i2c/adv7842.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/drivers/media/i2c/adv7842.c b/drivers/media/i2c/adv7842.c
index 4c6d90c994e..409f84150e8 100644
--- a/drivers/media/i2c/adv7842.c
+++ b/drivers/media/i2c/adv7842.c
@@ -1786,10 +1786,8 @@ static int adv7842_isr(struct v4l2_subdev *sd, u32 status, bool *handled)
struct adv7842_state *state = to_state(sd);
u8 fmt_change_cp, fmt_change_digital, fmt_change_sdp;
u8 irq_status[5];
- u8 irq_cfg = io_read(sd, 0x40);
- /* disable irq-pin output */
- io_write(sd, 0x40, irq_cfg | 0x3);
+ adv7842_irq_enable(sd, false);
/* read status */
irq_status[0] = io_read(sd, 0x43);
@@ -1810,6 +1808,8 @@ static int adv7842_isr(struct v4l2_subdev *sd, u32 status, bool *handled)
if (irq_status[4])
io_write(sd, 0x9e, irq_status[4]);
+ adv7842_irq_enable(sd, true);
+
v4l2_dbg(1, debug, sd, "%s: irq %x, %x, %x, %x, %x\n", __func__,
irq_status[0], irq_status[1], irq_status[2],
irq_status[3], irq_status[4]);
@@ -1845,9 +1845,6 @@ static int adv7842_isr(struct v4l2_subdev *sd, u32 status, bool *handled)
if (handled)
*handled = true;
- /* re-enable irq-pin output */
- io_write(sd, 0x40, irq_cfg);
-
return 0;
}
@@ -2446,7 +2443,7 @@ static int adv7842_core_init(struct v4l2_subdev *sd,
io_write(sd, 0x33, 0x40);
/* interrupts */
- io_write(sd, 0x40, 0xe2); /* Configure INT1 */
+ io_write(sd, 0x40, 0xf2); /* Configure INT1 */
adv7842_irq_enable(sd, true);