diff options
author | Eric Yilun Lin <yllin@chromium.org> | 2020-05-11 15:04:32 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-05-14 09:02:36 +0000 |
commit | 5a0d616bbe7969bc18ab02856051e09899b21011 (patch) | |
tree | c9b854a002176b6565a67bc69c17a3a424b76200 | |
parent | 498b779c94c3306bc7a89a143d5e7394bc360c54 (diff) | |
download | chrome-ec-5a0d616bbe7969bc18ab02856051e09899b21011.tar.gz |
asurada: enable C0/C1 USBPD
This CL enable it81202 on-chip TCPC at C0 and C1 port.
The functionality is not completed yet (TODO: PPC).
C0: on the main board.
C1: on the subboard.
BRANCH=master
BUG=b:152562604
TEST=ensure C0 and C1 can do PD-comm (SNK and SRC)
Signed-off-by: Eric Yilun Lin <yllin@chromium.org>
Change-Id: Ia8a2e557fd376a05f422bc1139abfd78be0c2b58
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2192466
Reviewed-by: Ting Shen <phoenixshen@chromium.org>
Reviewed-by: Ayo Wu <ayowu@google.com>
-rw-r--r-- | board/asurada/board.c | 82 | ||||
-rw-r--r-- | board/asurada/board.h | 32 | ||||
-rw-r--r-- | board/asurada/build.mk | 2 | ||||
-rw-r--r-- | board/asurada/ec.tasklist | 3 | ||||
-rw-r--r-- | board/asurada/usb_pd_policy.c | 24 |
5 files changed, 135 insertions, 8 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; +} + diff --git a/board/asurada/board.h b/board/asurada/board.h index 8eaa99ccb9..f97bbb2083 100644 --- a/board/asurada/board.h +++ b/board/asurada/board.h @@ -30,9 +30,6 @@ #define CONFIG_BATTERY_PRESENT_GPIO GPIO_EC_BATT_PRES_ODL #define CONFIG_BATTERY_SMART -/* BC12 */ -/* #define CONFIG_BC12_DETECT_PI3USB9201 */ - /* Charger */ #define CONFIG_CHARGER #define CONFIG_CHARGER_INPUT_CURRENT 512 @@ -41,7 +38,7 @@ #define CONFIG_CHARGER_SENSE_RESISTOR_AC 20 /* BOARD_RS1 */ #define CONFIG_CHARGER_SENSE_RESISTOR 10 /* BOARD_RS2 */ #define CONFIG_CHARGER_OTG -#define CONFIG_CHARGE_RAMP_HW +#define CONFIG_CHARGE_MANAGER /* Chipset */ @@ -59,6 +56,32 @@ #define I2C_PORT_BATTERY IT83XX_I2C_CH_A /* PD / USB-C */ +#define CONFIG_USBC_SS_MUX +#define CONFIG_USBC_VCONN +#define CONFIG_USBC_VCONN_SWAP +#define CONFIG_USB_PD_ALT_MODE +#define CONFIG_USB_PD_ALT_MODE_DFP +#define CONFIG_USB_PD_DEBUG_LEVEL 3 +#define CONFIG_USB_PD_DECODE_SOP +#define CONFIG_USB_PD_DUAL_ROLE +#define CONFIG_USB_PD_ITE_ACTIVE_PORT_COUNT 2 +#define CONFIG_USB_PD_LOGGING +#define CONFIG_USB_PD_PORT_MAX_COUNT 2 +#define CONFIG_USB_PD_TCPMV1 +#define CONFIG_USB_PD_TCPM_ITE_ON_CHIP +#define CONFIG_USB_PD_TCPM_TCPCI +#define CONFIG_USB_PD_TRY_SRC +#define CONFIG_USB_PD_VBUS_MEASURE_NOT_PRESENT /* TODO: */ +#define CONFIG_USB_PID 0x5566 /* TODO: update PID */ +#define CONFIG_USB_POWER_DELIVERY + +#define PD_MAX_CURRENT_MA 3000 +#define PD_MAX_VOLTAGE_MV 20000 +#define PD_OPERATING_POWER_MW 15000 +#define PD_MAX_POWER_MW 45000 +#define PD_POWER_SUPPLY_TURN_ON_DELAY 30000 /* us */ +#define PD_POWER_SUPPLY_TURN_OFF_DELAY 250000 /* us */ +#define PD_VCONN_SWAP_DELAY 5000 /* us */ /* Optional console commands */ #define CONFIG_CMD_FLASH @@ -124,6 +147,7 @@ enum board_sub_board { SUB_BOARD_COUNT, }; +void board_reset_pd_mcu(void); int board_get_version(void); #endif /* !__ASSEMBLER__ */ diff --git a/board/asurada/build.mk b/board/asurada/build.mk index 353a53559e..ab67acde17 100644 --- a/board/asurada/build.mk +++ b/board/asurada/build.mk @@ -10,4 +10,4 @@ CHIP:=it83xx CHIP_FAMILY:=it8xxx2 CHIP_VARIANT:=it81202ax_1024 -board-y=board.o battery.o +board-y=board.o battery.o usb_pd_policy.o diff --git a/board/asurada/ec.tasklist b/board/asurada/ec.tasklist index 774e0337a8..d46081d494 100644 --- a/board/asurada/ec.tasklist +++ b/board/asurada/ec.tasklist @@ -13,7 +13,10 @@ TASK_ALWAYS(HOOKS, hook_task, NULL, VENTI_TASK_STACK_SIZE) \ TASK_NOTEST(CHIPSET, chipset_task, NULL, VENTI_TASK_STACK_SIZE) \ TASK_ALWAYS(CHARGER, charger_task, NULL, VENTI_TASK_STACK_SIZE) \ + TASK_NOTEST(PDCMD, pd_command_task, NULL, 1024) \ TASK_ALWAYS(HOSTCMD, host_command_task, NULL, 1024) \ TASK_ALWAYS(CONSOLE, console_task, NULL, LARGER_TASK_STACK_SIZE) \ TASK_NOTEST(KEYSCAN, keyboard_scan_task, NULL, TASK_STACK_SIZE) \ + TASK_ALWAYS(PD_C0, pd_task, NULL, 1280) \ + TASK_ALWAYS(PD_C1, pd_task, NULL, 1280) \ diff --git a/board/asurada/usb_pd_policy.c b/board/asurada/usb_pd_policy.c new file mode 100644 index 0000000000..33c659708f --- /dev/null +++ b/board/asurada/usb_pd_policy.c @@ -0,0 +1,24 @@ +/* Copyright 2020 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ +#include "usb_pd.h" + +int pd_snk_is_vbus_provided(int port) +{ + return 0; +} + +void pd_power_supply_reset(int port) +{ +} + +int pd_check_vconn_swap(int port) +{ + return 0; +} + +int pd_set_power_supply_ready(int port) +{ + return 0; +} |