From ee26b35a3a3ca5f08427c6466537cf4e2aa3e96d Mon Sep 17 00:00:00 2001 From: weiweij Date: Tue, 1 Nov 2022 13:36:08 +0800 Subject: [PATCH] chg: let each project could use its own heartbeat work period Heartbeat work in charger driver will work every 100s when no charging. It will cost some power. But when discharging, we do not need to pay attention to charging function, we just need soc changing. And for our test in genevn, fg driver will send a notification when soc changed. So we could increase the period of heartbeat wor Change-Id: I9f9dcda52f42bbb53bcff61820e1df9ab07e4f15 Reviewed-on: https://gerrit.mot.com/2417652 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Yonghua Yan Reviewed-by: Haijian Ma Reviewed-by: Lu Chai Reviewed-by: Huosheng Liao Submit-Approved: Jira Key --- drivers/power/mmi_charger/mmi_charger.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/drivers/power/mmi_charger/mmi_charger.c b/drivers/power/mmi_charger/mmi_charger.c index ed8ad3d4271e..a5fc24dd656a 100644 --- a/drivers/power/mmi_charger/mmi_charger.c +++ b/drivers/power/mmi_charger/mmi_charger.c @@ -254,6 +254,8 @@ struct mmi_charger_chip { uint32_t factory_kill_debounce_ms; bool empty_vbat_shutdown_triggered; + + int heartbeat_dischg_ms; }; static int mmi_vote(struct mmi_vote *vote, const char *voter, @@ -2220,7 +2222,7 @@ static void mmi_charger_heartbeat_work(struct work_struct *work) else if (chip->max_charger_rate != MMI_POWER_SUPPLY_CHARGE_RATE_NONE) hb_resch_time = chip->heartbeat_interval; else - hb_resch_time = HEARTBEAT_DISCHARGE_MS; + hb_resch_time = chip->heartbeat_dischg_ms; schedule_delayed_work(&chip->heartbeat_work, msecs_to_jiffies(hb_resch_time)); if (suspend_wakeups || @@ -2760,6 +2762,13 @@ static int mmi_parse_dt(struct mmi_charger_chip *chip) if (rc) chip->wls_pmax = CHARGER_POWER_10W; + rc = of_property_read_u32(node, "mmi,heartbeat-discharger-ms", + &chip->heartbeat_dischg_ms); + if (rc) + chip->heartbeat_dischg_ms = HEARTBEAT_DISCHARGE_MS; + + mmi_warn(chip, "mmi,heartbeat dischg ms %d\n", chip->heartbeat_dischg_ms); + node = of_find_node_by_path("/chosen"); if (!node)