diff options
author | Ting Shen <phoenixshen@google.com> | 2022-04-28 14:50:41 +0800 |
---|---|---|
committer | Chromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2022-05-10 03:03:28 +0000 |
commit | 6b98d410728002a3b39c78b6843bced41a51d565 (patch) | |
tree | 9b4bdfd2bf3b88038cf012d89775a0b95e6b69f1 /driver | |
parent | 3f39e2393f41526ef5a0a4c8fb7df6e5dc861b19 (diff) | |
download | chrome-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.mk | 1 | ||||
-rw-r--r-- | driver/usb_mux/tusb1064.c | 13 | ||||
-rw-r--r-- | driver/usb_mux/tusb1064.h | 2 |
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) |