[1/6] V4L2: OMAP: VOUT: isr handling extended for DPI and HDMI interface
Commit Message
Extending the omap vout isr handling for:
- secondary lcd over DPI interface,
- HDMI interface.
Signed-off-by: Amber Jain <amber@ti.com>
---
drivers/media/video/omap/omap_vout.c | 26 +++++++++++++++++++-------
1 files changed, 19 insertions(+), 7 deletions(-)
Comments
> -----Original Message-----
> From: JAIN, AMBER
> Sent: Tuesday, June 07, 2011 8:18 PM
> To: linux-media@vger.kernel.org
> Cc: Hiremath, Vaibhav; Semwal, Sumit; JAIN, AMBER
> Subject: [PATCH 1/6] V4L2: OMAP: VOUT: isr handling extended for DPI and
> HDMI interface
[Hiremath, Vaibhav] Few minor comments below -
>
> Extending the omap vout isr handling for:
> - secondary lcd over DPI interface,
> - HDMI interface.
>
[Hiremath, Vaibhav] It would be useful to mention about OMAP4 DSS block (these are new additions compared to OAMP3), that's where both the interfaces are getting used, right?
> Signed-off-by: Amber Jain <amber@ti.com>
> ---
> drivers/media/video/omap/omap_vout.c | 26 +++++++++++++++++++-------
> 1 files changed, 19 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/media/video/omap/omap_vout.c
> b/drivers/media/video/omap/omap_vout.c
> index a831241..6fe7efa 100644
> --- a/drivers/media/video/omap/omap_vout.c
> +++ b/drivers/media/video/omap/omap_vout.c
> @@ -544,10 +544,20 @@ void omap_vout_isr(void *arg, unsigned int
> irqstatus)
>
> spin_lock(&vout->vbq_lock);
> do_gettimeofday(&timevalue);
> - if (cur_display->type == OMAP_DISPLAY_TYPE_DPI) {
> - if (!(irqstatus & DISPC_IRQ_VSYNC))
> - goto vout_isr_err;
>
> + if (cur_display->type != OMAP_DISPLAY_TYPE_VENC) {
> + switch (cur_display->type) {
> + case OMAP_DISPLAY_TYPE_DPI:
> + 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;
> + }
[Hiremath, Vaibhav] how about implementing this like,
if (cur_display->type != OMAP_DISPLAY_TYPE_VENC) {
unsigned int status;
switch (cur_display->type) {
case OMAP_DISPLAY_TYPE_DPI:
status = DISPC_IRQ_VSYNC | DISPC_IRQ_VSYNC2;
break;
case OMAP_DISPLAY_TYPE_HDMI:
status = DISPC_IRQ_EVSYNC_EVEN;
break;
default:
goto vout_isr_err;
}
If (!(irqstatus & status))
goto vout_isr_err;
Thanks,
Vaibhav
> if (!vout->first_int && (vout->cur_frm != vout->next_frm)) {
> vout->cur_frm->ts = timevalue;
> vout->cur_frm->state = VIDEOBUF_DONE;
> @@ -571,7 +581,7 @@ void omap_vout_isr(void *arg, unsigned int irqstatus)
> ret = omapvid_init(vout, addr);
> if (ret)
> printk(KERN_ERR VOUT_NAME
> - "failed to set overlay info\n");
> + [Hiremath, Vaibhav] "failed to set overlay info\n");
> /* Enable the pipeline and set the Go bit */
> ret = omapvid_apply_changes(vout);
> if (ret)
> @@ -925,7 +935,7 @@ static int omap_vout_release(struct file *file)
> u32 mask = 0;
>
> mask = DISPC_IRQ_VSYNC | DISPC_IRQ_EVSYNC_EVEN |
> - DISPC_IRQ_EVSYNC_ODD;
> + DISPC_IRQ_EVSYNC_ODD | DISPC_IRQ_VSYNC2;
> omap_dispc_unregister_isr(omap_vout_isr, vout, mask);
> vout->streaming = 0;
>
> @@ -1596,7 +1606,8 @@ static int vidioc_streamon(struct file *file, void
> *fh, enum v4l2_buf_type i)
> addr = (unsigned long) vout->queued_buf_addr[vout->cur_frm->i]
> + vout->cropped_offset;
>
> - mask = DISPC_IRQ_VSYNC | DISPC_IRQ_EVSYNC_EVEN |
> DISPC_IRQ_EVSYNC_ODD;
> + mask = DISPC_IRQ_VSYNC | DISPC_IRQ_EVSYNC_EVEN |
> DISPC_IRQ_EVSYNC_ODD
> + | DISPC_IRQ_VSYNC2;
>
> omap_dispc_register_isr(omap_vout_isr, vout, mask);
>
> @@ -1646,7 +1657,8 @@ static int vidioc_streamoff(struct file *file, void
> *fh, enum v4l2_buf_type i)
> return -EINVAL;
>
> vout->streaming = 0;
> - mask = DISPC_IRQ_VSYNC | DISPC_IRQ_EVSYNC_EVEN |
> DISPC_IRQ_EVSYNC_ODD;
> + mask = DISPC_IRQ_VSYNC | DISPC_IRQ_EVSYNC_EVEN |
> DISPC_IRQ_EVSYNC_ODD
> + | DISPC_IRQ_VSYNC2;
>
> omap_dispc_unregister_isr(omap_vout_isr, vout, mask);
>
> --
> 1.7.1
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
> -----Original Message-----
> From: Hiremath, Vaibhav
> Sent: Wednesday, July 06, 2011 12:17 AM
> To: JAIN, AMBER; linux-media@vger.kernel.org
> Cc: Semwal, Sumit
> Subject: RE: [PATCH 1/6] V4L2: OMAP: VOUT: isr handling extended for DPI
> and HDMI interface
>
>
> > -----Original Message-----
> > From: JAIN, AMBER
> > Sent: Tuesday, June 07, 2011 8:18 PM
> > To: linux-media@vger.kernel.org
> > Cc: Hiremath, Vaibhav; Semwal, Sumit; JAIN, AMBER
> > Subject: [PATCH 1/6] V4L2: OMAP: VOUT: isr handling extended for DPI and
> > HDMI interface
> [Hiremath, Vaibhav] Few minor comments below -
>
> >
> > Extending the omap vout isr handling for:
> > - secondary lcd over DPI interface,
> > - HDMI interface.
> >
> [Hiremath, Vaibhav] It would be useful to mention about OMAP4 DSS block
> (these are new additions compared to OAMP3), that's where both the
> interfaces are getting used, right?
Ok, will add that.
>
> > Signed-off-by: Amber Jain <amber@ti.com>
> > ---
> > drivers/media/video/omap/omap_vout.c | 26 +++++++++++++++++++-------
> > 1 files changed, 19 insertions(+), 7 deletions(-)
> >
> > diff --git a/drivers/media/video/omap/omap_vout.c
> > b/drivers/media/video/omap/omap_vout.c
> > index a831241..6fe7efa 100644
> > --- a/drivers/media/video/omap/omap_vout.c
> > +++ b/drivers/media/video/omap/omap_vout.c
> > @@ -544,10 +544,20 @@ void omap_vout_isr(void *arg, unsigned int
> > irqstatus)
> >
> > spin_lock(&vout->vbq_lock);
> > do_gettimeofday(&timevalue);
> > - if (cur_display->type == OMAP_DISPLAY_TYPE_DPI) {
> > - if (!(irqstatus & DISPC_IRQ_VSYNC))
> > - goto vout_isr_err;
> >
> > + if (cur_display->type != OMAP_DISPLAY_TYPE_VENC) {
> > + switch (cur_display->type) {
> > + case OMAP_DISPLAY_TYPE_DPI:
> > + 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;
> > + }
> [Hiremath, Vaibhav] how about implementing this like,
>
>
> if (cur_display->type != OMAP_DISPLAY_TYPE_VENC) {
> unsigned int status;
>
> switch (cur_display->type) {
> case OMAP_DISPLAY_TYPE_DPI:
> status = DISPC_IRQ_VSYNC | DISPC_IRQ_VSYNC2;
> break;
> case OMAP_DISPLAY_TYPE_HDMI:
> status = DISPC_IRQ_EVSYNC_EVEN;
> break;
> default:
> goto vout_isr_err;
> }
> If (!(irqstatus & status))
> goto vout_isr_err;
>
>
> Thanks,
> Vaibhav
It can be done, but I don't really see a benefit of using a new variable for it as it is used just once for check.
>
> > if (!vout->first_int && (vout->cur_frm != vout->next_frm)) {
> > vout->cur_frm->ts = timevalue;
> > vout->cur_frm->state = VIDEOBUF_DONE;
> > @@ -571,7 +581,7 @@ void omap_vout_isr(void *arg, unsigned int
> irqstatus)
> > ret = omapvid_init(vout, addr);
> > if (ret)
> > printk(KERN_ERR VOUT_NAME
> > - "failed to set overlay info\n");
> > + [Hiremath, Vaibhav] "failed to set overlay
> info\n");
> > /* Enable the pipeline and set the Go bit */
> > ret = omapvid_apply_changes(vout);
> > if (ret)
> > @@ -925,7 +935,7 @@ static int omap_vout_release(struct file *file)
> > u32 mask = 0;
> >
> > mask = DISPC_IRQ_VSYNC | DISPC_IRQ_EVSYNC_EVEN |
> > - DISPC_IRQ_EVSYNC_ODD;
> > + DISPC_IRQ_EVSYNC_ODD | DISPC_IRQ_VSYNC2;
> > omap_dispc_unregister_isr(omap_vout_isr, vout, mask);
> > vout->streaming = 0;
> >
> > @@ -1596,7 +1606,8 @@ static int vidioc_streamon(struct file *file, void
> > *fh, enum v4l2_buf_type i)
> > addr = (unsigned long) vout->queued_buf_addr[vout->cur_frm->i]
> > + vout->cropped_offset;
> >
> > - mask = DISPC_IRQ_VSYNC | DISPC_IRQ_EVSYNC_EVEN |
> > DISPC_IRQ_EVSYNC_ODD;
> > + mask = DISPC_IRQ_VSYNC | DISPC_IRQ_EVSYNC_EVEN |
> > DISPC_IRQ_EVSYNC_ODD
> > + | DISPC_IRQ_VSYNC2;
> >
> > omap_dispc_register_isr(omap_vout_isr, vout, mask);
> >
> > @@ -1646,7 +1657,8 @@ static int vidioc_streamoff(struct file *file,
> void
> > *fh, enum v4l2_buf_type i)
> > return -EINVAL;
> >
> > vout->streaming = 0;
> > - mask = DISPC_IRQ_VSYNC | DISPC_IRQ_EVSYNC_EVEN |
> > DISPC_IRQ_EVSYNC_ODD;
> > + mask = DISPC_IRQ_VSYNC | DISPC_IRQ_EVSYNC_EVEN |
> > DISPC_IRQ_EVSYNC_ODD
> > + | DISPC_IRQ_VSYNC2;
> >
> > omap_dispc_unregister_isr(omap_vout_isr, vout, mask);
> >
> > --
> > 1.7.1
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
@@ -544,10 +544,20 @@ void omap_vout_isr(void *arg, unsigned int irqstatus)
spin_lock(&vout->vbq_lock);
do_gettimeofday(&timevalue);
- if (cur_display->type == OMAP_DISPLAY_TYPE_DPI) {
- if (!(irqstatus & DISPC_IRQ_VSYNC))
- goto vout_isr_err;
+ if (cur_display->type != OMAP_DISPLAY_TYPE_VENC) {
+ switch (cur_display->type) {
+ case OMAP_DISPLAY_TYPE_DPI:
+ 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;
+ }
if (!vout->first_int && (vout->cur_frm != vout->next_frm)) {
vout->cur_frm->ts = timevalue;
vout->cur_frm->state = VIDEOBUF_DONE;
@@ -571,7 +581,7 @@ void omap_vout_isr(void *arg, unsigned int irqstatus)
ret = omapvid_init(vout, addr);
if (ret)
printk(KERN_ERR VOUT_NAME
- "failed to set overlay info\n");
+ "failed to set overlay info\n");
/* Enable the pipeline and set the Go bit */
ret = omapvid_apply_changes(vout);
if (ret)
@@ -925,7 +935,7 @@ static int omap_vout_release(struct file *file)
u32 mask = 0;
mask = DISPC_IRQ_VSYNC | DISPC_IRQ_EVSYNC_EVEN |
- DISPC_IRQ_EVSYNC_ODD;
+ DISPC_IRQ_EVSYNC_ODD | DISPC_IRQ_VSYNC2;
omap_dispc_unregister_isr(omap_vout_isr, vout, mask);
vout->streaming = 0;
@@ -1596,7 +1606,8 @@ static int vidioc_streamon(struct file *file, void *fh, enum v4l2_buf_type i)
addr = (unsigned long) vout->queued_buf_addr[vout->cur_frm->i]
+ vout->cropped_offset;
- mask = DISPC_IRQ_VSYNC | DISPC_IRQ_EVSYNC_EVEN | DISPC_IRQ_EVSYNC_ODD;
+ mask = DISPC_IRQ_VSYNC | DISPC_IRQ_EVSYNC_EVEN | DISPC_IRQ_EVSYNC_ODD
+ | DISPC_IRQ_VSYNC2;
omap_dispc_register_isr(omap_vout_isr, vout, mask);
@@ -1646,7 +1657,8 @@ static int vidioc_streamoff(struct file *file, void *fh, enum v4l2_buf_type i)
return -EINVAL;
vout->streaming = 0;
- mask = DISPC_IRQ_VSYNC | DISPC_IRQ_EVSYNC_EVEN | DISPC_IRQ_EVSYNC_ODD;
+ mask = DISPC_IRQ_VSYNC | DISPC_IRQ_EVSYNC_EVEN | DISPC_IRQ_EVSYNC_ODD
+ | DISPC_IRQ_VSYNC2;
omap_dispc_unregister_isr(omap_vout_isr, vout, mask);