[question] v4l read() operation
Dave Hylands
dhylands at gmail.com
Sat Feb 25 18:14:35 EST 2012
Hi Ezequiel
2012/2/25 Ezequiel García <elezegarcia at gmail.com>:
> Hi,
>
> If I register a video device with this fops:
>
> static const struct v4l2_file_operations v4l2_fops = {
> .owner = THIS_MODULE,
> .open = xxx_open,
> .unlocked_ioctl = xxx_unlocked_ioctl,
> .poll = xxx_poll,
> .mmap = xxx_mmap,
> };
>
> then if I "cat" the device
>
> $ cat /dev/video0
>
> Who is supporting read() ?
>
> I thought it could be v4l2_read(),
> however this function seems to return EINVAL:
>
> static ssize_t v4l2_read(struct file *filp, char __user *buf,
> size_t sz, loff_t *off)
> {
> struct video_device *vdev = video_devdata(filp);
> int ret = -ENODEV;
>
> if (!vdev->fops->read)
> return -EINVAL;
> if (vdev->lock && mutex_lock_interruptible(vdev->lock))
> return -ERESTARTSYS;
> if (video_is_registered(vdev))
> ret = vdev->fops->read(filp, buf, sz, off);
> if (vdev->lock)
> mutex_unlock(vdev->lock);
> return ret;
> }
I'm not all that familiar with v4l, but based on what you've posted,
you need to populate the read routine in your v4l2_fops structure to
support read.
--
Dave Hylands
Shuswap, BC, Canada
http://www.davehylands.com
More information about the Kernelnewbies
mailing list