diff options
-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 69bf41d215..074a7694b0 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" @@ -336,9 +337,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 b823ded45a..e3ec10d456 100644 --- a/board/ezkinil/board.h +++ b/board/ezkinil/board.h @@ -204,6 +204,7 @@ static inline bool ec_config_has_hdmi_conn_hpd(void) : GPIO_DP2_HPD) 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; |