summaryrefslogtreecommitdiff
path: root/board/dibbi
diff options
context:
space:
mode:
Diffstat (limited to 'board/dibbi')
-rw-r--r--board/dibbi/board.c121
-rw-r--r--board/dibbi/board.h18
-rw-r--r--board/dibbi/build.mk1
-rw-r--r--board/dibbi/gpio.inc109
-rw-r--r--board/dibbi/usb_pd_policy.c26
5 files changed, 186 insertions, 89 deletions
diff --git a/board/dibbi/board.c b/board/dibbi/board.c
index eee386a043..d3358eb2ff 100644
--- a/board/dibbi/board.c
+++ b/board/dibbi/board.c
@@ -6,10 +6,12 @@
/* Dibbi board-specific configuration */
#include "adc_chip.h"
+#include "board.h"
#include "button.h"
#include "charge_manager.h"
#include "charge_state_v2.h"
#include "charger.h"
+#include "driver/ppc/syv682x_public.h"
#include "driver/tcpm/it83xx_pd.h"
#include "driver/temp_sensor/thermistor.h"
#include "driver/usb_mux/it5205.h"
@@ -31,6 +33,7 @@
#include "usb_mux.h"
#include "usb_pd.h"
#include "usb_pd_tcpm.h"
+#include "usbc_ppc.h"
#define CPRINTUSB(format, args...) cprints(CC_USBCHARGE, format, ##args)
@@ -72,6 +75,19 @@ const struct tcpc_config_t tcpc_config[CONFIG_USB_PD_PORT_MAX_COUNT] = {
},
};
+/* PPCs */
+struct ppc_config_t ppc_chips[] = {
+ [USBC_PORT_C0] = {
+ .i2c_port = I2C_PORT_USB_C0,
+ .i2c_addr_flags = SYV682X_ADDR0_FLAGS,
+ .frs_en = GPIO_EC_USB_C0_FRS_EN,
+ .drv = &syv682x_drv,
+ },
+};
+BUILD_ASSERT(ARRAY_SIZE(ppc_chips) == USBC_PORT_COUNT);
+
+unsigned int ppc_cnt = ARRAY_SIZE(ppc_chips);
+
/* USB Muxes */
const struct usb_mux_chain usb_muxes[CONFIG_USB_PD_PORT_MAX_COUNT] = {
{
@@ -90,6 +106,7 @@ const int usb_port_enable[USB_PORT_COUNT] = {
GPIO_EN_USB_A0_VBUS,
GPIO_EN_USB_A1_VBUS,
GPIO_EN_USB_A2_VBUS,
+ GPIO_EN_USB_A3_VBUS,
};
/* PWM channels. Must be in the exactly same order as in enum pwm_channel. */
@@ -128,19 +145,14 @@ const struct temp_sensor_t temp_sensors[] = {
};
BUILD_ASSERT(ARRAY_SIZE(temp_sensors) == TEMP_SENSOR_COUNT);
-static void c0_ccsbu_ovp_interrupt(enum gpio_signal s)
-{
- cprints(CC_USBPD, "C0: CC OVP, SBU OVP, or thermal event");
- pd_handle_cc_overvoltage(0);
-}
-
void board_init(void)
{
int on;
- gpio_enable_interrupt(GPIO_USB_C0_CCSBU_OVP_ODL);
- gpio_enable_interrupt(GPIO_BJ_ADP_PRESENT_L);
- gpio_enable_interrupt(GPIO_USBC_ADP_PRESENT_L);
+ gpio_enable_interrupt(GPIO_BJ_ADP_PRESENT);
+
+ /* Enable PPC interrupt */
+ gpio_enable_interrupt(GPIO_USB_C0_FAULT_L);
/* Turn on 5V if the system is on, otherwise turn it off */
on = chipset_in_state(CHIPSET_STATE_ON | CHIPSET_STATE_ANY_SUSPEND |
@@ -179,20 +191,18 @@ int board_vbus_source_enabled(int port)
{
if (port != CHARGE_PORT_TYPEC0)
return 0;
- return gpio_get_level(GPIO_EN_USB_C0_VBUS);
+
+ return ppc_is_sourcing_vbus(port);
}
/* Vconn control for integrated ITE TCPC */
void board_pd_vconn_ctrl(int port, enum usbpd_cc_pin cc_pin, int enabled)
{
- /* Vconn control is only for port 0 */
- if (port)
- return;
-
- if (cc_pin == USBPD_CC_PIN_1)
- gpio_set_level(GPIO_EN_USB_C0_CC1_VCONN, !!enabled);
- else
- gpio_set_level(GPIO_EN_USB_C0_CC2_VCONN, !!enabled);
+ /*
+ * We ignore the cc_pin and PPC vconn because polarity and PPC vconn
+ * should already be set correctly in the PPC driver via the pd
+ * state machine.
+ */
}
__override void typec_set_source_current_limit(int port, enum tcpc_rp_value rp)
@@ -204,7 +214,8 @@ __override void typec_set_source_current_limit(int port, enum tcpc_rp_value rp)
/* Switch between 1.5A and 3A ILIM values */
ilim3A = (rp == TYPEC_RP_3A0);
- gpio_set_level(GPIO_USB_C0_VBUS_ILIM, ilim3A);
+
+ tcpm_select_rp_value(0, ilim3A);
}
/******************************************************************************/
@@ -238,7 +249,7 @@ static int8_t bj_adp_connected = -1;
static void adp_connect_deferred(void)
{
const struct charge_port_info *pi;
- int connected = !gpio_get_level(GPIO_BJ_ADP_PRESENT_L);
+ int connected = gpio_get_level(GPIO_BJ_ADP_PRESENT);
/* Debounce */
if (connected == bj_adp_connected)
@@ -263,12 +274,6 @@ void adp_connect_interrupt(enum gpio_signal signal)
hook_call_deferred(&adp_connect_deferred_data, ADP_DEBOUNCE_MS * MSEC);
}
-/* IRQ for USB-C plug/unplug. */
-void usbc_connect_interrupt(enum gpio_signal signal)
-{
- task_wake(TASK_ID_PD_C0);
-}
-
int board_set_active_charge_port(int port)
{
const int active_port = charge_manager_get_active_charge_port();
@@ -307,17 +312,17 @@ int board_set_active_charge_port(int port)
switch (port) {
case CHARGE_PORT_TYPEC0:
- gpio_set_level(GPIO_EN_PPVAR_USBC_ADP_L, 0);
- gpio_set_level(GPIO_EN_PPVAR_BJ_ADP_L, 1);
- gpio_enable_interrupt(GPIO_BJ_ADP_PRESENT_L);
+ ppc_vbus_sink_enable(USBC_PORT_C0, 1);
+ gpio_set_level(GPIO_EN_PPVAR_BJ_ADP_OD, 1);
+ gpio_enable_interrupt(GPIO_BJ_ADP_PRESENT);
break;
case CHARGE_PORT_BARRELJACK:
/* Make sure BJ adapter is sourcing power */
- if (gpio_get_level(GPIO_BJ_ADP_PRESENT_L))
+ if (!gpio_get_level(GPIO_BJ_ADP_PRESENT))
return EC_ERROR_INVAL;
- gpio_set_level(GPIO_EN_PPVAR_BJ_ADP_L, 0);
- gpio_set_level(GPIO_EN_PPVAR_USBC_ADP_L, 1);
- gpio_disable_interrupt(GPIO_BJ_ADP_PRESENT_L);
+ gpio_set_level(GPIO_EN_PPVAR_BJ_ADP_OD, 0);
+ ppc_vbus_sink_enable(USBC_PORT_C0, 1);
+ gpio_disable_interrupt(GPIO_BJ_ADP_PRESENT);
break;
default:
return EC_ERROR_INVAL;
@@ -339,8 +344,8 @@ static void board_charge_manager_init(void)
charge_manager_update_charge(j, i, NULL);
}
- port = gpio_get_level(GPIO_BJ_ADP_PRESENT_L) ? CHARGE_PORT_TYPEC0 :
- CHARGE_PORT_BARRELJACK;
+ port = gpio_get_level(GPIO_BJ_ADP_PRESENT) ? CHARGE_PORT_BARRELJACK :
+ CHARGE_PORT_TYPEC0;
CPRINTUSB("Power source is p%d (%s)", port,
port == CHARGE_PORT_TYPEC0 ? "USB-C" : "BJ");
@@ -370,5 +375,51 @@ __override int extpower_is_present(void)
return 1;
}
+void ppc_interrupt(enum gpio_signal signal)
+{
+ if (signal == GPIO_USB_C0_FAULT_L)
+ syv682x_interrupt(USBC_PORT_C0);
+}
+
+/* I2C Ports */
+const struct i2c_port_t i2c_ports[] = {
+ { .name = "eeprom",
+ .port = I2C_PORT_EEPROM,
+ .kbps = 400,
+ .scl = GPIO_EC_I2C_EEPROM_SCL,
+ .sda = GPIO_EC_I2C_EEPROM_SDA },
+
+ { .name = "hdmi2_edid",
+ .port = I2C_PORT_HDMI2_EDID,
+ .kbps = 100,
+ .scl = GPIO_EC_I2C_HDMI2_EDID_SCL,
+ .sda = GPIO_EC_I2C_HDMI2_EDID_SDA },
+
+ { .name = "usbc0",
+ .port = I2C_PORT_USB_C0,
+ .kbps = 1000,
+ .scl = GPIO_EC_I2C_USB_C0_SCL,
+ .sda = GPIO_EC_I2C_USB_C0_SDA },
+
+ { .name = "hdmi2_src_ddc",
+ .port = I2C_PORT_HDMI2_SRC_DDC,
+ .kbps = 100,
+ .scl = GPIO_EC_I2C_HDMI2_SRC_DDC_SCL,
+ .sda = GPIO_EC_I2C_HDMI2_SRC_DDC_SDA },
+
+ { .name = "hdmi1_edid",
+ .port = I2C_PORT_HDMI1_EDID,
+ .kbps = 100,
+ .scl = GPIO_EC_I2C_HDMI1_EDID_SCL,
+ .sda = GPIO_EC_I2C_HDMI1_EDID_SDA },
+
+ { .name = "hdmi1_src_ddc",
+ .port = I2C_PORT_HDMI1_SRC_DDC,
+ .kbps = 100,
+ .scl = GPIO_EC_I2C_HDMI1_SRC_DDC_SCL,
+ .sda = GPIO_EC_I2C_HDMI1_SRC_DDC_SDA },
+};
+
+const unsigned int i2c_ports_used = ARRAY_SIZE(i2c_ports);
/* Must come after other header files and interrupt handler declarations */
#include "gpio_list.h"
diff --git a/board/dibbi/board.h b/board/dibbi/board.h
index c59a540b5d..e3d0b0925b 100644
--- a/board/dibbi/board.h
+++ b/board/dibbi/board.h
@@ -17,6 +17,14 @@
#define CONFIG_CMD_CHARGER_DUMP
+/* I2C Bus Configuration */
+#define I2C_PORT_HDMI2_EDID IT83XX_I2C_CH_B
+#undef I2C_PORT_USB_C0
+#define I2C_PORT_USB_C0 IT83XX_I2C_CH_C
+#define I2C_PORT_HDMI2_SRC_DDC IT83XX_I2C_CH_D
+#define I2C_PORT_HDMI1_EDID IT83XX_I2C_CH_E
+#define I2C_PORT_HDMI1_SRC_DDC IT83XX_I2C_CH_F
+
/* Power */
#undef CONFIG_CHARGER
#undef CONFIG_CHARGER_DISCHARGE_ON_AC
@@ -44,13 +52,19 @@
#define CONFIG_USB_PD_TCPM_ITE_ON_CHIP /* C0: ITE EC TCPC */
#define CONFIG_USB_PD_ITE_ACTIVE_PORT_COUNT 1
+/* PPC */
+#define CONFIG_USB_PD_DISCHARGE_PPC
+#define CONFIG_USB_PD_VBUS_DETECT_PPC
+#define CONFIG_USBC_PPC
+#define CONFIG_USBC_PPC_SYV682X
+
/* USB Mux and Retimer */
#define CONFIG_USB_MUX_IT5205 /* C0: ITE Mux */
#define I2C_PORT_USB_MUX I2C_PORT_USB_C0 /* Required for ITE Mux */
/* USB Type A Features */
#define CONFIG_USB_PORT_POWER_DUMB
-#define USB_PORT_COUNT 3 /* Type A ports */
+#define USB_PORT_COUNT 4 /* Type A ports */
/* No battery */
#undef CONFIG_BATTERY_CUT_OFF
@@ -121,6 +135,8 @@ enum charge_port {
CHARGE_PORT_BARRELJACK,
};
+enum usbc_port { USBC_PORT_C0 = 0, USBC_PORT_COUNT };
+
enum pwm_channel {
PWM_CH_LED_RED,
PWM_CH_LED_GREEN,
diff --git a/board/dibbi/build.mk b/board/dibbi/build.mk
index 07ea50c392..8336360a6a 100644
--- a/board/dibbi/build.mk
+++ b/board/dibbi/build.mk
@@ -10,5 +10,6 @@ CHIP:=it83xx
CHIP_FAMILY:=it8320
CHIP_VARIANT:=it8320dx
BASEBOARD:=dedede
+BOARD:=dibbi
board-y=board.o led.o usb_pd_policy.o
diff --git a/board/dibbi/gpio.inc b/board/dibbi/gpio.inc
index a5c0c02a72..a79d08d5ee 100644
--- a/board/dibbi/gpio.inc
+++ b/board/dibbi/gpio.inc
@@ -13,34 +13,33 @@ GPIO_INT(SLP_S4_L, PIN(I, 5), GPIO_INT_BOTH, power_signal_interrupt)
GPIO_INT(SLP_S3_L, PIN(H, 3), GPIO_INT_BOTH, baseboard_all_sys_pgood_interrupt)
GPIO_INT(SLP_S0_L, PIN(E, 4), GPIO_INT_BOTH, power_signal_interrupt)
GPIO_INT(SLP_SUS_L, PIN(G, 2), GPIO_INT_BOTH, power_signal_interrupt)
-GPIO_INT(VCCIN_AUX_VID0, PIN(D, 0), GPIO_INT_BOTH, power_signal_interrupt)
+GPIO_INT(VCCIN_AUX_VID0, PIN(D, 0), GPIO_INT_BOTH | GPIO_SEL_1P8V, power_signal_interrupt)
+GPIO_INT(VCCIN_AUX_VID1, PIN(K, 1), GPIO_INT_BOTH | GPIO_SEL_1P8V, power_signal_interrupt)
GPIO_INT(RSMRST_PWRGD_L, PIN(E, 1), GPIO_INT_BOTH, power_signal_interrupt)
GPIO_INT(CPU_C10_GATE_L, PIN(G, 1), GPIO_INT_BOTH, power_signal_interrupt)
GPIO_INT(PG_DRAM_OD, PIN(D, 3), GPIO_INT_BOTH, baseboard_all_sys_pgood_interrupt)
GPIO_INT(PG_PP1050_ST_OD, PIN(L, 1), GPIO_INT_BOTH, power_signal_interrupt)
-GPIO_INT(VCCIN_AUX_VID1, PIN(K, 1), GPIO_INT_BOTH, power_signal_interrupt)
+GPIO_INT(EC_VSNS_PP3300_S5, PIN(I, 0), GPIO_INT_BOTH, power_signal_interrupt)
GPIO_INT(PG_VCCIO_EXT_OD, PIN(D, 7), GPIO_INT_BOTH, baseboard_all_sys_pgood_interrupt)
-GPIO_INT(ESPI_RESET_L, PIN(D, 2), GPIO_INT_FALLING | GPIO_SEL_1P8V, espi_reset_pin_asserted_interrupt)
+GPIO_INT(ESPI_RESET_L, PIN(D, 2), GPIO_INT_FALLING | GPIO_SEL_1P8V, espi_reset_pin_asserted_interrupt)
GPIO_INT(H1_EC_PWR_BTN_ODL, PIN(E, 2), GPIO_INT_BOTH | GPIO_PULL_UP, power_button_interrupt)
#ifdef CONFIG_LOW_POWER_IDLE
/* Used to wake up the EC from Deep Doze mode when writing to console */
-GPIO_INT(UART1_RX, PIN(B, 0), GPIO_INT_BOTH, uart_deepsleep_interrupt) /* UART_DBG_TX_EC_RX */
+GPIO_INT(UART1_RX, PIN(B, 0), GPIO_INT_BOTH, uart_deepsleep_interrupt) /* UART_DBG_TX_EC_RX */
#endif
-/* USB-C interrupts */
-GPIO_INT(USB_C0_CCSBU_OVP_ODL, PIN(K, 6), GPIO_INT_FALLING | GPIO_PULL_UP, c0_ccsbu_ovp_interrupt) /* Fault protection */
-
/* Other interrupts */
GPIO_INT(EC_WP_OD, PIN(A, 6), GPIO_INT_BOTH, switch_interrupt)
/* Directly connected recovery button */
-GPIO_INT(EC_RECOVERY_BTN_ODL, PIN(K, 7), GPIO_INT_BOTH, button_interrupt)
+GPIO_INT(EC_RECOVERY_BTN_ODL, PIN(K, 7), GPIO_INT_BOTH, button_interrupt)
/* Recovery button input from H1 */
-GPIO_INT(H1_EC_RECOVERY_BTN_ODL, PIN(K, 4), GPIO_INT_BOTH, button_interrupt)
-GPIO_INT(BJ_ADP_PRESENT_L, PIN(A, 7), GPIO_INT_BOTH | GPIO_PULL_UP, adp_connect_interrupt)
-GPIO_INT(USBC_ADP_PRESENT_L, PIN(K, 3), GPIO_INT_BOTH | GPIO_PULL_UP, usbc_connect_interrupt)
+GPIO_INT(H1_EC_RECOVERY_BTN_ODL,PIN(K, 4), GPIO_INT_BOTH, button_interrupt)
+GPIO_INT(BJ_ADP_PRESENT, PIN(A, 7), GPIO_INT_BOTH, adp_connect_interrupt)
+GPIO_INT(USB_C0_FAULT_L, PIN(K, 0), GPIO_INT_FALLING, ppc_interrupt)
/* Power sequence GPIOs */
+GPIO(EC_AP_PSYS, PIN(J, 2), GPIO_OUT_LOW)
GPIO(EC_AP_RTCRST, PIN(K, 2), GPIO_OUT_LOW)
GPIO(EC_AP_PWR_BTN_ODL, PIN(B, 6), GPIO_ODR_HIGH)
GPIO(EC_AP_DPWROK, PIN(L, 7), GPIO_OUT_LOW)
@@ -48,20 +47,19 @@ GPIO(EC_AP_RSMRST_L, PIN(H, 0), GPIO_OUT_LOW)
GPIO(EC_AP_WAKE_ODL, PIN(D, 5), GPIO_ODR_HIGH)
GPIO(SYS_RST_ODL, PIN(D, 1), GPIO_ODR_HIGH)
GPIO(EC_AP_SYS_PWROK, PIN(F, 2), GPIO_OUT_LOW)
-GPIO(PG_PP5000_U_OD, PIN(E, 3), GPIO_INPUT)
+GPIO(PG_PP5000_U_OD, PIN(J, 0), GPIO_INPUT)
+GPIO(EN_PP5000_U, PIN(K, 5), GPIO_OUT_LOW)
+GPIO(PG_PP3300_A, PIN(B, 5), GPIO_INPUT)
GPIO(EN_PP3300_A, PIN(C, 5), GPIO_OUT_LOW)
GPIO(EC_AP_PCH_PWROK_OD, PIN(D, 6), GPIO_ODR_LOW)
-GPIO(EN_PP5000_U, PIN(K, 5), GPIO_OUT_LOW)
/* TODO(b:149775160) - Modify if needed if we ever use this signal. */
GPIO(EN_VCCST, PIN(D, 4), GPIO_INPUT)
GPIO(EN_VCCIO_EXT, PIN(B, 2), GPIO_OUT_LOW)
GPIO(EC_PROCHOT_ODL, PIN(I, 1), GPIO_ODR_HIGH | GPIO_SEL_1P8V)
GPIO(EC_AP_VCCST_PWRGD_OD, PIN(E, 5), GPIO_ODR_LOW)
GPIO(ALL_SYS_PWRGD, PIN(B, 7), GPIO_OUT_LOW)
-GPIO(EN_PPVAR_BJ_ADP_L, PIN(J, 0), GPIO_OUT_LOW)
-GPIO(EN_PPVAR_USBC_ADP_L, PIN(J, 1), GPIO_OUT_LOW)
-GPIO(EN_USB_C0_VBUS, PIN(I, 7), GPIO_OUT_LOW)
-GPIO(USB_C0_VBUS_ILIM, PIN(I, 6), GPIO_OUT_LOW)
+GPIO(EN_PPVAR_BJ_ADP_OD, PIN(E, 3), GPIO_OUT_LOW)
+GPIO(ACK_PPVAR_BJ_ADP_ODL, PIN(A, 0), GPIO_INPUT)
/* Required for icelake chipset code, but implemented through other means for dedede */
UNIMPLEMENTED(AC_PRESENT)
@@ -71,72 +69,87 @@ UNIMPLEMENTED(PG_EC_ALL_SYS_PWRGD)
/* Required for dedede baseboard but not used in dibbi */
UNIMPLEMENTED(USB_C0_INT_ODL)
UNIMPLEMENTED(EN_SLP_Z)
+UNIMPLEMENTED(EC_BATTERY_PRES_ODL)
/* I2C pins - Alternate function below configures I2C module on these pins */
GPIO(EC_I2C_EEPROM_SCL, PIN(B, 3), GPIO_INPUT)
GPIO(EC_I2C_EEPROM_SDA, PIN(B, 4), GPIO_INPUT)
-GPIO(EC_I2C_BATTERY_SCL, PIN(C, 1), GPIO_INPUT)
-GPIO(EC_I2C_BATTERY_SDA, PIN(C, 2), GPIO_INPUT)
-GPIO(EC_I2C_SENSOR_SCL, PIN(F, 6), GPIO_INPUT | GPIO_SEL_1P8V)
-GPIO(EC_I2C_SENSOR_SDA, PIN(F, 7), GPIO_INPUT | GPIO_SEL_1P8V)
-GPIO(EC_I2C_USB_C0_SCL, PIN(A, 4), GPIO_INPUT)
-GPIO(EC_I2C_USB_C0_SDA, PIN(A, 5), GPIO_INPUT)
+GPIO(EC_I2C_USB_C0_SCL, PIN(F, 6), GPIO_INPUT)
+GPIO(EC_I2C_USB_C0_SDA, PIN(F, 7), GPIO_INPUT)
+GPIO(EC_I2C_HDMI1_EDID_SCL, PIN(E, 0), GPIO_INPUT)
+GPIO(EC_I2C_HDMI1_EDID_SDA, PIN(E, 7), GPIO_INPUT)
+GPIO(EC_I2C_HDMI2_EDID_SCL, PIN(C, 1), GPIO_INPUT)
+GPIO(EC_I2C_HDMI2_EDID_SDA, PIN(C, 2), GPIO_INPUT)
+GPIO(EC_I2C_HDMI1_SRC_DDC_SCL, PIN(A, 4), GPIO_INPUT)
+GPIO(EC_I2C_HDMI1_SRC_DDC_SDA, PIN(A, 5), GPIO_INPUT)
+GPIO(EC_I2C_HDMI2_SRC_DDC_SCL, PIN(H, 1), GPIO_INPUT)
+GPIO(EC_I2C_HDMI2_SRC_DDC_SDA, PIN(H, 2), GPIO_INPUT)
/* USB pins */
-GPIO(EN_USB_C0_CC1_VCONN, PIN(H, 4), GPIO_OUT_LOW)
-GPIO(EN_USB_C0_CC2_VCONN, PIN(H, 6), GPIO_OUT_LOW)
GPIO(EC_AP_USB_C0_HPD, PIN(L, 4), GPIO_OUT_LOW)
GPIO(EN_USB_A0_VBUS, PIN(L, 6), GPIO_OUT_LOW)
GPIO(EN_USB_A1_VBUS, PIN(C, 6), GPIO_OUT_LOW)
GPIO(EN_USB_A2_VBUS, PIN(C, 4), GPIO_OUT_LOW)
+GPIO(EN_USB_A3_VBUS, PIN(J, 5), GPIO_OUT_LOW)
+GPIO(EC_USB_C0_FRS_EN, PIN(K, 6), GPIO_OUT_LOW)
+GPIO(USB_C0_SBU_MUX_FAULT, PIN(I, 7), GPIO_INPUT)
/* MKBP event synchronization */
/* TODO(b/257833880) Check whether this pin is needed */
-GPIO(EC_AP_MKBP_INT_L, PIN(L, 5), GPIO_ODR_HIGH)
-
-/* Misc pins which will run to the I/O board */
-GPIO(EC_SUB_IO_1_1, PIN(L, 3), GPIO_INPUT)
-GPIO(EC_SUB_IO_1_2, PIN(F, 0), GPIO_INPUT)
-GPIO(EC_SUB_IO_2_1, PIN(F, 1), GPIO_INPUT)
-GPIO(EC_SUB_IO_2_2, PIN(L, 2), GPIO_INPUT)
+GPIO(EC_AP_MKBP_INT_L, PIN(L, 5), GPIO_ODR_HIGH)
+
+/* HDMI */
+GPIO(HDMI1_CEC, PIN(F, 0), GPIO_OUT_LOW)
+GPIO(HDMI2_CEC_IN, PIN(J, 3), GPIO_INPUT)
+GPIO(HDMI2_CEC, PIN(F, 1), GPIO_OUT_LOW)
+GPIO(HDMI1_SRC_HPD, PIN(F, 3), GPIO_INPUT)
+GPIO(HDMI2_SRC_HPD, PIN(KSO_L, 3), GPIO_INPUT)
+GPIO(EC_HDMI1_SRC_HPD_OUT, PIN(I, 6), GPIO_OUT_LOW)
+GPIO(EC_HDMI2_SRC_HPD_OUT, PIN(KSO_L, 4), GPIO_OUT_LOW)
+GPIO(HDMI1_EDID_SEL, PIN(J, 1), GPIO_OUT_LOW)
+GPIO(HDMI2_EDID_SEL, PIN(KSO_L, 5), GPIO_OUT_LOW)
+GPIO(EDID_BTN_ODL, PIN(C, 3), GPIO_INPUT)
+GPIO(EC_EN_PP5000_HDMI1, PIN(KSO_L, 6), GPIO_OUT_LOW)
+GPIO(EC_EN_PP5000_HDMI2, PIN(KSO_L, 7), GPIO_OUT_LOW)
/* Misc */
-GPIO(EC_ENTERING_RW, PIN(G, 0), GPIO_OUT_LOW)
+GPIO(EC_ENTERING_RW, PIN(C, 7), GPIO_OUT_LOW)
GPIO(CCD_MODE_ODL, PIN(H, 5), GPIO_ODR_HIGH)
-GPIO(EC_BATTERY_PRES_ODL, PIN(I, 4), GPIO_INPUT)
-GPIO(ECH1_PACKET_MODE, PIN(H, 1), GPIO_OUT_LOW)
+GPIO(ECH1_PACKET_MODE, PIN(C, 0), GPIO_OUT_LOW)
+GPIO(EN_RS232_X, PIN(E, 6), GPIO_OUT_LOW)
+GPIO(UART0_RX, PIN(B, 1), GPIO_OUT_LOW) /* UART_EC_TX_DBG_RX */
/* NC pins, enable internal pull-down to avoid floating state. */
-GPIO(GPIOC0_NC, PIN(C, 0), GPIO_INPUT | GPIO_PULL_DOWN)
-GPIO(GPIOC3_NC, PIN(C, 3), GPIO_INPUT | GPIO_PULL_DOWN)
+GPIO(GPIOG0_NC, PIN(G, 0), GPIO_INPUT | GPIO_PULL_DOWN)
GPIO(GPIOG3_NC, PIN(G, 3), GPIO_INPUT | GPIO_PULL_DOWN)
GPIO(GPIOG4_NC, PIN(G, 4), GPIO_INPUT | GPIO_PULL_DOWN)
GPIO(GPIOG5_NC, PIN(G, 5), GPIO_INPUT | GPIO_PULL_DOWN)
GPIO(GPIOG6_NC, PIN(G, 6), GPIO_INPUT | GPIO_PULL_DOWN)
GPIO(GPIOG7_NC, PIN(G, 7), GPIO_INPUT | GPIO_PULL_DOWN)
+GPIO(GPIOH4_NC, PIN(H, 4), GPIO_INPUT | GPIO_PULL_DOWN)
+GPIO(GPIOH6_NC, PIN(H, 6), GPIO_INPUT | GPIO_PULL_DOWN)
+GPIO(GPIOI4_NC, PIN(I, 4), GPIO_INPUT | GPIO_PULL_DOWN)
GPIO(GPIOJ4_NC, PIN(J, 4), GPIO_INPUT | GPIO_PULL_DOWN)
-GPIO(GPIOJ5_NC, PIN(J, 5), GPIO_INPUT | GPIO_PULL_DOWN)
GPIO(GPIOJ6_NC, PIN(J, 6), GPIO_INPUT | GPIO_PULL_DOWN)
-GPIO(GPIOK0_NC, PIN(K, 0), GPIO_INPUT | GPIO_PULL_DOWN)
-GPIO(GPIOL0_NC, PIN(L, 0), GPIO_INPUT | GPIO_PULL_DOWN)
+GPIO(GPIOK3_NC, PIN(K, 3), GPIO_INPUT | GPIO_PULL_DOWN)
GPIO(GPIOM6_NC, PIN(M, 6), GPIO_INPUT | GPIO_PULL_DOWN)
-/* TODO(b/257833880) add any new unused pins */
/* Alternate functions GPIO definitions */
/* UART */
ALTERNATE(PIN_MASK(B, BIT(0) | BIT(1)), 0, MODULE_UART, 0) /* UART for debug */
/* I2C */
-ALTERNATE(PIN_MASK(B, BIT(3) | BIT(4)), 0, MODULE_I2C, 0) /* I2C0 */
-ALTERNATE(PIN_MASK(C, BIT(1) | BIT(2)), 0, MODULE_I2C, 0) /* I2C1 */
-ALTERNATE(PIN_MASK(F, BIT(6) | BIT(7)), 0, MODULE_I2C, GPIO_SEL_1P8V) /* I2C2 - 1.8V */
-ALTERNATE(PIN_MASK(E, BIT(0) | BIT(7)), 0, MODULE_I2C, 0) /* I2C4 */
-ALTERNATE(PIN_MASK(A, BIT(4) | BIT(5)), 0, MODULE_I2C, 0) /* I2C5 */
+ALTERNATE(PIN_MASK(B, BIT(3) | BIT(4)), 0, MODULE_I2C, 0) /* I2C0 - EEPROM */
+ALTERNATE(PIN_MASK(C, BIT(1) | BIT(2)), 0, MODULE_I2C, 0) /* I2C1 - HDMI2_EDID */
+ALTERNATE(PIN_MASK(F, BIT(6) | BIT(7)), 0, MODULE_I2C, 0) /* I2C2 - USB_C0 */
+ALTERNATE(PIN_MASK(E, BIT(0) | BIT(7)), 0, MODULE_I2C, 0) /* I2C4 - HDMI1_EDID */
+ALTERNATE(PIN_MASK(A, BIT(4) | BIT(5)), 0, MODULE_I2C, 0) /* I2C5 - HDMI1_SRC_DDC */
+ALTERNATE(PIN_MASK(H, BIT(1) | BIT(2)), 0, MODULE_I2C, 0) /* I2C3 - HDMI2_SRC_DDC */
/* ADC */
-ALTERNATE(PIN_MASK(I, BIT(0) | BIT(2) | BIT(3)), 0, MODULE_ADC, 0) /* ADC0: EC_VSNS_PP3300_A, ADC2: TEMP_SENSOR_1, ADC3: TEMP_SENSOR_2 */
-ALTERNATE(PIN_MASK(L, BIT(2) | BIT(3)), 0, MODULE_ADC, 0) /* ADC15: PPVAR_PWR_IN_IMON, ADC16: SNS_PPVAR_PWR_IN */
+ALTERNATE(PIN_MASK(I, BIT(2) | BIT(3)), 0, MODULE_ADC, 0) /* ADC2: TEMP_SENSOR_1, ADC3: TEMP_SENSOR_2 */
+ALTERNATE(PIN_MASK(L, BIT(0) | BIT(2) | BIT(3)), 0, MODULE_ADC, 0) /* ADC13: TEMP_SENSOR_3, ADC15: ANALOG_PPVAR_PWR_IN_IMON, ADC16: SNS_PPVAR_PWR_IN */
/* PWM */
ALTERNATE(PIN_MASK(A, BIT(1) | BIT(2) | BIT(3)), 0, MODULE_PWM, 0) /* LED_[R,G,B]_ODL */
diff --git a/board/dibbi/usb_pd_policy.c b/board/dibbi/usb_pd_policy.c
index 9d573b9c61..21cdf82a57 100644
--- a/board/dibbi/usb_pd_policy.c
+++ b/board/dibbi/usb_pd_policy.c
@@ -8,9 +8,9 @@
#include "chipset.h"
#include "common.h"
#include "console.h"
-#include "driver/tcpm/tcpci.h"
#include "gpio.h"
#include "usb_pd.h"
+#include "usbc_ppc.h"
#define CPRINTF(format, args...) cprintf(CC_USBPD, format, ##args)
#define CPRINTS(format, args...) cprints(CC_USBPD, format, ##args)
@@ -36,11 +36,19 @@ int pd_check_vconn_swap(int port)
void pd_power_supply_reset(int port)
{
+ int prev_en;
+
if (port < 0 || port >= board_get_usb_pd_port_count())
return;
+ prev_en = ppc_is_sourcing_vbus(port);
+
/* Disable VBUS source */
- gpio_set_level(GPIO_EN_USB_C0_VBUS, 0);
+ ppc_vbus_source_enable(port, 0);
+
+ /* Enable discharge if we were previously sourcing 5V */
+ if (prev_en)
+ pd_set_vbus_discharge(port, 1);
/* Notify host of power info change. */
pd_send_host_event(PD_EVENT_POWER_CHANGE);
@@ -48,11 +56,19 @@ void pd_power_supply_reset(int port)
int pd_set_power_supply_ready(int port)
{
+ int rv;
+
/* Disable charging */
- gpio_set_level(GPIO_EN_PPVAR_USBC_ADP_L, 1);
+ rv = ppc_vbus_sink_enable(port, 0);
+ if (rv)
+ return rv;
+
+ pd_set_vbus_discharge(port, 0);
/* Enable VBUS source */
- gpio_set_level(GPIO_EN_USB_C0_VBUS, 1);
+ rv = ppc_vbus_source_enable(port, 1);
+ if (rv)
+ return rv;
/* Notify host of power info change. */
pd_send_host_event(PD_EVENT_POWER_CHANGE);
@@ -65,5 +81,5 @@ __override int pd_snk_is_vbus_provided(int port)
if (port != CHARGE_PORT_TYPEC0)
return 0;
- return gpio_get_level(GPIO_USBC_ADP_PRESENT_L);
+ return ppc_is_vbus_present(port);
}