summaryrefslogtreecommitdiff
path: root/board/halvor
diff options
context:
space:
mode:
authorSamsp_Liu <Samsp_Liu@compal.corp-partner.google.com>2020-07-22 16:21:20 +0800
committerCommit Bot <commit-bot@chromium.org>2020-09-02 04:19:10 +0000
commit074b0e363491af9c82c9d54fa0c84b8df9ec2e1e (patch)
tree4bcd68b1f6a54959332fdd442bfc52780f7ef616 /board/halvor
parentcd17b934942a3ca602d6eadf38ed3ed95b55ef4c (diff)
downloadchrome-ec-074b0e363491af9c82c9d54fa0c84b8df9ec2e1e.tar.gz
Halvor: Need to Implement three USB-C function
The PD function can be enabled. BUG=b:153705222 BRANCH=none TEST=Enable Halvor PD Port 0,Port 1 and Port 2 Change-Id: Id171e7c9f900098b2b727e4f69479ee49ea995b3 Signed-off-by: Samsp_Liu <Samsp_Liu@compal.corp-partner.google.com> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2311998 Tested-by: SamSP Liu <samsp_liu@compal.corp-partner.google.com> Reviewed-by: Abe Levkoy <alevkoy@chromium.org> Commit-Queue: SamSP Liu <samsp_liu@compal.corp-partner.google.com>
Diffstat (limited to 'board/halvor')
-rw-r--r--board/halvor/board.c137
-rw-r--r--board/halvor/board.h17
-rw-r--r--board/halvor/ec.tasklist5
-rw-r--r--board/halvor/gpio.inc2
4 files changed, 125 insertions, 36 deletions
diff --git a/board/halvor/board.c b/board/halvor/board.c
index 4e1d8a3479..1281e0c6fb 100644
--- a/board/halvor/board.c
+++ b/board/halvor/board.c
@@ -4,19 +4,19 @@
*/
/* Volteer board-specific configuration */
+#include "accelgyro.h"
+#include "assert.h"
#include "bb_retimer.h"
#include "button.h"
#include "common.h"
-#include "accelgyro.h"
#include "cbi_ec_fw_config.h"
#include "driver/accel_bma2x2.h"
#include "driver/als_tcs3400.h"
#include "driver/bc12/pi3usb9201.h"
-#include "driver/ppc/sn5s330.h"
#include "driver/ppc/syv682x.h"
+#include "driver/sync.h"
#include "driver/tcpm/tcpci.h"
#include "driver/tcpm/tusb422.h"
-#include "driver/sync.h"
#include "extpower.h"
#include "gpio.h"
#include "hooks.h"
@@ -30,11 +30,11 @@
#include "task.h"
#include "tablet_mode.h"
#include "uart.h"
-#include "usb_mux.h"
-#include "usb_pd.h"
#include "usb_pd_tbt.h"
-#include "usb_pd_tcpm.h"
#include "usbc_ppc.h"
+#include "usb_pd.h"
+#include "usb_pd_tcpm.h"
+#include "usb_mux.h"
#include "util.h"
#include "gpio_list.h" /* Must come after other header files. */
@@ -183,17 +183,59 @@ BUILD_ASSERT(ARRAY_SIZE(pwm_channels) == PWM_CH_COUNT);
/******************************************************************************/
void halvor_tcpc_alert_event(enum gpio_signal signal)
{
- /* TODO (b/153705222): Need to implement three USB-C function */
+ int port = -1;
+
+ switch (signal) {
+ case GPIO_USB_C0_TCPC_INT_ODL:
+ port = USBC_PORT_C0;
+ break;
+ case GPIO_USB_C1_TCPC_INT_ODL:
+ port = USBC_PORT_C1;
+ break;
+ case GPIO_USB_C2_TCPC_INT_ODL:
+ port = USBC_PORT_C2;
+ break;
+ default:
+ return;
+ }
+
+ ASSERT(port != -1);
+ schedule_deferred_pd_interrupt(port);
}
void halvor_ppc_interrupt(enum gpio_signal signal)
{
- /* TODO (b/153705222): Need to implement three USB-C function */
+ switch (signal) {
+ case GPIO_USB_C0_PPC_INT_ODL:
+ syv682x_interrupt(USBC_PORT_C0);
+ break;
+ case GPIO_USB_C1_PPC_INT_ODL:
+ syv682x_interrupt(USBC_PORT_C1);
+ break;
+ case GPIO_USB_C2_PPC_INT_ODL:
+ syv682x_interrupt(USBC_PORT_C2);
+ break;
+ default:
+ break;
+ }
}
void halvor_bc12_interrupt(enum gpio_signal signal)
{
- /* TODO (b/153705222): Need to implement three USB-C function */
+ switch (signal) {
+ case GPIO_USB_C0_BC12_INT_ODL:
+ task_set_event(TASK_ID_USB_CHG_P0, USB_CHG_EVENT_BC12, 0);
+ break;
+ case GPIO_USB_C1_BC12_INT_ODL:
+ task_set_event(TASK_ID_USB_CHG_P1, USB_CHG_EVENT_BC12, 0);
+ break;
+ case GPIO_USB_C2_BC12_INT_ODL:
+ task_set_event(TASK_ID_USB_CHG_P2, USB_CHG_EVENT_BC12, 0);
+ break;
+
+ default:
+ break;
+ }
}
void board_reset_pd_mcu(void)
@@ -211,34 +253,24 @@ __override void board_cbi_init(void)
struct ppc_config_t ppc_chips[] = {
[USBC_PORT_C0] = {
.i2c_port = I2C_PORT_USB_C0,
- .i2c_addr_flags = SN5S330_ADDR0_FLAGS,
- .drv = &sn5s330_drv,
+ .i2c_addr_flags = SYV682X_ADDR0_FLAGS,
+ .drv = &syv682x_drv,
},
[USBC_PORT_C1] = {
.i2c_port = I2C_PORT_USB_C1,
.i2c_addr_flags = SYV682X_ADDR0_FLAGS,
.drv = &syv682x_drv,
},
+ [USBC_PORT_C2] = {
+ .i2c_port = I2C_PORT_USB_C2,
+ .i2c_addr_flags = SYV682X_ADDR0_FLAGS,
+ .drv = &syv682x_drv,
+ },
};
BUILD_ASSERT(ARRAY_SIZE(ppc_chips) == USBC_PORT_COUNT);
unsigned int ppc_cnt = ARRAY_SIZE(ppc_chips);
/******************************************************************************/
-/* PPC support routines */
-void ppc_interrupt(enum gpio_signal signal)
-{
- switch (signal) {
- case GPIO_USB_C0_PPC_INT_ODL:
- sn5s330_interrupt(USBC_PORT_C0);
- break;
- case GPIO_USB_C1_PPC_INT_ODL:
- syv682x_interrupt(USBC_PORT_C1);
- default:
- break;
- }
-}
-
-/******************************************************************************/
/* BC1.2 charger detect configuration */
const struct pi3usb9201_config_t pi3usb9201_bc12_chips[] = {
[USBC_PORT_C0] = {
@@ -249,6 +281,10 @@ const struct pi3usb9201_config_t pi3usb9201_bc12_chips[] = {
.i2c_port = I2C_PORT_USB_C1,
.i2c_addr_flags = PI3USB9201_I2C_ADDR_3_FLAGS,
},
+ [USBC_PORT_C2] = {
+ .i2c_port = I2C_PORT_USB_C2,
+ .i2c_addr_flags = PI3USB9201_I2C_ADDR_3_FLAGS,
+ },
};
BUILD_ASSERT(ARRAY_SIZE(pi3usb9201_bc12_chips) == USBC_PORT_COUNT);
@@ -273,23 +309,45 @@ struct tcpc_config_t tcpc_config[] = {
.drv = &tusb422_tcpm_drv,
.usb23 = USBC_PORT_1_USB2_NUM | (USBC_PORT_1_USB3_NUM << 4),
},
+ [USBC_PORT_C2] = {
+ .bus_type = EC_BUS_TYPE_I2C,
+ .i2c_info = {
+ .port = I2C_PORT_USB_C2,
+ .addr_flags = TUSB422_I2C_ADDR_FLAGS,
+ },
+ .drv = &tusb422_tcpm_drv,
+ .usb23 = USBC_PORT_2_USB2_NUM | (USBC_PORT_2_USB3_NUM << 4),
+ },
};
BUILD_ASSERT(ARRAY_SIZE(tcpc_config) == USBC_PORT_COUNT);
BUILD_ASSERT(CONFIG_USB_PD_PORT_MAX_COUNT == USBC_PORT_COUNT);
/******************************************************************************/
/* USBC mux configuration - Tiger Lake includes internal mux */
+struct usb_mux usbc0_usb4_db_retimer = {
+ .usb_port = USBC_PORT_C0,
+ .driver = &bb_usb_retimer,
+ .i2c_port = I2C_PORT_USB_1_MIX,
+ .i2c_addr_flags = USBC_PORT_C0_BB_RETIMER_I2C_ADDR,
+};
struct usb_mux usbc1_usb4_db_retimer = {
.usb_port = USBC_PORT_C1,
.driver = &bb_usb_retimer,
.i2c_port = I2C_PORT_USB_1_MIX,
.i2c_addr_flags = USBC_PORT_C1_BB_RETIMER_I2C_ADDR,
};
+struct usb_mux usbc2_usb4_db_retimer = {
+ .usb_port = USBC_PORT_C2,
+ .driver = &bb_usb_retimer,
+ .i2c_port = I2C_PORT_USB_1_MIX,
+ .i2c_addr_flags = USBC_PORT_C2_BB_RETIMER_I2C_ADDR,
+};
struct usb_mux usb_muxes[] = {
[USBC_PORT_C0] = {
.usb_port = USBC_PORT_C0,
.driver = &virtual_usb_mux_driver,
.hpd_update = &virtual_hpd_update,
+ .next_mux = &usbc0_usb4_db_retimer,
},
[USBC_PORT_C1] = {
.usb_port = USBC_PORT_C1,
@@ -297,21 +355,32 @@ struct usb_mux usb_muxes[] = {
.hpd_update = &virtual_hpd_update,
.next_mux = &usbc1_usb4_db_retimer,
},
+ [USBC_PORT_C2] = {
+ .usb_port = USBC_PORT_C2,
+ .driver = &virtual_usb_mux_driver,
+ .hpd_update = &virtual_hpd_update,
+ .next_mux = &usbc2_usb4_db_retimer,
+ },
};
BUILD_ASSERT(ARRAY_SIZE(usb_muxes) == USBC_PORT_COUNT);
struct bb_usb_control bb_controls[] = {
[USBC_PORT_C0] = {
- /* USB-C port 0 doesn't have a retimer */
+ .usb_ls_en_gpio = GPIO_USB_C0_LS_EN,
+ .retimer_rst_gpio = GPIO_USB_C0_RT_RST_ODL,
},
[USBC_PORT_C1] = {
.usb_ls_en_gpio = GPIO_USB_C1_LS_EN,
.retimer_rst_gpio = GPIO_USB_C1_RT_RST_ODL,
},
+ [USBC_PORT_C2] = {
+ .usb_ls_en_gpio = GPIO_USB_C2_LS_EN,
+ .retimer_rst_gpio = GPIO_USB_C2_RT_RST_ODL,
+ },
};
BUILD_ASSERT(ARRAY_SIZE(bb_controls) == USBC_PORT_COUNT);
-static void board_tcpc_init(void)
+static void board_usb_chip_init(void)
{
/* Don't reset TCPCs after initial reset */
if (!system_jumped_late())
@@ -320,16 +389,19 @@ static void board_tcpc_init(void)
/* Enable PPC interrupts. */
gpio_enable_interrupt(GPIO_USB_C0_PPC_INT_ODL);
gpio_enable_interrupt(GPIO_USB_C1_PPC_INT_ODL);
+ gpio_enable_interrupt(GPIO_USB_C2_PPC_INT_ODL);
/* Enable TCPC interrupts. */
gpio_enable_interrupt(GPIO_USB_C0_TCPC_INT_ODL);
gpio_enable_interrupt(GPIO_USB_C1_TCPC_INT_ODL);
+ gpio_enable_interrupt(GPIO_USB_C2_TCPC_INT_ODL);
/* Enable BC1.2 interrupts. */
gpio_enable_interrupt(GPIO_USB_C0_BC12_INT_ODL);
gpio_enable_interrupt(GPIO_USB_C1_BC12_INT_ODL);
+ gpio_enable_interrupt(GPIO_USB_C2_BC12_INT_ODL);
}
-DECLARE_HOOK(HOOK_INIT, board_tcpc_init, HOOK_PRIO_INIT_CHIPSET);
+DECLARE_HOOK(HOOK_INIT, board_usb_chip_init, HOOK_PRIO_INIT_CHIPSET);
/******************************************************************************/
/* TCPC support routines */
@@ -344,6 +416,8 @@ uint16_t tcpc_get_alert_status(void)
status |= PD_STATUS_TCPC_ALERT_0;
if (!gpio_get_level(GPIO_USB_C1_TCPC_INT_ODL))
status |= PD_STATUS_TCPC_ALERT_1;
+ if (!gpio_get_level(GPIO_USB_C2_TCPC_INT_ODL))
+ status |= PD_STATUS_TCPC_ALERT_2;
return status;
}
@@ -352,6 +426,9 @@ int ppc_get_alert_status(int port)
{
if (port == USBC_PORT_C0)
return gpio_get_level(GPIO_USB_C0_PPC_INT_ODL) == 0;
- else
+ else if (port == USBC_PORT_C1)
return gpio_get_level(GPIO_USB_C1_PPC_INT_ODL) == 0;
+ else
+ return gpio_get_level(GPIO_USB_C2_PPC_INT_ODL) == 0;
}
+
diff --git a/board/halvor/board.h b/board/halvor/board.h
index d684bd1b5f..367668fbcd 100644
--- a/board/halvor/board.h
+++ b/board/halvor/board.h
@@ -42,7 +42,7 @@
(BIT(LID_ACCEL) | BIT(CLEAR_ALS))
/* USB Type C and USB PD defines */
-#define CONFIG_USB_PD_PORT_MAX_COUNT 2
+#define CONFIG_USB_PD_PORT_MAX_COUNT 3
/*
* USB-C port's USB2 & USB3 mapping from schematics
@@ -50,10 +50,12 @@
* USB3 numbering on AP - 0 to n (PMC's USB3 numbering for MUX
* configuration is - 1 to n hence add +1)
*/
-#define USBC_PORT_0_USB2_NUM 9
+#define USBC_PORT_0_USB2_NUM 2
#define USBC_PORT_0_USB3_NUM 1
#define USBC_PORT_1_USB2_NUM 4
#define USBC_PORT_1_USB3_NUM 2
+#define USBC_PORT_2_USB2_NUM 6
+#define USBC_PORT_2_USB3_NUM 3
#define PD_POWER_SUPPLY_TURN_ON_DELAY 30000 /* us */
#define PD_POWER_SUPPLY_TURN_OFF_DELAY 250000 /* us */
@@ -73,13 +75,14 @@
/* Enabling USB4 mode */
#define CONFIG_USB_PD_USB4
-#define USBC_PORT_C1_BB_RETIMER_I2C_ADDR 0x40
+#define USBC_PORT_C0_BB_RETIMER_I2C_ADDR 0x40
+#define USBC_PORT_C1_BB_RETIMER_I2C_ADDR 0x41
+#define USBC_PORT_C2_BB_RETIMER_I2C_ADDR 0x42
/* USB Type A Features */
/* USBC PPC*/
-#define CONFIG_USBC_PPC_SN5S330 /* USBC port C0 */
-#define CONFIG_USBC_PPC_SYV682X /* USBC port C1 */
+#define CONFIG_USBC_PPC_SYV682X /* USBC port C0 C1 C2 */
/* BC 1.2 */
@@ -115,6 +118,9 @@
#define GPIO_RSMRST_L_PGOOD GPIO_PG_EC_RSMRST_ODL
#define GPIO_CPU_PROCHOT GPIO_EC_PROCHOT_ODL
#define GPIO_SYS_RESET_L GPIO_SYS_RST_ODL
+#define GPIO_USB_C0_BC12_INT_ODL GPIO_USB_C0_MIX_INT_ODL
+#define GPIO_USB_C1_BC12_INT_ODL GPIO_USB_C1_MIX_INT_ODL
+#define GPIO_USB_C2_BC12_INT_ODL GPIO_USB_C2_MIX_INT_ODL
#define GPIO_WP_L GPIO_EC_WP_L
#define GMR_TABLET_MODE_GPIO_L GPIO_TABLET_MODE_L
@@ -169,6 +175,7 @@ enum sensor_id {
enum usbc_port {
USBC_PORT_C0 = 0,
USBC_PORT_C1,
+ USBC_PORT_C2,
USBC_PORT_COUNT
};
diff --git a/board/halvor/ec.tasklist b/board/halvor/ec.tasklist
index 1cbda88563..66deb91f95 100644
--- a/board/halvor/ec.tasklist
+++ b/board/halvor/ec.tasklist
@@ -11,6 +11,7 @@
TASK_ALWAYS(HOOKS, hook_task, NULL, LARGER_TASK_STACK_SIZE) \
TASK_ALWAYS(USB_CHG_P0, usb_charger_task, 0, TASK_STACK_SIZE) \
TASK_ALWAYS(USB_CHG_P1, usb_charger_task, 0, TASK_STACK_SIZE) \
+ TASK_ALWAYS(USB_CHG_P2, usb_charger_task, 0, TASK_STACK_SIZE) \
TASK_ALWAYS(CHARGER, charger_task, NULL, VENTI_TASK_STACK_SIZE) \
TASK_ALWAYS(MOTIONSENSE, motion_sense_task, NULL, VENTI_TASK_STACK_SIZE) \
TASK_NOTEST(KEYPROTO, keyboard_protocol_task, NULL, TASK_STACK_SIZE) \
@@ -21,5 +22,7 @@
TASK_NOTEST(KEYSCAN, keyboard_scan_task, NULL, TASK_STACK_SIZE) \
TASK_ALWAYS(PD_C0, pd_task, NULL, VENTI_TASK_STACK_SIZE) \
TASK_ALWAYS(PD_C1, pd_task, NULL, VENTI_TASK_STACK_SIZE) \
+ TASK_ALWAYS(PD_C2, pd_task, NULL, VENTI_TASK_STACK_SIZE) \
TASK_ALWAYS(PD_INT_C0, pd_interrupt_handler_task, 0, TASK_STACK_SIZE) \
- TASK_ALWAYS(PD_INT_C1, pd_interrupt_handler_task, 1, TASK_STACK_SIZE)
+ TASK_ALWAYS(PD_INT_C1, pd_interrupt_handler_task, 1, TASK_STACK_SIZE) \
+ TASK_ALWAYS(PD_INT_C2, pd_interrupt_handler_task, 2, TASK_STACK_SIZE)
diff --git a/board/halvor/gpio.inc b/board/halvor/gpio.inc
index 1b188e499a..7631415318 100644
--- a/board/halvor/gpio.inc
+++ b/board/halvor/gpio.inc
@@ -94,7 +94,9 @@ GPIO(USB_C2_OC_ODL, PIN(3, 2), GPIO_ODR_HIGH)
/* Don't have a load switch for retimer */
+UNIMPLEMENTED(USB_C0_LS_EN)
UNIMPLEMENTED(USB_C1_LS_EN)
+UNIMPLEMENTED(USB_C2_LS_EN)
UNIMPLEMENTED(USB_C0_BC12_INT_ODL)
UNIMPLEMENTED(USB_C1_BC12_INT_ODL)