smb5: adjust USBIN OV debounce condition

Adjust the USBIN OV debounce trigger condition.
Use chg_done help to decide charge FULL state.

Change-Id: If8d77be7884e809aab859ce45ef4238565a27338
Reviewed-on: https://gerrit.mot.com/1770943
SME-Granted: SME Approvals Granted
SLTApproved: Slta Waiver
Tested-by: Jira Key
Reviewed-by: Huosheng Liao <liaohs@motorola.com>
Submit-Approved: Jira Key
This commit is contained in:
mahj8 2020-10-10 09:57:38 +08:00 • committed by Xiaojun Ji
commit 018560f4b8
2 changed files with 13 additions and 11 deletions

View file

@ -486,6 +486,7 @@ int smb5_iio_set_prop(struct smb_charger *chg, int channel, int val)
msleep(50);
vote(chg->chg_disable_votable, FORCE_RECHARGE_VOTER,
false, 0);
chg->chg_done = 0;
break;
case PSY_IIO_FCC_STEPPER_ENABLE:
chg->fcc_stepper_enable = val;

View file

@ -1323,6 +1323,7 @@ static void smblib_uusb_removal(struct smb_charger *chg)
cancel_delayed_work_sync(&chg->usbov_dbc_work);
vote(chg->awake_votable, USBOV_DBC_VOTER, false, 0);
chg->dbc_usbov = false;
chg->chg_done = 0;
chg->voltage_min_uv = MICRO_5V;
chg->voltage_max_uv = MICRO_5V;
@ -2156,7 +2157,10 @@ int smblib_get_prop_batt_status(struct smb_charger *chg,
* charging path is un-suspended.
*/
if (pval.intval && !suspend) {
val->intval = POWER_SUPPLY_STATUS_CHARGING;
if (chg->chg_done)
val->intval = POWER_SUPPLY_STATUS_FULL;
else
val->intval = POWER_SUPPLY_STATUS_CHARGING;
return 0;
}
}
@ -5267,6 +5271,7 @@ static void smblib_eval_chg_termination(struct smb_charger *chg, u8 batt_status)
chg->cc_soc_ref = 0;
chg->last_cc_soc = 0;
chg->term_vbat_uv = 0;
chg->chg_done = 1;
alarm_start_relative(&chg->chg_termination_alarm,
ms_to_ktime(CHG_TERM_WA_ENTRY_DELAY_MS));
} else if (pval.intval < 100) {
@ -6448,6 +6453,7 @@ static void typec_src_removal(struct smb_charger *chg)
cancel_delayed_work_sync(&chg->usbov_dbc_work);
vote(chg->awake_votable, USBOV_DBC_VOTER, false, 0);
chg->dbc_usbov = false;
chg->chg_done = 0;
chg->pulse_cnt = 0;
chg->usb_icl_delta_ua = 0;
@ -7258,17 +7264,12 @@ irqreturn_t smb5_usbin_ov_irq_handler(int irq, void *data)
* differentiate between OV IRQ glitch and real OV_IRQ, add a debounce
* period for evaluation.
*/
if (stat & USBIN_OV_RT_STS_BIT) {
chg->dbc_usbov = true;
vote(chg->awake_votable, USBOV_DBC_VOTER, true, 0);
schedule_delayed_work(&chg->usbov_dbc_work,
msecs_to_jiffies(USB_OV_DBC_PERIOD_MS));
} else {
cancel_delayed_work_sync(&chg->usbov_dbc_work);
chg->dbc_usbov = false;
vote(chg->awake_votable, USBOV_DBC_VOTER, false, 0);
}
chg->dbc_usbov = true;
vote(chg->awake_votable, USBOV_DBC_VOTER, true, 0);
schedule_delayed_work(&chg->usbov_dbc_work,
msecs_to_jiffies(USB_OV_DBC_PERIOD_MS));
power_supply_changed(chg->batt_psy);
smblib_dbg(chg, PR_MISC, "USBOV debounce status %d\n",
chg->dbc_usbov);
return IRQ_HANDLED;