From 8cc8dc29b0684b36f180fa2d7a1c91cf7fac18cc Mon Sep 17 00:00:00 2001 From: xuwt2 Date: Thu, 6 Apr 2023 21:14:12 +0800 Subject: [PATCH] sc760x_charger_mmi: Support THERMAL_RATIO_CONTROL Dual battery thermal mitigation, Add equal ratio thermal level control Define THERMAL_RATIO_CONTRO to enable this feature. It will ignore thermal-mitigation-level and force to rewite new thermal level through calculating the (batt_fcc_ma/thermal-ratio) of parnter battery Change-Id: Ib44eccfe540b6d8d705bb53fb5001207288a7b85 Signed-off-by: xuwt2 Reviewed-on: https://gerrit.mot.com/2567981 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: litong Reviewed-by: Guobin Zhang Submit-Approved: Jira Key --- drivers/power/sc760x_charger_mmi/Android.mk | 5 +++++ drivers/power/sc760x_charger_mmi/Kbuild | 3 +++ .../power/sc760x_charger_mmi/sc760x_charger_mmi.c | 12 ++++++++++++ .../power/sc760x_charger_mmi/sc760x_charger_mmi.h | 1 + 4 files changed, 21 insertions(+) diff --git a/drivers/power/sc760x_charger_mmi/Android.mk b/drivers/power/sc760x_charger_mmi/Android.mk index e18a5fefd7de..30467a26e4f1 100644 --- a/drivers/power/sc760x_charger_mmi/Android.mk +++ b/drivers/power/sc760x_charger_mmi/Android.mk @@ -7,5 +7,10 @@ LOCAL_MODULE := sc760x_charger_mmi.ko LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT) LOCAL_ADDITIONAL_DEPENDENCIES := $(KERNEL_MODULES_OUT)/mmi_charger.ko + +ifeq ($(THERMAL_RATIO_CONTROL),true) + KERNEL_CFLAGS += CONFIG_THERMAL_RATIO_CONTROL=y + KBUILD_OPTIONS += CONFIG_THERMAL_RATIO_CONTROL=y +endif KBUILD_OPTIONS_GKI += GKI_OBJ_MODULE_DIR=gki include $(DLKM_DIR)/AndroidKernelModule.mk diff --git a/drivers/power/sc760x_charger_mmi/Kbuild b/drivers/power/sc760x_charger_mmi/Kbuild index ffb560f44dcd..60e156bdfd25 100644 --- a/drivers/power/sc760x_charger_mmi/Kbuild +++ b/drivers/power/sc760x_charger_mmi/Kbuild @@ -4,6 +4,9 @@ EXTRA_CFLAGS += -I$(ANDROID_BUILD_TOP)/motorola/kernel/modules/include \ -I$(ANDROID_BUILD_TOP)/motorola/kernel/modules/drivers/power/sc760x_charger_mmi \ -I$(ANDROID_BUILD_TOP)/motorola/kernel/modules/drivers/power/mmi_charger +ifneq ($(filter m y,$(CONFIG_THERMAL_RATIO_CONTROL)),) + EXTRA_CFLAGS += -DTHERMAL_RATIO_CONTROL +endif obj-m += sc760x_charger_mmi.o diff --git a/drivers/power/sc760x_charger_mmi/sc760x_charger_mmi.c b/drivers/power/sc760x_charger_mmi/sc760x_charger_mmi.c index bf1c0a3e5c37..e41034fabf63 100644 --- a/drivers/power/sc760x_charger_mmi/sc760x_charger_mmi.c +++ b/drivers/power/sc760x_charger_mmi/sc760x_charger_mmi.c @@ -1110,6 +1110,12 @@ static int sc760x_parse_dt(struct sc760x_chip *sc, struct device *dev) sc->num_thermal_levels = len; sc->thermal_fcc_ua = sc->init_data.max_ichg; + ret = device_property_read_u32(sc->dev, + "mmi,thermal-ratio", + &sc->thermal_ratio); + if (ret) + sc->thermal_ratio = 1; + return ret; } @@ -1569,6 +1575,11 @@ static int sc760x_charger_config_charge(void *data, struct mmi_charger_cfg *conf ibat_limit_vote = MIN_VAL(chg->chg_cfg.target_fcc, chg->sc->thermal_fcc_ua / 1000); +#ifdef THERMAL_RATIO_CONTROL + ibat_limit_vote = MIN_VAL(chg->chg_cfg.target_fcc, chg->paired_batt_info.batt_fcc_ma / chg->sc->thermal_ratio); + chg->sc->thermal_fcc_ua = (chg->paired_batt_info.batt_fcc_ma / chg->sc->thermal_ratio) * 1000; +#endif + if (sc760x_ibat_limit_set > (ibat_limit_vote + IBAT_CHG_LIM_BASE)) { sc760x_ibat_limit_set -= IBAT_CHG_LIM_BASE; sc760x_set_ibat_limit(chg->sc, sc760x_ibat_limit_set); @@ -1778,6 +1789,7 @@ static void sc760x_paired_battery_notify(void *data, return; } + memcpy(&chg->paired_batt_info, batt_info, sizeof(struct mmi_battery_info)); if (chg->sc->sc760x_enable) { pr_info("sc760x has been power on\n"); return; diff --git a/drivers/power/sc760x_charger_mmi/sc760x_charger_mmi.h b/drivers/power/sc760x_charger_mmi/sc760x_charger_mmi.h index 631a4065d0c8..51f40a9e99ea 100644 --- a/drivers/power/sc760x_charger_mmi/sc760x_charger_mmi.h +++ b/drivers/power/sc760x_charger_mmi/sc760x_charger_mmi.h @@ -206,6 +206,7 @@ struct sc760x_chip { u32 thermal_fcc_ua; int curr_thermal_level; int num_thermal_levels; + int thermal_ratio; bool use_ext_usb_psy; bool use_ext_wls_psy;