[PATCH 68/133] [Jaunty SRU] ARM.imx51 Freescale:ENGR00111996 Fix camera suspend issue in MX51
Brad Figg
brad.figg at canonical.com
Thu Jul 9 16:48:58 UTC 2009
From: Lily Zhang <r58066 at freescale.com>
Fix camera suspend issue which is caused by regulator pointer check.
Signed-off-by: Lily Zhang <r58066 at freescale.com>
Signed-off-by: Brad Figg <brad.figg at canonical.com>
---
drivers/media/video/mxc/capture/ov3640.c | 50 ++++++++++++++++--------------
1 files changed, 27 insertions(+), 23 deletions(-)
diff --git a/drivers/media/video/mxc/capture/ov3640.c b/drivers/media/video/mxc/capture/ov3640.c
index 37d65bb..47f6e8f 100644
--- a/drivers/media/video/mxc/capture/ov3640.c
+++ b/drivers/media/video/mxc/capture/ov3640.c
@@ -539,26 +539,26 @@ static int ioctl_s_power(struct v4l2_int_device *s, int on)
if (on && !sensor->on) {
gpio_sensor_active(ov3640_data.csi);
- if (!IS_ERR_VALUE((unsigned long)io_regulator))
+ if (io_regulator)
if (regulator_enable(io_regulator) != 0)
return -EIO;
- if (!IS_ERR_VALUE((unsigned long)core_regulator))
+ if (core_regulator)
if (regulator_enable(core_regulator) != 0)
return -EIO;
- if (!IS_ERR_VALUE((unsigned long)gpo_regulator))
+ if (gpo_regulator)
if (regulator_enable(gpo_regulator) != 0)
return -EIO;
- if (!IS_ERR_VALUE((unsigned long)analog_regulator))
+ if (analog_regulator)
if (regulator_enable(analog_regulator) != 0)
return -EIO;
} else if (!on && sensor->on) {
- if (!IS_ERR_VALUE((unsigned long)analog_regulator))
+ if (analog_regulator)
regulator_disable(analog_regulator);
- if (!IS_ERR_VALUE((unsigned long)core_regulator))
+ if (core_regulator)
regulator_disable(core_regulator);
- if (!IS_ERR_VALUE((unsigned long)io_regulator))
+ if (io_regulator)
regulator_disable(io_regulator);
- if (!IS_ERR_VALUE((unsigned long)gpo_regulator))
+ if (gpo_regulator)
regulator_disable(gpo_regulator);
gpio_sensor_inactive(ov3640_data.csi);
}
@@ -956,7 +956,7 @@ static int ov3640_probe(struct i2c_client *client,
if (plat_data->io_regulator) {
io_regulator = regulator_get(&client->dev,
plat_data->io_regulator);
- if (!IS_ERR_VALUE((u32)io_regulator)) {
+ if (!IS_ERR(io_regulator)) {
regulator_set_voltage(io_regulator,
OV3640_VOLTAGE_DIGITAL_IO,
OV3640_VOLTAGE_DIGITAL_IO);
@@ -967,13 +967,14 @@ static int ov3640_probe(struct i2c_client *client,
dev_dbg(&client->dev,
"%s:io set voltage ok\n", __func__);
}
- }
+ } else
+ io_regulator = NULL;
}
if (plat_data->core_regulator) {
core_regulator = regulator_get(&client->dev,
plat_data->core_regulator);
- if (!IS_ERR_VALUE((u32)core_regulator)) {
+ if (!IS_ERR(core_regulator)) {
regulator_set_voltage(core_regulator,
OV3640_VOLTAGE_DIGITAL_CORE,
OV3640_VOLTAGE_DIGITAL_CORE);
@@ -984,13 +985,14 @@ static int ov3640_probe(struct i2c_client *client,
dev_dbg(&client->dev,
"%s:core set voltage ok\n", __func__);
}
- }
+ } else
+ core_regulator = NULL;
}
if (plat_data->analog_regulator) {
analog_regulator = regulator_get(&client->dev,
plat_data->analog_regulator);
- if (!IS_ERR_VALUE((u32)analog_regulator)) {
+ if (!IS_ERR(analog_regulator)) {
regulator_set_voltage(analog_regulator,
OV3640_VOLTAGE_ANALOG,
OV3640_VOLTAGE_ANALOG);
@@ -1002,13 +1004,14 @@ static int ov3640_probe(struct i2c_client *client,
dev_dbg(&client->dev,
"%s:analog set voltage ok\n", __func__);
}
- }
+ } else
+ analog_regulator = NULL;
}
if (plat_data->gpo_regulator) {
gpo_regulator = regulator_get(&client->dev,
plat_data->gpo_regulator);
- if (!IS_ERR_VALUE((u32)gpo_regulator)) {
+ if (!IS_ERR(gpo_regulator)) {
if (regulator_enable(gpo_regulator) != 0) {
pr_err("%s:gpo3 enable error\n", __func__);
goto err4;
@@ -1016,7 +1019,8 @@ static int ov3640_probe(struct i2c_client *client,
dev_dbg(&client->dev,
"%s:gpo3 enable ok\n", __func__);
}
- }
+ } else
+ gpo_regulator = NULL;
}
ov3640_int_device.priv = &ov3640_data;
@@ -1025,17 +1029,17 @@ static int ov3640_probe(struct i2c_client *client,
return retval;
err4:
- if (!IS_ERR_VALUE((u32)analog_regulator)) {
+ if (analog_regulator) {
regulator_disable(analog_regulator);
regulator_put(analog_regulator);
}
err3:
- if (!IS_ERR_VALUE((u32)core_regulator)) {
+ if (core_regulator) {
regulator_disable(core_regulator);
regulator_put(core_regulator);
}
err2:
- if (!IS_ERR_VALUE((u32)io_regulator)) {
+ if (io_regulator) {
regulator_disable(io_regulator);
regulator_put(io_regulator);
}
@@ -1055,22 +1059,22 @@ static int ov3640_remove(struct i2c_client *client)
v4l2_int_device_unregister(&ov3640_int_device);
- if (!IS_ERR_VALUE((unsigned long)gpo_regulator)) {
+ if (gpo_regulator) {
regulator_disable(gpo_regulator);
regulator_put(gpo_regulator);
}
- if (!IS_ERR_VALUE((unsigned long)analog_regulator)) {
+ if (analog_regulator) {
regulator_disable(analog_regulator);
regulator_put(analog_regulator);
}
- if (!IS_ERR_VALUE((unsigned long)core_regulator)) {
+ if (core_regulator) {
regulator_disable(core_regulator);
regulator_put(core_regulator);
}
- if (!IS_ERR_VALUE((unsigned long)io_regulator)) {
+ if (io_regulator) {
regulator_disable(io_regulator);
regulator_put(io_regulator);
}
--
1.6.0.4
More information about the kernel-team
mailing list