diff options
author | Peter Marheine <pmarheine@chromium.org> | 2022-02-09 14:22:23 +1100 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2022-02-14 01:06:18 +0000 |
commit | 8cd46139b04cd7f57451e98a2cd40fe801388671 (patch) | |
tree | ca63f927294dea5fe6f1e92c4eff3e0e0cd53d17 | |
parent | 56209bc92f7ff0290d3fe2f22804b31bda23f001 (diff) | |
download | chrome-ec-8cd46139b04cd7f57451e98a2cd40fe801388671.tar.gz |
nissa/nereid: implement pd_power_supply_reset
This safely resets the charger for a port when requested by the policy
engine, including discharging VBUS. The implementation is borrowed
from dedede.
BUG=b:201000844
TEST=build and flash nereid
BRANCH=none
Change-Id: I6bae0828ab4e24aaeadf5ff84c888c6c52148f08
Signed-off-by: Peter Marheine <pmarheine@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3449991
Reviewed-by: Andrew McRae <amcrae@google.com>
-rw-r--r-- | zephyr/projects/nissa/prj_nereid.conf | 3 | ||||
-rw-r--r-- | zephyr/projects/nissa/src/nereid/usbc.c | 16 |
2 files changed, 19 insertions, 0 deletions
diff --git a/zephyr/projects/nissa/prj_nereid.conf b/zephyr/projects/nissa/prj_nereid.conf index 9396e85655..4b02818032 100644 --- a/zephyr/projects/nissa/prj_nereid.conf +++ b/zephyr/projects/nissa/prj_nereid.conf @@ -33,6 +33,9 @@ CONFIG_PLATFORM_EC_USB_PD_TCPM_DRIVER_IT8XXX2=y CONFIG_PLATFORM_EC_USB_PD_VBUS_DETECT_CHARGER=y # SM5803 controls power path on both ports CONFIG_PLATFORM_EC_USB_PD_5V_CHARGER_CTRL=y +# SM5803 can discharge VBUS, but not via one of the available options; +# pd_power_supply_reset() does discharge. +CONFIG_PLATFORM_EC_USB_PD_DISCHARGE=n # The EC is put into programming mode while firmware is running # (after releasing reset) and PD after being reset will hard-reset # the port if a contract was already set up. If the system has no diff --git a/zephyr/projects/nissa/src/nereid/usbc.c b/zephyr/projects/nissa/src/nereid/usbc.c index ed582e4dd7..920299e55b 100644 --- a/zephyr/projects/nissa/src/nereid/usbc.c +++ b/zephyr/projects/nissa/src/nereid/usbc.c @@ -95,6 +95,22 @@ uint16_t tcpc_get_alert_status(void) void pd_power_supply_reset(int port) { + int prev_en; + + if (port < 0 || port >= board_get_usb_pd_port_count()) + return; + + prev_en = charger_is_sourcing_otg_power(port); + + /* Disable Vbus */ + charger_enable_otg_power(port, 0); + + /* Discharge Vbus if previously enabled */ + if (prev_en) + sm5803_set_vbus_disch(port, 1); + + /* Notify host of power info change. */ + pd_send_host_event(PD_EVENT_POWER_CHANGE); } int pd_set_power_supply_ready(int port) |