diff options
author | Alec Berg <alecaberg@chromium.org> | 2014-10-08 09:33:35 -0700 |
---|---|---|
committer | chrome-internal-fetch <chrome-internal-fetch@google.com> | 2014-10-09 23:29:24 +0000 |
commit | 61dc089e23091a337a49f062d9058741a0ebf3bd (patch) | |
tree | be1fb6727eb86f599149dc44594159f5649651be | |
parent | a194bede19a91817ab4351911b74af9a5577baef (diff) | |
download | chrome-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.h | 1 | ||||
-rw-r--r-- | board/fruitpie/usb_pd_config.h | 7 | ||||
-rw-r--r-- | board/ryu/board.h | 1 | ||||
-rw-r--r-- | board/ryu/usb_pd_config.h | 7 | ||||
-rw-r--r-- | board/samus_pd/board.h | 1 | ||||
-rw-r--r-- | board/samus_pd/usb_pd_config.h | 11 | ||||
-rw-r--r-- | common/usb_pd_protocol.c | 11 | ||||
-rw-r--r-- | include/config.h | 3 |
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 */ |