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

Commit 75e00574 authored by Siddartha Mohanadoss's avatar Siddartha Mohanadoss
Browse files

hwmon: qpnp-adc-voltage: Modify temperature compensation



Apply temperature compensation to minimum(die_temp, 60degC)
for vbatt compensation. For OCV temperature compensation
apply the compensation based on the die_temp for the
corresponding PMIC. The temperature compensation is
required on top of gain/offset calibration to compensate
for variations due to chip revision, manufacturer and
temperature.

Change-Id: I0826993ddebe7dae2f033d995fa1266f9509002c
Signed-off-by: default avatarSiddartha Mohanadoss <smohanad@codeaurora.org>
parent 16103798
Loading
Loading
Loading
Loading
+12 −31
Original line number Diff line number Diff line
@@ -539,32 +539,22 @@ static int32_t qpnp_ocv_comp(int64_t *result,
	if (version == -EINVAL)
		return 0;

	if (version == QPNP_REV_ID_8110_2_0) {
		if (die_temp < -20000)
			die_temp = -20000;
	} else if (version == QPNP_REV_ID_8026_2_2) {
	if (version == QPNP_REV_ID_8026_2_2) {
		if (die_temp > 25000)
			return 0;
	} else {
		if (die_temp < 25000)
			return 0;
		if (die_temp > 60000)
			die_temp = 60000;
	}

	switch (version) {
	case QPNP_REV_ID_8941_3_1:
		switch (vadc->id) {
		case COMP_ID_TSMC:
			temp_var = (((die_temp *
			(-QPNP_VBAT_COEFF_4))
			+ QPNP_VBAT_COEFF_5));
			 temp_var = ((die_temp - 25000) *
			(-QPNP_VBAT_COEFF_4));
			break;
		default:
		case COMP_ID_GF:
			temp_var = (((die_temp *
			(-QPNP_VBAT_COEFF_1))
			+ QPNP_VBAT_COEFF_2));
			temp_var = ((die_temp - 25000) *
			(-QPNP_VBAT_COEFF_1));
			break;
		}
		break;
@@ -621,9 +611,6 @@ static int32_t qpnp_ocv_comp(int64_t *result,
				temp_var = QPNP_VBAT_COEFF_19;
			temp_var = (die_temp - 25000) * temp_var;
			break;
		case COMP_ID_TSMC:
			pr_debug("No TSMC Comp Info, exiting\n");
			return 0;
		default:
		case COMP_ID_GF:
			*result -= QPNP_OCV_OFFSET_GF;
@@ -663,12 +650,7 @@ static int32_t qpnp_vbat_sns_comp(int64_t *result,
	if (version == -EINVAL)
		return 0;

	if (version == QPNP_REV_ID_8110_2_0) {
		if (die_temp < -20000)
			die_temp = -20000;
	} else {
		if (die_temp < 25000)
			return 0;
	if (version != QPNP_REV_ID_8941_3_1) {
		/* min(die_temp_c, 60_degC) */
		if (die_temp > 60000)
			die_temp = 60000;
@@ -678,14 +660,16 @@ static int32_t qpnp_vbat_sns_comp(int64_t *result,
	case QPNP_REV_ID_8941_3_1:
		switch (vadc->id) {
		case COMP_ID_TSMC:
			temp_var = (die_temp *
			temp_var = ((die_temp - 25000) *
			(-QPNP_VBAT_COEFF_1));
			break;
		default:
		case COMP_ID_GF:
			temp_var = (((die_temp *
			(-QPNP_VBAT_COEFF_6))
			+ QPNP_VBAT_COEFF_7));
			/* min(die_temp_c, 60_degC) */
			if (die_temp > 60000)
				die_temp = 60000;
			temp_var = ((die_temp - 25000) *
			(-QPNP_VBAT_COEFF_1));
			break;
		}
		break;
@@ -737,9 +721,6 @@ static int32_t qpnp_vbat_sns_comp(int64_t *result,
			temp_var = ((die_temp - 25000) *
			(QPNP_VBAT_COEFF_17));
			break;
		case COMP_ID_TSMC:
			pr_debug("No TSMC Comp Info, exiting\n");
			return 0;
		default:
		case COMP_ID_GF:
			*result -= QPNP_VBAT_OFFSET_GF;