From 362174b49b50fcd5d8a2542662e576b7e69321a1 Mon Sep 17 00:00:00 2001 From: Shawn Nematbakhsh Date: Fri, 26 Jun 2015 12:29:57 -0700 Subject: glados: Add support for USB-C muxes Add support for pericom mux (port 0) and parade mux (port 1). BUG=chrome-os-partner:41696 TEST=Verify set() and get() functions set and return consistent values. Verify that DP and USB are only activated when proper modes are set. BRANCH=None Change-Id: I9d42108688a9070b982ae77f77633654bc6505ed Signed-off-by: Shawn Nematbakhsh Reviewed-on: https://chromium-review.googlesource.com/282281 Reviewed-by: Alec Berg --- board/glados/board.c | 12 ++++++++++++ board/glados/board.h | 4 ++++ board/glados/usb_pd_policy.c | 10 +++++++--- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/board/glados/board.c b/board/glados/board.c index 123d478385..208357700d 100644 --- a/board/glados/board.c +++ b/board/glados/board.c @@ -26,6 +26,7 @@ #include "temp_sensor.h" #include "timer.h" #include "usb_charge.h" +#include "usb_mux.h" #include "usb_pd.h" #include "usb_pd_tcpm.h" #include "util.h" @@ -142,6 +143,17 @@ struct pi3usb9281_config pi3usb9281_chips[] = { BUILD_ASSERT(ARRAY_SIZE(pi3usb9281_chips) == CONFIG_USB_SWITCH_PI3USB9281_CHIP_COUNT); +struct usb_mux usb_muxes[CONFIG_USB_PD_PORT_COUNT] = { + { + .port_addr = 0xa8, + .driver = &pi3usb30532_usb_mux_driver, + }, + { + .port_addr = 0x20, + .driver = &ps8740_usb_mux_driver, + } +}; + void board_set_usb_switches(int port, enum usb_switch setting) { /* TODO: Set open / close USB switches based on param */ diff --git a/board/glados/board.h b/board/glados/board.h index 4762f3916c..f1aa9eea94 100644 --- a/board/glados/board.h +++ b/board/glados/board.h @@ -38,6 +38,8 @@ #define CONFIG_POWER_BUTTON_X86 #define CONFIG_POWER_COMMON #define CONFIG_USB_CHARGER +#define CONFIG_USB_MUX_PI3USB30532 +#define CONFIG_USB_MUX_PS8740 #define CONFIG_USB_POWER_DELIVERY #define CONFIG_USB_PD_ALT_MODE #define CONFIG_USB_PD_ALT_MODE_DFP @@ -47,6 +49,7 @@ #define CONFIG_USB_PD_TCPM_TCPCI #define CONFIG_USB_SWITCH_PI3USB9281 #define CONFIG_USB_SWITCH_PI3USB9281_CHIP_COUNT 2 +#define CONFIG_USBC_SS_MUX #define CONFIG_SCI_GPIO GPIO_PCH_SCI_L #define CONFIG_SPI_PORT 1 @@ -67,6 +70,7 @@ #define I2C_PORT_BATTERY MEC1322_I2C0_0 #define I2C_PORT_CHARGER MEC1322_I2C0_0 #define I2C_PORT_USB_CHARGER_1 MEC1322_I2C0_1 +#define I2C_PORT_USB_MUX MEC1322_I2C0_1 #define I2C_PORT_PD_MCU MEC1322_I2C1 #define I2C_PORT_TCPC MEC1322_I2C1 #define I2C_PORT_ALS MEC1322_I2C2 diff --git a/board/glados/usb_pd_policy.c b/board/glados/usb_pd_policy.c index 43caba815e..bb6df0202b 100644 --- a/board/glados/usb_pd_policy.c +++ b/board/glados/usb_pd_policy.c @@ -15,6 +15,7 @@ #include "task.h" #include "timer.h" #include "util.h" +#include "usb_mux.h" #include "usb_pd.h" #define CPRINTF(format, args...) cprintf(CC_USBPD, format, ## args) @@ -228,7 +229,7 @@ int pd_custom_vdm(int port, int cnt, uint32_t *payload, CPRINTF("Current: %dmA\n", payload[1]); break; case VDO_CMD_FLIP: - /* board_flip_usb_mux(port); */ + usb_mux_flip(port); break; #ifdef CONFIG_USB_PD_LOGGING case VDO_CMD_GET_LOG: @@ -247,7 +248,8 @@ static void svdm_safe_dp_mode(int port) { /* make DP interface safe until configure */ dp_flags[port] = 0; - /* board_set_usb_mux(port, TYPEC_MUX_NONE, pd_get_polarity(port)); */ + usb_mux_set(port, TYPEC_MUX_NONE, + USB_SWITCH_CONNECT, pd_get_polarity(port)); } static int svdm_enter_dp_mode(int port, uint32_t mode_caps) @@ -280,7 +282,9 @@ static int svdm_dp_status(int port, uint32_t *payload) static int svdm_dp_config(int port, uint32_t *payload) { int opos = pd_alt_mode(port, USB_SID_DISPLAYPORT); - /* board_set_usb_mux(port, TYPEC_MUX_DP, pd_get_polarity(port)); */ + + usb_mux_set(port, TYPEC_MUX_DP, + USB_SWITCH_CONNECT, pd_get_polarity(port)); payload[0] = VDO(USB_SID_DISPLAYPORT, 1, CMD_DP_CONFIG | VDO_OPOS(opos)); payload[1] = VDO_DP_CFG(MODE_DP_PIN_E, /* pin mode */ -- cgit v1.2.1