summaryrefslogtreecommitdiff
path: root/board/baklava
diff options
context:
space:
mode:
authorScott Collyer <scollyer@google.com>2021-03-25 12:32:56 -0700
committerCommit Bot <commit-bot@chromium.org>2021-05-02 02:47:54 +0000
commit00f1fed18d7a75792f6a4a849bb39d33590a5f9c (patch)
tree4c99a3db2a1f3c4ea8155187ac5ec85b72788f02 /board/baklava
parent89e4a2e95103abbfb31d6d77bba0d9eeb047290b (diff)
downloadchrome-ec-00f1fed18d7a75792f6a4a849bb39d33590a5f9c.tar.gz
honeybuns: Add usbc attached gpio support for usb/mst hubs
This CL adds support for new GPIO signals used by the EC to notify usb/mst hubs about type-c attach and over current protection events. The usb3 only port on quiche/baklava uses a PPC, and previously the PPC was only being used to enable/disable VBUS and did not have interrupt support. However, there can still protection events that must be handled. This CL also adds a simple usbc state machine to be able to determine attached.src state while in RO. The USB hub needs to be notified when VBUS is present (BPWRDET) otherwise it will just go into suspend state and there can be USB enumeration issues. BUG=b:185066262 BRANCH=quiche TEST=manual For OCP, I set the PPC source current limit to 1.5A and connected to a chromebook. This triggers the OCP event. For BPWRDET/UFP_PLUG_DET verified that when attached, these signals are high, when detached, are low as expected. Signed-off-by: Scott Collyer <scollyer@google.com> Change-Id: Ia147b970ea3dc298545aec4dedaa035ad2a1db30 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2818522 Tested-by: Scott Collyer <scollyer@chromium.org> Reviewed-by: Sam Hurst <shurst@google.com> Commit-Queue: Scott Collyer <scollyer@chromium.org>
Diffstat (limited to 'board/baklava')
-rw-r--r--board/baklava/board.c6
-rw-r--r--board/baklava/board.h7
-rw-r--r--board/baklava/gpio.inc10
3 files changed, 17 insertions, 6 deletions
diff --git a/board/baklava/board.c b/board/baklava/board.c
index 11f80dbf81..cb2098d94b 100644
--- a/board/baklava/board.c
+++ b/board/baklava/board.c
@@ -69,6 +69,11 @@ static void board_pwr_btn_interrupt(enum gpio_signal signal)
{
baseboard_power_button_evt(gpio_get_level(signal));
}
+
+static void board_usbc_usb3_interrupt(enum gpio_signal signal)
+{
+ baseboard_usbc_usb3_irq();
+}
#endif /* SECTION_IS_RW */
#include "gpio_list.h" /* Must come after other header files. */
@@ -80,6 +85,7 @@ static void board_pwr_btn_interrupt(enum gpio_signal signal)
*/
const struct power_seq board_power_seq[] = {
{GPIO_EN_AC_JACK, 1, 20},
+ {GPIO_EC_DFU_MUX_CTRL, 0, 0},
{GPIO_EN_PP5000_A, 1, 31},
{GPIO_MST_LP_CTL_L, 1, 0},
{GPIO_EN_PP3300_B, 1, 1},
diff --git a/board/baklava/board.h b/board/baklava/board.h
index 1736b688d9..6d0e74f302 100644
--- a/board/baklava/board.h
+++ b/board/baklava/board.h
@@ -47,9 +47,12 @@
#define GPIO_DP_HPD GPIO_DDI_MST_IN_HPD
#define GPIO_USBC_UF_ATTACHED_SRC GPIO_USBC_UF_MUX_VBUS_EN
+#define GPIO_BPWR_DET GPIO_HUB_BPWRDET
+#define GPIO_USB_HUB_OCP_NOTIFY GPIO_USBC_DATA_OCP_NOTIFY
+#define GPIO_UFP_PLUG_DET GPIO_MST_UFP_PLUG_DET
-#define GPIO_TRIGGER_1 GPIO_TP41
-#define GPIO_TRIGGER_2 GPIO_TP73
+#define GPIO_TRIGGER_1 GPIO_USB3_A5_CDP_EN
+#define GPIO_TRIGGER_2 GPIO_USB3_A6_CDP_EN
enum debug_gpio {
TRIGGER_1 = 0,
diff --git a/board/baklava/gpio.inc b/board/baklava/gpio.inc
index b8a7dc96b5..afd80117b7 100644
--- a/board/baklava/gpio.inc
+++ b/board/baklava/gpio.inc
@@ -13,6 +13,7 @@ GPIO_INT(HOST_USBC_PPC_INT_ODL, PIN(D, 9), GPIO_INT_FALLING | GPIO_PULL_U
GPIO_INT(DDI_MST_IN_HPD, PIN(C, 14), GPIO_INT_BOTH, hpd_interrupt)
GPIO_INT(USBC_UF_MUX_VBUS_EN, PIN(C, 12), GPIO_INT_BOTH, board_uf_manage_vbus_interrupt)
GPIO_INT(PWR_BTN, PIN(A, 0), GPIO_INT_BOTH, board_pwr_btn_interrupt)
+GPIO_INT(USBC_UF_PPC_INT_ODL, PIN(B, 5), GPIO_INT_FALLING | GPIO_PULL_UP, board_usbc_usb3_interrupt)
#endif
/* Power sequencing signals */
@@ -30,6 +31,7 @@ GPIO(EN_PP5000_HSPORT, PIN(D, 0), GPIO_OUT_LOW)
GPIO(MST_LP_CTL_L, PIN(D, 10), GPIO_ODR_LOW)
GPIO(MST_RST_L, PIN(E, 14), GPIO_ODR_LOW)
GPIO(MST_HUB_LANE_SWITCH, PIN(C, 15), GPIO_OUT_HIGH)
+GPIO(MST_UFP_PLUG_DET, PIN(B, 12), GPIO_OUT_LOW)
/* Display Demux signals */
GPIO(DEMUX_DP_HDMI_MODE, PIN(E, 15), GPIO_OUT_LOW)
@@ -43,15 +45,15 @@ GPIO(USBC_UF_RESET_L, PIN(D, 2), GPIO_ODR_LOW)
/* USB Hubs signals */
GPIO(EC_HUB2_RESET_L, PIN(C, 5), GPIO_ODR_LOW)
GPIO(EC_HUB3_RESET_L, PIN(B, 10), GPIO_ODR_LOW)
+GPIO(USBC_DATA_OCP_NOTIFY, PIN(C, 2), GPIO_OUT_HIGH)
+GPIO(HUB_BPWRDET, PIN(C, 1), GPIO_OUT_LOW)
/* USB-A Current limit switches, set default to 1.5A */
-GPIO(TP73, PIN(C, 0), GPIO_OUT_LOW)
+GPIO(GBE_RESET_EC, PIN(C, 0), GPIO_OUT_LOW)
GPIO(EC_DFU_MUX_CTRL, PIN(C, 3), GPIO_OUT_HIGH)
-GPIO(EC_STATUS_LED1, PIN(C, 1), GPIO_OUT_HIGH)
-GPIO(EC_STATUS_LED2, PIN(C, 2), GPIO_OUT_HIGH)
GPIO(USB3_A5_CDP_EN, PIN(B, 9), GPIO_OUT_LOW)
GPIO(USB3_A6_CDP_EN, PIN(C, 13), GPIO_OUT_LOW)
-GPIO(TP41, PIN(B, 12), GPIO_OUT_LOW)
+
/* Write protect */
GPIO(EC_FLASH_WP_ODL, PIN(A, 3), GPIO_ODR_HIGH)