summaryrefslogtreecommitdiffstats
path: root/drivers/media/platform/pxa_camera.c
diff options
context:
space:
mode:
authorRobert Jarzmik <robert.jarzmik@free.fr>2016-09-23 15:41:39 -0300
committerMauro Carvalho Chehab <mchehab@s-opensource.com>2016-10-24 18:08:12 -0200
commitc771f42fed7f21f510793302687884b424cd9f54 (patch)
treecfdd3e6ed92e81c25fc11e39b3c4ec59702be62a /drivers/media/platform/pxa_camera.c
parent6dfcd296576a14bc52d0453e4ba7ed09323a26dc (diff)
[media] media: platform: pxa_camera: add missing sensor power on
During sensors binding, there is a window where the sensor is switched off, while there is a call it to set a new format, which can end up in an access to the sensor, especially an I2C based sensor. Remove this window by activating the sensor. Signed-off-by: Robert Jarzmik <robert.jarzmik@free.fr> Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Diffstat (limited to 'drivers/media/platform/pxa_camera.c')
-rw-r--r--drivers/media/platform/pxa_camera.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/drivers/media/platform/pxa_camera.c b/drivers/media/platform/pxa_camera.c
index bcdac4932fb1..929006f65cc7 100644
--- a/drivers/media/platform/pxa_camera.c
+++ b/drivers/media/platform/pxa_camera.c
@@ -2125,17 +2125,22 @@ static int pxa_camera_sensor_bound(struct v4l2_async_notifier *notifier,
pix->bytesperline, pix->height);
pix->pixelformat = pcdev->current_fmt->host_fmt->fourcc;
v4l2_fill_mbus_format(mf, pix, pcdev->current_fmt->code);
- err = sensor_call(pcdev, pad, set_fmt, NULL, &format);
+
+ err = sensor_call(pcdev, core, s_power, 1);
if (err)
goto out;
+ err = sensor_call(pcdev, pad, set_fmt, NULL, &format);
+ if (err)
+ goto out_sensor_poweroff;
+
v4l2_fill_pix_format(pix, mf);
pr_info("%s(): colorspace=0x%x pixfmt=0x%x\n",
__func__, pix->colorspace, pix->pixelformat);
err = pxa_camera_init_videobuf2(pcdev);
if (err)
- goto out;
+ goto out_sensor_poweroff;
err = video_register_device(&pcdev->vdev, VFL_TYPE_GRABBER, -1);
if (err) {
@@ -2146,6 +2151,9 @@ static int pxa_camera_sensor_bound(struct v4l2_async_notifier *notifier,
"PXA Camera driver attached to camera %s\n",
subdev->name);
}
+
+out_sensor_poweroff:
+ err = sensor_call(pcdev, core, s_power, 0);
out:
mutex_unlock(&pcdev->mlock);
return err;