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>
This commit is contained in:
Shawn Nematbakhsh
2015-09-30 18:20:48 -07:00
committed by chrome-bot
parent 4253105dbf
commit 61361bec9f
4 changed files with 25 additions and 2 deletions

View File

@@ -57,6 +57,7 @@
#undef CONFIG_USB_PD_INTERNAL_COMP
#define CONFIG_USB_PD_LOGGING
#define CONFIG_USB_PD_LOG_SIZE 256
#define CONFIG_USB_PD_LOW_POWER_IDLE_WHEN_CONNECTED
#define CONFIG_USB_PD_PORT_COUNT 1
#define CONFIG_USB_PD_TCPC
#define CONFIG_USB_PD_TCPM_STUB

View File

@@ -459,13 +459,17 @@ void pd_rx_handler(void)
PD_RX_TRANSITION_COUNT - 1) ?
0 : rx_edge_ts_idx[i] + 1;
#if defined(CONFIG_LOW_POWER_IDLE) && \
defined(CONFIG_USB_PD_LOW_POWER_IDLE_WHEN_CONNECTED)
/*
* Do not deep sleep while waiting for more edges. For
* most boards, sleep is already disabled due to being
* in PD connected state, but other boards can sleep
* while connected.
* in PD connected state, but boards which define
* CONFIG_USB_PD_LOW_POWER_IDLE_WHEN_CONNECTED can
* sleep while connected.
*/
disable_sleep(SLEEP_MASK_USB_PD);
#endif
/*
* If we have seen enough edges in a certain amount of

View File

@@ -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;
}

View File

@@ -1718,6 +1718,9 @@
/* Save power by waking up on VBUS rather than polling CC */
#undef CONFIG_USB_PD_LOW_POWER
/* Allow chip to go into low power idle even when a PD device is attached */
#undef CONFIG_USB_PD_LOW_POWER_IDLE_WHEN_CONNECTED
/* Define if USB-PD device has no way of detecting USB VBUS */
#undef CONFIG_USB_PD_NO_VBUS_DETECT