summaryrefslogtreecommitdiff
path: root/driver
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 /driver
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>
Diffstat (limited to 'driver')
-rw-r--r--driver/build.mk1
-rw-r--r--driver/usb_mux/tusb1064.c13
-rw-r--r--driver/usb_mux/tusb1064.h2
3 files changed, 11 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)