diff options
Diffstat (limited to 'board/asurada/board.c')
-rw-r--r-- | board/asurada/board.c | 82 |
1 files changed, 79 insertions, 3 deletions
diff --git a/board/asurada/board.c b/board/asurada/board.c index 1365ecb351..b6f5b63f8b 100644 --- a/board/asurada/board.c +++ b/board/asurada/board.c @@ -11,8 +11,8 @@ #include "chipset.h" #include "common.h" #include "console.h" -#include "chip/it83xx/intc.h" #include "driver/charger/isl923x.h" +#include "driver/tcpm/it83xx_pd.h" #include "extpower.h" #include "gpio.h" #include "hooks.h" @@ -27,6 +27,11 @@ #include "tablet_mode.h" #include "timer.h" #include "uart.h" +#include "usb_mux.h" +#include "usb_pd_tcpm.h" + +#define CPRINTS(format, args...) cprints(CC_USBCHARGE, format, ## args) +#define CPRINTF(format, args...) cprintf(CC_USBCHARGE, format, ## args) #define CPRINTS(format, args...) cprints(CC_USBCHARGE, format, ## args) #define CPRINTF(format, args...) cprintf(CC_USBCHARGE, format, ## args) @@ -139,11 +144,66 @@ static void x_ec_interrupt(enum gpio_signal signal) /* TODO: implement this */ } +/* TCPC */ +const struct tcpc_config_t tcpc_config[CONFIG_USB_PD_PORT_MAX_COUNT] = { + { + .bus_type = EC_BUS_TYPE_EMBEDDED, + /* TCPC is embedded within EC so no i2c config needed */ + .drv = &it83xx_tcpm_drv, + /* Alert is active-low, push-pull */ + .flags = 0, + }, + { + .bus_type = EC_BUS_TYPE_EMBEDDED, + /* TCPC is embedded within EC so no i2c config needed */ + .drv = &it83xx_tcpm_drv, + /* Alert is active-low, push-pull */ + .flags = 0, + }, +}; + +/* USB Mux */ +const struct usb_mux usb_muxes[CONFIG_USB_PD_PORT_MAX_COUNT] = { +}; + +uint16_t tcpc_get_alert_status(void) +{ + /* + * C0 & C1: TCPC is embedded in the EC and processes interrupts in the + * chip code (it83xx/intc.c) + */ + return 0; +} + +void board_reset_pd_mcu(void) +{ + /* + * C0 & C1: TCPC is embedded in the EC and processes interrupts in the + * chip code (it83xx/intc.c) + */ +} + int board_get_version(void) { return 0; } +int board_set_active_charge_port(int charge_port) +{ + CPRINTS("New chg p%d", charge_port); + + return 0; +} + +void board_set_charge_limit(int port, int supplier, int charge_ma, + int max_ma, int charge_mv) +{ +} + +void board_pd_vconn_ctrl(int port, enum usbpd_cc_pin cc_pin, int enabled) +{ +} + /* Sub-board */ static enum board_sub_board board_get_sub_board(void) @@ -154,10 +214,18 @@ static enum board_sub_board board_get_sub_board(void) return sub; /* HDMI board has external pull high. */ - if (gpio_get_level(GPIO_EC_X_GPIO3)) + if (gpio_get_level(GPIO_EC_X_GPIO3)) { sub = SUB_BOARD_HDMI; - else + } else { sub = SUB_BOARD_TYPEC; + /* EC_X_GPIO1 */ + gpio_set_flags(GPIO_USB_C1_FRS_EN, GPIO_OUT_LOW); + /* X_EC_GPIO2 */ + gpio_set_flags(GPIO_USB_C1_PPC_INT_ODL, + GPIO_INT_BOTH | GPIO_PULL_UP); + /* EC_X_GPIO3 */ + gpio_set_flags(GPIO_USB_C1_DP_IN_HPD, GPIO_OUT_LOW); + } CPRINTS("Detect %s SUB", sub == SUB_BOARD_HDMI ? "HDMI" : "TYPEC"); return sub; @@ -169,3 +237,11 @@ static void sub_board_init(void) } DECLARE_HOOK(HOOK_INIT, sub_board_init, HOOK_PRIO_INIT_I2C - 1); +__override uint8_t board_get_usb_pd_port_count(void) +{ + if (board_get_sub_board() == SUB_BOARD_TYPEC) + return CONFIG_USB_PD_PORT_MAX_COUNT; + else + return CONFIG_USB_PD_PORT_MAX_COUNT - 1; +} + |