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 <xuwt2@lenovo.com>
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 <yanyh2@motorola.com>
Reviewed-by: Jianqi Yang <yangj@motorola.com>
Submit-Approved: Jira Key
This commit is contained in:
xuwt2 2018-09-20 17:06:02 +08:00 • committed by Wentao Xu
commit 1b715bf4bc

View file

@ -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);
}