diff options
author | Poornima Tom <poornima.tom@intel.com> | 2021-08-11 11:48:54 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-08-17 20:55:22 +0000 |
commit | 55f40b89d7f7b6cc3005e0d6fa755345d514a578 (patch) | |
tree | 4bd2e145c5715912dac1e0852464d6731cf0c85e /common | |
parent | 3db59f2c94f3d7b2cdef794877e178df9bb75c20 (diff) | |
download | chrome-ec-55f40b89d7f7b6cc3005e0d6fa755345d514a578.tar.gz |
TCPMv2: Fix LPM for non-dual role auto toggle chips
If the "dual role" is enabled and the TCPC chip does not support
"Dual role auto toggle mode" then the PD state remains in
PD_DRP_TOGGLE_ON state in active state of the AP. Hence check for CC
line open state to decide to enter low power mode for such devices.
BUG=b:195406641
BRANCH=none
TEST=Tested on ADL RVP, FUSB302 & IT83XX can enter LPM
> pd 0 state
Port C0 CC1, Disable - Role: SRC-UFP TC State: LowPowerMode,
Flags: 0x0010 PE State: , Flags: 0x0001
Change-Id: Ic70c6bfcd2ffd0721fdcaf6e61c68736971e037b
Signed-off-by: Poornima Tom <poornima.tom@intel.com>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3088161
Tested-by: Vijay Hiremath <vijay.p.hiremath@intel.com>
Reviewed-by: Abe Levkoy <alevkoy@chromium.org>
Commit-Queue: Vijay Hiremath <vijay.p.hiremath@intel.com>
Diffstat (limited to 'common')
-rw-r--r-- | common/usbc/usb_tc_drp_acc_trysrc_sm.c | 13 |
1 files changed, 11 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 1049326e42..f3b914dcf5 100644 --- a/common/usbc/usb_tc_drp_acc_trysrc_sm.c +++ b/common/usbc/usb_tc_drp_acc_trysrc_sm.c @@ -2305,7 +2305,12 @@ static void tc_unattached_snk_run(const int port) set_state_tc(port, TC_UNATTACHED_SRC); } else if (IS_ENABLED(CONFIG_USB_PD_TCPC_LOW_POWER) && (drp_state[port] == PD_DRP_FORCE_SINK || - drp_state[port] == PD_DRP_TOGGLE_OFF)) { + drp_state[port] == PD_DRP_TOGGLE_OFF || + cc_is_open(cc1, cc2))) { + /* + * Enter low power mode for TCPCs that do not + * support DRP Autotoggle. + */ set_state_tc(port, TC_LOW_POWER_MODE); } } @@ -2839,9 +2844,13 @@ static void tc_unattached_src_run(const int port) drp_state[port] == PD_DRP_TOGGLE_ON && tcpm_auto_toggle_supported(port) && cc_is_open(cc1, cc2)) set_state_tc(port, TC_DRP_AUTO_TOGGLE); + /* + * Enter low power mode for TCPCs that do not support DRP Autotoggle. + */ else if (IS_ENABLED(CONFIG_USB_PD_TCPC_LOW_POWER) && (drp_state[port] == PD_DRP_FORCE_SOURCE || - drp_state[port] == PD_DRP_TOGGLE_OFF)) + drp_state[port] == PD_DRP_TOGGLE_OFF || + cc_is_open(cc1, cc2))) set_state_tc(port, TC_LOW_POWER_MODE); } |