From dceabb006fc6828ae3b5d75008d01a4866d03df3 Mon Sep 17 00:00:00 2001 From: mahj8 Date: Tue, 1 Mar 2022 18:27:12 +0800 Subject: [PATCH] charging: improve recharge batt voltage after stop Increase recharge battery voltage after stop state prevent charge and discharge frequently Change-Id: I070eef8f61d363772f17021b42b8341e5765ce44 Signed-off-by: mahj8 Reviewed-on: https://gerrit.mot.com/2204350 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Yonghua Yan Reviewed-by: Huosheng Liao Submit-Approved: Jira Key --- drivers/power/mmi_charger/mmi_charger.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/drivers/power/mmi_charger/mmi_charger.c b/drivers/power/mmi_charger/mmi_charger.c index f326e82bc208..fa1bdb69a595 100644 --- a/drivers/power/mmi_charger/mmi_charger.c +++ b/drivers/power/mmi_charger/mmi_charger.c @@ -1381,6 +1381,7 @@ static void mmi_update_charger_status(struct mmi_charger_chip *chip, struct mmi_charger *charger) { bool voltage_full; + int stop_recharge_hyst; enum charging_limit_modes charging_limit_modes; struct mmi_charger_profile *profile = &charger->profile; struct mmi_charger_status *status = &charger->status; @@ -1429,8 +1430,7 @@ static void mmi_update_charger_status(struct mmi_charger_chip *chip, } else if (!status->temp_zone) { status->pres_chrg_step = STEP_MAX; /* Skip for empty temperature zone */ - } else if ((status->pres_chrg_step == STEP_NONE) || - (status->pres_chrg_step == STEP_STOP)) { + } else if (status->pres_chrg_step == STEP_NONE) { if (status->temp_zone->norm_mv && ((batt_info->batt_mv + HYST_STEP_MV) >= status->temp_zone->norm_mv)) { if (status->temp_zone->fcc_norm_ma) @@ -1439,6 +1439,19 @@ static void mmi_update_charger_status(struct mmi_charger_chip *chip, status->pres_chrg_step = STEP_STOP; } else status->pres_chrg_step = STEP_MAX; + } else if (status->pres_chrg_step == STEP_STOP) { + if (batt_info->batt_temp > COOL_TEMP) + stop_recharge_hyst = 2 * HYST_STEP_MV; + else + stop_recharge_hyst = 5 * HYST_STEP_MV; + if (status->temp_zone->norm_mv && + ((batt_info->batt_mv + stop_recharge_hyst) >= status->temp_zone->norm_mv)) { + if (status->temp_zone->fcc_norm_ma) + status->pres_chrg_step = STEP_NORM; + else + status->pres_chrg_step = STEP_STOP; + } else + status->pres_chrg_step = STEP_MAX; } else if (status->pres_chrg_step == STEP_MAX) { if (!status->temp_zone->norm_mv) { /* No Step in this Zone */