media: v4l: subdev: Set sd->devnode before registering the subdev
The subdev's video device node was only assigned after registering the device node in the system. While it is unlikely that a driver needed to use this field in handling system calls to its file handle, there remains a slim chance the devnode field remains NULL while the driver expects to find a video node there. Assign the devnode field before registering the device, and assign it back to NULL if the registration failed. Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Reviewed-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
This commit is contained in:
parent
7daaf0bc24
commit
989bea4891
|
@ -218,13 +218,14 @@ int __v4l2_device_register_subdev_nodes(struct v4l2_device *v4l2_dev,
|
||||||
vdev->ctrl_handler = sd->ctrl_handler;
|
vdev->ctrl_handler = sd->ctrl_handler;
|
||||||
if (read_only)
|
if (read_only)
|
||||||
set_bit(V4L2_FL_SUBDEV_RO_DEVNODE, &vdev->flags);
|
set_bit(V4L2_FL_SUBDEV_RO_DEVNODE, &vdev->flags);
|
||||||
|
sd->devnode = vdev;
|
||||||
err = __video_register_device(vdev, VFL_TYPE_SUBDEV, -1, 1,
|
err = __video_register_device(vdev, VFL_TYPE_SUBDEV, -1, 1,
|
||||||
sd->owner);
|
sd->owner);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
|
sd->devnode = NULL;
|
||||||
kfree(vdev);
|
kfree(vdev);
|
||||||
goto clean_up;
|
goto clean_up;
|
||||||
}
|
}
|
||||||
sd->devnode = vdev;
|
|
||||||
#if defined(CONFIG_MEDIA_CONTROLLER)
|
#if defined(CONFIG_MEDIA_CONTROLLER)
|
||||||
sd->entity.info.dev.major = VIDEO_MAJOR;
|
sd->entity.info.dev.major = VIDEO_MAJOR;
|
||||||
sd->entity.info.dev.minor = vdev->minor;
|
sd->entity.info.dev.minor = vdev->minor;
|
||||||
|
|
Loading…
Reference in New Issue