diff options
author | Kevin K Wong <kevin.k.wong@intel.com> | 2016-06-20 11:47:02 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2016-09-13 22:21:33 -0700 |
commit | ab967a1c776ca8d847e894cabf66507db2c716d5 (patch) | |
tree | 41edd2ac198e0dfb1462c35edaa9f61d33042331 /board | |
parent | 9229c795b0c4c262092c754620bf1b2bf8a9f8d7 (diff) | |
download | chrome-ec-ab967a1c776ca8d847e894cabf66507db2c716d5.tar.gz |
tcpc: Enable vbus discharge using PD discharge registers
BUG=chrome-os-partner:56040
BRANCH=none
TEST=Manually tested on Reef.
Used scope to monitor VBUS & it dropped to 0.8V within 650ms.
Change-Id: Icaea1dc11a7342a5cc1493d6d3c2ec3408d6d37b
Signed-off-by: Kevin K Wong <kevin.k.wong@intel.com>
Signed-off-by: Vijay Hiremath <vijay.p.hiremath@intel.com>
Reviewed-on: https://chromium-review.googlesource.com/367482
Commit-Ready: Vijay P Hiremath <vijay.p.hiremath@intel.com>
Tested-by: Vijay P Hiremath <vijay.p.hiremath@intel.com>
Reviewed-by: Shawn N <shawnn@chromium.org>
Diffstat (limited to 'board')
-rw-r--r-- | board/amenia/board.h | 2 | ||||
-rw-r--r-- | board/amenia/usb_pd_policy.c | 15 | ||||
-rw-r--r-- | board/reef/board.h | 2 | ||||
-rw-r--r-- | board/reef/usb_pd_policy.c | 15 |
4 files changed, 30 insertions, 4 deletions
diff --git a/board/amenia/board.h b/board/amenia/board.h index 6b09c33e17..f18634debc 100644 --- a/board/amenia/board.h +++ b/board/amenia/board.h @@ -84,6 +84,8 @@ #define CONFIG_USB_PD_ALT_MODE #define CONFIG_USB_PD_ALT_MODE_DFP #define CONFIG_USB_PD_CUSTOM_VDM +#define CONFIG_USB_PD_DISCHARGE +#define CONFIG_USB_PD_DISCHARGE_TCPC #define CONFIG_USB_PD_DUAL_ROLE #define CONFIG_USB_PD_LOGGING #define CONFIG_USB_PD_LOG_SIZE 512 diff --git a/board/amenia/usb_pd_policy.c b/board/amenia/usb_pd_policy.c index 1348099836..2a93151dee 100644 --- a/board/amenia/usb_pd_policy.c +++ b/board/amenia/usb_pd_policy.c @@ -61,6 +61,8 @@ int pd_set_power_supply_ready(int port) gpio_set_level(port ? GPIO_USB_C1_5V_EN : GPIO_USB_C0_5V_EN, 1); + pd_set_vbus_discharge(port, 0); + /* notify host of power info change */ pd_send_host_event(PD_EVENT_POWER_CHANGE); @@ -69,9 +71,18 @@ int pd_set_power_supply_ready(int port) void pd_power_supply_reset(int port) { + enum gpio_signal gpio; + int prev_en; + + gpio = port ? GPIO_USB_C1_5V_EN : GPIO_USB_C0_5V_EN; + prev_en = gpio_get_level(gpio); + /* Disable VBUS */ - gpio_set_level(port ? GPIO_USB_C1_5V_EN : - GPIO_USB_C0_5V_EN, 0); + gpio_set_level(gpio, 0); + + /* Enable discharge if we were previously sourcing 5V */ + if (prev_en) + pd_set_vbus_discharge(port, 1); /* notify host of power info change */ pd_send_host_event(PD_EVENT_POWER_CHANGE); diff --git a/board/reef/board.h b/board/reef/board.h index 546c03aaa5..28d2cf4fee 100644 --- a/board/reef/board.h +++ b/board/reef/board.h @@ -67,6 +67,8 @@ #define CONFIG_USB_PD_ALT_MODE_DFP #define CONFIG_USB_PD_CUSTOM_VDM #define CONFIG_USB_PD_DUAL_ROLE +#define CONFIG_USB_PD_DISCHARGE +#define CONFIG_USB_PD_DISCHARGE_TCPC #define CONFIG_USB_PD_LOGGING #define CONFIG_USB_PD_LOG_SIZE 512 #define CONFIG_USB_PD_PORT_COUNT 2 diff --git a/board/reef/usb_pd_policy.c b/board/reef/usb_pd_policy.c index d078a5a2b6..030cd906d8 100644 --- a/board/reef/usb_pd_policy.c +++ b/board/reef/usb_pd_policy.c @@ -61,6 +61,8 @@ int pd_set_power_supply_ready(int port) gpio_set_level(port ? GPIO_USB_C1_5V_EN : GPIO_USB_C0_5V_EN, 1); + pd_set_vbus_discharge(port, 0); + /* notify host of power info change */ pd_send_host_event(PD_EVENT_POWER_CHANGE); @@ -69,9 +71,18 @@ int pd_set_power_supply_ready(int port) void pd_power_supply_reset(int port) { + enum gpio_signal gpio; + int prev_en; + + gpio = port ? GPIO_USB_C1_5V_EN : GPIO_USB_C0_5V_EN; + prev_en = gpio_get_level(gpio); + /* Disable VBUS */ - gpio_set_level(port ? GPIO_USB_C1_5V_EN : - GPIO_USB_C0_5V_EN, 0); + gpio_set_level(gpio, 0); + + /* Enable discharge if we were previously sourcing 5V */ + if (prev_en) + pd_set_vbus_discharge(port, 1); /* notify host of power info change */ pd_send_host_event(PD_EVENT_POWER_CHANGE); |