summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAshay Jaiswal <ashayj@codeaurora.org>2016-12-07 11:21:32 +0530
committerAshay Jaiswal <ashayj@codeaurora.org>2016-12-08 11:16:15 +0530
commit9c6653b0b14ecd6ad49ad02ea397a72dacfcc954 (patch)
treec95fbec47ceeddb8f659396293e57aa8b5f1e336
parent69352ff8b46b11f98bf37f82534a82222466eadd (diff)
qpnp-fg-gen3: Add support for PMFALCON in Fuel Gauge
Add support of PMFALCON PMIC in FG driver. PMFALCON FG core uses same SRAM map as PMI8998v2.0. While at it, add workaround flag variable to keep track of all hardware specific workarounds. CRs-Fixed: 1096793 Change-Id: I8ba73276fd30f6eaf935ed77b75601f1322c0ba6 Signed-off-by: Ashay Jaiswal <ashayj@codeaurora.org>
-rw-r--r--drivers/power/qcom-charger/fg-core.h5
-rw-r--r--drivers/power/qcom-charger/qpnp-fg-gen3.c19
2 files changed, 17 insertions, 7 deletions
diff --git a/drivers/power/qcom-charger/fg-core.h b/drivers/power/qcom-charger/fg-core.h
index f0de532f196c..9ddd18800f9d 100644
--- a/drivers/power/qcom-charger/fg-core.h
+++ b/drivers/power/qcom-charger/fg-core.h
@@ -188,6 +188,10 @@ struct fg_alg_flag {
bool invalid;
};
+enum wa_flags {
+ PMI8998_V1_REV_WA = BIT(0),
+};
+
/* DT parameters for FG device */
struct fg_dt_props {
bool force_load_profile;
@@ -306,6 +310,7 @@ struct fg_chip {
u32 batt_soc_base;
u32 batt_info_base;
u32 mem_if_base;
+ u32 wa_flags;
int batt_id_kohms;
int charge_status;
int prev_charge_status;
diff --git a/drivers/power/qcom-charger/qpnp-fg-gen3.c b/drivers/power/qcom-charger/qpnp-fg-gen3.c
index 4d2cfc84d455..84204163f076 100644
--- a/drivers/power/qcom-charger/qpnp-fg-gen3.c
+++ b/drivers/power/qcom-charger/qpnp-fg-gen3.c
@@ -550,7 +550,7 @@ static int fg_get_battery_esr(struct fg_chip *chip, int *val)
return rc;
}
- if (chip->pmic_rev_id->rev4 < PMI8998_V2P0_REV4)
+ if (chip->wa_flags & PMI8998_V1_REV_WA)
temp = ((buf[0] & ESR_MSB_MASK) << 8) |
(buf[1] & ESR_LSB_MASK);
else
@@ -597,7 +597,7 @@ static int fg_get_battery_current(struct fg_chip *chip, int *val)
return rc;
}
- if (chip->pmic_rev_id->rev4 < PMI8998_V2P0_REV4)
+ if (chip->wa_flags & PMI8998_V1_REV_WA)
temp = buf[0] << 8 | buf[1];
else
temp = buf[1] << 8 | buf[0];
@@ -624,7 +624,7 @@ static int fg_get_battery_voltage(struct fg_chip *chip, int *val)
return rc;
}
- if (chip->pmic_rev_id->rev4 < PMI8998_V2P0_REV4)
+ if (chip->wa_flags & PMI8998_V1_REV_WA)
temp = buf[0] << 8 | buf[1];
else
temp = buf[1] << 8 | buf[0];
@@ -2401,8 +2401,8 @@ static int fg_hw_init(struct fg_chip *chip)
}
/* This SRAM register is only present in v2.0 and above */
- if (chip->pmic_rev_id->rev4 >= PMI8998_V2P0_REV4 &&
- chip->bp.float_volt_uv > 0) {
+ if (!(chip->wa_flags & PMI8998_V1_REV_WA) &&
+ chip->bp.float_volt_uv > 0) {
fg_encode(chip->sp, FG_SRAM_FLOAT_VOLT,
chip->bp.float_volt_uv / 1000, buf);
rc = fg_sram_write(chip, chip->sp[FG_SRAM_FLOAT_VOLT].addr_word,
@@ -2482,8 +2482,8 @@ static int fg_hw_init(struct fg_chip *chip)
}
/* This configuration is available only for pmicobalt v2.0 and above */
- if (chip->pmic_rev_id->rev4 >= PMI8998_V2P0_REV4 &&
- chip->dt.recharge_volt_thr_mv > 0) {
+ if (!(chip->wa_flags & PMI8998_V1_REV_WA) &&
+ chip->dt.recharge_volt_thr_mv > 0) {
fg_encode(chip->sp, FG_SRAM_RECHARGE_VBATT_THR,
chip->dt.recharge_volt_thr_mv, buf);
rc = fg_sram_write(chip,
@@ -3013,6 +3013,7 @@ static int fg_parse_dt(struct fg_chip *chip)
if (chip->pmic_rev_id->rev4 < PMI8998_V2P0_REV4) {
chip->sp = pmi8998_v1_sram_params;
chip->alg_flags = pmi8998_v1_alg_flags;
+ chip->wa_flags |= PMI8998_V1_REV_WA;
} else if (chip->pmic_rev_id->rev4 == PMI8998_V2P0_REV4) {
chip->sp = pmi8998_v2_sram_params;
chip->alg_flags = pmi8998_v2_alg_flags;
@@ -3020,6 +3021,10 @@ static int fg_parse_dt(struct fg_chip *chip)
return -EINVAL;
}
break;
+ case PMFALCON_SUBTYPE:
+ chip->sp = pmi8998_v2_sram_params;
+ chip->alg_flags = pmi8998_v2_alg_flags;
+ break;
default:
return -EINVAL;
}