diff options
-rw-r--r-- | driver/build.mk | 1 | ||||
-rw-r--r-- | driver/usb_mux/tusb1064.c | 13 | ||||
-rw-r--r-- | driver/usb_mux/tusb1064.h | 2 | ||||
-rw-r--r-- | include/config.h | 6 | ||||
-rw-r--r-- | zephyr/CMakeLists.txt | 2 | ||||
-rw-r--r-- | zephyr/Kconfig.usb_mux | 6 | ||||
-rw-r--r-- | zephyr/shim/include/config_chip.h | 5 | ||||
-rw-r--r-- | zephyr/shim/include/usbc/tusb1064_usb_mux.h | 9 |
8 files changed, 39 insertions, 5 deletions
diff --git a/driver/build.mk b/driver/build.mk index 3f15d5fc65..83317b74e1 100644 --- a/driver/build.mk +++ b/driver/build.mk @@ -203,6 +203,7 @@ driver-$(CONFIG_USB_MUX_PS8743)+=usb_mux/ps8743.o driver-$(CONFIG_USB_MUX_PS8822)+=usb_mux/ps8822.o driver-$(CONFIG_USB_MUX_TUSB1044)+=usb_mux/tusb1064.o driver-$(CONFIG_USB_MUX_TUSB1064)+=usb_mux/tusb1064.o +driver-$(CONFIG_USB_MUX_TUSB546)+=usb_mux/tusb1064.o driver-$(CONFIG_USB_MUX_VIRTUAL)+=usb_mux/virtual.o # USB Hub with I2C interface diff --git a/driver/usb_mux/tusb1064.c b/driver/usb_mux/tusb1064.c index d0e8678039..0d48725d40 100644 --- a/driver/usb_mux/tusb1064.c +++ b/driver/usb_mux/tusb1064.c @@ -10,8 +10,9 @@ #define CPRINTS(format, args...) cprints(CC_USBCHARGE, format, ## args) #define CPRINTF(format, args...) cprintf(CC_USBCHARGE, format, ## args) -#if defined(CONFIG_USB_MUX_TUSB1044) && defined(CONFIG_USB_MUX_TUSB1064) -#error "Must choose CONFIG_USB_MUX_TUSB1044 or CONFIG_USB_MUX_TUSB1064" +#if defined(CONFIG_USB_MUX_TUSB1044) + defined(CONFIG_USB_MUX_TUSB1064) + \ + defined(CONFIG_USB_MUX_TUSB546) != 1 +#error "Must choose exactly one of CONFIG_USB_MUX_TUSB{546,1044,1064}" #endif static int tusb1064_read(const struct usb_mux *me, uint8_t reg, uint8_t *val) @@ -102,7 +103,7 @@ static int tusb1064_set_mux(const struct usb_mux *me, mux_state_t mux_state, /* Mask bits that may be set in this function */ mask = REG_GENERAL_CTLSEL_USB3 | REG_GENERAL_CTLSEL_ANYDP | REG_GENERAL_FLIPSEL; -#ifdef CONFIG_USB_MUX_TUSB1044 +#if defined(CONFIG_USB_MUX_TUSB1044) || defined(CONFIG_USB_MUX_TUSB546) mask |= REG_GENERAL_HPDIN_OVERRIDE; #endif reg &= ~mask; @@ -112,8 +113,12 @@ static int tusb1064_set_mux(const struct usb_mux *me, mux_state_t mux_state, if (mux_state & USB_PD_MUX_USB_ENABLED) reg |= REG_GENERAL_CTLSEL_USB3; - if (mux_state & USB_PD_MUX_DP_ENABLED) + if (mux_state & USB_PD_MUX_DP_ENABLED) { reg |= REG_GENERAL_CTLSEL_ANYDP; +#ifdef CONFIG_USB_MUX_TUSB546 + reg |= REG_GENERAL_HPDIN_OVERRIDE; +#endif + } if (mux_state & USB_PD_MUX_POLARITY_INVERTED) reg |= REG_GENERAL_FLIPSEL; #if defined(CONFIG_USB_MUX_TUSB1044) diff --git a/driver/usb_mux/tusb1064.h b/driver/usb_mux/tusb1064.h index 5ab8b60e16..d6eb649532 100644 --- a/driver/usb_mux/tusb1064.h +++ b/driver/usb_mux/tusb1064.h @@ -39,7 +39,7 @@ #define REG_GENERAL_CTLSEL_USB3 BIT(0) #define REG_GENERAL_CTLSEL_ANYDP BIT(1) #define REG_GENERAL_FLIPSEL BIT(2) -#if defined(CONFIG_USB_MUX_TUSB1044) +#if defined(CONFIG_USB_MUX_TUSB1044) || defined(CONFIG_USB_MUX_TUSB546) #define REG_GENERAL_HPDIN_OVERRIDE BIT(3) #else #define REG_GENERAL_DP_EN_CTRL BIT(3) diff --git a/include/config.h b/include/config.h index 6252a63e7a..7582656392 100644 --- a/include/config.h +++ b/include/config.h @@ -5335,6 +5335,12 @@ /* Support the Texas Instrument TUSB1064 Type-C Redriving Switch (UFP) */ #undef CONFIG_USB_MUX_TUSB1064 +/* + * Support TI TUSB546 USB Type-C DP ALT Mode Linear Redriver Crosspoint + * Switch + */ +#undef CONFIG_USB_MUX_TUSB546 + /* Support the Parade PS8822 Type-C Redriving Demux Switch */ #undef CONFIG_USB_MUX_PS8822 diff --git a/zephyr/CMakeLists.txt b/zephyr/CMakeLists.txt index a8c6758aab..ae3e8413b7 100644 --- a/zephyr/CMakeLists.txt +++ b/zephyr/CMakeLists.txt @@ -416,6 +416,8 @@ zephyr_library_sources_ifdef(CONFIG_PLATFORM_EC_USB_MUX_PS8743 "${PLATFORM_EC}/driver/usb_mux/ps8743.c") zephyr_library_sources_ifdef(CONFIG_PLATFORM_EC_USB_MUX_TUSB1044 "${PLATFORM_EC}/driver/usb_mux/tusb1064.c") +zephyr_library_sources_ifdef(CONFIG_PLATFORM_EC_USB_MUX_TUSB546 + "${PLATFORM_EC}/driver/usb_mux/tusb1064.c") zephyr_library_sources_ifdef(CONFIG_PLATFORM_EC_USB_MUX_VIRTUAL "${PLATFORM_EC}/driver/usb_mux/virtual.c") diff --git a/zephyr/Kconfig.usb_mux b/zephyr/Kconfig.usb_mux index 50d9cb74e2..db8bcc06d1 100644 --- a/zephyr/Kconfig.usb_mux +++ b/zephyr/Kconfig.usb_mux @@ -56,6 +56,12 @@ config PLATFORM_EC_USB_MUX_TUSB1044 Gen 2 and DisplayPort 1.4 as Alternate Mode. It Provides GPIO and I2C Control for Channel Direction and Equalization. +config PLATFORM_EC_USB_MUX_TUSB546 + bool "TI TUSB546 USB-C DP ALT Mode Linear Redriver Crosspoint Switch" + help + This is a USB Type-C Alt Mode redriving switch supporting USB 3.1 data + rates up to 5 Gbps and DisplayPort 1.4 up to 8.1 Gbps for downstream + facing port. endif # PLATFORM_EC_USB_MUX endif # PLATFORM_EC_USBC diff --git a/zephyr/shim/include/config_chip.h b/zephyr/shim/include/config_chip.h index 7f176fc2eb..3e124c9bbd 100644 --- a/zephyr/shim/include/config_chip.h +++ b/zephyr/shim/include/config_chip.h @@ -1648,6 +1648,11 @@ extern struct jump_data mock_jump_data; #define CONFIG_USB_MUX_TUSB1044 #endif +#undef CONFIG_USB_MUX_TUSB546 +#ifdef CONFIG_PLATFORM_EC_USB_MUX_TUSB546 +#define CONFIG_USB_MUX_TUSB546 +#endif + #undef CONFIG_USB_MUX_VIRTUAL #ifdef CONFIG_PLATFORM_EC_USB_MUX_VIRTUAL #define CONFIG_USB_MUX_VIRTUAL diff --git a/zephyr/shim/include/usbc/tusb1064_usb_mux.h b/zephyr/shim/include/usbc/tusb1064_usb_mux.h index dcab760b7b..159f42c500 100644 --- a/zephyr/shim/include/usbc/tusb1064_usb_mux.h +++ b/zephyr/shim/include/usbc/tusb1064_usb_mux.h @@ -20,6 +20,15 @@ DT_STRING_UPPER_TOKEN(mux_id, i2c_addr_flags), \ .hpd_update = &tusb1044_hpd_update, \ } +#elif defined(CONFIG_USB_MUX_TUSB546) +#define USB_MUX_CONFIG_TUSB1064(mux_id, port_id, idx) \ + { \ + USB_MUX_COMMON_FIELDS(mux_id, port_id, idx), \ + .driver = &tusb1064_usb_mux_driver, \ + .i2c_port = I2C_PORT(DT_PHANDLE(mux_id, port)), \ + .i2c_addr_flags = \ + DT_STRING_UPPER_TOKEN(mux_id, i2c_addr_flags), \ + } #else #define USB_MUX_CONFIG_TUSB1064(mux_id, port_id, idx) \ { \ |