summaryrefslogtreecommitdiff
path: root/board/berknip
diff options
context:
space:
mode:
authorZick Wei <zick.wei@quanta.corp-partner.google.com>2020-09-01 13:28:07 +0800
committerCommit Bot <commit-bot@chromium.org>2020-09-05 02:45:51 +0000
commit652a52a7d20cfc4795f21101832635b21bf6ea11 (patch)
treedf36049279e03b24b057cd81f59359a4e5c1aba3 /board/berknip
parentec743f4b565061208d33dfd36d8fd753197f998c (diff)
downloadchrome-ec-652a52a7d20cfc4795f21101832635b21bf6ea11.tar.gz
berknip: add mst function support
This patch add mst function support for board version >=3 dali sku. BUG=b:159304034 BRANCH=zork TEST=verify on rework dali DUT mst hub can work Signed-off-by: Zick Wei <zick.wei@quanta.corp-partner.google.com> Change-Id: I09172b9355af8e50e636c84b564dd70bc86b1155 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2386693 Reviewed-by: Denis Brockus <dbrockus@chromium.org> Commit-Queue: Denis Brockus <dbrockus@chromium.org>
Diffstat (limited to 'board/berknip')
-rw-r--r--board/berknip/board.c38
-rw-r--r--board/berknip/board.h7
-rw-r--r--board/berknip/gpio.inc11
3 files changed, 49 insertions, 7 deletions
diff --git a/board/berknip/board.c b/board/berknip/board.c
index c3ac5de4fc..083d8c612c 100644
--- a/board/berknip/board.c
+++ b/board/berknip/board.c
@@ -318,11 +318,10 @@ const struct usb_mux usbc1_ps8743 = {
* Use FW_CONFIG to set correct configuration.
*/
enum gpio_signal GPIO_S0_PGOOD = GPIO_S0_PWROK_OD_V0;
+static uint32_t board_ver;
static void board_version_check(void)
{
- uint32_t board_ver = 0;
-
cbi_get_board_version(&board_ver);
if (board_ver <= 2)
@@ -339,12 +338,25 @@ static void board_version_check(void)
*/
DECLARE_HOOK(HOOK_INIT, board_version_check, HOOK_PRIO_INIT_I2C);
+static void board_remap_gpio(void)
+{
+ if (board_ver >= 3) {
+ /*
+ * TODO: remove code when older version_2
+ * hardware is retired and no longer needed
+ */
+ gpio_set_flags(GPIO_USB_C1_HPD_IN_DB_V1, GPIO_OUT_LOW);
+ }
+}
+
static void setup_fw_config(void)
{
/* Enable Gyro interrupts */
gpio_enable_interrupt(GPIO_6AXIS_INT_L);
setup_mux();
+
+ board_remap_gpio();
}
/* Use HOOK_PRIO_INIT_I2C + 2 to be after ioex_init(). */
DECLARE_HOOK(HOOK_INIT, setup_fw_config, HOOK_PRIO_INIT_I2C + 2);
@@ -629,3 +641,25 @@ struct power_signal_info power_signal_list[] = {
},
};
BUILD_ASSERT(ARRAY_SIZE(power_signal_list) == POWER_SIGNAL_COUNT);
+
+enum gpio_signal board_usbc_port_to_hpd_gpio(int port)
+{
+ /* USB-C0 always uses USB_C0_HPD (= DP3_HPD). */
+ if (port == 0)
+ return GPIO_USB_C0_HPD;
+
+ /*
+ * USB-C1 OPT3 DB
+ * version_2 uses GPIO_NO_HPD
+ * version_3 uses USB_C1_HPD_IN_DB_V1 via RTD2141B MST hub
+ * to drive AP HPD, EC drives MST hub HPD input
+ * from USB-PD messages..
+ */
+ else if (ec_config_has_mst_hub_rtd2141b())
+ return (board_ver >= 3)
+ ? GPIO_USB_C1_HPD_IN_DB_V1
+ : GPIO_NO_HPD;
+
+ /* USB-C1 OPT1 DB uses DP2_HPD. */
+ return GPIO_DP2_HPD;
+}
diff --git a/board/berknip/board.h b/board/berknip/board.h
index 569c9bd49c..0a760e0fd6 100644
--- a/board/berknip/board.h
+++ b/board/berknip/board.h
@@ -206,11 +206,8 @@ static inline bool ec_config_has_hdmi_conn_hpd(void)
HAS_HDMI_CONN_HPD);
}
-#define PORT_TO_HPD(port) ((port == 0) \
- ? GPIO_USB_C0_HPD \
- : (ec_config_has_mst_hub_rtd2141b()) \
- ? GPIO_NO_HPD \
- : GPIO_DP2_HPD)
+enum gpio_signal board_usbc_port_to_hpd_gpio(int port);
+#define PORT_TO_HPD(port) board_usbc_port_to_hpd_gpio(port)
extern const struct usb_mux usbc1_tusb544;
extern const struct usb_mux usbc1_ps8743;
diff --git a/board/berknip/gpio.inc b/board/berknip/gpio.inc
index 02882ecd16..f34091a82c 100644
--- a/board/berknip/gpio.inc
+++ b/board/berknip/gpio.inc
@@ -17,7 +17,18 @@ GPIO_INT(USB_C1_BC12_INT_ODL, PIN(A, 4), GPIO_INT_FALLING | GPIO_PULL_UP, bc12_
GPIO_INT(SLP_S3_L, PIN(7, 4), GPIO_INT_BOTH, power_signal_interrupt)
GPIO_INT(SLP_S5_L, PIN(E, 0), GPIO_INT_BOTH, power_signal_interrupt)
GPIO_INT(S0_PWROK_OD_V0, PIN(5, 6), GPIO_INT_BOTH, power_signal_interrupt)
+
+/*
+ * TODO(dbrockus@): remove code when older version_2 of hardware is
+ * retired and no longer needed
+ */
+#if 0
+GPIO(USB_C1_HPD_IN_DB_V1, PIN(B, 1), GPIO_OUT_LOW) /* C1 HPD V1 */
+#else
+#define GPIO_USB_C1_HPD_IN_DB_V1 GPIO_S0_PWROK_OD_V1
GPIO_INT(S0_PWROK_OD_V1, PIN(B, 1), GPIO_INT_BOTH, power_signal_interrupt)
+#endif
+
GPIO_INT(EC_PWROK_OD, PIN(3, 7), GPIO_INT_BOTH, power_signal_interrupt)
GPIO_INT(EC_PWR_BTN_ODL, PIN(0, 1), GPIO_INT_BOTH, power_button_interrupt)
GPIO_INT(LID_OPEN, PIN(D, 2), GPIO_INT_BOTH | GPIO_HIB_WAKE_HIGH, lid_interrupt)