diff options
author | Ruibin Chang <ruibin.chang@ite.com.tw> | 2020-08-18 17:15:16 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-08-29 22:41:47 +0000 |
commit | 8f4c9c61558b07e4aed52e2700e65ed7bb249486 (patch) | |
tree | 086f4c0ecedbb7f258353ab0bd5ff058edf6b406 | |
parent | ab8d38fa02aad06abb2ddd83b317840018cd32fb (diff) | |
download | chrome-ec-8f4c9c61558b07e4aed52e2700e65ed7bb249486.tar.gz |
TCPMv2: handle un- and supported auto toggle TCPC
This CL changes for both unsupported and supported auto toggle
TCPC on a board:
1.board level enable CONFIG_USB_PD_TCPC_LOW_POWER:
Exit LPM state for unsupported auto toggle TCPC port, when drp
state is TOGGLE_ON in S0.
2.board level enable CONFIG_USB_PD_DUAL_ROLE_AUTO_TOGGLE:
Don't transit to TC_DRP_AUTO_TOGGLE state for unsupported auto
toggle TCPC port.
BUG=none
BRANCH=none
TEST=on board drawcia, check unsupported auto toggle TCPC port:
1.connect with adapter/dongle, pd state to SNK/SRC_Ready
during G3 -> S0.
2.shut down to G3, connect with adapter and pd state to SNK_Ready.
Signed-off-by: Ruibin Chang <ruibin.chang@ite.com.tw>
Change-Id: Ic6afc84df1564b2cb19a9032bba0752091cbf7a0
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2362371
Tested-by: Ruibin Chang <Ruibin.Chang@ite.com.tw>
Reviewed-by: Diana Z <dzigterman@chromium.org>
Reviewed-by: Jett Rink <jettrink@chromium.org>
Commit-Queue: Ruibin Chang <Ruibin.Chang@ite.com.tw>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2383902
Reviewed-by: Edward Hill <ecgh@chromium.org>
Commit-Queue: Edward Hill <ecgh@chromium.org>
Tested-by: Edward Hill <ecgh@chromium.org>
-rw-r--r-- | common/usb_common.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/common/usb_common.c b/common/usb_common.c index f640b9d0fd..9a467ed96d 100644 --- a/common/usb_common.c +++ b/common/usb_common.c @@ -336,6 +336,13 @@ enum pd_drp_next_states drp_auto_toggle_next_state( return DRP_TC_UNATTACHED_SRC; case PD_DRP_TOGGLE_ON: default: + if (!auto_toggle_supported) { + if (power_role == PD_ROLE_SINK) + return DRP_TC_UNATTACHED_SNK; + else + return DRP_TC_UNATTACHED_SRC; + } + return DRP_TC_DRP_AUTO_TOGGLE; } } else if ((cc_is_rp(cc1) || cc_is_rp(cc2)) && @@ -375,6 +382,13 @@ enum pd_drp_next_states drp_auto_toggle_next_state( } } else { /* Anything else, keep toggling */ + if (!auto_toggle_supported) { + if (power_role == PD_ROLE_SINK) + return DRP_TC_UNATTACHED_SNK; + else + return DRP_TC_UNATTACHED_SRC; + } + return DRP_TC_DRP_AUTO_TOGGLE; } } |