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;