summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPoornima Tom <poornima.tom@intel.com>2021-08-11 11:48:54 -0700
committerCommit Bot <commit-bot@chromium.org>2021-08-17 20:55:22 +0000
commit55f40b89d7f7b6cc3005e0d6fa755345d514a578 (patch)
tree4bd2e145c5715912dac1e0852464d6731cf0c85e
parent3db59f2c94f3d7b2cdef794877e178df9bb75c20 (diff)
downloadchrome-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>
-rw-r--r--common/usbc/usb_tc_drp_acc_trysrc_sm.c13
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);
}