asoc: Improve msm-cdc-supply vote checks and messages

In msm-cdc-supply, add checks to prevent regulator_disable()
from being called if the cdc vote has already gone through.

Also add error messages if this happens and also add debug
messages whenever on-demand supplies are getting enabled/disabled.

Change-Id: I696be0a1ea638ffcf903e81a8b61c6a8dde984a8
Signed-off-by: Eric Rosas <quic_erosas@quicinc.com>
This commit is contained in:
Eric Rosas
2023-09-27 16:38:11 -07:00
parent ba09b0efd6
commit 7f46f83774

View File

@@ -270,7 +270,11 @@ bool msm_cdc_check_supply_vote(struct device *dev,
return cdc_vreg[i].vote; return cdc_vreg[i].vote;
} }
return rc; dev_err_ratelimited(dev,
"%s: Unable to find vote for supply %s\n",
__func__, supply_name);
return -EINVAL;
} }
EXPORT_SYMBOL(msm_cdc_check_supply_vote); EXPORT_SYMBOL(msm_cdc_check_supply_vote);
@@ -350,15 +354,26 @@ int msm_cdc_disable_ondemand_supply(struct device *dev,
if (rc) if (rc)
return rc; return rc;
dev_dbg(dev, "%s: Disabling on-demand supply %s\n",
__func__, supply_name);
for (i = 0; i < num_supplies; i++) { for (i = 0; i < num_supplies; i++) {
if (cdc_vreg[i].ondemand && if (cdc_vreg[i].ondemand &&
!strcmp(cdc_vreg[i].name, supply_name)) { !strcmp(cdc_vreg[i].name, supply_name)) {
if (!cdc_vreg[i].vote) {
dev_err_ratelimited(dev,
"%s: Attempted to disable already disabled supply %s\n",
__func__, supplies[i].supply);
break;
}
rc = regulator_disable(supplies[i].consumer); rc = regulator_disable(supplies[i].consumer);
if (rc) if (rc)
dev_err_ratelimited(dev, dev_err_ratelimited(dev,
"%s: failed to disable supply %s, err:%d\n", "%s: failed to disable supply %s, err:%d\n",
__func__, supplies[i].supply, rc); __func__, supplies[i].supply, rc);
cdc_vreg[i].vote = false; else
cdc_vreg[i].vote = false;
break; break;
} }
} }
@@ -402,14 +417,25 @@ int msm_cdc_enable_ondemand_supply(struct device *dev,
if (rc) if (rc)
return rc; return rc;
dev_dbg(dev, "%s: Enabling on-demand supply %s\n",
__func__, supply_name);
for (i = 0; i < num_supplies; i++) { for (i = 0; i < num_supplies; i++) {
if (cdc_vreg[i].ondemand && if (cdc_vreg[i].ondemand &&
!strcmp(cdc_vreg[i].name, supply_name)) { !strcmp(cdc_vreg[i].name, supply_name)) {
if (cdc_vreg[i].vote) {
dev_err_ratelimited(dev,
"%s: Attempted to enable already enabled supply %s\n",
__func__, supplies[i].supply);
break;
}
rc = regulator_enable(supplies[i].consumer); rc = regulator_enable(supplies[i].consumer);
if (rc) if (rc)
dev_err_ratelimited(dev, "%s: failed to enable supply %s, rc: %d\n", dev_err_ratelimited(dev, "%s: failed to enable supply %s, rc: %d\n",
__func__, supplies[i].supply, rc); __func__, supplies[i].supply, rc);
cdc_vreg[i].vote = true; else
cdc_vreg[i].vote = true;
break; break;
} }
} }
@@ -604,8 +630,8 @@ int msm_cdc_enable_static_supplies(struct device *dev,
dev_err(dev, "%s: failed to enable supply %s, rc: %d\n", dev_err(dev, "%s: failed to enable supply %s, rc: %d\n",
__func__, supplies[i].supply, rc); __func__, supplies[i].supply, rc);
break; break;
} } else
cdc_vreg[i].vote = true; cdc_vreg[i].vote = true;
} }
if (rc) { if (rc) {