Commit 27801688 authored by Archit Taneja's avatar Archit Taneja Committed by Mauro Carvalho Chehab

[media] OMAP_VOUT: CLEANUP: Remove redundant code from omap_vout_isr

Currently, there is a lot of redundant code is between DPI and VENC panels, this
can be made common by moving out field/interlace specific code to a separate
function called omapvid_handle_interlace_display(). There is no functional
change made.
Signed-off-by: default avatarArchit Taneja <archit@ti.com>
Reviewed-by: default avatarSumit Semwal <sumit.semwal@ti.com>
Acked-by: default avatarVaibhav Hiremath <hvaibhav@ti.com>
Signed-off-by: default avatarVaibhav Hiremath <hvaibhav@ti.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent d06db7ec
...@@ -523,10 +523,50 @@ static int omapvid_apply_changes(struct omap_vout_device *vout) ...@@ -523,10 +523,50 @@ static int omapvid_apply_changes(struct omap_vout_device *vout)
return 0; return 0;
} }
static int omapvid_handle_interlace_display(struct omap_vout_device *vout,
unsigned int irqstatus, struct timeval timevalue)
{
u32 fid;
if (vout->first_int) {
vout->first_int = 0;
goto err;
}
if (irqstatus & DISPC_IRQ_EVSYNC_ODD)
fid = 1;
else if (irqstatus & DISPC_IRQ_EVSYNC_EVEN)
fid = 0;
else
goto err;
vout->field_id ^= 1;
if (fid != vout->field_id) {
if (fid == 0)
vout->field_id = fid;
} else if (0 == fid) {
if (vout->cur_frm == vout->next_frm)
goto err;
vout->cur_frm->ts = timevalue;
vout->cur_frm->state = VIDEOBUF_DONE;
wake_up_interruptible(&vout->cur_frm->done);
vout->cur_frm = vout->next_frm;
} else {
if (list_empty(&vout->dma_queue) ||
(vout->cur_frm != vout->next_frm))
goto err;
}
return vout->field_id;
err:
return 0;
}
static void omap_vout_isr(void *arg, unsigned int irqstatus) static void omap_vout_isr(void *arg, unsigned int irqstatus)
{ {
int ret; int ret, fid;
u32 addr, fid; u32 addr;
struct omap_overlay *ovl; struct omap_overlay *ovl;
struct timeval timevalue; struct timeval timevalue;
struct omapvideo_info *ovid; struct omapvideo_info *ovid;
...@@ -547,107 +587,59 @@ static void omap_vout_isr(void *arg, unsigned int irqstatus) ...@@ -547,107 +587,59 @@ static void omap_vout_isr(void *arg, unsigned int irqstatus)
spin_lock(&vout->vbq_lock); spin_lock(&vout->vbq_lock);
do_gettimeofday(&timevalue); do_gettimeofday(&timevalue);
if (cur_display->type != OMAP_DISPLAY_TYPE_VENC) { 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 (!(irqstatus & (DISPC_IRQ_VSYNC | DISPC_IRQ_VSYNC2)))
goto vout_isr_err;
break;
case OMAP_DISPLAY_TYPE_HDMI:
if (!(irqstatus & DISPC_IRQ_EVSYNC_EVEN))
goto vout_isr_err;
break;
default:
goto vout_isr_err; goto vout_isr_err;
} break;
if (!vout->first_int && (vout->cur_frm != vout->next_frm)) { case OMAP_DISPLAY_TYPE_VENC:
vout->cur_frm->ts = timevalue; fid = omapvid_handle_interlace_display(vout, irqstatus,
vout->cur_frm->state = VIDEOBUF_DONE; timevalue);
wake_up_interruptible(&vout->cur_frm->done); if (!fid)
vout->cur_frm = vout->next_frm;
}
vout->first_int = 0;
if (list_empty(&vout->dma_queue))
goto vout_isr_err; goto vout_isr_err;
break;
case OMAP_DISPLAY_TYPE_HDMI:
if (!(irqstatus & DISPC_IRQ_EVSYNC_EVEN))
goto vout_isr_err;
break;
default:
goto vout_isr_err;
}
vout->next_frm = list_entry(vout->dma_queue.next, if (!vout->first_int && (vout->cur_frm != vout->next_frm)) {
struct videobuf_buffer, queue); vout->cur_frm->ts = timevalue;
list_del(&vout->next_frm->queue); vout->cur_frm->state = VIDEOBUF_DONE;
wake_up_interruptible(&vout->cur_frm->done);
vout->next_frm->state = VIDEOBUF_ACTIVE; vout->cur_frm = vout->next_frm;
}
addr = (unsigned long) vout->queued_buf_addr[vout->next_frm->i]
+ vout->cropped_offset;
/* First save the configuration in ovelray structure */ vout->first_int = 0;
ret = omapvid_init(vout, addr); if (list_empty(&vout->dma_queue))
if (ret) goto vout_isr_err;
printk(KERN_ERR VOUT_NAME
"failed to set overlay info\n");
/* Enable the pipeline and set the Go bit */
ret = omapvid_apply_changes(vout);
if (ret)
printk(KERN_ERR VOUT_NAME "failed to change mode\n");
} else {
if (vout->first_int) { vout->next_frm = list_entry(vout->dma_queue.next,
vout->first_int = 0; struct videobuf_buffer, queue);
goto vout_isr_err; list_del(&vout->next_frm->queue);
}
if (irqstatus & DISPC_IRQ_EVSYNC_ODD)
fid = 1;
else if (irqstatus & DISPC_IRQ_EVSYNC_EVEN)
fid = 0;
else
goto vout_isr_err;
vout->field_id ^= 1; vout->next_frm->state = VIDEOBUF_ACTIVE;
if (fid != vout->field_id) {
if (0 == fid)
vout->field_id = fid;
goto vout_isr_err; addr = (unsigned long) vout->queued_buf_addr[vout->next_frm->i]
} + vout->cropped_offset;
if (0 == fid) {
if (vout->cur_frm == vout->next_frm)
goto vout_isr_err;
vout->cur_frm->ts = timevalue;
vout->cur_frm->state = VIDEOBUF_DONE;
wake_up_interruptible(&vout->cur_frm->done);
vout->cur_frm = vout->next_frm;
} else if (1 == fid) {
if (list_empty(&vout->dma_queue) ||
(vout->cur_frm != vout->next_frm))
goto vout_isr_err;
vout->next_frm = list_entry(vout->dma_queue.next,
struct videobuf_buffer, queue);
list_del(&vout->next_frm->queue);
vout->next_frm->state = VIDEOBUF_ACTIVE;
addr = (unsigned long)
vout->queued_buf_addr[vout->next_frm->i] +
vout->cropped_offset;
/* First save the configuration in ovelray structure */
ret = omapvid_init(vout, addr);
if (ret)
printk(KERN_ERR VOUT_NAME
"failed to set overlay info\n");
/* Enable the pipeline and set the Go bit */
ret = omapvid_apply_changes(vout);
if (ret)
printk(KERN_ERR VOUT_NAME
"failed to change mode\n");
}
} /* First save the configuration in ovelray structure */
ret = omapvid_init(vout, addr);
if (ret)
printk(KERN_ERR VOUT_NAME
"failed to set overlay info\n");
/* Enable the pipeline and set the Go bit */
ret = omapvid_apply_changes(vout);
if (ret)
printk(KERN_ERR VOUT_NAME "failed to change mode\n");
vout_isr_err: vout_isr_err:
spin_unlock(&vout->vbq_lock); spin_unlock(&vout->vbq_lock);
} }
/* Video buffer call backs */ /* Video buffer call backs */
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment