diff options
Diffstat (limited to 'drivers/media/video/v4l2-dev.c')
| -rw-r--r-- | drivers/media/video/v4l2-dev.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/media/video/v4l2-dev.c b/drivers/media/video/v4l2-dev.c index 06f14008b346..a5c9ed128b97 100644 --- a/drivers/media/video/v4l2-dev.c +++ b/drivers/media/video/v4l2-dev.c | |||
| @@ -173,6 +173,17 @@ static void v4l2_device_release(struct device *cd) | |||
| 173 | media_device_unregister_entity(&vdev->entity); | 173 | media_device_unregister_entity(&vdev->entity); |
| 174 | #endif | 174 | #endif |
| 175 | 175 | ||
| 176 | /* Do not call v4l2_device_put if there is no release callback set. | ||
| 177 | * Drivers that have no v4l2_device release callback might free the | ||
| 178 | * v4l2_dev instance in the video_device release callback below, so we | ||
| 179 | * must perform this check here. | ||
| 180 | * | ||
| 181 | * TODO: In the long run all drivers that use v4l2_device should use the | ||
| 182 | * v4l2_device release callback. This check will then be unnecessary. | ||
| 183 | */ | ||
| 184 | if (v4l2_dev && v4l2_dev->release == NULL) | ||
| 185 | v4l2_dev = NULL; | ||
| 186 | |||
| 176 | /* Release video_device and perform other | 187 | /* Release video_device and perform other |
| 177 | cleanups as needed. */ | 188 | cleanups as needed. */ |
| 178 | vdev->release(vdev); | 189 | vdev->release(vdev); |
