diff options
author | Sue Chen <sue.chen@quanta.corp-partner.google.com> | 2021-07-02 10:10:19 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-07-30 17:22:58 +0000 |
commit | e6474e79cc7efdc0345b90a57eb4ce557b716f3f (patch) | |
tree | 7dce42818110f48d7aaf6aab38f1495e0255bb8f | |
parent | 25dffe8bd57e181217767932ae26f6bd8de333ef (diff) | |
download | chrome-ec-e6474e79cc7efdc0345b90a57eb4ce557b716f3f.tar.gz |
Ezkinil: Add PS8818 for TYPEC C1 secondary MUX
Use SSFC bits 6-7 to choose which secondary MUX is used.
BUG=b:192523667
BRANCH=zork
TEST=After setting SSFC to 0x80 on the DUT with PS8818,
the typec on DB works fine.
Signed-off-by: Sue Chen <sue.chen@quanta.corp-partner.google.com>
Change-Id: I8a66098d1e9b947acfb26b78f0cec7f835bf4c40
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3000894
Reviewed-by: Edward Hill <ecgh@chromium.org>
Commit-Queue: Edward Hill <ecgh@chromium.org>
(cherry picked from commit 05e69748e694ffe803ebc1422c25dda6dfc87d53)
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3062072
-rw-r--r-- | baseboard/zork/cbi_ssfc.c | 5 | ||||
-rw-r--r-- | baseboard/zork/cbi_ssfc.h | 16 | ||||
-rw-r--r-- | board/ezkinil/board.c | 23 | ||||
-rw-r--r-- | board/ezkinil/board.h | 1 |
4 files changed, 44 insertions, 1 deletions
diff --git a/baseboard/zork/cbi_ssfc.c b/baseboard/zork/cbi_ssfc.c index 3fad4cb9fe..1078ec6486 100644 --- a/baseboard/zork/cbi_ssfc.c +++ b/baseboard/zork/cbi_ssfc.c @@ -41,3 +41,8 @@ enum ec_ssfc_edp_phy_alt_tuning get_cbi_ssfc_edp_phy_alt_tuning(void) SSFC_EDP_PHY_ALT_TUNING_OFFSET; } +enum ec_ssfc_c1_mux get_cbi_ssfc_c1_mux(void) +{ + return (cached_ssfc & SSFC_C1_MUX_MASK) >> + SSFC_C1_MUX_OFFSET; +} diff --git a/baseboard/zork/cbi_ssfc.h b/baseboard/zork/cbi_ssfc.h index 9a8382bfd4..c51d612a06 100644 --- a/baseboard/zork/cbi_ssfc.h +++ b/baseboard/zork/cbi_ssfc.h @@ -43,6 +43,17 @@ enum ec_ssfc_edp_phy_alt_tuning { #define SSFC_EDP_PHY_ALT_TUNING_OFFSET 4 #define SSFC_EDP_PHY_ALT_TUNING_MASK GENMASK(5, 4) +/* + * TypeC port 1 secondary MUX (Bits 6-7) + */ +enum ec_ssfc_c1_mux { + SSFC_C1_MUX_NONE = 0, + SSFC_C1_MUX_TUSB544 = 1, + SSFC_C1_MUX_PS8818 = 2, +}; +#define SSFC_C1_MUX_OFFSET 6 +#define SSFC_C1_MUX_MASK GENMASK(7, 6) + /** * Get the Base sensor type from SSFC_CONFIG. * @@ -60,4 +71,9 @@ enum ec_ssfc_spkr_auto_mode get_cbi_ssfc_spkr_auto_mode(void); */ enum ec_ssfc_edp_phy_alt_tuning get_cbi_ssfc_edp_phy_alt_tuning(void); +/** + * Get the C1 usb mux from SSFC. + */ +enum ec_ssfc_c1_mux get_cbi_ssfc_c1_mux(void); + #endif /* _ZORK_CBI_SSFC__H_ */ diff --git a/board/ezkinil/board.c b/board/ezkinil/board.c index 13f3ce152a..2dd16ed6fc 100644 --- a/board/ezkinil/board.c +++ b/board/ezkinil/board.c @@ -6,6 +6,7 @@ #include "adc.h" #include "adc_chip.h" #include "button.h" +#include "cbi_ssfc.h" #include "charge_state_v2.h" #include "cros_board_info.h" #include "driver/accelgyro_bmi_common.h" @@ -340,9 +341,29 @@ void motion_interrupt(enum gpio_signal signal) * USB-C MUX/Retimer dynamic configuration */ +int board_usbc1_retimer_inhpd = IOEX_USB_C1_HPD_IN_DB; + static void setup_mux(void) { - if (ec_config_has_usbc1_retimer_tusb544()) { + enum ec_ssfc_c1_mux mux = get_cbi_ssfc_c1_mux(); + + if (mux == SSFC_C1_MUX_NONE && ec_config_has_usbc1_retimer_tusb544()) + mux = SSFC_C1_MUX_TUSB544; + + if (mux == SSFC_C1_MUX_PS8818) { + ccprints("C1 PS8818 detected"); + /* + * Main MUX is FP5, secondary MUX is PS8818 + * + * Replace usb_muxes[USBC_PORT_C1] with the AMD FP5 + * table entry. + */ + memcpy(&usb_muxes[USBC_PORT_C1], + &usbc1_amd_fp5_usb_mux, + sizeof(struct usb_mux)); + /* Set the PS8818 as the secondary MUX */ + usb_muxes[USBC_PORT_C1].next_mux = &usbc1_ps8818; + } else if (mux == SSFC_C1_MUX_TUSB544) { ccprints("C1 TUSB544 detected"); /* * Main MUX is FP5, secondary MUX is TUSB544 diff --git a/board/ezkinil/board.h b/board/ezkinil/board.h index 5134e00015..ef0541b143 100644 --- a/board/ezkinil/board.h +++ b/board/ezkinil/board.h @@ -206,6 +206,7 @@ static inline bool ec_config_has_hdmi_conn_hpd(void) extern const int keyboard_factory_scan_pins[][2]; extern const int keyboard_factory_scan_pins_used; extern const struct usb_mux usbc1_tusb544; +extern const struct usb_mux usbc1_ps8818; extern const struct usb_mux usbc1_ps8743; extern struct usb_mux usbc1_amd_fp5_usb_mux; |