Commit 976036df authored by Lad, Prabhakar's avatar Lad, Prabhakar Committed by Mauro Carvalho Chehab

[media] soc_camera: use vb2_ops_wait_prepare/finish helper

This patch drops driver specific wait_prepare() and
wait_finish() callbacks from vb2_ops and instead uses
the the helpers vb2_ops_wait_prepare/finish() provided
by the vb2 core, the lock member of the queue needs
to be initalized to a mutex so that vb2 helpers
vb2_ops_wait_prepare/finish() can make use of it.
Signed-off-by: default avatarLad, Prabhakar <prabhakar.csengg@gmail.com>
Cc: Josh Wu <josh.wu@atmel.com>
Cc: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: default avatarGuennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
parent cb06b705
...@@ -455,8 +455,8 @@ static struct vb2_ops isi_video_qops = { ...@@ -455,8 +455,8 @@ static struct vb2_ops isi_video_qops = {
.buf_queue = buffer_queue, .buf_queue = buffer_queue,
.start_streaming = start_streaming, .start_streaming = start_streaming,
.stop_streaming = stop_streaming, .stop_streaming = stop_streaming,
.wait_prepare = soc_camera_unlock, .wait_prepare = vb2_ops_wait_prepare,
.wait_finish = soc_camera_lock, .wait_finish = vb2_ops_wait_finish,
}; };
/* ------------------------------------------------------------------ /* ------------------------------------------------------------------
...@@ -465,6 +465,8 @@ static struct vb2_ops isi_video_qops = { ...@@ -465,6 +465,8 @@ static struct vb2_ops isi_video_qops = {
static int isi_camera_init_videobuf(struct vb2_queue *q, static int isi_camera_init_videobuf(struct vb2_queue *q,
struct soc_camera_device *icd) struct soc_camera_device *icd)
{ {
struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
q->type = V4L2_BUF_TYPE_VIDEO_CAPTURE; q->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
q->io_modes = VB2_MMAP; q->io_modes = VB2_MMAP;
q->drv_priv = icd; q->drv_priv = icd;
...@@ -472,6 +474,7 @@ static int isi_camera_init_videobuf(struct vb2_queue *q, ...@@ -472,6 +474,7 @@ static int isi_camera_init_videobuf(struct vb2_queue *q,
q->ops = &isi_video_qops; q->ops = &isi_video_qops;
q->mem_ops = &vb2_dma_contig_memops; q->mem_ops = &vb2_dma_contig_memops;
q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
q->lock = &ici->host_lock;
return vb2_queue_init(q); return vb2_queue_init(q);
} }
......
...@@ -435,14 +435,16 @@ static struct vb2_ops mx3_videobuf_ops = { ...@@ -435,14 +435,16 @@ static struct vb2_ops mx3_videobuf_ops = {
.buf_queue = mx3_videobuf_queue, .buf_queue = mx3_videobuf_queue,
.buf_cleanup = mx3_videobuf_release, .buf_cleanup = mx3_videobuf_release,
.buf_init = mx3_videobuf_init, .buf_init = mx3_videobuf_init,
.wait_prepare = soc_camera_unlock, .wait_prepare = vb2_ops_wait_prepare,
.wait_finish = soc_camera_lock, .wait_finish = vb2_ops_wait_finish,
.stop_streaming = mx3_stop_streaming, .stop_streaming = mx3_stop_streaming,
}; };
static int mx3_camera_init_videobuf(struct vb2_queue *q, static int mx3_camera_init_videobuf(struct vb2_queue *q,
struct soc_camera_device *icd) struct soc_camera_device *icd)
{ {
struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
q->type = V4L2_BUF_TYPE_VIDEO_CAPTURE; q->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
q->io_modes = VB2_MMAP | VB2_USERPTR; q->io_modes = VB2_MMAP | VB2_USERPTR;
q->drv_priv = icd; q->drv_priv = icd;
...@@ -450,6 +452,7 @@ static int mx3_camera_init_videobuf(struct vb2_queue *q, ...@@ -450,6 +452,7 @@ static int mx3_camera_init_videobuf(struct vb2_queue *q,
q->mem_ops = &vb2_dma_contig_memops; q->mem_ops = &vb2_dma_contig_memops;
q->buf_struct_size = sizeof(struct mx3_camera_buffer); q->buf_struct_size = sizeof(struct mx3_camera_buffer);
q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
q->lock = &ici->host_lock;
return vb2_queue_init(q); return vb2_queue_init(q);
} }
......
...@@ -881,8 +881,8 @@ static struct vb2_ops rcar_vin_vb2_ops = { ...@@ -881,8 +881,8 @@ static struct vb2_ops rcar_vin_vb2_ops = {
.buf_cleanup = rcar_vin_videobuf_release, .buf_cleanup = rcar_vin_videobuf_release,
.buf_queue = rcar_vin_videobuf_queue, .buf_queue = rcar_vin_videobuf_queue,
.stop_streaming = rcar_vin_stop_streaming, .stop_streaming = rcar_vin_stop_streaming,
.wait_prepare = soc_camera_unlock, .wait_prepare = vb2_ops_wait_prepare,
.wait_finish = soc_camera_lock, .wait_finish = vb2_ops_wait_finish,
}; };
static irqreturn_t rcar_vin_irq(int irq, void *data) static irqreturn_t rcar_vin_irq(int irq, void *data)
...@@ -1808,6 +1808,8 @@ static int rcar_vin_querycap(struct soc_camera_host *ici, ...@@ -1808,6 +1808,8 @@ static int rcar_vin_querycap(struct soc_camera_host *ici,
static int rcar_vin_init_videobuf2(struct vb2_queue *vq, static int rcar_vin_init_videobuf2(struct vb2_queue *vq,
struct soc_camera_device *icd) struct soc_camera_device *icd)
{ {
struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
vq->type = V4L2_BUF_TYPE_VIDEO_CAPTURE; vq->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
vq->io_modes = VB2_MMAP | VB2_USERPTR; vq->io_modes = VB2_MMAP | VB2_USERPTR;
vq->drv_priv = icd; vq->drv_priv = icd;
...@@ -1815,6 +1817,7 @@ static int rcar_vin_init_videobuf2(struct vb2_queue *vq, ...@@ -1815,6 +1817,7 @@ static int rcar_vin_init_videobuf2(struct vb2_queue *vq,
vq->mem_ops = &vb2_dma_contig_memops; vq->mem_ops = &vb2_dma_contig_memops;
vq->buf_struct_size = sizeof(struct rcar_vin_buffer); vq->buf_struct_size = sizeof(struct rcar_vin_buffer);
vq->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; vq->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
vq->lock = &ici->host_lock;
return vb2_queue_init(vq); return vb2_queue_init(vq);
} }
......
...@@ -496,8 +496,8 @@ static struct vb2_ops sh_mobile_ceu_videobuf_ops = { ...@@ -496,8 +496,8 @@ static struct vb2_ops sh_mobile_ceu_videobuf_ops = {
.buf_queue = sh_mobile_ceu_videobuf_queue, .buf_queue = sh_mobile_ceu_videobuf_queue,
.buf_cleanup = sh_mobile_ceu_videobuf_release, .buf_cleanup = sh_mobile_ceu_videobuf_release,
.buf_init = sh_mobile_ceu_videobuf_init, .buf_init = sh_mobile_ceu_videobuf_init,
.wait_prepare = soc_camera_unlock, .wait_prepare = vb2_ops_wait_prepare,
.wait_finish = soc_camera_lock, .wait_finish = vb2_ops_wait_finish,
.stop_streaming = sh_mobile_ceu_stop_streaming, .stop_streaming = sh_mobile_ceu_stop_streaming,
}; };
...@@ -1661,6 +1661,8 @@ static int sh_mobile_ceu_querycap(struct soc_camera_host *ici, ...@@ -1661,6 +1661,8 @@ static int sh_mobile_ceu_querycap(struct soc_camera_host *ici,
static int sh_mobile_ceu_init_videobuf(struct vb2_queue *q, static int sh_mobile_ceu_init_videobuf(struct vb2_queue *q,
struct soc_camera_device *icd) struct soc_camera_device *icd)
{ {
struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
q->type = V4L2_BUF_TYPE_VIDEO_CAPTURE; q->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
q->io_modes = VB2_MMAP | VB2_USERPTR; q->io_modes = VB2_MMAP | VB2_USERPTR;
q->drv_priv = icd; q->drv_priv = icd;
...@@ -1668,6 +1670,7 @@ static int sh_mobile_ceu_init_videobuf(struct vb2_queue *q, ...@@ -1668,6 +1670,7 @@ static int sh_mobile_ceu_init_videobuf(struct vb2_queue *q,
q->mem_ops = &vb2_dma_contig_memops; q->mem_ops = &vb2_dma_contig_memops;
q->buf_struct_size = sizeof(struct sh_mobile_ceu_buffer); q->buf_struct_size = sizeof(struct sh_mobile_ceu_buffer);
q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
q->lock = &ici->host_lock;
return vb2_queue_init(q); return vb2_queue_init(q);
} }
......
...@@ -843,22 +843,6 @@ static unsigned int soc_camera_poll(struct file *file, poll_table *pt) ...@@ -843,22 +843,6 @@ static unsigned int soc_camera_poll(struct file *file, poll_table *pt)
return res; return res;
} }
void soc_camera_lock(struct vb2_queue *vq)
{
struct soc_camera_device *icd = vb2_get_drv_priv(vq);
struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
mutex_lock(&ici->host_lock);
}
EXPORT_SYMBOL(soc_camera_lock);
void soc_camera_unlock(struct vb2_queue *vq)
{
struct soc_camera_device *icd = vb2_get_drv_priv(vq);
struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
mutex_unlock(&ici->host_lock);
}
EXPORT_SYMBOL(soc_camera_unlock);
static struct v4l2_file_operations soc_camera_fops = { static struct v4l2_file_operations soc_camera_fops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.open = soc_camera_open, .open = soc_camera_open,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment