diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2016-10-25 18:30:58 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-10-25 18:30:58 -0700 |
| commit | 349ce036879a6d7f8f41450fa0fe5880eb8293fb (patch) | |
| tree | 1d9df994e4788196e11f1605a87dba45ec8efa9f | |
| parent | 6cc1473d14f4b8801e4f2608c63ac90aa577ca96 (diff) | |
| parent | 01109ac391bf63514a537eab825d7ac2d7dafb1a (diff) | |
Merge "qpnp-fg-gen3: Fix storing nominal capacity to actual capacity"
| -rw-r--r-- | drivers/power/qcom-charger/qpnp-fg-gen3.c | 8 | ||||
| -rw-r--r-- | drivers/power/qcom-charger/smb-lib.c | 17 |
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) |
