summaryrefslogtreecommitdiff
path: root/board
diff options
context:
space:
mode:
authorKevin K Wong <kevin.k.wong@intel.com>2016-06-20 11:47:02 -0700
committerchrome-bot <chrome-bot@chromium.org>2016-09-13 22:21:33 -0700
commitab967a1c776ca8d847e894cabf66507db2c716d5 (patch)
tree41edd2ac198e0dfb1462c35edaa9f61d33042331 /board
parent9229c795b0c4c262092c754620bf1b2bf8a9f8d7 (diff)
downloadchrome-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.h2
-rw-r--r--board/amenia/usb_pd_policy.c15
-rw-r--r--board/reef/board.h2
-rw-r--r--board/reef/usb_pd_policy.c15
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);