Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 38c2d8d2 authored by Anirudh Ghayal's avatar Anirudh Ghayal Committed by Umang Agrawal
Browse files

power: qpnp-qg: Use CC_SOC to report CHARGE_COUNTER



Use the CC_SOC and FCC to report charge-counter, instead
of relying on the value reported by userspace.

Change-Id: Iad5bef7c4e6b95dab11ee97a4107133bfe9cea6a
Signed-off-by: default avatarAnirudh Ghayal <aghayal@codeaurora.org>
parent 18839e57
Loading
Loading
Loading
Loading
+21 −5
Original line number Diff line number Diff line
@@ -1097,10 +1097,6 @@ static void process_udata_work(struct work_struct *work)
			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;

@@ -1581,6 +1577,26 @@ static int qg_get_battery_capacity(struct qpnp_qg *chip, int *soc)
	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, };
@@ -1862,7 +1878,7 @@ static int qg_psy_get_property(struct power_supply *psy,
		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)