diff options
author | Eric Yilun Lin <yllin@chromium.org> | 2021-05-14 15:36:41 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-09-01 02:11:16 +0000 |
commit | 61bbfcaa37ecec87a9cea89e0f8fc65ecbecd13e (patch) | |
tree | f37906b9bb648028e8613e6069fa515b07b1db6f /common/usbc/usb_pe_drp_sm.c | |
parent | 272e74878f45d744dfebad5847f0f32ed5cbb137 (diff) | |
download | chrome-ec-61bbfcaa37ecec87a9cea89e0f8fc65ecbecd13e.tar.gz |
usbpd: support dynamic PDO selection
Support dynamic PDO selection CONFIG_USB_PD_DPS.
This config controls the charging voltage and power according to the
input power and battery configuration.
DPS would continuously evaluate the system load and current charging
voltage, and decide a new one by below:
1. If the PDO can fulfill system desired power.
2. If the PDO is efficient for the battery configuration.
To detect if the system load cannot be fulfilled by the current PDO,
it checks:
1. if the input current closes to the PDO current limit.
2. if the input power closes to the PDO maximum power.
To detect if the system load can be fulfilled by a more efficient PDO,
it checks:
- if the voltage of a new PDO is closer to the battery voltage than the
current PDO, and the power is able fulfill the system load.
BUG=b:169532537
TEST=1. tested on asurada, the charging voltage is able to switch to
different PDOs under different system loads
2. tested that the DPS is able to switch charge port
(e.g. C1 12V -> C0 9V) based on the provided PDOs.
BRANCH=asurada
Change-Id: I7c7706b331dc0d4f8ac68569dc7ed852fc9308e3
Signed-off-by: Eric Yilun Lin <yllin@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2897064
Tested-by: Eric Yilun Lin <yllin@google.com>
Reviewed-by: Diana Z <dzigterman@chromium.org>
Commit-Queue: Eric Yilun Lin <yllin@google.com>
Diffstat (limited to 'common/usbc/usb_pe_drp_sm.c')
-rw-r--r-- | common/usbc/usb_pe_drp_sm.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/common/usbc/usb_pe_drp_sm.c b/common/usbc/usb_pe_drp_sm.c index f3faa1eabb..bf134c5449 100644 --- a/common/usbc/usb_pe_drp_sm.c +++ b/common/usbc/usb_pe_drp_sm.c @@ -10,6 +10,7 @@ #include "charge_state.h" #include "common.h" #include "console.h" +#include "dps.h" #include "driver/tcpm/tcpm.h" #include "ec_commands.h" #include "hooks.h" @@ -3159,6 +3160,11 @@ static void pe_snk_evaluate_capability_entry(int port) /* Device Policy Response Received */ set_state_pe(port, PE_SNK_SELECT_CAPABILITY); + +#ifdef HAS_TASK_DPS + /* Wake DPS task to evaluate the SrcCaps */ + task_wake(TASK_ID_DPS); +#endif } /** @@ -3388,6 +3394,10 @@ static void pe_snk_transition_sink_exit(int port) CEIL_REQUESTOR_PD, pe[port].curr_limit); pd_timer_disable(port, PE_TIMER_PS_TRANSITION); + + if (IS_ENABLED(CONFIG_USB_PD_DPS)) + if (charge_manager_get_active_charge_port() == port) + dps_update_stabilized_time(port); } |