diff options
-rw-r--r-- | drivers/media/platform/pxa_camera.c | 17 |
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; |