summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Hurst <shurst@google.com>2020-02-26 08:53:28 -0800
committerCommit Bot <commit-bot@chromium.org>2020-03-04 19:38:16 +0000
commit57a8716bf7b9bf2fa9b65e5f3fa29a3d9914d25f (patch)
treeb0b45f0ccee730edd26e1cdd627e39c138aa62d9
parent016780f4a5642e151b8c9d3eec4e01a1c516ace8 (diff)
downloadchrome-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.c19
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:
/*