diff options
author | Sam Hurst <shurst@google.com> | 2020-02-26 08:53:28 -0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-03-04 19:38:16 +0000 |
commit | 57a8716bf7b9bf2fa9b65e5f3fa29a3d9914d25f (patch) | |
tree | b0b45f0ccee730edd26e1cdd627e39c138aa62d9 | |
parent | 016780f4a5642e151b8c9d3eec4e01a1c516ace8 (diff) | |
download | chrome-ec-57a8716bf7b9bf2fa9b65e5f3fa29a3d9914d25f.tar.gz |
TCPMv2: Correctly handle DP Docks with charging ports
The following policy is implemented for docks with charging ports:
1) Rebooting the device with a non-powered dock connected
re-enters alt mode.
2) Rebooting the device with a powered dock connected
re-enters alt mode.
3) A powered down device with a powered dock connected
begins to charge when a dock is connected.
4) Rebooting the device with a powered dock connected
continues to charge when powered down.
5) A powered down device with a non-powered dock connected
enters low power mode.
BUG=b:149528846
BUG=b:149662829
BRANCH=none
TEST=make -j buildall
Manual tests:
1) Connected dock with DP
a) power down device from OS
b) verified that port entered low power mode
c) power on device
d) verified that DP returned
2) Connected dock with DP and USB Charger
a) power down device from OS
b) verified that port was still charging
c) power on device
d) verified that DP returned
3) Connected dock with DP
a) power down device from OS
b) plug in USB Charger to dock
c) verified device was charging
d) power on device
e) verified that DP returned
4) Connected dock with DP and USB Charger
a) power down device from OS
b) unplug charger from dock
c) verified that port entered low power mode
Change-Id: I3c4402cb575abde59ca81081e01ff9a97cf08167
Signed-off-by: Sam Hurst <shurst@google.com>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2078692
Tested-by: Peter Marheine <pmarheine@chromium.org>
Reviewed-by: Diana Z <dzigterman@chromium.org>
-rw-r--r-- | common/usbc/usb_tc_drp_acc_trysrc_sm.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/common/usbc/usb_tc_drp_acc_trysrc_sm.c b/common/usbc/usb_tc_drp_acc_trysrc_sm.c index b1dfff731b..ad3f1bb664 100644 --- a/common/usbc/usb_tc_drp_acc_trysrc_sm.c +++ b/common/usbc/usb_tc_drp_acc_trysrc_sm.c @@ -1888,6 +1888,21 @@ static void tc_attached_snk_run(const int port) { #ifdef CONFIG_USB_PE_SM /* + * On device power ON, when charging from a Dock that has DP, enter any + * alt modes by briefly transitioning the Unattached.SNK state. This has + * no impact when charging from a regular charger. + * + * TODO(b/149662829): Implement a better solution for re-entering + * alt modes after a reboot. + */ + if (TC_CHK_FLAG(port, TC_FLAGS_POWER_STATE_CHANGE) && + chipset_in_state(CHIPSET_STATE_ON)) { + TC_CLR_FLAG(port, TC_FLAGS_POWER_STATE_CHANGE); + set_state_tc(port, TC_UNATTACHED_SNK); + return; + } + + /* * Perform Hard Reset */ if (TC_CHK_FLAG(port, TC_FLAGS_HARD_RESET)) { @@ -2818,10 +2833,10 @@ static void tc_drp_auto_toggle_run(const int port) set_state_tc(port, PD_DEFAULT_STATE(port)); break; case DRP_TC_UNATTACHED_SNK: - set_state_tc(port, TC_ATTACH_WAIT_SNK); + set_state_tc(port, TC_UNATTACHED_SNK); break; case DRP_TC_UNATTACHED_SRC: - set_state_tc(port, TC_ATTACH_WAIT_SRC); + set_state_tc(port, TC_UNATTACHED_SRC); break; case DRP_TC_DRP_AUTO_TOGGLE: /* |