Skip to content

Commit

Permalink
[media] OMAP_VOUT: Fix VSYNC IRQ handling in omap_vout_isr
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Archit Taneja authored and Mauro Carvalho Chehab committed Nov 7, 2011
1 parent 2780168 commit e144ca6
Showing 1 changed file with 11 additions and 3 deletions.
14 changes: 11 additions & 3 deletions drivers/media/video/omap/omap_vout.c
Original file line number Diff line number Diff line change
Expand Up @@ -565,8 +565,8 @@ static int omapvid_handle_interlace_display(struct omap_vout_device *vout,

static void omap_vout_isr(void *arg, unsigned int irqstatus)
{
int ret, fid;
u32 addr;
int ret, fid, mgr_id;
u32 addr, irq;
struct omap_overlay *ovl;
struct timeval timevalue;
struct omapvideo_info *ovid;
Expand All @@ -582,14 +582,22 @@ static void omap_vout_isr(void *arg, unsigned int irqstatus)
if (!ovl->manager || !ovl->manager->device)
return;

mgr_id = ovl->manager->id;
cur_display = ovl->manager->device;

spin_lock(&vout->vbq_lock);
do_gettimeofday(&timevalue);

switch (cur_display->type) {
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;
break;
case OMAP_DISPLAY_TYPE_VENC:
Expand Down

0 comments on commit e144ca6

Please sign in to comment.