[PATCH RESEND 1/2] media: davinci: vpbe: migrate driver to videobuf2

2012-10-22 Thread Prabhakar Lad
From: Lad, Prabhakar 

This patch migrates VPBE display driver to videobuf2 framework.

Signed-off-by: Lad, Prabhakar 
Signed-off-by: Manjunath Hadli 
---
 drivers/media/platform/davinci/Kconfig|2 +-
 drivers/media/platform/davinci/vpbe_display.c |  296 +++--
 include/media/davinci/vpbe_display.h  |   15 +-
 3 files changed, 188 insertions(+), 125 deletions(-)

diff --git a/drivers/media/platform/davinci/Kconfig 
b/drivers/media/platform/davinci/Kconfig
index 78e26d2..3c56037 100644
--- a/drivers/media/platform/davinci/Kconfig
+++ b/drivers/media/platform/davinci/Kconfig
@@ -101,7 +101,7 @@ config VIDEO_DM644X_VPBE
tristate "DM644X VPBE HW module"
depends on ARCH_DAVINCI_DM644x
select VIDEO_VPSS_SYSTEM
-   select VIDEOBUF_DMA_CONTIG
+   select VIDEOBUF2_DMA_CONTIG
help
Enables VPBE modules used for display on a DM644x
SoC.
diff --git a/drivers/media/platform/davinci/vpbe_display.c 
b/drivers/media/platform/davinci/vpbe_display.c
index 161c776..974957f 100644
--- a/drivers/media/platform/davinci/vpbe_display.c
+++ b/drivers/media/platform/davinci/vpbe_display.c
@@ -47,6 +47,9 @@ static int debug;
 
 module_param(debug, int, 0644);
 
+static int vpbe_set_osd_display_params(struct vpbe_display *disp_dev,
+   struct vpbe_layer *layer);
+
 static int venc_is_second_field(struct vpbe_display *disp_dev)
 {
struct vpbe_device *vpbe_dev = disp_dev->vpbe_dev;
@@ -73,10 +76,11 @@ static void vpbe_isr_even_field(struct vpbe_display 
*disp_obj,
if (layer->cur_frm == layer->next_frm)
return;
ktime_get_ts();
-   layer->cur_frm->ts.tv_sec = timevalue.tv_sec;
-   layer->cur_frm->ts.tv_usec = timevalue.tv_nsec / NSEC_PER_USEC;
-   layer->cur_frm->state = VIDEOBUF_DONE;
-   wake_up_interruptible(>cur_frm->done);
+   layer->cur_frm->vb.v4l2_buf.timestamp.tv_sec =
+   timevalue.tv_sec;
+   layer->cur_frm->vb.v4l2_buf.timestamp.tv_usec =
+   timevalue.tv_nsec / NSEC_PER_USEC;
+   vb2_buffer_done(>cur_frm->vb, VB2_BUF_STATE_DONE);
/* Make cur_frm pointing to next_frm */
layer->cur_frm = layer->next_frm;
 }
@@ -99,16 +103,14 @@ static void vpbe_isr_odd_field(struct vpbe_display 
*disp_obj,
 * otherwise hold on current frame
 * Get next from the buffer queue
 */
-   layer->next_frm = list_entry(
-   layer->dma_queue.next,
-   struct  videobuf_buffer,
-   queue);
+   layer->next_frm = list_entry(layer->dma_queue.next,
+ struct  vpbe_disp_buffer, list);
/* Remove that from the buffer queue */
-   list_del(>next_frm->queue);
+   list_del(>next_frm->list);
spin_unlock(_obj->dma_queue_lock);
/* Mark state of the frame to active */
-   layer->next_frm->state = VIDEOBUF_ACTIVE;
-   addr = videobuf_to_dma_contig(layer->next_frm);
+   layer->next_frm->vb.state = VB2_BUF_STATE_ACTIVE;
+   addr = vb2_dma_contig_plane_dma_addr(>next_frm->vb, 0);
osd_device->ops.start_layer(osd_device,
layer->layer_info.id,
addr,
@@ -199,39 +201,29 @@ static irqreturn_t venc_isr(int irq, void *arg)
 
 /*
  * vpbe_buffer_prepare()
- * This is the callback function called from videobuf_qbuf() function
+ * This is the callback function called from vb2_qbuf() function
  * the buffer is prepared and user space virtual address is converted into
  * physical address
  */
-static int vpbe_buffer_prepare(struct videobuf_queue *q,
- struct videobuf_buffer *vb,
- enum v4l2_field field)
+static int vpbe_buffer_prepare(struct vb2_buffer *vb)
 {
-   struct vpbe_fh *fh = q->priv_data;
+   struct vpbe_fh *fh = vb2_get_drv_priv(vb->vb2_queue);
+   struct vb2_queue *q = vb->vb2_queue;
struct vpbe_layer *layer = fh->layer;
struct vpbe_device *vpbe_dev = fh->disp_dev->vpbe_dev;
unsigned long addr;
-   int ret;
 
v4l2_dbg(1, debug, _dev->v4l2_dev,
"vpbe_buffer_prepare\n");
 
-   /* If buffer is not initialized, initialize it */
-   if (VIDEOBUF_NEEDS_INIT == vb->state) {
-   vb->width = layer->pix_fmt.width;
-   vb->height = layer->pix_fmt.height;
-   vb->size = layer->pix_fmt.sizeimage;
-   vb->field = field;
-
-   ret = videobuf_iolock(q, vb, NULL);
-   if (ret < 0) {
-   v4l2_err(_dev->v4l2_dev, "Failed to map \
-   user address\n");
+   if (vb->state != VB2_BUF_STATE_ACTIVE &&
+   vb->state != VB2_BUF_STATE_PREPARED) {
+   vb2_set_plane_payload(vb, 0, layer->pix_fmt.sizeimage);
+   if 

[PATCH RESEND 1/2] media: davinci: vpbe: migrate driver to videobuf2

2012-10-22 Thread Prabhakar Lad
From: Lad, Prabhakar prabhakar@ti.com

This patch migrates VPBE display driver to videobuf2 framework.

Signed-off-by: Lad, Prabhakar prabhakar@ti.com
Signed-off-by: Manjunath Hadli manjunath.ha...@ti.com
---
 drivers/media/platform/davinci/Kconfig|2 +-
 drivers/media/platform/davinci/vpbe_display.c |  296 +++--
 include/media/davinci/vpbe_display.h  |   15 +-
 3 files changed, 188 insertions(+), 125 deletions(-)

diff --git a/drivers/media/platform/davinci/Kconfig 
b/drivers/media/platform/davinci/Kconfig
index 78e26d2..3c56037 100644
--- a/drivers/media/platform/davinci/Kconfig
+++ b/drivers/media/platform/davinci/Kconfig
@@ -101,7 +101,7 @@ config VIDEO_DM644X_VPBE
tristate DM644X VPBE HW module
depends on ARCH_DAVINCI_DM644x
select VIDEO_VPSS_SYSTEM
-   select VIDEOBUF_DMA_CONTIG
+   select VIDEOBUF2_DMA_CONTIG
help
Enables VPBE modules used for display on a DM644x
SoC.
diff --git a/drivers/media/platform/davinci/vpbe_display.c 
b/drivers/media/platform/davinci/vpbe_display.c
index 161c776..974957f 100644
--- a/drivers/media/platform/davinci/vpbe_display.c
+++ b/drivers/media/platform/davinci/vpbe_display.c
@@ -47,6 +47,9 @@ static int debug;
 
 module_param(debug, int, 0644);
 
+static int vpbe_set_osd_display_params(struct vpbe_display *disp_dev,
+   struct vpbe_layer *layer);
+
 static int venc_is_second_field(struct vpbe_display *disp_dev)
 {
struct vpbe_device *vpbe_dev = disp_dev-vpbe_dev;
@@ -73,10 +76,11 @@ static void vpbe_isr_even_field(struct vpbe_display 
*disp_obj,
if (layer-cur_frm == layer-next_frm)
return;
ktime_get_ts(timevalue);
-   layer-cur_frm-ts.tv_sec = timevalue.tv_sec;
-   layer-cur_frm-ts.tv_usec = timevalue.tv_nsec / NSEC_PER_USEC;
-   layer-cur_frm-state = VIDEOBUF_DONE;
-   wake_up_interruptible(layer-cur_frm-done);
+   layer-cur_frm-vb.v4l2_buf.timestamp.tv_sec =
+   timevalue.tv_sec;
+   layer-cur_frm-vb.v4l2_buf.timestamp.tv_usec =
+   timevalue.tv_nsec / NSEC_PER_USEC;
+   vb2_buffer_done(layer-cur_frm-vb, VB2_BUF_STATE_DONE);
/* Make cur_frm pointing to next_frm */
layer-cur_frm = layer-next_frm;
 }
@@ -99,16 +103,14 @@ static void vpbe_isr_odd_field(struct vpbe_display 
*disp_obj,
 * otherwise hold on current frame
 * Get next from the buffer queue
 */
-   layer-next_frm = list_entry(
-   layer-dma_queue.next,
-   struct  videobuf_buffer,
-   queue);
+   layer-next_frm = list_entry(layer-dma_queue.next,
+ struct  vpbe_disp_buffer, list);
/* Remove that from the buffer queue */
-   list_del(layer-next_frm-queue);
+   list_del(layer-next_frm-list);
spin_unlock(disp_obj-dma_queue_lock);
/* Mark state of the frame to active */
-   layer-next_frm-state = VIDEOBUF_ACTIVE;
-   addr = videobuf_to_dma_contig(layer-next_frm);
+   layer-next_frm-vb.state = VB2_BUF_STATE_ACTIVE;
+   addr = vb2_dma_contig_plane_dma_addr(layer-next_frm-vb, 0);
osd_device-ops.start_layer(osd_device,
layer-layer_info.id,
addr,
@@ -199,39 +201,29 @@ static irqreturn_t venc_isr(int irq, void *arg)
 
 /*
  * vpbe_buffer_prepare()
- * This is the callback function called from videobuf_qbuf() function
+ * This is the callback function called from vb2_qbuf() function
  * the buffer is prepared and user space virtual address is converted into
  * physical address
  */
-static int vpbe_buffer_prepare(struct videobuf_queue *q,
- struct videobuf_buffer *vb,
- enum v4l2_field field)
+static int vpbe_buffer_prepare(struct vb2_buffer *vb)
 {
-   struct vpbe_fh *fh = q-priv_data;
+   struct vpbe_fh *fh = vb2_get_drv_priv(vb-vb2_queue);
+   struct vb2_queue *q = vb-vb2_queue;
struct vpbe_layer *layer = fh-layer;
struct vpbe_device *vpbe_dev = fh-disp_dev-vpbe_dev;
unsigned long addr;
-   int ret;
 
v4l2_dbg(1, debug, vpbe_dev-v4l2_dev,
vpbe_buffer_prepare\n);
 
-   /* If buffer is not initialized, initialize it */
-   if (VIDEOBUF_NEEDS_INIT == vb-state) {
-   vb-width = layer-pix_fmt.width;
-   vb-height = layer-pix_fmt.height;
-   vb-size = layer-pix_fmt.sizeimage;
-   vb-field = field;
-
-   ret = videobuf_iolock(q, vb, NULL);
-   if (ret  0) {
-   v4l2_err(vpbe_dev-v4l2_dev, Failed to map \
-   user address\n);
+   if (vb-state != VB2_BUF_STATE_ACTIVE 
+   vb-state != VB2_BUF_STATE_PREPARED) {
+   vb2_set_plane_payload(vb, 0,