hwmon: qpnp-adc: add PM8916 1.0/1.1/2.0 temperature compensation
Add temperature compensation coefficients for PM8916 VADC to improve accuracy. Change-Id: I578185c5c1d852b3f8bb02bb68ce460828369a5b Signed-off-by: Ashay Jaiswal <ashayj@codeaurora.org>
This commit is contained in:
parent
7a64b32c74
commit
c55724f021
|
@ -1267,6 +1267,27 @@ int qpnp_adc_get_revid_version(struct device *dev)
|
|||
(revid_data->pmic_type == PM8110_V2P0_TYPE) &&
|
||||
(revid_data->pmic_subtype == PM8110_V2P0_SUBTYPE))
|
||||
return QPNP_REV_ID_8110_2_0;
|
||||
else if ((revid_data->rev1 == PM8916_V1P0_REV1) &&
|
||||
(revid_data->rev2 == PM8916_V1P0_REV2) &&
|
||||
(revid_data->rev3 == PM8916_V1P0_REV3) &&
|
||||
(revid_data->rev4 == PM8916_V1P0_REV4) &&
|
||||
(revid_data->pmic_type == PM8916_V1P0_TYPE) &&
|
||||
(revid_data->pmic_subtype == PM8916_V1P0_SUBTYPE))
|
||||
return QPNP_REV_ID_8916_1_0;
|
||||
else if ((revid_data->rev1 == PM8916_V1P1_REV1) &&
|
||||
(revid_data->rev2 == PM8916_V1P1_REV2) &&
|
||||
(revid_data->rev3 == PM8916_V1P1_REV3) &&
|
||||
(revid_data->rev4 == PM8916_V1P1_REV4) &&
|
||||
(revid_data->pmic_type == PM8916_V1P1_TYPE) &&
|
||||
(revid_data->pmic_subtype == PM8916_V1P1_SUBTYPE))
|
||||
return QPNP_REV_ID_8916_1_1;
|
||||
else if ((revid_data->rev1 == PM8916_V2P0_REV1) &&
|
||||
(revid_data->rev2 == PM8916_V2P0_REV2) &&
|
||||
(revid_data->rev3 == PM8916_V2P0_REV3) &&
|
||||
(revid_data->rev4 == PM8916_V2P0_REV4) &&
|
||||
(revid_data->pmic_type == PM8916_V2P0_TYPE) &&
|
||||
(revid_data->pmic_subtype == PM8916_V2P0_SUBTYPE))
|
||||
return QPNP_REV_ID_8916_2_0;
|
||||
else
|
||||
return -EINVAL;
|
||||
}
|
||||
|
|
|
@ -527,6 +527,9 @@ static int32_t qpnp_vadc_version_check(struct qpnp_vadc_chip *dev)
|
|||
#define QPNP_VBAT_COEFF_23 3500
|
||||
#define QPNP_VBAT_COEFF_24 4360
|
||||
#define QPNP_VBAT_COEFF_25 8060
|
||||
#define QPNP_VBAT_COEFF_26 7895
|
||||
#define QPNP_VBAT_COEFF_27 5658
|
||||
#define QPNP_VBAT_COEFF_28 5760
|
||||
|
||||
static int32_t qpnp_ocv_comp(int64_t *result,
|
||||
struct qpnp_vadc_chip *vadc, int64_t die_temp)
|
||||
|
@ -622,6 +625,28 @@ static int32_t qpnp_ocv_comp(int64_t *result,
|
|||
break;
|
||||
}
|
||||
break;
|
||||
case QPNP_REV_ID_8916_1_0:
|
||||
case QPNP_REV_ID_8916_1_1:
|
||||
case QPNP_REV_ID_8916_2_0:
|
||||
switch (vadc->id) {
|
||||
case COMP_ID_SMIC:
|
||||
if (die_temp < 25000)
|
||||
temp_var = QPNP_VBAT_COEFF_26;
|
||||
else
|
||||
temp_var = QPNP_VBAT_COEFF_27;
|
||||
temp_var = (die_temp - 25000) * temp_var;
|
||||
break;
|
||||
default:
|
||||
case COMP_ID_GF:
|
||||
*result -= QPNP_OCV_OFFSET_GF;
|
||||
if (die_temp < 25000)
|
||||
temp_var = QPNP_VBAT_COEFF_26;
|
||||
else
|
||||
temp_var = QPNP_VBAT_COEFF_27;
|
||||
temp_var = (die_temp - 25000) * temp_var;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
temp_var = 0;
|
||||
break;
|
||||
|
@ -729,6 +754,21 @@ static int32_t qpnp_vbat_sns_comp(int64_t *result,
|
|||
break;
|
||||
}
|
||||
break;
|
||||
case QPNP_REV_ID_8916_1_0:
|
||||
case QPNP_REV_ID_8916_1_1:
|
||||
case QPNP_REV_ID_8916_2_0:
|
||||
switch (vadc->id) {
|
||||
case COMP_ID_SMIC:
|
||||
temp_var = ((die_temp - 25000) *
|
||||
(QPNP_VBAT_COEFF_28));
|
||||
break;
|
||||
default:
|
||||
case COMP_ID_GF:
|
||||
temp_var = ((die_temp - 25000) *
|
||||
(QPNP_VBAT_COEFF_28));
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
temp_var = 0;
|
||||
break;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (c) 2013, The Linux Foundation. All rights reserved.
|
||||
/* Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 and
|
||||
|
@ -97,6 +97,27 @@
|
|||
#define PM8110_V2P0_TYPE 0x51
|
||||
#define PM8110_V2P0_SUBTYPE 0x05
|
||||
|
||||
#define PM8916_V1P0_REV1 0x00
|
||||
#define PM8916_V1P0_REV2 0x00
|
||||
#define PM8916_V1P0_REV3 0x00
|
||||
#define PM8916_V1P0_REV4 0x01
|
||||
#define PM8916_V1P0_TYPE 0x51
|
||||
#define PM8916_V1P0_SUBTYPE 0x0B
|
||||
|
||||
#define PM8916_V1P1_REV1 0x00
|
||||
#define PM8916_V1P1_REV2 0x00
|
||||
#define PM8916_V1P1_REV3 0x01
|
||||
#define PM8916_V1P1_REV4 0x01
|
||||
#define PM8916_V1P1_TYPE 0x51
|
||||
#define PM8916_V1P1_SUBTYPE 0x0B
|
||||
|
||||
#define PM8916_V2P0_REV1 0x00
|
||||
#define PM8916_V2P0_REV2 0x00
|
||||
#define PM8916_V2P0_REV3 0x00
|
||||
#define PM8916_V2P0_REV4 0x02
|
||||
#define PM8916_V2P0_TYPE 0x51
|
||||
#define PM8916_V2P0_SUBTYPE 0x0B
|
||||
|
||||
struct pmic_revid_data {
|
||||
u8 rev1;
|
||||
u8 rev2;
|
||||
|
|
|
@ -1035,7 +1035,9 @@ struct qpnp_adc_amux_properties {
|
|||
#define QPNP_REV_ID_8026_2_2 7
|
||||
#define QPNP_REV_ID_8941_3_0 8
|
||||
#define QPNP_REV_ID_8941_2_0 9
|
||||
|
||||
#define QPNP_REV_ID_8916_1_0 10
|
||||
#define QPNP_REV_ID_8916_1_1 11
|
||||
#define QPNP_REV_ID_8916_2_0 12
|
||||
|
||||
/* Public API */
|
||||
#if defined(CONFIG_SENSORS_QPNP_ADC_VOLTAGE) \
|
||||
|
|
Loading…
Reference in New Issue