mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-01-11 17:10:13 +00:00
media: v4l2-dev: Make open and release file operations mandatory
All V4L2 drivers implement the open and release file operations. As all new drivers will need to use v4l2_fh, this situation won't change. Make those two file operation mandatory at registration time. This allows simplifying v4l2_open() and v4l2_release(). Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
This commit is contained in:
parent
5410bad332
commit
b3d945ba42
@ -411,7 +411,7 @@ static int v4l2_mmap(struct file *filp, struct vm_area_struct *vm)
|
||||
static int v4l2_open(struct inode *inode, struct file *filp)
|
||||
{
|
||||
struct video_device *vdev;
|
||||
int ret = 0;
|
||||
int ret;
|
||||
|
||||
/* Check if the video device is available */
|
||||
mutex_lock(&videodev_lock);
|
||||
@ -424,12 +424,11 @@ static int v4l2_open(struct inode *inode, struct file *filp)
|
||||
/* and increase the device refcount */
|
||||
video_get(vdev);
|
||||
mutex_unlock(&videodev_lock);
|
||||
if (vdev->fops->open) {
|
||||
if (video_is_registered(vdev))
|
||||
ret = vdev->fops->open(filp);
|
||||
else
|
||||
ret = -ENODEV;
|
||||
}
|
||||
|
||||
if (video_is_registered(vdev))
|
||||
ret = vdev->fops->open(filp);
|
||||
else
|
||||
ret = -ENODEV;
|
||||
|
||||
if (vdev->dev_debug & V4L2_DEV_DEBUG_FOP)
|
||||
dprintk("%s: open (%d)\n",
|
||||
@ -444,7 +443,7 @@ static int v4l2_open(struct inode *inode, struct file *filp)
|
||||
static int v4l2_release(struct inode *inode, struct file *filp)
|
||||
{
|
||||
struct video_device *vdev = video_devdata(filp);
|
||||
int ret = 0;
|
||||
int ret;
|
||||
|
||||
/*
|
||||
* We need to serialize the release() with queueing new requests.
|
||||
@ -452,14 +451,12 @@ static int v4l2_release(struct inode *inode, struct file *filp)
|
||||
* operation, and that should not be mixed with queueing a new
|
||||
* request at the same time.
|
||||
*/
|
||||
if (vdev->fops->release) {
|
||||
if (v4l2_device_supports_requests(vdev->v4l2_dev)) {
|
||||
mutex_lock(&vdev->v4l2_dev->mdev->req_queue_mutex);
|
||||
ret = vdev->fops->release(filp);
|
||||
mutex_unlock(&vdev->v4l2_dev->mdev->req_queue_mutex);
|
||||
} else {
|
||||
ret = vdev->fops->release(filp);
|
||||
}
|
||||
if (v4l2_device_supports_requests(vdev->v4l2_dev)) {
|
||||
mutex_lock(&vdev->v4l2_dev->mdev->req_queue_mutex);
|
||||
ret = vdev->fops->release(filp);
|
||||
mutex_unlock(&vdev->v4l2_dev->mdev->req_queue_mutex);
|
||||
} else {
|
||||
ret = vdev->fops->release(filp);
|
||||
}
|
||||
|
||||
if (vdev->dev_debug & V4L2_DEV_DEBUG_FOP)
|
||||
@ -922,6 +919,9 @@ int __video_register_device(struct video_device *vdev,
|
||||
/* the device_caps field MUST be set for all but subdevs */
|
||||
if (WARN_ON(type != VFL_TYPE_SUBDEV && !vdev->device_caps))
|
||||
return -EINVAL;
|
||||
/* the open and release file operations are mandatory */
|
||||
if (WARN_ON(!vdev->fops || !vdev->fops->open || !vdev->fops->release))
|
||||
return -EINVAL;
|
||||
|
||||
/* v4l2_fh support */
|
||||
spin_lock_init(&vdev->fh_lock);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user