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 <chailu1@lenovo.com>
Reviewed-on: https://gerrit.mot.com/1982429
SME-Granted: SME Approvals Granted
SLTApproved: Slta Waiver
Tested-by: Jira Key
Reviewed-by: Haijian Ma <mahj8@motorola.com>
Reviewed-by: Huosheng Liao <liaohs@motorola.com>
Submit-Approved: Jira Key
This commit is contained in:
chailu1 2021-06-17 15:51:02 +08:00 • committed by Lu Chai
commit 30246fbd4b
3 changed files with 22 additions and 7 deletions

View file

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

View file

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

View file

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