summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorHans Verkuil <hans.verkuil@cisco.com>2015-06-15 14:33:40 +0300
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>2015-08-11 15:53:33 +0300
commit16225ea7fa6843482c562f033b7ec270651636e9 (patch)
tree2c24cd543dedb3e5b322f01277d5cfbe129b8c39 /drivers
parent2d703835b02c0d1adbea4b1eeac188be8e76710b (diff)
downloadlinux-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.c9
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);