summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Yilun Lin <yllin@chromium.org>2020-05-11 15:04:32 +0800
committerCommit Bot <commit-bot@chromium.org>2020-05-14 09:02:36 +0000
commit5a0d616bbe7969bc18ab02856051e09899b21011 (patch)
treec9b854a002176b6565a67bc69c17a3a424b76200
parent498b779c94c3306bc7a89a143d5e7394bc360c54 (diff)
downloadchrome-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.c82
-rw-r--r--board/asurada/board.h32
-rw-r--r--board/asurada/build.mk2
-rw-r--r--board/asurada/ec.tasklist3
-rw-r--r--board/asurada/usb_pd_policy.c24
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;
+}