aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/media/platform/pxa_camera.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/drivers/media/platform/pxa_camera.c b/drivers/media/platform/pxa_camera.c
index c71a00736541..c792cb178a84 100644
--- a/drivers/media/platform/pxa_camera.c
+++ b/drivers/media/platform/pxa_camera.c
@@ -2040,6 +2040,9 @@ static int pxac_fops_camera_open(struct file *filp)
2040 if (ret < 0) 2040 if (ret < 0)
2041 goto out; 2041 goto out;
2042 2042
2043 if (!v4l2_fh_is_singular_file(filp))
2044 goto out;
2045
2043 ret = sensor_call(pcdev, core, s_power, 1); 2046 ret = sensor_call(pcdev, core, s_power, 1);
2044 if (ret) 2047 if (ret)
2045 v4l2_fh_release(filp); 2048 v4l2_fh_release(filp);
@@ -2052,13 +2055,17 @@ static int pxac_fops_camera_release(struct file *filp)
2052{ 2055{
2053 struct pxa_camera_dev *pcdev = video_drvdata(filp); 2056 struct pxa_camera_dev *pcdev = video_drvdata(filp);
2054 int ret; 2057 int ret;
2055 2058 bool fh_singular;
2056 ret = vb2_fop_release(filp);
2057 if (ret < 0)
2058 return ret;
2059 2059
2060 mutex_lock(&pcdev->mlock); 2060 mutex_lock(&pcdev->mlock);
2061 ret = sensor_call(pcdev, core, s_power, 0); 2061
2062 fh_singular = v4l2_fh_is_singular_file(filp);
2063
2064 ret = _vb2_fop_release(filp, NULL);
2065
2066 if (fh_singular)
2067 ret = sensor_call(pcdev, core, s_power, 0);
2068
2062 mutex_unlock(&pcdev->mlock); 2069 mutex_unlock(&pcdev->mlock);
2063 2070
2064 return ret; 2071 return ret;