summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--baseboard/zork/cbi_ssfc.c5
-rw-r--r--baseboard/zork/cbi_ssfc.h16
-rw-r--r--board/ezkinil/board.c23
-rw-r--r--board/ezkinil/board.h1
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;