summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Yilun Lin <yllin@chromium.org>2020-04-27 14:23:25 +0800
committerCommit Bot <commit-bot@chromium.org>2020-05-11 16:24:51 +0000
commit467afef24f49b3f639da2d611a71a0f9007af6c2 (patch)
tree4fcd7b04421b257362a4d3c7b5d46ecab330376e
parent8f44962b5a5e65e05191a06061bc11871efc2212 (diff)
downloadchrome-ec-467afef24f49b3f639da2d611a71a0f9007af6c2.tar.gz
asurada: detect subboard type
There are two different subboard configurations on Asurada: 1. Type-C 2. HDMI and they can be distinguished by EC_X_GPIO3. BRANCH=master BUG=b:154565980 TEST=ensure Type-C subboard is detected. Change-Id: Ic7dfeaee8b0f6e84e1f2e598dc93deb773bee059 Signed-off-by: Eric Yilun Lin <yllin@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2167124 Reviewed-by: Ting Shen <phoenixshen@chromium.org>
-rw-r--r--board/asurada/board.c39
-rw-r--r--board/asurada/board.h16
-rw-r--r--board/asurada/gpio.inc8
3 files changed, 60 insertions, 3 deletions
diff --git a/board/asurada/board.c b/board/asurada/board.c
index 54016537c5..1365ecb351 100644
--- a/board/asurada/board.c
+++ b/board/asurada/board.c
@@ -28,6 +28,11 @@
#include "timer.h"
#include "uart.h"
+#define CPRINTS(format, args...) cprints(CC_USBCHARGE, format, ## args)
+#define CPRINTF(format, args...) cprintf(CC_USBCHARGE, format, ## args)
+
+static void x_ec_interrupt(enum gpio_signal signal);
+
#include "gpio_list.h"
const struct charger_config_t chg_chips[] = {
@@ -67,6 +72,9 @@ const struct power_signal_info power_signal_list[] = {
};
BUILD_ASSERT(ARRAY_SIZE(power_signal_list) == POWER_SIGNAL_COUNT);
+/* Detect subboard */
+static enum board_sub_board board_get_sub_board(void);
+
/* Initialize board. */
static void board_init(void)
{
@@ -126,7 +134,38 @@ const struct i2c_port_t i2c_ports[] = {
};
const unsigned int i2c_ports_used = ARRAY_SIZE(i2c_ports);
+static void x_ec_interrupt(enum gpio_signal signal)
+{
+ /* TODO: implement this */
+}
+
int board_get_version(void)
{
return 0;
}
+
+/* Sub-board */
+
+static enum board_sub_board board_get_sub_board(void)
+{
+ static enum board_sub_board sub = SUB_BOARD_NONE;
+
+ if (sub != SUB_BOARD_NONE)
+ return sub;
+
+ /* HDMI board has external pull high. */
+ if (gpio_get_level(GPIO_EC_X_GPIO3))
+ sub = SUB_BOARD_HDMI;
+ else
+ sub = SUB_BOARD_TYPEC;
+
+ CPRINTS("Detect %s SUB", sub == SUB_BOARD_HDMI ? "HDMI" : "TYPEC");
+ return sub;
+}
+
+static void sub_board_init(void)
+{
+ board_get_sub_board();
+}
+DECLARE_HOOK(HOOK_INIT, sub_board_init, HOOK_PRIO_INIT_I2C - 1);
+
diff --git a/board/asurada/board.h b/board/asurada/board.h
index c896ada0b4..2340706788 100644
--- a/board/asurada/board.h
+++ b/board/asurada/board.h
@@ -72,6 +72,14 @@
#undef CONFIG_UART_TX_BUF_SIZE
#define CONFIG_UART_TX_BUF_SIZE 4096
+/* GPIO name remapping */
+#define GPIO_EN_HDMI_PWR GPIO_EC_X_GPIO1
+#define GPIO_USB_C1_FRS_EN GPIO_EC_X_GPIO1
+#define GPIO_USB_C1_PPC_INT_ODL GPIO_X_EC_GPIO2
+#define GPIO_PS185_EC_DP_HPD GPIO_X_EC_GPIO2
+#define GPIO_USB_C1_DP_IN_HPD GPIO_EC_X_GPIO3
+#define GPIO_PS185_PWRDN_ODL GPIO_EC_X_GPIO3
+
#ifndef __ASSEMBLER__
#include "gpio_signal.h"
@@ -106,6 +114,14 @@ enum power_signal {
POWER_SIGNAL_COUNT,
};
+enum board_sub_board {
+ SUB_BOARD_NONE = -1,
+ SUB_BOARD_TYPEC,
+ SUB_BOARD_HDMI,
+
+ SUB_BOARD_COUNT,
+};
+
int board_get_version(void);
#endif /* !__ASSEMBLER__ */
diff --git a/board/asurada/gpio.inc b/board/asurada/gpio.inc
index 1d24bed6d8..5102a0a5b3 100644
--- a/board/asurada/gpio.inc
+++ b/board/asurada/gpio.inc
@@ -45,6 +45,7 @@ GPIO_INT(VOLUME_DOWN_L, PIN(D, 6), GPIO_INT_BOTH | GPIO_PULL_UP,
button_interrupt) /* EC_VOLDN_BTN_ODL */
GPIO_INT(VOLUME_UP_L, PIN(D, 5), GPIO_INT_BOTH | GPIO_PULL_UP,
button_interrupt) /* EC_VOLUP_BTN_ODL */
+GPIO_INT(X_EC_GPIO2, PIN(B, 2), GPIO_ODR_HIGH, x_ec_interrupt)
/* Power Sequencing Signals */
GPIO(EC_PMIC_EN_ODL, PIN(D, 0), GPIO_ODR_HIGH | GPIO_SEL_1P8V)
@@ -83,6 +84,10 @@ GPIO(I2C_E_SDA, PIN(E, 7), GPIO_INPUT) /* I2C_USB_C1_SDA */
/* Keyboard pins */
+/* Subboards HDMI/TYPEC */
+GPIO(EC_X_GPIO1, PIN(H, 4), GPIO_OUT_HIGH)
+GPIO(EC_X_GPIO3, PIN(J, 1), GPIO_INPUT)
+
/* Alternate functions GPIO definitions */
ALTERNATE(PIN_MASK(B, 0x18), 1, MODULE_I2C, 0) /* I2C A */
ALTERNATE(PIN_MASK(C, 0x06), 1, MODULE_I2C, 0) /* I2C B */
@@ -134,7 +139,6 @@ UNIMPLEMENTED_GPIO(TEMP_SENSOR_CHARGER, PIN(I, 5))
UNIMPLEMENTED_GPIO(CHARGER_PMON, PIN(I, 6))
UNIMPLEMENTED_GPIO(TEMP_SENSOR_AP, PIN(I, 7))
UNIMPLEMENTED_GPIO(EC_DPBRDG_HPD_ODL, PIN(J, 0))
-UNIMPLEMENTED_GPIO(EC_X_GPIO3, PIN(J, 1))
UNIMPLEMENTED_GPIO(BASE_IMU_INT_L, PIN(J, 2))
UNIMPLEMENTED_GPIO(LID_ACCEL_INT_L, PIN(J, 3))
UNIMPLEMENTED_GPIO(USB_C1_BC12_INT_L, PIN(J, 4))
@@ -145,7 +149,6 @@ UNIMPLEMENTED_GPIO(EC_USB_C0_CC2, PIN(F, 5))
UNIMPLEMENTED_GPIO(EC_USB_C1_CC1, PIN(H, 1))
UNIMPLEMENTED_GPIO(EC_USB_C1_CC2, PIN(H, 2))
UNIMPLEMENTED_GPIO(USB_C0_FRS_EN, PIN(H, 3))
-UNIMPLEMENTED_GPIO(EC_X_GPIO1, PIN(H, 4))
UNIMPLEMENTED_GPIO(EN_EC_ID_DOL, PIN(H, 5))
UNIMPLEMENTED_GPIO(PG_MT6315_GPU_ODL, PIN(H, 6))
UNIMPLEMENTED_GPIO(EC_GPG2, PIN(G, 2))
@@ -158,7 +161,6 @@ UNIMPLEMENTED_GPIO(EN_PP3000_SD_U, PIN(G, 1))
UNIMPLEMENTED_GPIO(UART1_TX, PIN(B, 1)) /* UART_EC_TX_DEBUG_RX */
UNIMPLEMENTED_GPIO(EN_PP5000_USB_A0_VBUS, PIN(B, 7))
UNIMPLEMENTED_GPIO(CCD_MODE_ODL, PIN(C, 4))
-UNIMPLEMENTED_GPIO(X_EC_GPIO2, PIN(B, 2))
UNIMPLEMENTED_GPIO(EC_BL_EN_OD, PIN(B, 5))
UNIMPLEMENTED_GPIO(CLK_EC_RTC_32K, PIN(J, 6))