From 1b2ce8747e60e0bb7c58dae8062091428a97eb08 Mon Sep 17 00:00:00 2001 From: Eric Yilun Lin Date: Mon, 18 Oct 2021 14:48:03 +0800 Subject: charge_manager: don't send new power request when DPS enabled DPS would control the PD sink voltage dynamically, so charge_manager doesn't need to send a new power request if it's not sinking the max voltage. Also, merge two new powe requests into one to prevent from sending multiple requests at one time. BUG=b:169532537 TEST=enable DPS, and won't send consecutive DP requests when switching voltage BRANCH=main Change-Id: Ib706f4feb5c6434d71b9576f299898a12613aded Signed-off-by: Eric Yilun Lin Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3229049 Reviewed-by: Aseda Aboagye Commit-Queue: Eric Yilun Lin Tested-by: Eric Yilun Lin --- common/charge_manager.c | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/common/charge_manager.c b/common/charge_manager.c index 14c869c3b2..3d41c3a08d 100644 --- a/common/charge_manager.c +++ b/common/charge_manager.c @@ -934,6 +934,7 @@ static void charge_manager_refresh(void) uint32_t max_voltage; uint32_t max_current; uint32_t unused; + bool new_req = false; /* * Check if new voltage/current is different * than requested. If yes, send new power request @@ -942,19 +943,28 @@ static void charge_manager_refresh(void) charge_voltage || pd_get_requested_current(updated_new_port) != charge_current_uncapped) - pd_set_new_power_request(updated_new_port); + new_req = true; - /* - * Check if we can get more power from this port. - * If yes, send new power request - */ - pd_find_pdo_index(pd_get_src_cap_cnt(updated_new_port), - pd_get_src_caps(updated_new_port), - pd_get_max_voltage(), &pdo); - pd_extract_pdo_power(pdo, &max_current, &max_voltage, - &unused); - if (charge_voltage != max_voltage || - charge_current_uncapped != max_current) + if (IS_ENABLED(CONFIG_USB_PD_DPS) && dps_is_enabled()) { + /* Fall-through. DPS control sink voltage */ + } else { + /* + * Check if we can get more power from this + * port. If yes, send new power request + */ + pd_find_pdo_index( + pd_get_src_cap_cnt(updated_new_port), + pd_get_src_caps(updated_new_port), + pd_get_max_voltage(), &pdo); + pd_extract_pdo_power(pdo, &max_current, + &max_voltage, &unused); + + if (charge_voltage != max_voltage || + charge_current_uncapped != max_current) + new_req = true; + } + + if (new_req) pd_set_new_power_request(updated_new_port); } else { /* -- cgit v1.2.1