diff options
| author | Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> | 2025-08-10 04:30:14 +0300 | 
|---|---|---|
| committer | Hans Verkuil <hverkuil+cisco@kernel.org> | 2025-08-13 09:33:46 +0300 | 
| commit | bb4d6be205dae94aa2d3c3a1ad814dad90d4fd62 (patch) | |
| tree | 1e87cbfad5a1ad1ad201a6daa5680768636a46cb /drivers/media/v4l2-core/v4l2-dev.c | |
| parent | b3d945ba42dd640255492a523baeb6b6946a99bf (diff) | |
| download | linux-bb4d6be205dae94aa2d3c3a1ad814dad90d4fd62.tar.xz | |
media: Drop V4L2_FL_USES_V4L2_FH checks
Now that all drivers use v4l2_fh, we can drop the V4L2_FL_USES_V4L2_FH
checks through the V4L2 core.
To ensure that all new drivers use v4l2_fh, keep setting the
V4L2_FL_USES_V4L2_FH flag in v4l2_fh_init(), and verify it is set after
the .open() file operation returns.
Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
Diffstat (limited to 'drivers/media/v4l2-core/v4l2-dev.c')
| -rw-r--r-- | drivers/media/v4l2-core/v4l2-dev.c | 21 | 
1 files changed, 16 insertions, 5 deletions
diff --git a/drivers/media/v4l2-core/v4l2-dev.c b/drivers/media/v4l2-core/v4l2-dev.c index 1a4184b94838..10a126e50c1c 100644 --- a/drivers/media/v4l2-core/v4l2-dev.c +++ b/drivers/media/v4l2-core/v4l2-dev.c @@ -425,14 +425,26 @@ static int v4l2_open(struct inode *inode, struct file *filp)  	video_get(vdev);  	mutex_unlock(&videodev_lock); -	if (video_is_registered(vdev)) -		ret = vdev->fops->open(filp); -	else +	if (!video_is_registered(vdev)) { +		ret = -ENODEV; +		goto done; +	} + +	ret = vdev->fops->open(filp); +	if (ret) +		goto done; + +	/* All drivers must use v4l2_fh. */ +	if (WARN_ON(!test_bit(V4L2_FL_USES_V4L2_FH, &vdev->flags))) { +		vdev->fops->release(filp);  		ret = -ENODEV; +	} +done:  	if (vdev->dev_debug & V4L2_DEV_DEBUG_FOP)  		dprintk("%s: open (%d)\n",  			video_device_node_name(vdev), ret); +  	/* decrease the refcount in case of an error */  	if (ret)  		video_put(vdev); @@ -1114,8 +1126,7 @@ void video_unregister_device(struct video_device *vdev)  	 */  	clear_bit(V4L2_FL_REGISTERED, &vdev->flags);  	mutex_unlock(&videodev_lock); -	if (test_bit(V4L2_FL_USES_V4L2_FH, &vdev->flags)) -		v4l2_event_wake_all(vdev); +	v4l2_event_wake_all(vdev);  	device_unregister(&vdev->dev);  }  EXPORT_SYMBOL(video_unregister_device);  | 
