From 45cfb22658158e0cfda040cea5c8fa2245ae19d6 Mon Sep 17 00:00:00 2001 From: chailu1 Date: Wed, 13 Jan 2021 13:26:31 +0800 Subject: [PATCH] charge: modify charge done condition by mmi charge full mmi charge decide charge terminal current. So modify charge done condition by mmi charge status. Otherwise could not got correct charge done status. Change-Id: I3f41582518bbb83bca9f5519a65f7ce311835b91 Reviewed-on: https://gerrit.mot.com/1850451 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Haijian Ma Reviewed-by: Huosheng Liao Submit-Approved: Jira Key --- drivers/power/supply/qcom/smb5-lib.c | 31 +++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/drivers/power/supply/qcom/smb5-lib.c b/drivers/power/supply/qcom/smb5-lib.c index c75e1e091e40..b17f5b356c74 100644 --- a/drivers/power/supply/qcom/smb5-lib.c +++ b/drivers/power/supply/qcom/smb5-lib.c @@ -2436,6 +2436,32 @@ int smblib_get_prop_batt_iterm(struct smb_charger *chg, return rc; } +static bool is_mmi_charge_full(struct smb_charger *chg) +{ int rc = 0; + union power_supply_propval prop = {0, }; + static struct power_supply *mmi_batt_psy = NULL; + + if (!mmi_batt_psy) { + mmi_batt_psy = power_supply_get_by_name("battery"); + if (!mmi_batt_psy) { + smblib_err(chg, "Couldn't get mmi batt prop\n"); + return false; + } + } + + rc = power_supply_get_property(mmi_batt_psy, + POWER_SUPPLY_PROP_STATUS, &prop); + if (rc < 0) { + smblib_err(chg, "Couldn't get mmi batt status, rc=%d\n", rc); + return false; + } + + if (POWER_SUPPLY_STATUS_FULL == prop.intval) + return true; + else + return false; +} + int smblib_get_prop_batt_charge_done(struct smb_charger *chg, int *val) { @@ -2451,6 +2477,9 @@ int smblib_get_prop_batt_charge_done(struct smb_charger *chg, stat = stat & BATTERY_CHARGER_STATUS_MASK; *val = (stat == TERMINATE_CHARGE); + + if (is_mmi_charge_full(chg)) + *val = true; return 0; } @@ -5273,7 +5302,7 @@ static void smblib_eval_chg_termination(struct smb_charger *chg, u8 batt_status) * battery. Trigger the charge termination WA once charging is completed * to prevent overcharing. */ - if ((batt_status == TERMINATE_CHARGE) && (pval.intval == 100) && + if (((batt_status == TERMINATE_CHARGE) || is_mmi_charge_full(chg)) && (pval.intval == 100) && (ktime_to_ms(alarm_expires_remaining(/* alarm not pending */ &chg->chg_termination_alarm)) <= 0)) { chg->cc_soc_ref = 0;