diff options
author | Shawn Nematbakhsh <shawnn@chromium.org> | 2015-09-30 18:20:48 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2015-10-06 22:57:27 -0700 |
commit | 61361bec9f1e8883123932c2b01b99cd7e754a5f (patch) | |
tree | c2569193dd2b8c60b0a341b866e056596559d81e /common/usb_pd_tcpc.c | |
parent | 4253105dbf5420f6dec21a404cf9ee5fcf023b71 (diff) | |
download | chrome-ec-61361bec9f1e8883123932c2b01b99cd7e754a5f.tar.gz |
pd: Cleanup usb_pd low power idle sleep mask
Add a new define CONFIG_USB_PD_LOW_POWER_IDLE_WHEN_CONNECTED that
indicates the chip should try to go to low power idle even when a PD
connection is established -- this is the current behavior only for
Zinger.
Also, enable and disable the sleep mask bit from tcpc on rx enable /
disable.
BUG=chrome-os-partner:45010
TEST=Manual on glados / glados_pd. Insert Zinger, verify that glados_pd
stays out of low power idle. Remove Zinger, verify that glados_pd
resumes going into low power idle.
BRANCH=None
Signed-off-by: Shawn Nematbakhsh <shawnn@chromium.org>
Change-Id: Ie763ae75f4459f56cad47d77d9c25d76358aa484
Reviewed-on: https://chromium-review.googlesource.com/303490
Commit-Ready: Shawn N <shawnn@chromium.org>
Tested-by: Shawn N <shawnn@chromium.org>
Reviewed-by: Alec Berg <alecaberg@chromium.org>
Diffstat (limited to 'common/usb_pd_tcpc.c')
-rw-r--r-- | common/usb_pd_tcpc.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/common/usb_pd_tcpc.c b/common/usb_pd_tcpc.c index 494eea4913..cad272f9a3 100644 --- a/common/usb_pd_tcpc.c +++ b/common/usb_pd_tcpc.c @@ -13,6 +13,7 @@ #include "hooks.h" #include "host_command.h" #include "registers.h" +#include "system.h" #include "task.h" #include "tcpci.h" #include "timer.h" @@ -972,11 +973,25 @@ int tcpc_set_vconn(int port, int enable) int tcpc_set_rx_enable(int port, int enable) { +#if defined(CONFIG_LOW_POWER_IDLE) && !defined(CONFIG_USB_POWER_DELIVERY) + int i; +#endif pd[port].rx_enabled = enable; if (!enable) pd_rx_disable_monitoring(port); +#if defined(CONFIG_LOW_POWER_IDLE) && !defined(CONFIG_USB_POWER_DELIVERY) + /* If any PD port is connected, then disable deep sleep */ + for (i = 0; i < CONFIG_USB_PD_PORT_COUNT; ++i) + if (pd[port].rx_enabled) + break; + + if (i == CONFIG_USB_PD_PORT_COUNT) + enable_sleep(SLEEP_MASK_USB_PD); + else + disable_sleep(SLEEP_MASK_USB_PD); +#endif return EC_SUCCESS; } |