diff --git a/drivers/power/mmi_parallel_charger_qc3p/mmi_charger_core.c b/drivers/power/mmi_parallel_charger_qc3p/mmi_charger_core.c index f83a3777c22e..75d7d777b5c6 100644 --- a/drivers/power/mmi_parallel_charger_qc3p/mmi_charger_core.c +++ b/drivers/power/mmi_parallel_charger_qc3p/mmi_charger_core.c @@ -1776,6 +1776,11 @@ static int mmi_chrg_manager_parse_dt(struct mmi_charger_manager *chip) } } + rc = of_property_read_u32(node, + "mmi,afvc_enable_compensation_uv", + &chip->afvc_volt_comp); + if (rc < 0) + chip->afvc_volt_comp = 0; return rc; thermal_failed: devm_kfree(chip->dev,chip->thermal_mitigation); diff --git a/drivers/power/mmi_parallel_charger_qc3p/mmi_charger_core.h b/drivers/power/mmi_parallel_charger_qc3p/mmi_charger_core.h index ccc513685a51..7e7148d8c13d 100644 --- a/drivers/power/mmi_parallel_charger_qc3p/mmi_charger_core.h +++ b/drivers/power/mmi_parallel_charger_qc3p/mmi_charger_core.h @@ -274,6 +274,7 @@ struct mmi_charger_manager { struct mmi_charger_device **chrg_list; /*charger device list*/ enum qc3p_power_type qc3p_power; bool qc3p_active; + int afvc_volt_comp; /*afvc enabled ,volt compensation uv*/ }; extern bool mmi_get_pps_result_history(struct mmi_charger_manager *chip); diff --git a/drivers/power/mmi_parallel_charger_qc3p/mmi_charger_pump_policy.c b/drivers/power/mmi_parallel_charger_qc3p/mmi_charger_pump_policy.c index 8db0ada1f2f1..b4dc24775272 100644 --- a/drivers/power/mmi_parallel_charger_qc3p/mmi_charger_pump_policy.c +++ b/drivers/power/mmi_parallel_charger_qc3p/mmi_charger_pump_policy.c @@ -1185,7 +1185,7 @@ static void mmi_chrg_sm_work_func(struct work_struct *work) && !chip->batt_therm_cooling) { chrg_cv_taper_tunning_cnt = 0; - if (vbatt_volt > chrg_step->chrg_step_cv_volt + 10000) { + if (vbatt_volt > chrg_step->chrg_step_cv_volt + 10000 + chip->afvc_volt_comp) { if (chrg_cv_delta_volt > 20000) chip->pd_request_volt -= chrg_cv_delta_volt; else @@ -1210,7 +1210,7 @@ static void mmi_chrg_sm_work_func(struct work_struct *work) }else { /*In this case, sys_therm_cooling or batt_therm_cooling is ture*/ - if (vbatt_volt > chrg_step->chrg_step_cv_volt + 10000) { + if (vbatt_volt > chrg_step->chrg_step_cv_volt + 10000 + chip->afvc_volt_comp) { if (chrg_cv_delta_volt > 20000) chip->pd_request_volt -= chrg_cv_delta_volt; else