From 1b715bf4bcfab06d49dabb40b8c5fc45bcb7b10c Mon Sep 17 00:00:00 2001 From: xuwt2 Date: Thu, 20 Sep 2018 17:06:02 +0800 Subject: [PATCH] power: adjust 27w charge polisy, optimize charging curve Add new flag enter_sw_loop to ensure enter switch charge loop after quit bq2597x charging. To prevent unstable switch between the parallel charging and pmic charging. Change-Id: I24e7ea365eb2a2f3b30eaeab351f0282c544adb8 Signed-off-by: xuwt2 Reviewed-on: https://gerrit.mot.com/1244541 SLTApproved: Slta Waiver SME-Granted: SME Approvals Granted Tested-by: Jira Key Reviewed-by: Master Yoda Reviewed-by: Yonghua Yan Reviewed-by: Jianqi Yang Submit-Approved: Jira Key --- .../mmi_pl_chg_manager/mmi_pl_chg_manager.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/drivers/power/mmi_pl_chg_manager/mmi_pl_chg_manager.c b/drivers/power/mmi_pl_chg_manager/mmi_pl_chg_manager.c index fce8ebc4c7d4..d2d5281a8bb1 100644 --- a/drivers/power/mmi_pl_chg_manager/mmi_pl_chg_manager.c +++ b/drivers/power/mmi_pl_chg_manager/mmi_pl_chg_manager.c @@ -271,6 +271,7 @@ struct mmi_pl_chg_manager { int pps_select_pdo_retry_cont; bool vbus_present; bool force_pmic_chg; + bool enter_sw_loop; bool pd_pps_support; bool pd_pps_mitigation; bool flashc_alarm; @@ -756,7 +757,7 @@ static void mmi_pl_pm_move_state(struct mmi_pl_chg_manager *chip, pm_sm_state_t #define HEARTBEAT_SHORT_DELAY_MS 500 #define HEARTBEAT_NEXT_STATE_MS 100 #define HEARTBEAT_CANNEL -1 -#define FLASHC_TAPPER_COUNT 5 +#define FLASHC_TAPPER_COUNT 3 #define PPS_SELECT_PDO_RETRY_COUNT 3 #define FLASHC_ALARM_RECOVERY_COUNT 5 #define FLASHC_FAULT_RECOVERY_COUNT 10 @@ -1051,7 +1052,8 @@ static void mmi_pl_sm_work_func(struct work_struct *work) && chip->flashc_cc_max_curr_pre > chip->pmic_step_curr && chrg_step_max < STEP_NORMAL - && !chip->force_pmic_chg) { + && !chip->force_pmic_chg + && !chip->enter_sw_loop) { mmi_pl_dbg(chip, PR_MOTO, "battery volt %d, start flash charger\n", @@ -1308,7 +1310,7 @@ static void mmi_pl_sm_work_func(struct work_struct *work) if (ibat_curr < chip->flashc_cc_max_curr_pre && chip->request_volt < chip->pps_voltage_max - && chip->flashc_cc_tunning_cnt > + && chip->flashc_cc_tunning_cnt >= PPS_SELECT_PDO_RETRY_COUNT) { if ((chip->request_volt + chip->sys_configs.flashc_volt_up_steps) @@ -1430,7 +1432,7 @@ static void mmi_pl_sm_work_func(struct work_struct *work) if (ibat_curr <= chip->flashc_cv_taper_curr_pre || ibat_curr < chip->pmic_step_curr) { - if (chip->flashc_taper_cnt > FLASHC_TAPPER_COUNT) { + if (chip->flashc_taper_cnt >= FLASHC_TAPPER_COUNT) { if (ibat_curr < chip->pmic_step_curr) { mmi_pl_dbg(chip, PR_MOTO, "Ready to quit flashc CV charger, " @@ -1506,8 +1508,11 @@ static void mmi_pl_sm_work_func(struct work_struct *work) mmi_pl_pm_pmic_enable(chip, false); msleep(100); mmi_pl_pm_pmic_enable(chip, true); - mmi_pl_pm_check_pmic_enable(chip); + mmi_pl_pm_check_pmic_enable(chip); mmi_pl_pm_move_state(chip, PM_STATE_SW_LOOP); + chip->enter_sw_loop = true; + mmi_pl_dbg(chip, PR_MOTO, + "enter pmic charge loop\n"); } break; @@ -1710,6 +1715,7 @@ static void cancel_sm(struct mmi_pl_chg_manager *chip, int ms) chip->pps_current_max = 0; chip->pps_voltage_max = 0; chip->force_pmic_chg = false; + chip->enter_sw_loop = false; memset(chip->mmi_pdo_info, 0, sizeof(struct usbpd_pdo_info) * PD_MAX_PDO_NUM); }