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 <mahj8@motorola.com>
Reviewed-by: Huosheng Liao <liaohs@motorola.com>
Submit-Approved: Jira Key
This commit is contained in:
chailu1 2021-01-13 13:26:31 +08:00 • committed by Xiaojun Ji
commit 45cfb22658

View file

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