All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v4 0/5] OMAP_VOUT: Misc fixes and cleanup patches for 3.2
@ 2011-09-28 14:49 ` Archit Taneja
  0 siblings, 0 replies; 19+ messages in thread
From: Archit Taneja @ 2011-09-28 14:49 UTC (permalink / raw)
  To: hvaibhav
  Cc: tomi.valkeinen, linux-omap, sumit.semwal, linux-media, Archit Taneja

This set includes patches which do the following:
- Fix crash if number of displays registered by DSS2 is more than 4.
- Fix the issue of not being able to request for a buffer which is larger than
  what we did the last time.
- Fix a small bug in omap_vout_isr()
- Remove some redundant code in omap_vout_isr()
- Add basic support for DSI panels

Changes in v4:
- Fix issue in "OMAP_VOUT: Fix check in reqbuf for buf_size allocation", improve
  commit message
- Remove patch "OMAP_VOUT: Don't trigger updates in omap_vout_probe", replace
  with "OMAP_VOUT: Increase MAX_DISPLAYS to a larger value"

Archit Taneja (5):
  OMAP_VOUT: Fix check in reqbuf for buf_size allocation
  OMAP_VOUT: CLEANUP: Remove redundant code from omap_vout_isr
  OMAP_VOUT: Fix VSYNC IRQ handling in omap_vout_isr
  OMAP_VOUT: Add support for DSI panels
  OMAP_VOUT: Increase MAX_DISPLAYS to a larger value

 drivers/media/video/omap/omap_vout.c    |  187 ++++++++++++++++---------------
 drivers/media/video/omap/omap_voutdef.h |    2 +-
 2 files changed, 97 insertions(+), 92 deletions(-)


^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH v4 0/5] OMAP_VOUT: Misc fixes and cleanup patches for 3.2
@ 2011-09-28 14:49 ` Archit Taneja
  0 siblings, 0 replies; 19+ messages in thread
From: Archit Taneja @ 2011-09-28 14:49 UTC (permalink / raw)
  To: hvaibhav
  Cc: tomi.valkeinen, linux-omap, sumit.semwal, linux-media, Archit Taneja

This set includes patches which do the following:
- Fix crash if number of displays registered by DSS2 is more than 4.
- Fix the issue of not being able to request for a buffer which is larger than
  what we did the last time.
- Fix a small bug in omap_vout_isr()
- Remove some redundant code in omap_vout_isr()
- Add basic support for DSI panels

Changes in v4:
- Fix issue in "OMAP_VOUT: Fix check in reqbuf for buf_size allocation", improve
  commit message
- Remove patch "OMAP_VOUT: Don't trigger updates in omap_vout_probe", replace
  with "OMAP_VOUT: Increase MAX_DISPLAYS to a larger value"

Archit Taneja (5):
  OMAP_VOUT: Fix check in reqbuf for buf_size allocation
  OMAP_VOUT: CLEANUP: Remove redundant code from omap_vout_isr
  OMAP_VOUT: Fix VSYNC IRQ handling in omap_vout_isr
  OMAP_VOUT: Add support for DSI panels
  OMAP_VOUT: Increase MAX_DISPLAYS to a larger value

 drivers/media/video/omap/omap_vout.c    |  187 ++++++++++++++++---------------
 drivers/media/video/omap/omap_voutdef.h |    2 +-
 2 files changed, 97 insertions(+), 92 deletions(-)


^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH v4 1/5] OMAP_VOUT: Fix check in reqbuf for buf_size allocation
  2011-09-28 14:49 ` Archit Taneja
@ 2011-09-28 14:49   ` Archit Taneja
  -1 siblings, 0 replies; 19+ messages in thread
From: Archit Taneja @ 2011-09-28 14:49 UTC (permalink / raw)
  To: hvaibhav
  Cc: tomi.valkeinen, linux-omap, sumit.semwal, linux-media, Archit Taneja

The commit 383e4f69879d11c86ebdd38b3356f6d0690fb4cc makes reqbuf prevent
requesting a larger size buffer than what is allocated at kernel boot during
omap_vout_probe.

In omap_vout_buffer_setup callback API, the requested size is compared with
vout->buffer_size, this isn't correct as vout->buffer_size is later set to the
size requested in reqbuf. When the video device is opened the next time, this
check will prevent us to allocate a buffer which is larger than what we requested
the last time.

Don't use vout->buffer_size, always check with the parameters video1_bufsize
or video2_bufsize.

Signed-off-by: Archit Taneja <archit@ti.com>
---
 drivers/media/video/omap/omap_vout.c |    6 +++++-
 1 files changed, 5 insertions(+), 1 deletions(-)

diff --git a/drivers/media/video/omap/omap_vout.c b/drivers/media/video/omap/omap_vout.c
index d9e64f3..e64a83c 100644
--- a/drivers/media/video/omap/omap_vout.c
+++ b/drivers/media/video/omap/omap_vout.c
@@ -664,10 +664,14 @@ static int omap_vout_buffer_setup(struct videobuf_queue *q, unsigned int *count,
 	u32 phy_addr = 0, virt_addr = 0;
 	struct omap_vout_device *vout = q->priv_data;
 	struct omapvideo_info *ovid = &vout->vid_info;
+	int vid_max_buf_size;
 
 	if (!vout)
 		return -EINVAL;
 
+	vid_max_buf_size = vout->vid == OMAP_VIDEO1 ? video1_bufsize :
+		video2_bufsize;
+
 	if (V4L2_BUF_TYPE_VIDEO_OUTPUT != q->type)
 		return -EINVAL;
 
@@ -690,7 +694,7 @@ static int omap_vout_buffer_setup(struct videobuf_queue *q, unsigned int *count,
 		video1_numbuffers : video2_numbuffers;
 
 	/* Check the size of the buffer */
-	if (*size > vout->buffer_size) {
+	if (*size > vid_max_buf_size) {
 		v4l2_err(&vout->vid_dev->v4l2_dev,
 				"buffer allocation mismatch [%u] [%u]\n",
 				*size, vout->buffer_size);
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v4 1/5] OMAP_VOUT: Fix check in reqbuf for buf_size allocation
@ 2011-09-28 14:49   ` Archit Taneja
  0 siblings, 0 replies; 19+ messages in thread
From: Archit Taneja @ 2011-09-28 14:49 UTC (permalink / raw)
  To: hvaibhav
  Cc: tomi.valkeinen, linux-omap, sumit.semwal, linux-media, Archit Taneja

The commit 383e4f69879d11c86ebdd38b3356f6d0690fb4cc makes reqbuf prevent
requesting a larger size buffer than what is allocated at kernel boot during
omap_vout_probe.

In omap_vout_buffer_setup callback API, the requested size is compared with
vout->buffer_size, this isn't correct as vout->buffer_size is later set to the
size requested in reqbuf. When the video device is opened the next time, this
check will prevent us to allocate a buffer which is larger than what we requested
the last time.

Don't use vout->buffer_size, always check with the parameters video1_bufsize
or video2_bufsize.

Signed-off-by: Archit Taneja <archit@ti.com>
---
 drivers/media/video/omap/omap_vout.c |    6 +++++-
 1 files changed, 5 insertions(+), 1 deletions(-)

diff --git a/drivers/media/video/omap/omap_vout.c b/drivers/media/video/omap/omap_vout.c
index d9e64f3..e64a83c 100644
--- a/drivers/media/video/omap/omap_vout.c
+++ b/drivers/media/video/omap/omap_vout.c
@@ -664,10 +664,14 @@ static int omap_vout_buffer_setup(struct videobuf_queue *q, unsigned int *count,
 	u32 phy_addr = 0, virt_addr = 0;
 	struct omap_vout_device *vout = q->priv_data;
 	struct omapvideo_info *ovid = &vout->vid_info;
+	int vid_max_buf_size;
 
 	if (!vout)
 		return -EINVAL;
 
+	vid_max_buf_size = vout->vid == OMAP_VIDEO1 ? video1_bufsize :
+		video2_bufsize;
+
 	if (V4L2_BUF_TYPE_VIDEO_OUTPUT != q->type)
 		return -EINVAL;
 
@@ -690,7 +694,7 @@ static int omap_vout_buffer_setup(struct videobuf_queue *q, unsigned int *count,
 		video1_numbuffers : video2_numbuffers;
 
 	/* Check the size of the buffer */
-	if (*size > vout->buffer_size) {
+	if (*size > vid_max_buf_size) {
 		v4l2_err(&vout->vid_dev->v4l2_dev,
 				"buffer allocation mismatch [%u] [%u]\n",
 				*size, vout->buffer_size);
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v4 2/5] OMAP_VOUT: CLEANUP: Remove redundant code from omap_vout_isr
  2011-09-28 14:49 ` Archit Taneja
@ 2011-09-28 14:49   ` Archit Taneja
  -1 siblings, 0 replies; 19+ messages in thread
From: Archit Taneja @ 2011-09-28 14:49 UTC (permalink / raw)
  To: hvaibhav
  Cc: tomi.valkeinen, linux-omap, sumit.semwal, linux-media, Archit Taneja

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>
---
 drivers/media/video/omap/omap_vout.c |  172 ++++++++++++++++------------------
 1 files changed, 82 insertions(+), 90 deletions(-)

diff --git a/drivers/media/video/omap/omap_vout.c b/drivers/media/video/omap/omap_vout.c
index e64a83c..247ea31 100644
--- a/drivers/media/video/omap/omap_vout.c
+++ b/drivers/media/video/omap/omap_vout.c
@@ -524,10 +524,50 @@ static int omapvid_apply_changes(struct omap_vout_device *vout)
 	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)
 {
-	int ret;
-	u32 addr, fid;
+	int ret, fid;
+	u32 addr;
 	struct omap_overlay *ovl;
 	struct timeval timevalue;
 	struct omapvideo_info *ovid;
@@ -548,107 +588,59 @@ static void omap_vout_isr(void *arg, unsigned int irqstatus)
 	spin_lock(&vout->vbq_lock);
 	do_gettimeofday(&timevalue);
 
-	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:
+	switch (cur_display->type) {
+	case OMAP_DISPLAY_TYPE_DPI:
+		if (!(irqstatus & (DISPC_IRQ_VSYNC | DISPC_IRQ_VSYNC2)))
 			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;
-			wake_up_interruptible(&vout->cur_frm->done);
-			vout->cur_frm = vout->next_frm;
-		}
-		vout->first_int = 0;
-		if (list_empty(&vout->dma_queue))
+		break;
+	case OMAP_DISPLAY_TYPE_VENC:
+		fid = omapvid_handle_interlace_display(vout, irqstatus,
+				timevalue);
+		if (!fid)
 			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,
-				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;
+	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;
+	}
 
-		/* 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 {
+	vout->first_int = 0;
+	if (list_empty(&vout->dma_queue))
+		goto vout_isr_err;
 
-		if (vout->first_int) {
-			vout->first_int = 0;
-			goto vout_isr_err;
-		}
-		if (irqstatus & DISPC_IRQ_EVSYNC_ODD)
-			fid = 1;
-		else if (irqstatus & DISPC_IRQ_EVSYNC_EVEN)
-			fid = 0;
-		else
-			goto vout_isr_err;
+	vout->next_frm = list_entry(vout->dma_queue.next,
+			struct videobuf_buffer, queue);
+	list_del(&vout->next_frm->queue);
 
-		vout->field_id ^= 1;
-		if (fid != vout->field_id) {
-			if (0 == fid)
-				vout->field_id = fid;
+	vout->next_frm->state = VIDEOBUF_ACTIVE;
 
-			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");
-		}
+	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:
 	spin_unlock(&vout->vbq_lock);
 }
 
-
 /* Video buffer call backs */
 
 /*
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v4 2/5] OMAP_VOUT: CLEANUP: Remove redundant code from omap_vout_isr
@ 2011-09-28 14:49   ` Archit Taneja
  0 siblings, 0 replies; 19+ messages in thread
From: Archit Taneja @ 2011-09-28 14:49 UTC (permalink / raw)
  To: hvaibhav
  Cc: tomi.valkeinen, linux-omap, sumit.semwal, linux-media, Archit Taneja

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>
---
 drivers/media/video/omap/omap_vout.c |  172 ++++++++++++++++------------------
 1 files changed, 82 insertions(+), 90 deletions(-)

diff --git a/drivers/media/video/omap/omap_vout.c b/drivers/media/video/omap/omap_vout.c
index e64a83c..247ea31 100644
--- a/drivers/media/video/omap/omap_vout.c
+++ b/drivers/media/video/omap/omap_vout.c
@@ -524,10 +524,50 @@ static int omapvid_apply_changes(struct omap_vout_device *vout)
 	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)
 {
-	int ret;
-	u32 addr, fid;
+	int ret, fid;
+	u32 addr;
 	struct omap_overlay *ovl;
 	struct timeval timevalue;
 	struct omapvideo_info *ovid;
@@ -548,107 +588,59 @@ static void omap_vout_isr(void *arg, unsigned int irqstatus)
 	spin_lock(&vout->vbq_lock);
 	do_gettimeofday(&timevalue);
 
-	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:
+	switch (cur_display->type) {
+	case OMAP_DISPLAY_TYPE_DPI:
+		if (!(irqstatus & (DISPC_IRQ_VSYNC | DISPC_IRQ_VSYNC2)))
 			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;
-			wake_up_interruptible(&vout->cur_frm->done);
-			vout->cur_frm = vout->next_frm;
-		}
-		vout->first_int = 0;
-		if (list_empty(&vout->dma_queue))
+		break;
+	case OMAP_DISPLAY_TYPE_VENC:
+		fid = omapvid_handle_interlace_display(vout, irqstatus,
+				timevalue);
+		if (!fid)
 			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,
-				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;
+	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;
+	}
 
-		/* 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 {
+	vout->first_int = 0;
+	if (list_empty(&vout->dma_queue))
+		goto vout_isr_err;
 
-		if (vout->first_int) {
-			vout->first_int = 0;
-			goto vout_isr_err;
-		}
-		if (irqstatus & DISPC_IRQ_EVSYNC_ODD)
-			fid = 1;
-		else if (irqstatus & DISPC_IRQ_EVSYNC_EVEN)
-			fid = 0;
-		else
-			goto vout_isr_err;
+	vout->next_frm = list_entry(vout->dma_queue.next,
+			struct videobuf_buffer, queue);
+	list_del(&vout->next_frm->queue);
 
-		vout->field_id ^= 1;
-		if (fid != vout->field_id) {
-			if (0 == fid)
-				vout->field_id = fid;
+	vout->next_frm->state = VIDEOBUF_ACTIVE;
 
-			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");
-		}
+	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:
 	spin_unlock(&vout->vbq_lock);
 }
 
-
 /* Video buffer call backs */
 
 /*
-- 
1.7.1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v4 3/5] OMAP_VOUT: Fix VSYNC IRQ handling in omap_vout_isr
  2011-09-28 14:49 ` Archit Taneja
@ 2011-09-28 14:49   ` Archit Taneja
  -1 siblings, 0 replies; 19+ messages in thread
From: Archit Taneja @ 2011-09-28 14:49 UTC (permalink / raw)
  To: hvaibhav
  Cc: tomi.valkeinen, linux-omap, sumit.semwal, linux-media, Archit Taneja

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>
---
 drivers/media/video/omap/omap_vout.c |   14 +++++++++++---
 1 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/drivers/media/video/omap/omap_vout.c b/drivers/media/video/omap/omap_vout.c
index 247ea31..6bc2620 100644
--- a/drivers/media/video/omap/omap_vout.c
+++ b/drivers/media/video/omap/omap_vout.c
@@ -566,8 +566,8 @@ err:
 
 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;
@@ -583,6 +583,7 @@ 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);
@@ -590,7 +591,14 @@ static void omap_vout_isr(void *arg, unsigned int irqstatus)
 
 	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:
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v4 3/5] OMAP_VOUT: Fix VSYNC IRQ handling in omap_vout_isr
@ 2011-09-28 14:49   ` Archit Taneja
  0 siblings, 0 replies; 19+ messages in thread
From: Archit Taneja @ 2011-09-28 14:49 UTC (permalink / raw)
  To: hvaibhav
  Cc: tomi.valkeinen, linux-omap, sumit.semwal, linux-media, Archit Taneja

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>
---
 drivers/media/video/omap/omap_vout.c |   14 +++++++++++---
 1 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/drivers/media/video/omap/omap_vout.c b/drivers/media/video/omap/omap_vout.c
index 247ea31..6bc2620 100644
--- a/drivers/media/video/omap/omap_vout.c
+++ b/drivers/media/video/omap/omap_vout.c
@@ -566,8 +566,8 @@ err:
 
 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;
@@ -583,6 +583,7 @@ 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);
@@ -590,7 +591,14 @@ static void omap_vout_isr(void *arg, unsigned int irqstatus)
 
 	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:
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v4 4/5] OMAP_VOUT: Add support for DSI panels
  2011-09-28 14:49 ` Archit Taneja
@ 2011-09-28 14:49   ` Archit Taneja
  -1 siblings, 0 replies; 19+ messages in thread
From: Archit Taneja @ 2011-09-28 14:49 UTC (permalink / raw)
  To: hvaibhav
  Cc: tomi.valkeinen, linux-omap, sumit.semwal, linux-media, Archit Taneja

Add support for DSI panels. DSI video mode panels will work directly. For
command mode panels, we will need to trigger updates regularly. This isn't done
by the omap_vout driver currently. It can still be supported if we connect a
framebuffer device to the panel and configure it in auto update mode.

Signed-off-by: Archit Taneja <archit@ti.com>
---
 drivers/media/video/omap/omap_vout.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/drivers/media/video/omap/omap_vout.c b/drivers/media/video/omap/omap_vout.c
index 6bc2620..65374b5 100644
--- a/drivers/media/video/omap/omap_vout.c
+++ b/drivers/media/video/omap/omap_vout.c
@@ -590,6 +590,7 @@ static void omap_vout_isr(void *arg, unsigned int irqstatus)
 	do_gettimeofday(&timevalue);
 
 	switch (cur_display->type) {
+	case OMAP_DISPLAY_TYPE_DSI:
 	case OMAP_DISPLAY_TYPE_DPI:
 		if (mgr_id == OMAP_DSS_CHANNEL_LCD)
 			irq = DISPC_IRQ_VSYNC;
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v4 4/5] OMAP_VOUT: Add support for DSI panels
@ 2011-09-28 14:49   ` Archit Taneja
  0 siblings, 0 replies; 19+ messages in thread
From: Archit Taneja @ 2011-09-28 14:49 UTC (permalink / raw)
  To: hvaibhav
  Cc: tomi.valkeinen, linux-omap, sumit.semwal, linux-media, Archit Taneja

Add support for DSI panels. DSI video mode panels will work directly. For
command mode panels, we will need to trigger updates regularly. This isn't done
by the omap_vout driver currently. It can still be supported if we connect a
framebuffer device to the panel and configure it in auto update mode.

Signed-off-by: Archit Taneja <archit@ti.com>
---
 drivers/media/video/omap/omap_vout.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/drivers/media/video/omap/omap_vout.c b/drivers/media/video/omap/omap_vout.c
index 6bc2620..65374b5 100644
--- a/drivers/media/video/omap/omap_vout.c
+++ b/drivers/media/video/omap/omap_vout.c
@@ -590,6 +590,7 @@ static void omap_vout_isr(void *arg, unsigned int irqstatus)
 	do_gettimeofday(&timevalue);
 
 	switch (cur_display->type) {
+	case OMAP_DISPLAY_TYPE_DSI:
 	case OMAP_DISPLAY_TYPE_DPI:
 		if (mgr_id == OMAP_DSS_CHANNEL_LCD)
 			irq = DISPC_IRQ_VSYNC;
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v4 5/5] OMAP_VOUT: Increase MAX_DISPLAYS to a larger value
  2011-09-28 14:49 ` Archit Taneja
@ 2011-09-28 14:49   ` Archit Taneja
  -1 siblings, 0 replies; 19+ messages in thread
From: Archit Taneja @ 2011-09-28 14:49 UTC (permalink / raw)
  To: hvaibhav
  Cc: tomi.valkeinen, linux-omap, sumit.semwal, linux-media, Archit Taneja

There is no limit to the number of displays that can registered with DSS2. The
current value of MAX_DISPLAYS is 3, set this to 10 so that the 'displays'
member of omap2video_device struct can store more omap_dss_device pointers.

This fixes a crash seen in omap_vout_probe when DSS2 registers for more than 3
displays.

Signed-off-by: Archit Taneja <archit@ti.com>
---
 drivers/media/video/omap/omap_voutdef.h |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/media/video/omap/omap_voutdef.h b/drivers/media/video/omap/omap_voutdef.h
index d793501..27a95d2 100644
--- a/drivers/media/video/omap/omap_voutdef.h
+++ b/drivers/media/video/omap/omap_voutdef.h
@@ -25,7 +25,7 @@
 #define MAC_VRFB_CTXS	4
 #define MAX_VOUT_DEV	2
 #define MAX_OVLS	3
-#define MAX_DISPLAYS	3
+#define MAX_DISPLAYS	10
 #define MAX_MANAGERS	3
 
 #define QQVGA_WIDTH		160
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v4 5/5] OMAP_VOUT: Increase MAX_DISPLAYS to a larger value
@ 2011-09-28 14:49   ` Archit Taneja
  0 siblings, 0 replies; 19+ messages in thread
From: Archit Taneja @ 2011-09-28 14:49 UTC (permalink / raw)
  To: hvaibhav
  Cc: tomi.valkeinen, linux-omap, sumit.semwal, linux-media, Archit Taneja

There is no limit to the number of displays that can registered with DSS2. The
current value of MAX_DISPLAYS is 3, set this to 10 so that the 'displays'
member of omap2video_device struct can store more omap_dss_device pointers.

This fixes a crash seen in omap_vout_probe when DSS2 registers for more than 3
displays.

Signed-off-by: Archit Taneja <archit@ti.com>
---
 drivers/media/video/omap/omap_voutdef.h |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/media/video/omap/omap_voutdef.h b/drivers/media/video/omap/omap_voutdef.h
index d793501..27a95d2 100644
--- a/drivers/media/video/omap/omap_voutdef.h
+++ b/drivers/media/video/omap/omap_voutdef.h
@@ -25,7 +25,7 @@
 #define MAC_VRFB_CTXS	4
 #define MAX_VOUT_DEV	2
 #define MAX_OVLS	3
-#define MAX_DISPLAYS	3
+#define MAX_DISPLAYS	10
 #define MAX_MANAGERS	3
 
 #define QQVGA_WIDTH		160
-- 
1.7.1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* RE: [PATCH v4 1/5] OMAP_VOUT: Fix check in reqbuf for buf_size allocation
  2011-09-28 14:49   ` Archit Taneja
  (?)
@ 2011-09-29  5:28   ` Hiremath, Vaibhav
  -1 siblings, 0 replies; 19+ messages in thread
From: Hiremath, Vaibhav @ 2011-09-29  5:28 UTC (permalink / raw)
  To: Taneja, Archit; +Cc: Valkeinen, Tomi, linux-omap, Semwal, Sumit, linux-media

> -----Original Message-----
> From: Taneja, Archit
> Sent: Wednesday, September 28, 2011 8:19 PM
> To: Hiremath, Vaibhav
> Cc: Valkeinen, Tomi; linux-omap@vger.kernel.org; Semwal, Sumit; linux-
> media@vger.kernel.org; Taneja, Archit
> Subject: [PATCH v4 1/5] OMAP_VOUT: Fix check in reqbuf for buf_size
> allocation
> 
> The commit 383e4f69879d11c86ebdd38b3356f6d0690fb4cc makes reqbuf prevent
> requesting a larger size buffer than what is allocated at kernel boot
> during
> omap_vout_probe.
> 
> In omap_vout_buffer_setup callback API, the requested size is compared
> with
> vout->buffer_size, this isn't correct as vout->buffer_size is later set to
> the
> size requested in reqbuf. When the video device is opened the next time,
> this
> check will prevent us to allocate a buffer which is larger than what we
> requested
> the last time.
> 
> Don't use vout->buffer_size, always check with the parameters
> video1_bufsize
> or video2_bufsize.
> 
> Signed-off-by: Archit Taneja <archit@ti.com>
> ---
>  drivers/media/video/omap/omap_vout.c |    6 +++++-
>  1 files changed, 5 insertions(+), 1 deletions(-)
> 
> diff --git a/drivers/media/video/omap/omap_vout.c
> b/drivers/media/video/omap/omap_vout.c
> index d9e64f3..e64a83c 100644
> --- a/drivers/media/video/omap/omap_vout.c
> +++ b/drivers/media/video/omap/omap_vout.c
> @@ -664,10 +664,14 @@ static int omap_vout_buffer_setup(struct
> videobuf_queue *q, unsigned int *count,
>  	u32 phy_addr = 0, virt_addr = 0;
>  	struct omap_vout_device *vout = q->priv_data;
>  	struct omapvideo_info *ovid = &vout->vid_info;
> +	int vid_max_buf_size;
> 
>  	if (!vout)
>  		return -EINVAL;
> 
> +	vid_max_buf_size = vout->vid == OMAP_VIDEO1 ? video1_bufsize :
> +		video2_bufsize;
> +
>  	if (V4L2_BUF_TYPE_VIDEO_OUTPUT != q->type)
>  		return -EINVAL;
> 
> @@ -690,7 +694,7 @@ static int omap_vout_buffer_setup(struct
> videobuf_queue *q, unsigned int *count,
>  		video1_numbuffers : video2_numbuffers;
> 
>  	/* Check the size of the buffer */
> -	if (*size > vout->buffer_size) {
> +	if (*size > vid_max_buf_size) {
>  		v4l2_err(&vout->vid_dev->v4l2_dev,
>  				"buffer allocation mismatch [%u] [%u]\n",
>  				*size, vout->buffer_size);

Acked-by: Vaibhav Hiremath <hvaibhav@ti.com>

Thanks,
Vaibhav


> --
> 1.7.1


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v4 3/5] OMAP_VOUT: Fix VSYNC IRQ handling in omap_vout_isr
  2011-09-28 14:49   ` Archit Taneja
  (?)
@ 2011-09-29  5:59   ` Semwal, Sumit
  -1 siblings, 0 replies; 19+ messages in thread
From: Semwal, Sumit @ 2011-09-29  5:59 UTC (permalink / raw)
  To: Archit Taneja; +Cc: hvaibhav, tomi.valkeinen, linux-omap, linux-media

On Wed, Sep 28, 2011 at 8:19 PM, Archit Taneja <archit@ti.com> wrote:
> 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>
<snip>

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v4 2/5] OMAP_VOUT: CLEANUP: Remove redundant code from omap_vout_isr
  2011-09-28 14:49   ` Archit Taneja
  (?)
@ 2011-09-29  6:10   ` Semwal, Sumit
  -1 siblings, 0 replies; 19+ messages in thread
From: Semwal, Sumit @ 2011-09-29  6:10 UTC (permalink / raw)
  To: Archit Taneja; +Cc: hvaibhav, tomi.valkeinen, linux-omap, linux-media

On Wed, Sep 28, 2011 at 8:19 PM, Archit Taneja <archit@ti.com> wrote:
> 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>
<snip>

^ permalink raw reply	[flat|nested] 19+ messages in thread

* RE: [PATCH v4 2/5] OMAP_VOUT: CLEANUP: Remove redundant code from omap_vout_isr
  2011-09-28 14:49   ` Archit Taneja
  (?)
  (?)
@ 2011-09-29 11:28   ` Hiremath, Vaibhav
  -1 siblings, 0 replies; 19+ messages in thread
From: Hiremath, Vaibhav @ 2011-09-29 11:28 UTC (permalink / raw)
  To: Taneja, Archit; +Cc: Valkeinen, Tomi, linux-omap, Semwal, Sumit, linux-media


> -----Original Message-----
> From: Taneja, Archit
> Sent: Wednesday, September 28, 2011 8:19 PM
> To: Hiremath, Vaibhav
> Cc: Valkeinen, Tomi; linux-omap@vger.kernel.org; Semwal, Sumit; linux-
> media@vger.kernel.org; Taneja, Archit
> Subject: [PATCH v4 2/5] 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>
> ---
>  drivers/media/video/omap/omap_vout.c |  172 ++++++++++++++++-------------
> -----
>  1 files changed, 82 insertions(+), 90 deletions(-)
> 
> diff --git a/drivers/media/video/omap/omap_vout.c
> b/drivers/media/video/omap/omap_vout.c
> index e64a83c..247ea31 100644
> --- a/drivers/media/video/omap/omap_vout.c
> +++ b/drivers/media/video/omap/omap_vout.c
> @@ -524,10 +524,50 @@ static int omapvid_apply_changes(struct
> omap_vout_device *vout)
>  	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)
>  {
> -	int ret;
> -	u32 addr, fid;
> +	int ret, fid;
> +	u32 addr;
>  	struct omap_overlay *ovl;
>  	struct timeval timevalue;
>  	struct omapvideo_info *ovid;
> @@ -548,107 +588,59 @@ static void omap_vout_isr(void *arg, unsigned int
> irqstatus)
>  	spin_lock(&vout->vbq_lock);
>  	do_gettimeofday(&timevalue);
> 
> -	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:
> +	switch (cur_display->type) {
> +	case OMAP_DISPLAY_TYPE_DPI:
> +		if (!(irqstatus & (DISPC_IRQ_VSYNC | DISPC_IRQ_VSYNC2)))
>  			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;
> -			wake_up_interruptible(&vout->cur_frm->done);
> -			vout->cur_frm = vout->next_frm;
> -		}
> -		vout->first_int = 0;
> -		if (list_empty(&vout->dma_queue))
> +		break;
> +	case OMAP_DISPLAY_TYPE_VENC:
> +		fid = omapvid_handle_interlace_display(vout, irqstatus,
> +				timevalue);
> +		if (!fid)
>  			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,
> -				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;
> +	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;
> +	}
> 
> -		/* 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 {
> +	vout->first_int = 0;
> +	if (list_empty(&vout->dma_queue))
> +		goto vout_isr_err;
> 
> -		if (vout->first_int) {
> -			vout->first_int = 0;
> -			goto vout_isr_err;
> -		}
> -		if (irqstatus & DISPC_IRQ_EVSYNC_ODD)
> -			fid = 1;
> -		else if (irqstatus & DISPC_IRQ_EVSYNC_EVEN)
> -			fid = 0;
> -		else
> -			goto vout_isr_err;
> +	vout->next_frm = list_entry(vout->dma_queue.next,
> +			struct videobuf_buffer, queue);
> +	list_del(&vout->next_frm->queue);
> 
> -		vout->field_id ^= 1;
> -		if (fid != vout->field_id) {
> -			if (0 == fid)
> -				vout->field_id = fid;
> +	vout->next_frm->state = VIDEOBUF_ACTIVE;
> 
> -			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");
> -		}
> +	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:
>  	spin_unlock(&vout->vbq_lock);
>  }
> 
> -
>  /* Video buffer call backs */
> 

Acked-by: Vaibhav Hiremath <hvaibhav@ti.com>

Thanks,
Vaibhav

>  /*
> --
> 1.7.1


^ permalink raw reply	[flat|nested] 19+ messages in thread

* RE: [PATCH v4 3/5] OMAP_VOUT: Fix VSYNC IRQ handling in omap_vout_isr
  2011-09-28 14:49   ` Archit Taneja
  (?)
  (?)
@ 2011-09-29 11:29   ` Hiremath, Vaibhav
  -1 siblings, 0 replies; 19+ messages in thread
From: Hiremath, Vaibhav @ 2011-09-29 11:29 UTC (permalink / raw)
  To: Taneja, Archit; +Cc: Valkeinen, Tomi, linux-omap, Semwal, Sumit, linux-media


> -----Original Message-----
> From: Taneja, Archit
> Sent: Wednesday, September 28, 2011 8:19 PM
> To: Hiremath, Vaibhav
> Cc: Valkeinen, Tomi; linux-omap@vger.kernel.org; Semwal, Sumit; linux-
> media@vger.kernel.org; Taneja, Archit
> Subject: [PATCH v4 3/5] OMAP_VOUT: Fix VSYNC IRQ handling in omap_vout_isr
> 
> 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>
> ---
>  drivers/media/video/omap/omap_vout.c |   14 +++++++++++---
>  1 files changed, 11 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/media/video/omap/omap_vout.c
> b/drivers/media/video/omap/omap_vout.c
> index 247ea31..6bc2620 100644
> --- a/drivers/media/video/omap/omap_vout.c
> +++ b/drivers/media/video/omap/omap_vout.c
> @@ -566,8 +566,8 @@ err:
> 
>  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;
> @@ -583,6 +583,7 @@ 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);
> @@ -590,7 +591,14 @@ static void omap_vout_isr(void *arg, unsigned int
> irqstatus)
> 
>  	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:

Acked-by: Vaibhav Hiremath <hvaibhav@ti.com>

Thanks,
Vaibhav

> --
> 1.7.1


^ permalink raw reply	[flat|nested] 19+ messages in thread

* RE: [PATCH v4 4/5] OMAP_VOUT: Add support for DSI panels
  2011-09-28 14:49   ` Archit Taneja
  (?)
@ 2011-09-29 11:29   ` Hiremath, Vaibhav
  -1 siblings, 0 replies; 19+ messages in thread
From: Hiremath, Vaibhav @ 2011-09-29 11:29 UTC (permalink / raw)
  To: Taneja, Archit; +Cc: Valkeinen, Tomi, linux-omap, Semwal, Sumit, linux-media

> -----Original Message-----
> From: Taneja, Archit
> Sent: Wednesday, September 28, 2011 8:19 PM
> To: Hiremath, Vaibhav
> Cc: Valkeinen, Tomi; linux-omap@vger.kernel.org; Semwal, Sumit; linux-
> media@vger.kernel.org; Taneja, Archit
> Subject: [PATCH v4 4/5] OMAP_VOUT: Add support for DSI panels
> 
> Add support for DSI panels. DSI video mode panels will work directly. For
> command mode panels, we will need to trigger updates regularly. This isn't
> done
> by the omap_vout driver currently. It can still be supported if we connect
> a
> framebuffer device to the panel and configure it in auto update mode.
> 
> Signed-off-by: Archit Taneja <archit@ti.com>
> ---
>  drivers/media/video/omap/omap_vout.c |    1 +
>  1 files changed, 1 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/media/video/omap/omap_vout.c
> b/drivers/media/video/omap/omap_vout.c
> index 6bc2620..65374b5 100644
> --- a/drivers/media/video/omap/omap_vout.c
> +++ b/drivers/media/video/omap/omap_vout.c
> @@ -590,6 +590,7 @@ static void omap_vout_isr(void *arg, unsigned int
> irqstatus)
>  	do_gettimeofday(&timevalue);
> 
>  	switch (cur_display->type) {
> +	case OMAP_DISPLAY_TYPE_DSI:
>  	case OMAP_DISPLAY_TYPE_DPI:
>  		if (mgr_id == OMAP_DSS_CHANNEL_LCD)
>  			irq = DISPC_IRQ_VSYNC;

Acked-by: Vaibhav Hiremath <hvaibhav@ti.com>

Thanks,
Vaibhav


> --
> 1.7.1


^ permalink raw reply	[flat|nested] 19+ messages in thread

* RE: [PATCH v4 5/5] OMAP_VOUT: Increase MAX_DISPLAYS to a larger value
  2011-09-28 14:49   ` Archit Taneja
  (?)
@ 2011-09-29 11:29   ` Hiremath, Vaibhav
  -1 siblings, 0 replies; 19+ messages in thread
From: Hiremath, Vaibhav @ 2011-09-29 11:29 UTC (permalink / raw)
  To: Taneja, Archit; +Cc: Valkeinen, Tomi, linux-omap, Semwal, Sumit, linux-media

> -----Original Message-----
> From: Taneja, Archit
> Sent: Wednesday, September 28, 2011 8:19 PM
> To: Hiremath, Vaibhav
> Cc: Valkeinen, Tomi; linux-omap@vger.kernel.org; Semwal, Sumit; linux-
> media@vger.kernel.org; Taneja, Archit
> Subject: [PATCH v4 5/5] OMAP_VOUT: Increase MAX_DISPLAYS to a larger value
> 
> There is no limit to the number of displays that can registered with DSS2.
> The
> current value of MAX_DISPLAYS is 3, set this to 10 so that the 'displays'
> member of omap2video_device struct can store more omap_dss_device pointers.
> 
> This fixes a crash seen in omap_vout_probe when DSS2 registers for more
> than 3
> displays.
> 
> Signed-off-by: Archit Taneja <archit@ti.com>
> ---
>  drivers/media/video/omap/omap_voutdef.h |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
> 
> diff --git a/drivers/media/video/omap/omap_voutdef.h
> b/drivers/media/video/omap/omap_voutdef.h
> index d793501..27a95d2 100644
> --- a/drivers/media/video/omap/omap_voutdef.h
> +++ b/drivers/media/video/omap/omap_voutdef.h
> @@ -25,7 +25,7 @@
>  #define MAC_VRFB_CTXS	4
>  #define MAX_VOUT_DEV	2
>  #define MAX_OVLS	3
> -#define MAX_DISPLAYS	3
> +#define MAX_DISPLAYS	10
>  #define MAX_MANAGERS	3
> 
>  #define QQVGA_WIDTH		160

Acked-by: Vaibhav Hiremath <hvaibhav@ti.com>

Thanks,
Vaibhav


> --
> 1.7.1


^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2011-09-29 11:29 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-09-28 14:49 [PATCH v4 0/5] OMAP_VOUT: Misc fixes and cleanup patches for 3.2 Archit Taneja
2011-09-28 14:49 ` Archit Taneja
2011-09-28 14:49 ` [PATCH v4 1/5] OMAP_VOUT: Fix check in reqbuf for buf_size allocation Archit Taneja
2011-09-28 14:49   ` Archit Taneja
2011-09-29  5:28   ` Hiremath, Vaibhav
2011-09-28 14:49 ` [PATCH v4 2/5] OMAP_VOUT: CLEANUP: Remove redundant code from omap_vout_isr Archit Taneja
2011-09-28 14:49   ` Archit Taneja
2011-09-29  6:10   ` Semwal, Sumit
2011-09-29 11:28   ` Hiremath, Vaibhav
2011-09-28 14:49 ` [PATCH v4 3/5] OMAP_VOUT: Fix VSYNC IRQ handling in omap_vout_isr Archit Taneja
2011-09-28 14:49   ` Archit Taneja
2011-09-29  5:59   ` Semwal, Sumit
2011-09-29 11:29   ` Hiremath, Vaibhav
2011-09-28 14:49 ` [PATCH v4 4/5] OMAP_VOUT: Add support for DSI panels Archit Taneja
2011-09-28 14:49   ` Archit Taneja
2011-09-29 11:29   ` Hiremath, Vaibhav
2011-09-28 14:49 ` [PATCH v4 5/5] OMAP_VOUT: Increase MAX_DISPLAYS to a larger value Archit Taneja
2011-09-28 14:49   ` Archit Taneja
2011-09-29 11:29   ` Hiremath, Vaibhav

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.