diff options
-rw-r--r-- | baseboard/zork/baseboard.h | 2 | ||||
-rw-r--r-- | board/ezkinil/board.c | 60 | ||||
-rw-r--r-- | board/ezkinil/board.h | 1 | ||||
-rw-r--r-- | board/ezkinil/gpio.inc | 3 |
4 files changed, 64 insertions, 2 deletions
diff --git a/baseboard/zork/baseboard.h b/baseboard/zork/baseboard.h index 2aa6334337..02127b45ac 100644 --- a/baseboard/zork/baseboard.h +++ b/baseboard/zork/baseboard.h @@ -332,7 +332,7 @@ void board_reset_pd_mcu(void); /* Common definition for the USB PD interrupt handlers. */ void tcpc_alert_event(enum gpio_signal signal); void bc12_interrupt(enum gpio_signal signal); -void ppc_interrupt(enum gpio_signal signal); +__override_proto void ppc_interrupt(enum gpio_signal signal); #endif void pi3hdx1204_retimer_power(void); diff --git a/board/ezkinil/board.c b/board/ezkinil/board.c index 35194d42fb..6795f0dd9b 100644 --- a/board/ezkinil/board.c +++ b/board/ezkinil/board.c @@ -11,6 +11,8 @@ #include "driver/accelgyro_bmi_common.h" #include "driver/accel_kionix.h" #include "driver/accel_kx022.h" +#include "driver/ppc/aoz1380.h" +#include "driver/ppc/nx20p348x.h" #include "driver/retimer/tusb544.h" #include "driver/temp_sensor/sb_tsi.h" #include "driver/usb_mux/amd_fp5.h" @@ -32,6 +34,7 @@ #include "temp_sensor.h" #include "usb_charge.h" #include "usb_mux.h" +#include "usbc_ppc.h" #include "gpio_list.h" @@ -338,6 +341,60 @@ const struct usb_mux usbc1_ps8743 = { }; /***************************************************************************** + * PPC + */ + +static int ppc_id; + +static void setup_c1_ppc_config(void) +{ + /* + * Read USB_C1_POWER_SWITCH_ID to choose DB ppc chip + * 0: NX20P3483UK + * 1: AOZ1380DI + */ + + ioex_get_level(IOEX_USB_C1_POWER_SWITCH_ID, &ppc_id); + + ccprints("C1: PPC is %s", ppc_id ? "AOZ1380DI" : "NX20P3483UK"); + + if (ppc_id) { + ppc_chips[USBC_PORT_C1].drv = &aoz1380_drv; + ioex_set_flags(IOEX_USB_C1_PPC_ILIM_3A_EN, GPIO_OUT_LOW); + } +} + +__override void ppc_interrupt(enum gpio_signal signal) +{ + switch (signal) { + case GPIO_USB_C0_PPC_FAULT_ODL: + aoz1380_interrupt(USBC_PORT_C0); + break; + case GPIO_USB_C1_PPC_INT_ODL: + if (ppc_id) + aoz1380_interrupt(USBC_PORT_C1); + else + nx20p348x_interrupt(USBC_PORT_C1); + break; + default: + break; + } +} + +__override int board_aoz1380_set_vbus_source_current_limit(int port, + enum tcpc_rp_value rp) +{ + int rv; + + /* Use the TCPC to set the current limit */ + rv = ioex_set_level(port ? IOEX_USB_C1_PPC_ILIM_3A_EN + : IOEX_USB_C0_PPC_ILIM_3A_EN, + (rp == TYPEC_RP_3A0) ? 1 : 0); + + return rv; +} + +/***************************************************************************** * Use FW_CONFIG to set correct configuration. */ @@ -357,6 +414,9 @@ void setup_fw_config(void) setup_mux(); + if (board_ver >= 3) + setup_c1_ppc_config(); + if (ec_config_has_hdmi_conn_hpd()) { if (board_ver < 3) ioex_enable_interrupt(IOEX_HDMI_CONN_HPD_3V3_DB); diff --git a/board/ezkinil/board.h b/board/ezkinil/board.h index ecde44e55a..17a924e99d 100644 --- a/board/ezkinil/board.h +++ b/board/ezkinil/board.h @@ -57,6 +57,7 @@ #define GPIO_WP_L GPIO_EC_WP_L #define GPIO_PACKET_MODE_EN GPIO_EC_H1_PACKET_MODE #define GPIO_DP1_HPD GPIO_EC_DP1_HPD +#define IOEX_HDMI_CONN_HPD_3V3_DB IOEX_USB_C1_PPC_ILIM_3A_EN #ifndef __ASSEMBLER__ diff --git a/board/ezkinil/gpio.inc b/board/ezkinil/gpio.inc index 86a8b6e97c..e0145ce3db 100644 --- a/board/ezkinil/gpio.inc +++ b/board/ezkinil/gpio.inc @@ -57,7 +57,7 @@ GPIO(LED_FULL_L, PIN(6, 0), GPIO_OUT_HIGH) GPIO(LED_CHRG_L, PIN(C, 0), GPIO_OUT_HIGH) IOEX_INT(USB_C0_SBU_FAULT_ODL, EXPIN(USBC_PORT_C0, 1, 2), GPIO_INT_FALLING, sbu_fault_interrupt) -IOEX_INT(HDMI_CONN_HPD_3V3_DB, EXPIN(USBC_PORT_C1, 1, 0), GPIO_INT_BOTH, hdmi_hpd_interrupt_v2) +IOEX_INT(USB_C1_PPC_ILIM_3A_EN, EXPIN(USBC_PORT_C1, 1, 0), GPIO_INT_BOTH, hdmi_hpd_interrupt_v2) /* v3:C1 3A Current Limit Enable; v2:HDMI_CONN_HPD_3V3_DB */ IOEX_INT(USB_C1_SBU_FAULT_DB_ODL, EXPIN(USBC_PORT_C1, 1, 2), GPIO_INT_FALLING, sbu_fault_interrupt) IOEX(USB_C0_FAULT_ODL, EXPIN(USBC_PORT_C0, 0, 3), GPIO_ODR_HIGH) /* C0 Fault to SOC */ @@ -70,6 +70,7 @@ IOEX(USB_A0_CHARGE_EN_L, EXPIN(USBC_PORT_C0, 1, 6), GPIO_OUT_HIGH) /* A0 5V High IOEX(USB_C0_SBU_FLIP, EXPIN(USBC_PORT_C0, 1, 7), GPIO_OUT_LOW) /* C0 SBU Flip */ IOEX(USB_A1_RETIMER_EN, EXPIN(USBC_PORT_C1, 0, 0), GPIO_OUT_LOW) /* A1 Retimer Enable */ +IOEX(USB_C1_POWER_SWITCH_ID, EXPIN(USBC_PORT_C1, 0, 1), GPIO_INPUT) /* C1 PPC ID, 0: NX20P34, 1: AOZ1380 */ IOEX(USB_C1_HPD_IN_DB, EXPIN(USBC_PORT_C1, 0, 2), GPIO_OUT_LOW) /* C1 HPD */ IOEX(HDMI_POWER_EN_DB, EXPIN(USBC_PORT_C1, 0, 3), GPIO_OUT_LOW) /* HDMI retimer power enable */ IOEX(USB_C1_TCPC_FASTSW_CTL_EN, EXPIN(USBC_PORT_C1, 0, 4), GPIO_OUT_LOW) /* C1 FastSwitch Control */ |