summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTing Shen <phoenixshen@google.com>2022-04-28 14:50:41 +0800
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2022-05-10 03:03:28 +0000
commit6b98d410728002a3b39c78b6843bced41a51d565 (patch)
tree9b4bdfd2bf3b88038cf012d89775a0b95e6b69f1
parent3f39e2393f41526ef5a0a4c8fb7df6e5dc861b19 (diff)
downloadchrome-ec-6b98d410728002a3b39c78b6843bced41a51d565.tar.gz
usb_mux: add TUSB546 driver
Reuse the code from existing TUSB1064/TUSB1044 driver and add TUSB546 specific logic to it. Currently the only change is that we will enable IN_HPD when mux enters dock mode, instead of using hpd_update. BUG=b:228289594 TEST=make BRANCH=none Signed-off-by: Ting Shen <phoenixshen@google.com> Change-Id: I2182eef1a4c5d8cc830f837c544379e854ac331c Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3612720 Reviewed-by: Eric Yilun Lin <yllin@google.com> Tested-by: Ting Shen <phoenixshen@chromium.org> Commit-Queue: Ting Shen <phoenixshen@chromium.org>
-rw-r--r--driver/build.mk1
-rw-r--r--driver/usb_mux/tusb1064.c13
-rw-r--r--driver/usb_mux/tusb1064.h2
-rw-r--r--include/config.h6
-rw-r--r--zephyr/CMakeLists.txt2
-rw-r--r--zephyr/Kconfig.usb_mux6
-rw-r--r--zephyr/shim/include/config_chip.h5
-rw-r--r--zephyr/shim/include/usbc/tusb1064_usb_mux.h9
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) \
{ \