[1/6] V4L2: OMAP: VOUT: isr handling extended for DPI and HDMI interface

Message ID 1307458058-29030-2-git-send-email-amber@ti.com (mailing list archive)
State Superseded, archived
Headers

Commit Message

Amber Jain June 7, 2011, 2:47 p.m. UTC
  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

Hiremath, Vaibhav July 5, 2011, 6:46 p.m. UTC | #1
> -----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
  
Amber Jain July 6, 2011, 2:55 a.m. UTC | #2
> -----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
  

Patch

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;
+		}
 		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);