summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 058dea9)
raw | patch | inline | side by side (parent: 058dea9)
author | Nikhil Devshatwar <nikhil.nd@ti.com> | |
Wed, 3 Dec 2014 18:48:10 +0000 (12:48 -0600) | ||
committer | Jyri Sarha <jsarha@ti.com> | |
Fri, 5 Dec 2014 14:04:50 +0000 (16:04 +0200) |
When the stream OFF ioctl is called, driver only disables the interrupts
and clears the VPDMA list interrupts. But VIP interrupt registers are
not cleared. Fix this by calling "clear_irqs".
It does clear the vpdma list interrupts also.
Signed-off-by: Nikhil Devshatwar <nikhil.nd@ti.com>
Signed-off-by: Benoit Parrot <bparrot@ti.com>
Signed-off-by: Jyri Sarha <jsarha@ti.com>
and clears the VPDMA list interrupts. But VIP interrupt registers are
not cleared. Fix this by calling "clear_irqs".
It does clear the vpdma list interrupts also.
Signed-off-by: Nikhil Devshatwar <nikhil.nd@ti.com>
Signed-off-by: Benoit Parrot <bparrot@ti.com>
Signed-off-by: Jyri Sarha <jsarha@ti.com>
drivers/media/platform/ti-vpe/vip.c | patch | blob | history |
index e966d2edbf109b7708c7d5f9f11237c9fc7e80bf..110ccc77ad4fc4436b8fa91721ea80aed256543d 100644 (file)
irq_num, list_num, false);
}
+static void clear_irqs(struct vip_dev *dev, int irq_num)
+{
+ u32 reg_addr = VIP_INT0_STATUS0_CLR +
+ VIP_INTC_INTX_OFFSET * irq_num;
+
+ write_sreg(dev->shared, reg_addr, 0xffffffff);
+
+ vpdma_clear_list_stat(dev->shared->vpdma, irq_num);
+}
+
static void populate_desc_list(struct vip_stream *stream)
{
struct vip_port *port = stream->port;
struct vip_buffer *buf;
disable_irqs(dev, dev->slice_id);
+ clear_irqs(dev, dev->slice_id);
/* release all active buffers */
while (!list_empty(&dev->vip_bufs)) {