diff options
author | Chen Jian <jackchen@nvidia.com> | 2014-01-27 20:13:49 +0800 |
---|---|---|
committer | Danny Song <dsong@nvidia.com> | 2014-01-27 20:36:27 -0800 |
commit | e3a14401d49cfd75f752c49115903eecd720cac5 (patch) | |
tree | 500596cfed373349c09d9c21a979d1f185f2be0a /drivers | |
parent | d158089ee8f7fe840fefc3d65b964503d4d0e4a8 (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.c | 27 |
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); } |