summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSue Chen <sue.chen@quanta.corp-partner.google.com>2021-07-02 10:10:19 +0800
committerCommit Bot <commit-bot@chromium.org>2021-07-30 17:22:58 +0000
commite6474e79cc7efdc0345b90a57eb4ce557b716f3f (patch)
tree7dce42818110f48d7aaf6aab38f1495e0255bb8f
parent25dffe8bd57e181217767932ae26f6bd8de333ef (diff)
downloadchrome-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.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 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;