[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: 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
d06db7ec90
commit
2780168859
|
@ -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)
|
||||||
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;
|
||||||
vout->next_frm = list_entry(vout->dma_queue.next,
|
case OMAP_DISPLAY_TYPE_HDMI:
|
||||||
struct videobuf_buffer, queue);
|
if (!(irqstatus & DISPC_IRQ_EVSYNC_EVEN))
|
||||||
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");
|
|
||||||
} else {
|
|
||||||
|
|
||||||
if (vout->first_int) {
|
|
||||||
vout->first_int = 0;
|
|
||||||
goto vout_isr_err;
|
goto vout_isr_err;
|
||||||
}
|
break;
|
||||||
if (irqstatus & DISPC_IRQ_EVSYNC_ODD)
|
default:
|
||||||
fid = 1;
|
goto vout_isr_err;
|
||||||
else if (irqstatus & DISPC_IRQ_EVSYNC_EVEN)
|
|
||||||
fid = 0;
|
|
||||||
else
|
|
||||||
goto vout_isr_err;
|
|
||||||
|
|
||||||
vout->field_id ^= 1;
|
|
||||||
if (fid != vout->field_id) {
|
|
||||||
if (0 == fid)
|
|
||||||
vout->field_id = fid;
|
|
||||||
|
|
||||||
goto vout_isr_err;
|
|
||||||
}
|
|
||||||
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");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!vout->first_int && (vout->cur_frm != vout->next_frm)) {
|
||||||
|
vout->cur_frm->ts = timevalue;
|
||||||
|
vout->cur_frm->state = VIDEOBUF_DONE;
|
||||||
|
wake_up_interruptible(&vout->cur_frm->done);
|
||||||
|
vout->cur_frm = vout->next_frm;
|
||||||
|
}
|
||||||
|
|
||||||
|
vout->first_int = 0;
|
||||||
|
if (list_empty(&vout->dma_queue))
|
||||||
|
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");
|
||||||
|
|
||||||
vout_isr_err:
|
vout_isr_err:
|
||||||
spin_unlock(&vout->vbq_lock);
|
spin_unlock(&vout->vbq_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Video buffer call backs */
|
/* Video buffer call backs */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue