From 3489d559a2d53d394d12c3add44cb158b9d7d6ba Mon Sep 17 00:00:00 2001 From: xuxj12 Date: Sun, 9 Oct 2022 16:15:18 +0800 Subject: [PATCH] change not disable flip charge if enable by chg_en node enable flip charge by echo 1 > chg_en, but chrg_stat flag need 200ms to update in delay work. if a delay work is already runnning when enable flip charge, it may disable flip charge immediatly cause factory test flip charge current read err Change-Id: Ib6fd330fb9f9bbd60157f6b16ec032f436056c33 Signed-off-by: xuxj12 Reviewed-on: https://gerrit.mot.com/2399491 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Reviewed-by: Yonghua Yan Reviewed-by: Jianqi Yang Tested-by: Jira Key Submit-Approved: Jira Key --- .../sgm4154x_charger_lite/sgm4154x_charger_lite.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/drivers/power/sgm4154x_charger_lite/sgm4154x_charger_lite.c b/drivers/power/sgm4154x_charger_lite/sgm4154x_charger_lite.c index 918f34021d3d..cf06ee7521a4 100644 --- a/drivers/power/sgm4154x_charger_lite/sgm4154x_charger_lite.c +++ b/drivers/power/sgm4154x_charger_lite/sgm4154x_charger_lite.c @@ -2230,6 +2230,7 @@ static int sgm4154x_charger_config_charge(void *data, struct mmi_charger_cfg *co int rc; u32 value; bool chg_en; + static bool prev_chg_en = false; bool cfg_changed = false; struct sgm_mmi_charger *chg = data; struct sgm4154x_state state = chg->sgm->state; @@ -2439,7 +2440,7 @@ static int sgm4154x_charger_config_charge(void *data, struct mmi_charger_cfg *co chg_en = sgm4154x_is_enabled_charging(chg->sgm); if (!cfg_changed && chg->chg_info.chrg_present && !state.hiz_en && - chg_en && chg->sgm->ichg > 0 && + chg_en && prev_chg_en && chg->sgm->ichg > 0 && ((chg->batt_info.batt_mv + 50) * 1000) <= chg->sgm->vreg && state.chrg_stat != SGM4154x_FAST_CHRG && state.chrg_stat != SGM4154x_PRECHRG) { @@ -2449,6 +2450,7 @@ static int sgm4154x_charger_config_charge(void *data, struct mmi_charger_cfg *co chg->chg_cfg.charging_disable = true; pr_info("Battery charging reconfigure triggered\n"); } + prev_chg_en = chg_en; if (chg->chg_info.chrg_present && !state.hiz_en && chg->sgm->use_ext_usb_psy && chg->sgm->usb) { @@ -2619,11 +2621,14 @@ static void sgm4154x_paired_battery_notify(void *data, if (!rc && !val.intval) batt_present = false; } - chg->sgm->batt_present = batt_present; - if (!chg->sgm->batt_present) { + if (!batt_present) { chg->paired_ichg = 0; chg->paired_load = PAIRED_LOAD_OFF; return; + } else if (!chg->sgm->batt_present) { + chg->paired_ichg = chg->sgm->init_data.max_ichg; + chg->sgm->batt_present = batt_present; + pr_info("Battery present!\n"); } batt_ocv = chg->batt_info.batt_mv;