summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorChen Jian <jackchen@nvidia.com>2014-01-27 20:13:49 +0800
committerDanny Song <dsong@nvidia.com>2014-01-27 20:36:27 -0800
commite3a14401d49cfd75f752c49115903eecd720cac5 (patch)
tree500596cfed373349c09d9c21a979d1f185f2be0a /drivers
parentd158089ee8f7fe840fefc3d65b964503d4d0e4a8 (diff)
staging:iio:ltr659ps: Change regulator routine
- Only enable/disable regulator when sensor is enabled/disabled. Bug 1446066 Change-Id: I5bff3066f47cbd08e7f88309ec65b41b69763367 Signed-off-by: Chen Jian <jackchen@nvidia.com> Reviewed-on: http://git-master/r/360408 Reviewed-by: Automatic_Commit_Validation_User GVS: Gerrit_Virtual_Submit Reviewed-by: David Pu <dpu@nvidia.com> Tested-by: David Pu <dpu@nvidia.com> Reviewed-by: Danny Song <dsong@nvidia.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/staging/iio/light/ltr659ps.c27
1 files changed, 11 insertions, 16 deletions
diff --git a/drivers/staging/iio/light/ltr659ps.c b/drivers/staging/iio/light/ltr659ps.c
index b8b4d07490ed..819c639bdfe6 100644
--- a/drivers/staging/iio/light/ltr659ps.c
+++ b/drivers/staging/iio/light/ltr659ps.c
@@ -1141,6 +1141,7 @@ static void ltr659ps_enable_sensor(struct i2c_client *client, int enable)
if (data->enable != enable) {
if (enable) {
+ regulator_enable(data->reg);
if (!data->init) {
ltr659ps_init_sensor(data->client);
data->init = 1;
@@ -1155,6 +1156,8 @@ static void ltr659ps_enable_sensor(struct i2c_client *client, int enable)
, LTR659PS_REG_PS_CONTR, 0x00, 0x03);
cancel_delayed_work_sync(&data->work);
flush_workqueue(data->prox_wq);
+ regulator_disable(data->reg);
+ data->init = 0;
}
}
@@ -1249,23 +1252,19 @@ static int __devinit ltr659ps_probe(struct i2c_client *client
}
prox_data->reg = regulator_get(&client->dev, "va_sns_hv");
- if (IS_ERR(prox_data->reg)) {
+ if (IS_ERR_OR_NULL(prox_data->reg)) {
PROX_ERROR("regulator_get failed!\n");
goto err_regulator_get;
}
- rc = regulator_enable(prox_data->reg);
- if (rc) {
- PROX_ERROR("regulator_enable failed!\n");
- goto err_regulator_enable;
- }
-
- rc = ltr659ps_check_id(prox_data->client);
- if (rc) {
- PROX_ERROR("ltr659ps_check_id failed!\n");
- goto err_check_id_failed;
+ if (regulator_is_enabled(prox_data->reg)) {
+ rc = ltr659ps_check_id(prox_data->client);
+ if (rc) {
+ PROX_ERROR("ltr659ps_check_id failed!\n");
+ goto err_check_id_failed;
+ }
+ PROX_DEBUG("Device LTR659ps found.\n");
}
- PROX_DEBUG("Device LTR659ps found.\n");
rc = ltr659ps_setup(prox_data);
if (rc) {
@@ -1380,8 +1379,6 @@ static int ltr659ps_suspend(struct i2c_client *client, pm_message_t mesg)
} else {
mutex_lock(&data->prox_mtx);
ltr659ps_enable_sensor(client, 0);
- regulator_disable(data->reg);
- regulator_put(data->reg);
data->init = 0;
data->suspend = 1;
mutex_unlock(&data->prox_mtx);
@@ -1403,8 +1400,6 @@ static int ltr659ps_resume(struct i2c_client *client)
mutex_unlock(&data->prox_mtx);
} else {
mutex_lock(&data->prox_mtx);
- data->reg = regulator_get(&client->dev, "va_sns_hv");
- regulator_enable(data->reg);
ltr659ps_enable_sensor(client, 1);
mutex_unlock(&data->prox_mtx);
}