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:
Ashay Jaiswal 2014-04-29 12:08:33 +05:30
parent 7a64b32c74
commit c55724f021
4 changed files with 86 additions and 2 deletions

View File

@ -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;
}

View File

@ -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;

View File

@ -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;

View File

@ -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) \