diff options
author | Andy Walls <awalls@md.metrocast.net> | 2010-07-19 00:41:41 -0300 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2010-08-08 23:42:55 -0300 |
commit | 98d109f90fc02ce8baf1c2471ffcf8d66fb0d8e6 (patch) | |
tree | df1a3191953696bcccc618a25f749ee8071565a9 /drivers/media/video/cx23885/cx23885-core.c | |
parent | d6b1850d3c49e66f17bbb67f964a48b11528f56b (diff) |
V4L/DVB: cx23885: Add preliminary IR Rx support for the HVR-1250 and TeVii S470
Add initial IR Rx support using the intergrated IR controller in the
A/V core of the CX23885 bridge chip.
This initial support is flawed in that I2C transactions should not
be performed in a hard irq context. That will be fixed in a
follow on patch.
The TeVii S470 support is reported to generate perptual interrupts
that renders a user' system nearly unusable. The TeVii S470 IR
will be disabled by default in a follow on patch.
Signed-off-by: Andy Walls <awalls@md.metrocast.net>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/cx23885/cx23885-core.c')
-rw-r--r-- | drivers/media/video/cx23885/cx23885-core.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/drivers/media/video/cx23885/cx23885-core.c b/drivers/media/video/cx23885/cx23885-core.c index a74c0ab859ed..93e7afb98889 100644 --- a/drivers/media/video/cx23885/cx23885-core.c +++ b/drivers/media/video/cx23885/cx23885-core.c @@ -1650,7 +1650,7 @@ static irqreturn_t cx23885_irq(int irq, void *dev_id) u32 ts1_status, ts1_mask; u32 ts2_status, ts2_mask; int vida_count = 0, ts1_count = 0, ts2_count = 0, handled = 0; - bool ir_handled = false; + bool subdev_handled; pci_status = cx_read(PCI_INT_STAT); pci_mask = cx_read(PCI_INT_MSK); @@ -1681,7 +1681,7 @@ static irqreturn_t cx23885_irq(int irq, void *dev_id) PCI_MSK_VID_C | PCI_MSK_VID_B | PCI_MSK_VID_A | PCI_MSK_AUD_INT | PCI_MSK_AUD_EXT | PCI_MSK_GPIO0 | PCI_MSK_GPIO1 | - PCI_MSK_IR)) { + PCI_MSK_AV_CORE | PCI_MSK_IR)) { if (pci_status & PCI_MSK_RISC_RD) dprintk(7, " (PCI_MSK_RISC_RD 0x%08x)\n", @@ -1731,6 +1731,10 @@ static irqreturn_t cx23885_irq(int irq, void *dev_id) dprintk(7, " (PCI_MSK_GPIO1 0x%08x)\n", PCI_MSK_GPIO1); + if (pci_status & PCI_MSK_AV_CORE) + dprintk(7, " (PCI_MSK_AV_CORE 0x%08x)\n", + PCI_MSK_AV_CORE); + if (pci_status & PCI_MSK_IR) dprintk(7, " (PCI_MSK_IR 0x%08x)\n", PCI_MSK_IR); @@ -1765,9 +1769,19 @@ static irqreturn_t cx23885_irq(int irq, void *dev_id) handled += cx23885_video_irq(dev, vida_status); if (pci_status & PCI_MSK_IR) { + subdev_handled = false; v4l2_subdev_call(dev->sd_ir, core, interrupt_service_routine, - pci_status, &ir_handled); - if (ir_handled) + pci_status, &subdev_handled); + if (subdev_handled) + handled++; + } + + if (pci_status & PCI_MSK_AV_CORE) { + subdev_handled = false; + v4l2_subdev_call(dev->sd_cx25840, + core, interrupt_service_routine, + pci_status, &subdev_handled); + if (subdev_handled) handled++; } |