diff options
author | Hans Verkuil <hans.verkuil@cisco.com> | 2015-06-15 14:33:40 +0300 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@osg.samsung.com> | 2015-08-11 15:53:33 +0300 |
commit | 16225ea7fa6843482c562f033b7ec270651636e9 (patch) | |
tree | 2c24cd543dedb3e5b322f01277d5cfbe129b8c39 /drivers | |
parent | 2d703835b02c0d1adbea4b1eeac188be8e76710b (diff) | |
download | linux-16225ea7fa6843482c562f033b7ec270651636e9.tar.xz |
[media] soc_camera: always release queue for queue owner
Always release the queue if the owner closes its filehandle and not when
it is the last open filehandle.
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Acked-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/media/platform/soc_camera/soc_camera.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/media/platform/soc_camera/soc_camera.c b/drivers/media/platform/soc_camera/soc_camera.c index 0b09281bdd7f..9087fed586fb 100644 --- a/drivers/media/platform/soc_camera/soc_camera.c +++ b/drivers/media/platform/soc_camera/soc_camera.c @@ -788,20 +788,21 @@ static int soc_camera_close(struct file *file) struct soc_camera_host *ici = to_soc_camera_host(icd->parent); mutex_lock(&ici->host_lock); + if (icd->streamer == file) { + if (ici->ops->init_videobuf2) + vb2_queue_release(&icd->vb2_vidq); + icd->streamer = NULL; + } icd->use_count--; if (!icd->use_count) { pm_runtime_suspend(&icd->vdev->dev); pm_runtime_disable(&icd->vdev->dev); - if (ici->ops->init_videobuf2) - vb2_queue_release(&icd->vb2_vidq); __soc_camera_power_off(icd); soc_camera_remove_device(icd); } - if (icd->streamer == file) - icd->streamer = NULL; mutex_unlock(&ici->host_lock); module_put(ici->ops->owner); |