[v2] V4L: soc_camera: allow reading from video device if supported
Commit Message
Try reading on video device. If the camera bus driver supports reading
we can try it and return the result. Also add a debug line.
Signed-off-by: Anatolij Gustschin <agust@denx.de>
---
v2: - rebased on current staging/for_v3.7 branch
drivers/media/platform/soc_camera/soc_camera.c | 9 ++++++++-
1 files changed, 8 insertions(+), 1 deletions(-)
Comments
On Fri, 24 Aug 2012, Anatolij Gustschin wrote:
> Try reading on video device. If the camera bus driver supports reading
> we can try it and return the result. Also add a debug line.
>
> Signed-off-by: Anatolij Gustschin <agust@denx.de>
> ---
> v2: - rebased on current staging/for_v3.7 branch
>
> drivers/media/platform/soc_camera/soc_camera.c | 9 ++++++++-
> 1 files changed, 8 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/media/platform/soc_camera/soc_camera.c b/drivers/media/platform/soc_camera/soc_camera.c
> index 10b57f8..d591a42 100644
> --- a/drivers/media/platform/soc_camera/soc_camera.c
> +++ b/drivers/media/platform/soc_camera/soc_camera.c
> @@ -645,9 +645,16 @@ static ssize_t soc_camera_read(struct file *file, char __user *buf,
> size_t count, loff_t *ppos)
> {
> struct soc_camera_device *icd = file->private_data;
> + struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
> int err = -EINVAL;
>
> - dev_err(icd->pdev, "camera device read not implemented\n");
> + dev_dbg(icd->pdev, "read called, buf %p\n", buf);
> +
> + if (ici->ops->init_videobuf2 && icd->vb2_vidq.io_modes & VB2_READ)
> + err = vb2_read(&icd->vb2_vidq, buf, count, ppos,
> + file->f_flags & O_NONBLOCK);
> + else
> + dev_err(icd->pdev, "camera device read not implemented\n");
>
> return err;
How about a slightly simpler
> + struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
> - int err = -EINVAL;
>
> - dev_err(icd->pdev, "camera device read not implemented\n");
> + dev_dbg(icd->pdev, "read called, buf %p\n", buf);
>
> - return err;
> + if (ici->ops->init_videobuf2 && icd->vb2_vidq.io_modes & VB2_READ)
> + return vb2_read(&icd->vb2_vidq, buf, count, ppos,
> + file->f_flags & O_NONBLOCK);
> +
> + dev_err(icd->pdev, "camera device read not implemented\n");
> + return -EINVAL;
Thanks
Guennadi
> }
> --
> 1.7.1
>
---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
http://www.open-technology.de/
--
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
Hi Guennadi,
On Fri, 24 Aug 2012 13:37:20 +0200 (CEST)
Guennadi Liakhovetski <g.liakhovetski@gmx.de> wrote:
...
> How about a slightly simpler
>
> > + struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
> > - int err = -EINVAL;
> >
> > - dev_err(icd->pdev, "camera device read not implemented\n");
> > + dev_dbg(icd->pdev, "read called, buf %p\n", buf);
> >
> > - return err;
> > + if (ici->ops->init_videobuf2 && icd->vb2_vidq.io_modes & VB2_READ)
> > + return vb2_read(&icd->vb2_vidq, buf, count, ppos,
> > + file->f_flags & O_NONBLOCK);
> > +
> > + dev_err(icd->pdev, "camera device read not implemented\n");
> > + return -EINVAL;
Ok, I'll simplify as suggested and resubmit.
Thanks,
Anatolij
--
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
@@ -645,9 +645,16 @@ static ssize_t soc_camera_read(struct file *file, char __user *buf,
size_t count, loff_t *ppos)
{
struct soc_camera_device *icd = file->private_data;
+ struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
int err = -EINVAL;
- dev_err(icd->pdev, "camera device read not implemented\n");
+ dev_dbg(icd->pdev, "read called, buf %p\n", buf);
+
+ if (ici->ops->init_videobuf2 && icd->vb2_vidq.io_modes & VB2_READ)
+ err = vb2_read(&icd->vb2_vidq, buf, count, ppos,
+ file->f_flags & O_NONBLOCK);
+ else
+ dev_err(icd->pdev, "camera device read not implemented\n");
return err;
}