summaryrefslogtreecommitdiff
path: root/asoc/codecs
diff options
context:
space:
mode:
authorRohit kumar <rohitkr@codeaurora.org>2017-10-27 09:27:29 +0530
committerGerrit - the friendly Code Review server <code-review@localhost>2017-11-30 00:33:35 -0800
commit9326b2df53c2f21d560941c5e2a1a648477d4136 (patch)
treed45f4fc2522d7ecb6762c072fdce084a6a6b3553 /asoc/codecs
parent50a527cf07f90c1141a8bd90482e30b40583691d (diff)
downloadmsm-extra-9326b2df53c2f21d560941c5e2a1a648477d4136.tar.gz
asoc: codecs: disable analog codec static supplies during suspend
Disable regulator supplies of analog codec during suspend to reduce power consumption. CRs-Fixed: 2132296 Change-Id: Ia4b690f01e83e929f8bf4d279454e2ff2e8655a2 Signed-off-by: Rohit kumar <rohitkr@codeaurora.org>
Diffstat (limited to 'asoc/codecs')
-rw-r--r--asoc/codecs/sdm660_cdc/msm-analog-cdc.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/asoc/codecs/sdm660_cdc/msm-analog-cdc.c b/asoc/codecs/sdm660_cdc/msm-analog-cdc.c
index d83d15a3..35e00a39 100644
--- a/asoc/codecs/sdm660_cdc/msm-analog-cdc.c
+++ b/asoc/codecs/sdm660_cdc/msm-analog-cdc.c
@@ -4208,7 +4208,7 @@ static int msm_anlg_cdc_enable_static_supplies_to_optimum(
struct sdm660_cdc_pdata *pdata)
{
int i;
- int ret = 0;
+ int ret = 0, rc = 0;
for (i = 0; i < sdm660_cdc->num_of_supplies; i++) {
if (pdata->regulator[i].ondemand)
@@ -4217,6 +4217,12 @@ static int msm_anlg_cdc_enable_static_supplies_to_optimum(
sdm660_cdc->supplies[i].consumer) <= 0)
continue;
+ rc = regulator_enable(sdm660_cdc->supplies[i].consumer);
+ if (rc) {
+ dev_err(sdm660_cdc->dev, "Failed to enable %s: %d\n",
+ sdm660_cdc->supplies[i].supply, rc);
+ break;
+ }
ret = regulator_set_voltage(
sdm660_cdc->supplies[i].consumer,
pdata->regulator[i].min_uv,
@@ -4233,7 +4239,10 @@ static int msm_anlg_cdc_enable_static_supplies_to_optimum(
sdm660_cdc->supplies[i].supply);
}
- return ret;
+ while (rc && i--)
+ if (!pdata->regulator[i].ondemand)
+ regulator_disable(sdm660_cdc->supplies[i].consumer);
+ return rc;
}
static int msm_anlg_cdc_disable_static_supplies_to_optimum(
@@ -4252,7 +4261,12 @@ static int msm_anlg_cdc_disable_static_supplies_to_optimum(
regulator_set_voltage(sdm660_cdc->supplies[i].consumer, 0,
pdata->regulator[i].max_uv);
regulator_set_load(sdm660_cdc->supplies[i].consumer, 0);
- dev_dbg(sdm660_cdc->dev, "Regulator %s set optimum mode\n",
+ ret = regulator_disable(sdm660_cdc->supplies[i].consumer);
+ if (ret)
+ dev_err(sdm660_cdc->dev, "Failed to disable %s: %d\n",
+ sdm660_cdc->supplies[i].supply, ret);
+
+ dev_dbg(sdm660_cdc->dev, "Regulator %s disable\n",
sdm660_cdc->supplies[i].supply);
}
@@ -4421,7 +4435,7 @@ static int msm_anlg_cdc_enable_static_supplies(
sdm660_cdc->supplies[i].supply);
}
- while (ret && --i)
+ while (ret && i--)
if (!pdata->regulator[i].ondemand)
regulator_disable(sdm660_cdc->supplies[i].consumer);
return ret;