[media] OMAP_VOUT: Fix VSYNC IRQ handling in omap_vout_isr
Currently, in omap_vout_isr(), if the panel type is DPI, and if we get either VSYNC or VSYNC2 interrupts, we proceed ahead to set the current buffers state to VIDEOBUF_DONE and prepare to display the next frame in the queue. On OMAP4, because we have 2 LCD managers, the panel type itself is not sufficient to tell if we have received the correct irq, i.e, we shouldn't proceed ahead if we get a VSYNC interrupt for LCD2 manager, or a VSYNC2 interrupt for LCD manager. Fix this by correlating LCD manager to VSYNC interrupt and LCD2 manager to VSYNC2 interrupt. Signed-off-by: Archit Taneja <archit@ti.com> Reviewed-by: Sumit Semwal <sumit.semwal@ti.com> Acked-by: Vaibhav Hiremath <hvaibhav@ti.com> Signed-off-by: Vaibhav Hiremath <hvaibhav@ti.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
2780168859
commit
e144ca6426
1 changed files with 11 additions and 3 deletions
|
@ -565,8 +565,8 @@ err:
|
||||||
|
|
||||||
static void omap_vout_isr(void *arg, unsigned int irqstatus)
|
static void omap_vout_isr(void *arg, unsigned int irqstatus)
|
||||||
{
|
{
|
||||||
int ret, fid;
|
int ret, fid, mgr_id;
|
||||||
u32 addr;
|
u32 addr, irq;
|
||||||
struct omap_overlay *ovl;
|
struct omap_overlay *ovl;
|
||||||
struct timeval timevalue;
|
struct timeval timevalue;
|
||||||
struct omapvideo_info *ovid;
|
struct omapvideo_info *ovid;
|
||||||
|
@ -582,6 +582,7 @@ static void omap_vout_isr(void *arg, unsigned int irqstatus)
|
||||||
if (!ovl->manager || !ovl->manager->device)
|
if (!ovl->manager || !ovl->manager->device)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
mgr_id = ovl->manager->id;
|
||||||
cur_display = ovl->manager->device;
|
cur_display = ovl->manager->device;
|
||||||
|
|
||||||
spin_lock(&vout->vbq_lock);
|
spin_lock(&vout->vbq_lock);
|
||||||
|
@ -589,7 +590,14 @@ static void omap_vout_isr(void *arg, unsigned int irqstatus)
|
||||||
|
|
||||||
switch (cur_display->type) {
|
switch (cur_display->type) {
|
||||||
case OMAP_DISPLAY_TYPE_DPI:
|
case OMAP_DISPLAY_TYPE_DPI:
|
||||||
if (!(irqstatus & (DISPC_IRQ_VSYNC | DISPC_IRQ_VSYNC2)))
|
if (mgr_id == OMAP_DSS_CHANNEL_LCD)
|
||||||
|
irq = DISPC_IRQ_VSYNC;
|
||||||
|
else if (mgr_id == OMAP_DSS_CHANNEL_LCD2)
|
||||||
|
irq = DISPC_IRQ_VSYNC2;
|
||||||
|
else
|
||||||
|
goto vout_isr_err;
|
||||||
|
|
||||||
|
if (!(irqstatus & irq))
|
||||||
goto vout_isr_err;
|
goto vout_isr_err;
|
||||||
break;
|
break;
|
||||||
case OMAP_DISPLAY_TYPE_VENC:
|
case OMAP_DISPLAY_TYPE_VENC:
|
||||||
|
|
Loading…
Add table
Reference in a new issue