From 5fae1f06aaa02f00e81207eaa38eee6be6061439 Mon Sep 17 00:00:00 2001 From: xuwt2 Date: Fri, 7 Sep 2018 14:38:00 +0800 Subject: [PATCH] power: adjust 27w charge policy, optimize charge performance -1, For the float voltage, add compensation voltage. -2, add compensation current during the supper charging step. Change-Id: I78079231e0b9fcb3079de2cc39406eb22ff8e2ce Signed-off-by: xuwt2 Reviewed-on: https://gerrit.mot.com/1239054 SLTApproved: Slta Waiver SME-Granted: SME Approvals Granted Tested-by: Jira Key Reviewed-by: Yonghua Yan Reviewed-by: Jianqi Yang Submit-Approved: Jira Key --- .../mmi_pl_chg_manager/mmi_pl_chg_manager.c | 56 ++++++++++++------- 1 file changed, 36 insertions(+), 20 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 48deb96be003..fce8ebc4c7d4 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 @@ -170,6 +170,7 @@ enum mmi_chrg_step { struct sys_config { u32 flashc_volt_hysteresis; + u32 flashc_curr_hysteresis; u32 flashc_volt_up_steps; u32 flashc_curr_up_steps; u32 flashc_curr_down_steps; @@ -749,6 +750,7 @@ static void mmi_pl_pm_move_state(struct mmi_pl_chg_manager *chip, pm_sm_state_t #define FG_ESR_PULSE_MAX_TIMEOUT 60000 #define FG_ESR_DECREMENT_UA 300000 #define FG_ESR_DECREMENT_UV 300000 +#define FLASHC_CV_DECREMENT_UV 100000 #define HEARTBEAT_lOOP_WAIT_MS 5000 #define HEARTBEAT_PPS_TUNNING_MS 50 #define HEARTBEAT_SHORT_DELAY_MS 500 @@ -1234,7 +1236,11 @@ static void mmi_pl_sm_work_func(struct work_struct *work) chip->pps_select_pdo_retry_cont = 0; if (chip->pps_increase_volt - && ibat_curr < chip->flashc_cc_max_curr_pre + && ibat_curr < + ((chip->pres_chrg_step == STEP_SUPER) ? + chip->flashc_cc_max_curr_pre + + chip->sys_configs.flashc_curr_hysteresis : + chip->flashc_cc_max_curr_pre) && chip->request_volt < chip->pps_voltage_max - 200000 && chip->pmic_handle.vbat_volt < @@ -1355,7 +1361,7 @@ static void mmi_pl_sm_work_func(struct work_struct *work) mmi_pl_pm_move_state(chip, PM_STATE_FLASHC_CV_LOOP); chip->flashc_taper_cnt = 0; chip->flashc_taper_delta_volt = - chip->sys_configs.flashc_volt_down_steps; + FLASHC_CV_DECREMENT_UV; heartbeat_dely_ms = HEARTBEAT_NEXT_STATE_MS; } else { chip->flashc_taper_cnt++; @@ -1401,9 +1407,10 @@ static void mmi_pl_sm_work_func(struct work_struct *work) } else chip->pps_select_pdo_retry_cont = 0; - if (vbat_volt > chip->flashc_cv_max_volt_pre + 20000 - && chip->flashc_taper_delta_volt > 20000) { - chip->request_volt -= chip->flashc_taper_delta_volt; + if (vbat_volt > chip->flashc_cv_max_volt_pre + 20000) { + if (chip->flashc_taper_delta_volt > 20000) + chip->request_volt -= chip->flashc_taper_delta_volt; + else chip->request_volt -= 20000; mmi_pl_dbg(chip, PR_MOTO, "For keeping flashc constant voltage step," "decrease pps voltage %d ,delta volta %d \n", chip->request_volt, chip->flashc_taper_delta_volt); @@ -1421,22 +1428,10 @@ static void mmi_pl_sm_work_func(struct work_struct *work) chip->request_volt, chip->request_current); } - if (ibat_curr <= chip->flashc_cv_taper_curr_pre) { + if (ibat_curr <= chip->flashc_cv_taper_curr_pre || + ibat_curr < chip->pmic_step_curr) { if (chip->flashc_taper_cnt > FLASHC_TAPPER_COUNT) { - if (chrg_step != chip->pres_chrg_step - && flashc_cc_max_curr < chip->flashc_cc_max_curr_pre) { - chip->pres_chrg_step = chrg_step; - chip->flashc_cc_max_curr_pre = flashc_cc_max_curr; - chip->flashc_cv_max_volt_pre = flashc_cv_max_volt; - chip->flashc_cv_taper_curr_pre = flashc_cv_taper_curr; - - mmi_pl_dbg(chip, PR_MOTO, - "Start jump to the next charger step %d \n", - chip->pres_chrg_step); - - mmi_pl_pm_move_state(chip, PM_STATE_FLASHC_CC_LOOP); - heartbeat_dely_ms = HEARTBEAT_NEXT_STATE_MS; - } else if (ibat_curr < chip->pmic_step_curr) { + if (ibat_curr < chip->pmic_step_curr) { mmi_pl_dbg(chip, PR_MOTO, "Ready to quit flashc CV charger, " "chrg step %d ," @@ -1453,6 +1448,19 @@ static void mmi_pl_sm_work_func(struct work_struct *work) chip->pmic_step_volt, chip->pmic_step_curr); mmi_pl_pm_move_state(chip, PM_STATE_FLASHC_QUIT_1); + } else if (chrg_step != chip->pres_chrg_step + && flashc_cc_max_curr < chip->flashc_cc_max_curr_pre) { + chip->pres_chrg_step = chrg_step; + chip->flashc_cc_max_curr_pre = flashc_cc_max_curr; + chip->flashc_cv_max_volt_pre = flashc_cv_max_volt; + chip->flashc_cv_taper_curr_pre = flashc_cv_taper_curr; + + mmi_pl_dbg(chip, PR_MOTO, + "Start jump to the next charger step %d \n", + chip->pres_chrg_step); + + mmi_pl_pm_move_state(chip, PM_STATE_FLASHC_CC_LOOP); + heartbeat_dely_ms = HEARTBEAT_NEXT_STATE_MS; } chip->flashc_taper_cnt = 0; } else { @@ -1833,6 +1841,7 @@ static void psy_changed_work_func(struct work_struct *work) #define DEFAULT_PMIC_STEP_CURR 2000000 #define DEFAULT_FLASHC_TAPER_CURR_LMT 2000000 #define DEFAULT_FLASHC_VOLT_HYSTERESIS 100000 +#define DEFAULT_FLASHC_CURR_HYSTERESIS 300000 #define DEFAULT_FLASHC_VOLT_UP_STEPS 100000 #define DEFAULT_FLASHC_CURR_UP_STEPS 100000 #define DEFAULT_FLASHC_VOLT_DOWN_STEPS 100000 @@ -1880,6 +1889,13 @@ static int mmi_pl_chg_manager_parse_dt(struct mmi_pl_chg_manager *chip) chip->sys_configs.flashc_volt_hysteresis = DEFAULT_FLASHC_VOLT_HYSTERESIS; + rc = of_property_read_u32(node, + "mmi,flashc-curr-hysteresis", + &chip->sys_configs.flashc_curr_hysteresis); + if (rc < 0) + chip->sys_configs.flashc_curr_hysteresis = + DEFAULT_FLASHC_CURR_HYSTERESIS; + rc = of_property_read_u32(node, "mmi,flashc-volt-up-steps", &chip->sys_configs.flashc_volt_up_steps);