diff options
author | Eric Yilun Lin <yllin@chromium.org> | 2021-10-18 14:48:03 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-10-19 02:02:48 +0000 |
commit | 1b2ce8747e60e0bb7c58dae8062091428a97eb08 (patch) | |
tree | 55d198de9ef8996caac733396d91c66b9b6b3393 | |
parent | 814bde1b0af78e4059397a0ef3ab1fc5304d4908 (diff) | |
download | chrome-ec-1b2ce8747e60e0bb7c58dae8062091428a97eb08.tar.gz |
charge_manager: don't send new power request when DPS enabledfirmware-cr50-stab-mp-14300.B-mainfirmware-cr50-stab-14294.B-main
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 <yllin@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3229049
Reviewed-by: Aseda Aboagye <aaboagye@chromium.org>
Commit-Queue: Eric Yilun Lin <yllin@google.com>
Tested-by: Eric Yilun Lin <yllin@google.com>
-rw-r--r-- | common/charge_manager.c | 34 |
1 files 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 { /* |