"Ezequiel García" <elezegarcia@xxxxxxxxx> wrote: >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; >} > >Thanks, >Ezequiel. >-- >To unsubscribe from this list: send the line "unsubscribe linux-media" >in >the body of a message to majordomo@xxxxxxxxxxxxxxx >More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the v4l2 specification. Drivers can support the read/write methods or streaming IO methods (using mmap) or both. Often it is the case that drivers for MPEG encoders or other chips that produce container formats use read/write. Drivers for chips the provide raw frames often use streaming IO. Note that the videobuf2 framework can provide read/write method emulation for a driver IIRC. - Andy -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html