From 30246fbd4be5b42201dad4c07f91cfedeb9704c9 Mon Sep 17 00:00:00 2001 From: chailu1 Date: Thu, 17 Jun 2021 15:51:02 +0800 Subject: [PATCH] CP: add cp switch enable detect Sometime charge pump charge eanble read is true but charge pump not switching,So add read switching judge, will auto recovery if no switch Porting from https://gerrit.mot.com/#/c/1968879/ Change-Id: Iba23bfcd7db9cf137e4687b188655a3e50ed2fb4 Signed-off-by: chailu1 Reviewed-on: https://gerrit.mot.com/1982429 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Haijian Ma Reviewed-by: Huosheng Liao Submit-Approved: Jira Key --- .../mmi_parallel_charger_iio/mmi_charger_class.h | 1 + .../mmi_charger_pump_policy.c | 16 ++++++++++++---- .../mmi_qc3p_cp_policy.c | 12 +++++++++--- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/drivers/power/mmi_parallel_charger_iio/mmi_charger_class.h b/drivers/power/mmi_parallel_charger_iio/mmi_charger_class.h index b4020176beb2..e7289f41f07d 100644 --- a/drivers/power/mmi_parallel_charger_iio/mmi_charger_class.h +++ b/drivers/power/mmi_parallel_charger_iio/mmi_charger_class.h @@ -68,6 +68,7 @@ struct mmi_charger_info { #define MMI_CONV_OCP_FAULT_BIT 12 #define MMI_THERM_ALARM_BIT 13 #define MMI_THERM_FAULT_BIT 14 +#define MMI_CP_SWITCH_BIT 18 struct mmi_charger_error_info { int chrg_err_type; diff --git a/drivers/power/mmi_parallel_charger_iio/mmi_charger_pump_policy.c b/drivers/power/mmi_parallel_charger_iio/mmi_charger_pump_policy.c index 5620f58f8df6..b278cb7e8576 100644 --- a/drivers/power/mmi_parallel_charger_iio/mmi_charger_pump_policy.c +++ b/drivers/power/mmi_parallel_charger_iio/mmi_charger_pump_policy.c @@ -721,9 +721,11 @@ void mmi_chrg_sm_work_func(struct work_struct *work) case PM_STATE_PPS_TUNNING_CURR: heartbeat_dely_ms = HEARTBEAT_NEXT_STATE_MS; if (chrg_list->cp_master - && !chrg_list->chrg_dev[CP_MASTER]->charger_enabled) { + && (!chrg_list->chrg_dev[CP_MASTER]->charger_enabled + || !(chrg_list->chrg_dev[CP_MASTER]->charger_error.chrg_err_type & (1<< MMI_CP_SWITCH_BIT)))) { mmi_chrg_info(chip,"CP MASTER was disabled, Enter into " "SW directly\n"); + chip->pps_volt_comp = PPS_INIT_VOLT_COMP; mmi_chrg_sm_move_state(chip, PM_STATE_SW_ENTRY); }else if (vbatt_volt > chrg_step->chrg_step_cv_volt) { if (chip->pd_request_curr - chip->pps_curr_steps @@ -768,9 +770,11 @@ void mmi_chrg_sm_work_func(struct work_struct *work) } if (chrg_list->cp_master - && !chrg_list->chrg_dev[CP_MASTER]->charger_enabled) { + && (!chrg_list->chrg_dev[CP_MASTER]->charger_enabled + || !(chrg_list->chrg_dev[CP_MASTER]->charger_error.chrg_err_type & (1<< MMI_CP_SWITCH_BIT)))) { mmi_chrg_info(chip,"CP MASTER was disabled, " "Enter into SW directly\n"); + chip->pps_volt_comp = PPS_INIT_VOLT_COMP; mmi_chrg_sm_move_state(chip, PM_STATE_SW_ENTRY); } else if (vbatt_volt > chrg_step->chrg_step_cv_volt) { chip->pd_request_volt -= chip->pps_volt_steps; @@ -835,8 +839,10 @@ void mmi_chrg_sm_work_func(struct work_struct *work) chrg_step->chrg_step_cc_curr, chrg_step->chrg_step_cv_volt); if (chrg_list->cp_master - && !chrg_list->chrg_dev[CP_MASTER]->charger_enabled) { + && (!chrg_list->chrg_dev[CP_MASTER]->charger_enabled + || !(chrg_list->chrg_dev[CP_MASTER]->charger_error.chrg_err_type & (1<< MMI_CP_SWITCH_BIT)))) { mmi_chrg_info(chip,"CP MASTER was disabled, Enter into SW directly\n"); + chip->pps_volt_comp = PPS_INIT_VOLT_COMP; mmi_chrg_sm_move_state(chip, PM_STATE_SW_ENTRY); heartbeat_dely_ms = HEARTBEAT_NEXT_STATE_MS; goto schedule; @@ -968,8 +974,10 @@ void mmi_chrg_sm_work_func(struct work_struct *work) chrg_step->chrg_step_cv_volt, chrg_step->chrg_step_cv_tapper_curr); if (chrg_list->cp_master - && !chrg_list->chrg_dev[CP_MASTER]->charger_enabled) { + && (!chrg_list->chrg_dev[CP_MASTER]->charger_enabled + || !(chrg_list->chrg_dev[CP_MASTER]->charger_error.chrg_err_type & (1<< MMI_CP_SWITCH_BIT)))) { mmi_chrg_info(chip,"CP MASTER was disabled, Enter into SW directly\n"); + chip->pps_volt_comp = PPS_INIT_VOLT_COMP; mmi_chrg_sm_move_state(chip, PM_STATE_SW_ENTRY); heartbeat_dely_ms = HEARTBEAT_NEXT_STATE_MS; goto schedule; diff --git a/drivers/power/mmi_parallel_charger_iio/mmi_qc3p_cp_policy.c b/drivers/power/mmi_parallel_charger_iio/mmi_qc3p_cp_policy.c index 75611557baa9..ccb7f1dbbc41 100644 --- a/drivers/power/mmi_parallel_charger_iio/mmi_qc3p_cp_policy.c +++ b/drivers/power/mmi_parallel_charger_iio/mmi_qc3p_cp_policy.c @@ -649,9 +649,11 @@ void mmi_qc3p_chrg_sm_work_func(struct work_struct *work) } if (chrg_list->cp_master - && !chrg_list->chrg_dev[CP_MASTER]->charger_enabled) { + && (!chrg_list->chrg_dev[CP_MASTER]->charger_enabled + || !(chrg_list->chrg_dev[CP_MASTER]->charger_error.chrg_err_type & (1<< MMI_CP_SWITCH_BIT)))) { mmi_chrg_info(chip,"CP MASTER was disabled, " "Enter into SW directly\n"); + chip->qc3p_volt_comp = QC3P_INIT_VOLT_COMP; mmi_chrg_qc3p_sm_move_state(chip, PM_QC3P_STATE_SW_ENTRY); } else if (vbatt_volt > chrg_step->chrg_step_cv_volt) { chip->qc3p_request_volt -= chip->qc3p_volt_steps; @@ -706,8 +708,10 @@ void mmi_qc3p_chrg_sm_work_func(struct work_struct *work) chrg_step->chrg_step_cc_curr, chrg_step->chrg_step_cv_volt); if (chrg_list->cp_master - && !chrg_list->chrg_dev[CP_MASTER]->charger_enabled) { + && (!chrg_list->chrg_dev[CP_MASTER]->charger_enabled + || !(chrg_list->chrg_dev[CP_MASTER]->charger_error.chrg_err_type & (1<< MMI_CP_SWITCH_BIT)))) { mmi_chrg_info(chip,"CP MASTER was disabled, Enter into SW directly\n"); + chip->qc3p_volt_comp = QC3P_INIT_VOLT_COMP; mmi_chrg_qc3p_sm_move_state(chip, PM_QC3P_STATE_SW_ENTRY); heartbeat_dely_ms = QC3P_HEARTBEAT_NEXT_STATE_MS; goto schedule; @@ -782,8 +786,10 @@ void mmi_qc3p_chrg_sm_work_func(struct work_struct *work) chrg_step->chrg_step_cv_volt, chrg_step->chrg_step_cv_tapper_curr); if (chrg_list->cp_master - && !chrg_list->chrg_dev[CP_MASTER]->charger_enabled) { + && (!chrg_list->chrg_dev[CP_MASTER]->charger_enabled + || !(chrg_list->chrg_dev[CP_MASTER]->charger_error.chrg_err_type & (1<< MMI_CP_SWITCH_BIT)))) { mmi_chrg_info(chip,"CP MASTER was disabled, Enter into SW directly\n"); + chip->qc3p_volt_comp = QC3P_INIT_VOLT_COMP; mmi_chrg_qc3p_sm_move_state(chip, PM_QC3P_STATE_SW_ENTRY); heartbeat_dely_ms = QC3P_HEARTBEAT_NEXT_STATE_MS; goto schedule;