diff options
Diffstat (limited to 'drivers/media/platform/renesas/vsp1/vsp1_drv.c')
-rw-r--r-- | drivers/media/platform/renesas/vsp1/vsp1_drv.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/drivers/media/platform/renesas/vsp1/vsp1_drv.c b/drivers/media/platform/renesas/vsp1/vsp1_drv.c index 5710152d6511..a9db84be4822 100644 --- a/drivers/media/platform/renesas/vsp1/vsp1_drv.c +++ b/drivers/media/platform/renesas/vsp1/vsp1_drv.c @@ -45,7 +45,8 @@ static irqreturn_t vsp1_irq_handler(int irq, void *data) { - u32 mask = VI6_WPF_IRQ_STA_DFE | VI6_WPF_IRQ_STA_FRE; + u32 mask = VI6_WPF_IRQ_STA_DFE | VI6_WPF_IRQ_STA_FRE | + VI6_WPF_IRQ_STA_UND; struct vsp1_device *vsp1 = data; irqreturn_t ret = IRQ_NONE; unsigned int i; @@ -60,6 +61,14 @@ static irqreturn_t vsp1_irq_handler(int irq, void *data) status = vsp1_read(vsp1, VI6_WPF_IRQ_STA(i)); vsp1_write(vsp1, VI6_WPF_IRQ_STA(i), ~status & mask); + if ((status & VI6_WPF_IRQ_STA_UND) && wpf->entity.pipe) { + wpf->entity.pipe->underrun_count++; + + dev_warn_ratelimited(vsp1->dev, + "Underrun occurred at WPF%u (total underruns %u)\n", + i, wpf->entity.pipe->underrun_count); + } + if (status & VI6_WPF_IRQ_STA_DFE) { vsp1_pipeline_frame_end(wpf->entity.pipe); ret = IRQ_HANDLED; @@ -977,7 +986,7 @@ done: return ret; } -static int vsp1_remove(struct platform_device *pdev) +static void vsp1_remove(struct platform_device *pdev) { struct vsp1_device *vsp1 = platform_get_drvdata(pdev); @@ -985,8 +994,6 @@ static int vsp1_remove(struct platform_device *pdev) rcar_fcp_put(vsp1->fcp); pm_runtime_disable(&pdev->dev); - - return 0; } static const struct of_device_id vsp1_of_match[] = { @@ -999,7 +1006,7 @@ MODULE_DEVICE_TABLE(of, vsp1_of_match); static struct platform_driver vsp1_platform_driver = { .probe = vsp1_probe, - .remove = vsp1_remove, + .remove_new = vsp1_remove, .driver = { .name = "vsp1", .pm = &vsp1_pm_ops, |