From ede8130ea665387da77b949a9e5562bdc1d06247 Mon Sep 17 00:00:00 2001 From: "[A" Date: Fri, 11 Nov 2022 16:53:11 +0800 Subject: [PATCH] dynamic adjust vindpm Details: dynamic adjust vindpm Change-Id: I1028138cbd5ee95c9a62d4c6114c5eeb8949ab58 Reviewed-on: https://gerrit.mot.com/2427536 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Wei Xu Reviewed-by: Wang Wang Submit-Approved: Jira Key --- .../power/sgm4154x_chg_mmi/sgm4154x_charger.c | 37 +++++++++++++++++++ .../power/sgm4154x_chg_mmi/sgm4154x_charger.h | 4 ++ 2 files changed, 41 insertions(+) diff --git a/drivers/power/sgm4154x_chg_mmi/sgm4154x_charger.c b/drivers/power/sgm4154x_chg_mmi/sgm4154x_charger.c index 91ab5404a2de..68cc882fcddd 100644 --- a/drivers/power/sgm4154x_chg_mmi/sgm4154x_charger.c +++ b/drivers/power/sgm4154x_chg_mmi/sgm4154x_charger.c @@ -1635,6 +1635,8 @@ static void charger_monitor_work_func(struct work_struct *work) /* enable dynamic adjust battery voltage */ union power_supply_propval val_battery = {0}; int vbat_uv, ibat_ua; + /* enable dynamic adjust battery voltage */ + int soc; charge_monitor_work = container_of(work, struct delayed_work, work); if(charge_monitor_work == NULL) { @@ -1679,6 +1681,25 @@ static void charger_monitor_work_func(struct work_struct *work) } } + /* enable dynamic adjust vindpm */ + if(sgm->enable_dynamic_adjust_vindpm){ + if (!sgm->battery) + sgm->battery = power_supply_get_by_name ("battery"); + if (sgm->battery) { + power_supply_get_property(sgm->battery, POWER_SUPPLY_PROP_CAPACITY, &val_battery); + soc = val_battery.intval; + dev_err(sgm->dev, "soc = %d\n", soc); + if(soc > 80 && sgm->vindpm_flag == false){ + ret = sgm4154x_set_input_volt_lim(sgm, 4700000); + sgm->vindpm_flag = true; + } + if(soc <= 80 && sgm->vindpm_flag){ + ret = sgm4154x_set_input_volt_lim(sgm, sgm->init_data.vlim); + sgm->vindpm_flag = false; + } + } + } + sgm4154x_dump_register(sgm); pr_err("%s\n",__func__); OUT: @@ -2216,6 +2237,8 @@ static bool mmi_start_bc12_charger_type_detect(struct sgm4154x_device *sgm, int static void sgm4154x_vbus_remove(struct sgm4154x_device * sgm) { + /* enable dynamic adjust vindpm */ + int ret = 0; dev_err(sgm->dev, "Vbus removed, disable charge\n"); #ifdef CONFIG_MMI_QC3P_TURBO_CHARGER @@ -2231,6 +2254,13 @@ static void sgm4154x_vbus_remove(struct sgm4154x_device * sgm) sgm4154x_set_chrg_adjust_volt(sgm, sgm->final_cv, 0); mmi_regmap_update_bits(sgm, SGM4154x_CHRG_CTRL_f, SGM4154x_VREG_FT_MASK, 0); } + + /* enable dynamic adjust vindpm */ + if(sgm->enable_dynamic_adjust_vindpm){ + ret = sgm4154x_set_input_volt_lim(sgm, sgm->init_data.vlim); + sgm->vindpm_flag = false; + } + sgm->pulse_cnt = 0; sgm->mmi_qc3p_rerun_done = false; sgm->mmi_qc3p_wa = false; @@ -2675,6 +2705,13 @@ static int sgm4154x_parse_dt(struct sgm4154x_device *sgm) sgm->enable_dynamic_adjust_batvol = of_property_read_bool(sgm->dev->of_node, "enable_dynamic_adjust_batvol"); dev_err(sgm->dev, "%s: enable_dynamic_adjust_batvol = %d \n", __func__, sgm->enable_dynamic_adjust_batvol); + /* enable dynamic adjust vindpm */ + sgm->enable_dynamic_adjust_vindpm = of_property_read_bool(sgm->dev->of_node, "enable_dynamic_adjust_vindpm"); + dev_err(sgm->dev, "%s: enable_dynamic_adjust_vindpm = %d \n", __func__, sgm->enable_dynamic_adjust_vindpm); + if(sgm->enable_dynamic_adjust_vindpm){ + sgm->vindpm_flag = false; + } + if (of_property_read_u32(sgm->dev->of_node, "jeita_temp_above_t4_cv", &val) >= 0) sgm->data.jeita_temp_above_t4_cv = val; else { diff --git a/drivers/power/sgm4154x_chg_mmi/sgm4154x_charger.h b/drivers/power/sgm4154x_chg_mmi/sgm4154x_charger.h index 996cc845f62e..f230e4f9bfd3 100644 --- a/drivers/power/sgm4154x_chg_mmi/sgm4154x_charger.h +++ b/drivers/power/sgm4154x_chg_mmi/sgm4154x_charger.h @@ -364,6 +364,10 @@ struct sgm4154x_device { int final_cv; int cv_tune; + /* enable dynamic adjust vindpm */ + bool enable_dynamic_adjust_vindpm; + bool vindpm_flag; + struct regulator *dpdm_reg; struct regulator *otg_vbus_reg; struct mutex regulator_lock;