Merge "power: qpnp-qg: Use CC_SOC to report CHARGE_COUNTER"
diff --git a/drivers/power/supply/qcom/qpnp-qg.c b/drivers/power/supply/qcom/qpnp-qg.c
index 70c8a3b..a206f68 100644
--- a/drivers/power/supply/qcom/qpnp-qg.c
+++ b/drivers/power/supply/qcom/qpnp-qg.c
@@ -1061,10 +1061,6 @@
pr_err("Failed to update SDAM params, rc=%d\n", rc);
}
- if (chip->udata.param[QG_CHARGE_COUNTER].valid)
- chip->charge_counter_uah =
- chip->udata.param[QG_CHARGE_COUNTER].data;
-
if (chip->udata.param[QG_ESR].valid)
chip->esr_last = chip->udata.param[QG_ESR].data;
@@ -1545,6 +1541,26 @@
return 0;
}
+static int qg_get_charge_counter(struct qpnp_qg *chip, int *charge_counter)
+{
+ int rc, cc_soc = 0;
+ int64_t temp = 0;
+
+ rc = qg_get_learned_capacity(chip, &temp);
+ if (rc < 0 || !temp)
+ rc = qg_get_nominal_capacity((int *)&temp, 250, true);
+
+ if (rc < 0) {
+ pr_err("Failed to get FCC for charge-counter rc=%d\n", rc);
+ return rc;
+ }
+
+ cc_soc = CAP(0, 100, DIV_ROUND_CLOSEST(chip->cc_soc, 100));
+ *charge_counter = div_s64(temp * cc_soc, 100);
+
+ return 0;
+}
+
static int qg_get_ttf_param(void *data, enum ttf_param param, int *val)
{
union power_supply_propval prop = {0, };
@@ -1732,7 +1748,7 @@
pval->intval = chip->bp.qg_profile_version;
break;
case POWER_SUPPLY_PROP_CHARGE_COUNTER:
- pval->intval = chip->charge_counter_uah;
+ rc = qg_get_charge_counter(chip, &pval->intval);
break;
case POWER_SUPPLY_PROP_CHARGE_FULL:
if (!chip->dt.cl_disable && chip->dt.cl_feedback_on)