summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2016-10-25 18:30:58 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2016-10-25 18:30:58 -0700
commit349ce036879a6d7f8f41450fa0fe5880eb8293fb (patch)
tree1d9df994e4788196e11f1605a87dba45ec8efa9f
parent6cc1473d14f4b8801e4f2608c63ac90aa577ca96 (diff)
parent01109ac391bf63514a537eab825d7ac2d7dafb1a (diff)
Merge "qpnp-fg-gen3: Fix storing nominal capacity to actual capacity"
-rw-r--r--drivers/power/qcom-charger/qpnp-fg-gen3.c8
-rw-r--r--drivers/power/qcom-charger/smb-lib.c17
2 files changed, 18 insertions, 7 deletions
diff --git a/drivers/power/qcom-charger/qpnp-fg-gen3.c b/drivers/power/qcom-charger/qpnp-fg-gen3.c
index 3d3f95c2376c..4ee94b990382 100644
--- a/drivers/power/qcom-charger/qpnp-fg-gen3.c
+++ b/drivers/power/qcom-charger/qpnp-fg-gen3.c
@@ -506,8 +506,7 @@ static int fg_get_cc_soc_sw(struct fg_chip *chip, int *val)
#define BATT_TEMP_DENR 1
static int fg_get_battery_temp(struct fg_chip *chip, int *val)
{
- int rc = 0;
- u16 temp = 0;
+ int rc = 0, temp;
u8 buf[2];
rc = fg_read(chip, BATT_INFO_BATT_TEMP_LSB(chip), buf, 2);
@@ -925,10 +924,11 @@ static int fg_load_learned_cap_from_sram(struct fg_chip *chip)
}
chip->cl.learned_cc_uah = act_cap_mah * 1000;
- if (chip->cl.learned_cc_uah == 0)
- chip->cl.learned_cc_uah = chip->cl.nom_cap_uah;
if (chip->cl.learned_cc_uah != chip->cl.nom_cap_uah) {
+ if (chip->cl.learned_cc_uah == 0)
+ chip->cl.learned_cc_uah = chip->cl.nom_cap_uah;
+
delta_cc_uah = abs(chip->cl.learned_cc_uah -
chip->cl.nom_cap_uah);
pct_nom_cap_uah = div64_s64((int64_t)chip->cl.nom_cap_uah *
diff --git a/drivers/power/qcom-charger/smb-lib.c b/drivers/power/qcom-charger/smb-lib.c
index 5785e42e0140..de4391024970 100644
--- a/drivers/power/qcom-charger/smb-lib.c
+++ b/drivers/power/qcom-charger/smb-lib.c
@@ -1199,6 +1199,7 @@ int smblib_get_prop_batt_charge_type(struct smb_charger *chg,
int smblib_get_prop_batt_health(struct smb_charger *chg,
union power_supply_propval *val)
{
+ union power_supply_propval pval;
int rc;
u8 stat;
@@ -1212,9 +1213,19 @@ int smblib_get_prop_batt_health(struct smb_charger *chg,
stat);
if (stat & CHARGER_ERROR_STATUS_BAT_OV_BIT) {
- smblib_err(chg, "battery over-voltage\n");
- val->intval = POWER_SUPPLY_HEALTH_OVERVOLTAGE;
- goto done;
+ rc = smblib_get_prop_batt_voltage_now(chg, &pval);
+ if (!rc) {
+ /*
+ * If Vbatt is within 40mV above Vfloat, then don't
+ * treat it as overvoltage.
+ */
+ if (pval.intval >=
+ get_effective_result(chg->fv_votable) + 40000) {
+ val->intval = POWER_SUPPLY_HEALTH_OVERVOLTAGE;
+ smblib_err(chg, "battery over-voltage\n");
+ goto done;
+ }
+ }
}
if (stat & BAT_TEMP_STATUS_TOO_COLD_BIT)