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: Siddartha Mohanadoss <smohanad@codeaurora.org>
diff --git a/drivers/hwmon/qpnp-adc-voltage.c b/drivers/hwmon/qpnp-adc-voltage.c
index 79d5731..346a72d 100644
--- a/drivers/hwmon/qpnp-adc-voltage.c
+++ b/drivers/hwmon/qpnp-adc-voltage.c
@@ -538,32 +538,22 @@
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;
@@ -620,9 +610,6 @@
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;
@@ -662,12 +649,7 @@
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;
@@ -677,14 +659,16 @@
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;
@@ -736,9 +720,6 @@
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;