diff options
author | Eric Yilun Lin <yllin@chromium.org> | 2020-04-27 14:23:25 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-05-11 16:24:51 +0000 |
commit | 467afef24f49b3f639da2d611a71a0f9007af6c2 (patch) | |
tree | 4fcd7b04421b257362a4d3c7b5d46ecab330376e | |
parent | 8f44962b5a5e65e05191a06061bc11871efc2212 (diff) | |
download | chrome-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.c | 39 | ||||
-rw-r--r-- | board/asurada/board.h | 16 | ||||
-rw-r--r-- | board/asurada/gpio.inc | 8 |
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)) |