提交 d61233bf 编写于 作者: L Lad, Prabhakar 提交者: Mauro Carvalho Chehab

[media] media: blackfin: bfin_capture: use vb2_ioctl_* helpers

this patch adds support to vb2_ioctl_* helpers.
Signed-off-by: NLad, Prabhakar <prabhakar.csengg@gmail.com>
Tested-by: NScott Jiang <scott.jiang.linux@gmail.com>
Signed-off-by: NHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: NMauro Carvalho Chehab <mchehab@osg.samsung.com>
上级 f0e91c65
master alk-4.19.24 alk-4.19.30 alk-4.19.34 alk-4.19.36 alk-4.19.43 alk-4.19.48 alk-4.19.57 ck-4.19.67 ck-4.19.81 ck-4.19.91 github/fork/deepanshu1422/fix-typo-in-comment github/fork/haosdent/fix-typo linux-next v4.19.91 v4.19.90 v4.19.89 v4.19.88 v4.19.87 v4.19.86 v4.19.85 v4.19.84 v4.19.83 v4.19.82 v4.19.81 v4.19.80 v4.19.79 v4.19.78 v4.19.77 v4.19.76 v4.19.75 v4.19.74 v4.19.73 v4.19.72 v4.19.71 v4.19.70 v4.19.69 v4.19.68 v4.19.67 v4.19.66 v4.19.65 v4.19.64 v4.19.63 v4.19.62 v4.19.61 v4.19.60 v4.19.59 v4.19.58 v4.19.57 v4.19.56 v4.19.55 v4.19.54 v4.19.53 v4.19.52 v4.19.51 v4.19.50 v4.19.49 v4.19.48 v4.19.47 v4.19.46 v4.19.45 v4.19.44 v4.19.43 v4.19.42 v4.19.41 v4.19.40 v4.19.39 v4.19.38 v4.19.37 v4.19.36 v4.19.35 v4.19.34 v4.19.33 v4.19.32 v4.19.31 v4.19.30 v4.19.29 v4.19.28 v4.19.27 v4.19.26 v4.19.25 v4.19.24 v4.19.23 v4.19.22 v4.19.21 v4.19.20 v4.19.19 v4.19.18 v4.19.17 v4.19.16 v4.19.15 v4.19.14 v4.19.13 v4.19.12 v4.19.11 v4.19.10 v4.19.9 v4.19.8 v4.19.7 v4.19.6 v4.19.5 v4.19.4 v4.19.3 v4.19.2 v4.19.1 v4.19 v4.19-rc8 v4.19-rc7 v4.19-rc6 v4.19-rc5 v4.19-rc4 v4.19-rc3 v4.19-rc2 v4.19-rc1 ck-release-21 ck-release-20 ck-release-19.2 ck-release-19.1 ck-release-19 ck-release-18 ck-release-17.2 ck-release-17.1 ck-release-17 ck-release-16 ck-release-15.1 ck-release-15 ck-release-14 ck-release-13.2 ck-release-13 ck-release-12 ck-release-11 ck-release-10 ck-release-9 ck-release-7 alk-release-15 alk-release-14 alk-release-13.2 alk-release-13 alk-release-12 alk-release-11 alk-release-10 alk-release-9 alk-release-7
无相关合并请求
......@@ -276,6 +276,7 @@ static int bcap_start_streaming(struct vb2_queue *vq, unsigned int count)
struct ppi_if *ppi = bcap_dev->ppi;
struct bcap_buffer *buf, *tmp;
struct ppi_params params;
dma_addr_t addr;
int ret;
/* enable streamon on the sub device */
......@@ -335,6 +336,17 @@ static int bcap_start_streaming(struct vb2_queue *vq, unsigned int count)
reinit_completion(&bcap_dev->comp);
bcap_dev->stop = false;
/* get the next frame from the dma queue */
bcap_dev->cur_frm = list_entry(bcap_dev->dma_queue.next,
struct bcap_buffer, list);
/* remove buffer from the dma queue */
list_del_init(&bcap_dev->cur_frm->list);
addr = vb2_dma_contig_plane_dma_addr(&bcap_dev->cur_frm->vb, 0);
/* update DMA address */
ppi->ops->update_addr(ppi, (unsigned long)addr);
/* enable ppi */
ppi->ops->start(ppi);
return 0;
err:
......@@ -381,40 +393,6 @@ static struct vb2_ops bcap_video_qops = {
.stop_streaming = bcap_stop_streaming,
};
static int bcap_reqbufs(struct file *file, void *priv,
struct v4l2_requestbuffers *req_buf)
{
struct bcap_device *bcap_dev = video_drvdata(file);
struct vb2_queue *vq = &bcap_dev->buffer_queue;
return vb2_reqbufs(vq, req_buf);
}
static int bcap_querybuf(struct file *file, void *priv,
struct v4l2_buffer *buf)
{
struct bcap_device *bcap_dev = video_drvdata(file);
return vb2_querybuf(&bcap_dev->buffer_queue, buf);
}
static int bcap_qbuf(struct file *file, void *priv,
struct v4l2_buffer *buf)
{
struct bcap_device *bcap_dev = video_drvdata(file);
return vb2_qbuf(&bcap_dev->buffer_queue, buf);
}
static int bcap_dqbuf(struct file *file, void *priv,
struct v4l2_buffer *buf)
{
struct bcap_device *bcap_dev = video_drvdata(file);
return vb2_dqbuf(&bcap_dev->buffer_queue,
buf, file->f_flags & O_NONBLOCK);
}
static irqreturn_t bcap_isr(int irq, void *dev_id)
{
struct ppi_if *ppi = dev_id;
......@@ -456,51 +434,6 @@ static irqreturn_t bcap_isr(int irq, void *dev_id)
return IRQ_HANDLED;
}
static int bcap_streamon(struct file *file, void *priv,
enum v4l2_buf_type buf_type)
{
struct bcap_device *bcap_dev = video_drvdata(file);
struct ppi_if *ppi = bcap_dev->ppi;
dma_addr_t addr;
int ret;
/* call streamon to start streaming in videobuf */
ret = vb2_streamon(&bcap_dev->buffer_queue, buf_type);
if (ret)
return ret;
/* if dma queue is empty, return error */
if (list_empty(&bcap_dev->dma_queue)) {
v4l2_err(&bcap_dev->v4l2_dev, "dma queue is empty\n");
ret = -EINVAL;
goto err;
}
/* get the next frame from the dma queue */
bcap_dev->cur_frm = list_entry(bcap_dev->dma_queue.next,
struct bcap_buffer, list);
/* remove buffer from the dma queue */
list_del_init(&bcap_dev->cur_frm->list);
addr = vb2_dma_contig_plane_dma_addr(&bcap_dev->cur_frm->vb, 0);
/* update DMA address */
ppi->ops->update_addr(ppi, (unsigned long)addr);
/* enable ppi */
ppi->ops->start(ppi);
return 0;
err:
vb2_streamoff(&bcap_dev->buffer_queue, buf_type);
return ret;
}
static int bcap_streamoff(struct file *file, void *priv,
enum v4l2_buf_type buf_type)
{
struct bcap_device *bcap_dev = video_drvdata(file);
return vb2_streamoff(&bcap_dev->buffer_queue, buf_type);
}
static int bcap_querystd(struct file *file, void *priv, v4l2_std_id *std)
{
struct bcap_device *bcap_dev = video_drvdata(file);
......@@ -786,12 +719,12 @@ static const struct v4l2_ioctl_ops bcap_ioctl_ops = {
.vidioc_g_dv_timings = bcap_g_dv_timings,
.vidioc_query_dv_timings = bcap_query_dv_timings,
.vidioc_enum_dv_timings = bcap_enum_dv_timings,
.vidioc_reqbufs = bcap_reqbufs,
.vidioc_querybuf = bcap_querybuf,
.vidioc_qbuf = bcap_qbuf,
.vidioc_dqbuf = bcap_dqbuf,
.vidioc_streamon = bcap_streamon,
.vidioc_streamoff = bcap_streamoff,
.vidioc_reqbufs = vb2_ioctl_reqbufs,
.vidioc_querybuf = vb2_ioctl_querybuf,
.vidioc_qbuf = vb2_ioctl_qbuf,
.vidioc_dqbuf = vb2_ioctl_dqbuf,
.vidioc_streamon = vb2_ioctl_streamon,
.vidioc_streamoff = vb2_ioctl_streamoff,
.vidioc_g_parm = bcap_g_parm,
.vidioc_s_parm = bcap_s_parm,
.vidioc_log_status = bcap_log_status,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册
反馈
建议
客服 返回
顶部