summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlec Berg <alecaberg@chromium.org>2014-10-08 09:33:35 -0700
committerchrome-internal-fetch <chrome-internal-fetch@google.com>2014-10-09 23:29:24 +0000
commit61dc089e23091a337a49f062d9058741a0ebf3bd (patch)
treebe1fb6727eb86f599149dc44594159f5649651be
parenta194bede19a91817ab4351911b74af9a5577baef (diff)
downloadchrome-ec-61dc089e23091a337a49f062d9058741a0ebf3bd.tar.gz
pd: samus: ryu: add Vconn support and enable for samus and ryu
Add support for enabling USB type-C Vconn by defining CONFIG_USBC_VCONN. Enable Vconn support for samus, ryu, and fruitpie. BUG=chrome-os-partner:30445 BRANCH=samus TEST=make buildall Change-Id: Ibe247286c96fd5a8fa12c88a4e3a5fea02997134 Signed-off-by: Alec Berg <alecaberg@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/222284 Reviewed-by: Todd Broch <tbroch@chromium.org> Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
-rw-r--r--board/fruitpie/board.h1
-rw-r--r--board/fruitpie/usb_pd_config.h7
-rw-r--r--board/ryu/board.h1
-rw-r--r--board/ryu/usb_pd_config.h7
-rw-r--r--board/samus_pd/board.h1
-rw-r--r--board/samus_pd/usb_pd_config.h11
-rw-r--r--common/usb_pd_protocol.c11
-rw-r--r--include/config.h3
8 files changed, 40 insertions, 2 deletions
diff --git a/board/fruitpie/board.h b/board/fruitpie/board.h
index d20606ebbb..25806e3142 100644
--- a/board/fruitpie/board.h
+++ b/board/fruitpie/board.h
@@ -27,6 +27,7 @@
#define CONFIG_USB_PD_DUAL_ROLE
#define CONFIG_USB_PD_INTERNAL_COMP
#define CONFIG_USBC_SS_MUX
+#define CONFIG_USBC_VCONN
#define CONFIG_ADC
#define CONFIG_HW_CRC
#define CONFIG_I2C
diff --git a/board/fruitpie/usb_pd_config.h b/board/fruitpie/usb_pd_config.h
index d53da1c7b6..4f7639c2f5 100644
--- a/board/fruitpie/usb_pd_config.h
+++ b/board/fruitpie/usb_pd_config.h
@@ -138,6 +138,13 @@ static inline int pd_adc_read(int port, int cc)
return adc_read_channel(ADC_CH_CC2_PD);
}
+static inline void pd_set_vconn(int port, int polarity, int enable)
+{
+ /* Set VCONN on the opposite CC line from the polarity */
+ gpio_set_level(polarity ? GPIO_VCONN1_EN :
+ GPIO_VCONN2_EN, enable);
+}
+
static inline int pd_snk_is_vbus_provided(int port)
{
return gpio_get_level(GPIO_VBUS_WAKE);
diff --git a/board/ryu/board.h b/board/ryu/board.h
index cfae1613bd..47104dc837 100644
--- a/board/ryu/board.h
+++ b/board/ryu/board.h
@@ -25,6 +25,7 @@
#define CONFIG_USB_PD_FLASH_ERASE_CHECK
#define CONFIG_USB_PD_INTERNAL_COMP
#define CONFIG_USBC_SS_MUX
+#define CONFIG_USBC_VCONN
#define CONFIG_ADC
#define CONFIG_HW_CRC
#define CONFIG_I2C
diff --git a/board/ryu/usb_pd_config.h b/board/ryu/usb_pd_config.h
index cc1aa40f3c..bd984ee8d7 100644
--- a/board/ryu/usb_pd_config.h
+++ b/board/ryu/usb_pd_config.h
@@ -147,6 +147,13 @@ static inline int pd_adc_read(int port, int cc)
return adc_read_channel(ADC_CC2_PD);
}
+static inline void pd_set_vconn(int port, int polarity, int enable)
+{
+ /* Set VCONN on the opposite CC line from the polarity */
+ gpio_set_level(polarity ? GPIO_USBC_VCONN1_EN :
+ GPIO_USBC_VCONN2_EN, enable);
+}
+
static inline int pd_snk_is_vbus_provided(int port)
{
return gpio_get_level(GPIO_CHGR_ACOK);
diff --git a/board/samus_pd/board.h b/board/samus_pd/board.h
index a666af34b4..be10941af7 100644
--- a/board/samus_pd/board.h
+++ b/board/samus_pd/board.h
@@ -34,6 +34,7 @@
#define CONFIG_USB_PD_FLASH_ERASE_CHECK
#define CONFIG_USB_PD_INTERNAL_COMP
#define CONFIG_USBC_SS_MUX
+#define CONFIG_USBC_VCONN
#define CONFIG_USB_SWITCH_TSU6721
#define CONFIG_VBOOT_HASH
#undef CONFIG_WATCHDOG_HELP
diff --git a/board/samus_pd/usb_pd_config.h b/board/samus_pd/usb_pd_config.h
index 0d0372d51a..73dff26486 100644
--- a/board/samus_pd/usb_pd_config.h
+++ b/board/samus_pd/usb_pd_config.h
@@ -227,6 +227,17 @@ static inline int pd_adc_read(int port, int cc)
return adc_read_channel(cc ? ADC_C1_CC2_PD : ADC_C1_CC1_PD);
}
+static inline void pd_set_vconn(int port, int polarity, int enable)
+{
+ /* Set VCONN on the opposite CC line from the polarity */
+ if (port == 0)
+ gpio_set_level(polarity ? GPIO_USB_C0_CC1_VCONN1_EN :
+ GPIO_USB_C0_CC2_VCONN1_EN, enable);
+ else
+ gpio_set_level(polarity ? GPIO_USB_C1_CC1_VCONN1_EN :
+ GPIO_USB_C1_CC2_VCONN1_EN, enable);
+}
+
static inline int pd_snk_is_vbus_provided(int port)
{
return gpio_get_level(port ? GPIO_USB_C1_VBUS_WAKE :
diff --git a/common/usb_pd_protocol.c b/common/usb_pd_protocol.c
index 1e7641ed56..daf538ea85 100644
--- a/common/usb_pd_protocol.c
+++ b/common/usb_pd_protocol.c
@@ -283,13 +283,16 @@ static inline void set_state(int port, enum pd_states next_state)
set_state_timeout(port, 0, 0);
pd[port].task_state = next_state;
-#ifdef CONFIG_USBC_SS_MUX
if (next_state == PD_STATE_SRC_DISCONNECTED) {
pd[port].dev_id = 0;
+#ifdef CONFIG_USBC_SS_MUX
board_set_usb_mux(port, TYPEC_MUX_NONE,
pd[port].polarity);
- }
#endif
+#ifdef CONFIG_USBC_VCONN
+ pd_set_vconn(port, pd[port].polarity, 0);
+#endif
+ }
#ifdef CONFIG_LOW_POWER_IDLE
/* If any PD port is connected, then disable deep sleep */
@@ -1246,6 +1249,10 @@ void pd_task(void)
break;
}
+#ifdef CONFIG_USBC_VCONN
+ pd_set_vconn(port, pd[port].polarity, 1);
+#endif
+
set_state(port, PD_STATE_SRC_DISCOVERY);
caps_count = 0;
#ifdef CONFIG_USB_PD_DUAL_ROLE
diff --git a/include/config.h b/include/config.h
index 3183e3b267..ef1f14ff2d 100644
--- a/include/config.h
+++ b/include/config.h
@@ -1041,6 +1041,9 @@
/* Support for USB type-c superspeed mux */
#undef CONFIG_USBC_SS_MUX
+/* Support for USB type-c vconn. Not needed for captive cables. */
+#undef CONFIG_USBC_VCONN
+
/*****************************************************************************/
/* USB interfaces config */