diff --git a/board/poppy/board.h b/board/poppy/board.h index 873b710d30..5b0e2d930d 100644 --- a/board/poppy/board.h +++ b/board/poppy/board.h @@ -8,6 +8,14 @@ #ifndef __CROS_EC_BOARD_H #define __CROS_EC_BOARD_H +/* Set the default board revision */ +#ifdef BOARD_SORAKA +#define POPPY_REV1 +#else +/* TODO(b/35585396): Deprecate rev0 */ +#define POPPY_REV0 +#endif + /* * Allow dangerous commands. * TODO: Remove this config before production. diff --git a/board/poppy/gpio.inc b/board/poppy/gpio.inc index 1e5034edd3..e95764cd64 100644 --- a/board/poppy/gpio.inc +++ b/board/poppy/gpio.inc @@ -20,15 +20,22 @@ GPIO_INT(RSMRST_L_PGOOD, PIN(B, 0), GPIO_INT_BOTH, power_signal_interrupt) GPIO_INT(PMIC_DPWROK, PIN(C, 7), GPIO_INT_BOTH, power_signal_interrupt) GPIO_INT(POWER_BUTTON_L, PIN(0, 4), GPIO_INT_BOTH | GPIO_PULL_UP, power_button_interrupt) GPIO_INT(LID_OPEN, PIN(6, 7), GPIO_INT_BOTH, lid_interrupt) +/* TODO(b/35585396): Make use of reverse dock signal. */ +GPIO_INT(REVERSE_DOCK, PIN(B, 7), GPIO_INT_BOTH, lid_interrupt) GPIO_INT(VOLUME_DOWN_L, PIN(8, 3), GPIO_INT_BOTH | GPIO_PULL_UP, button_interrupt) GPIO_INT(VOLUME_UP_L, PIN(8, 2), GPIO_INT_BOTH | GPIO_PULL_UP, button_interrupt) GPIO_INT(WP_L, PIN(4, 0), GPIO_INT_BOTH, switch_interrupt) GPIO_INT(AC_PRESENT, PIN(C, 1), GPIO_INT_BOTH, extpower_interrupt) -GPIO_INT(USB_C0_VBUS_WAKE_L, PIN(2, 2), GPIO_INT_BOTH | GPIO_PULL_UP, vbus0_evt) -GPIO_INT(USB_C1_VBUS_WAKE_L, PIN(2, 3), GPIO_INT_BOTH | GPIO_PULL_UP, vbus1_evt) +GPIO_INT(USB_C0_VBUS_WAKE_L, PIN(9, 3), GPIO_INT_BOTH | GPIO_PULL_UP, vbus0_evt) +GPIO_INT(USB_C1_VBUS_WAKE_L, PIN(9, 7), GPIO_INT_BOTH | GPIO_PULL_UP, vbus1_evt) GPIO_INT(USB_C0_BC12_INT_L, PIN(D, 3), GPIO_INT_FALLING, usb0_evt) GPIO_INT(USB_C1_BC12_INT_L, PIN(3, 3), GPIO_INT_FALLING, usb1_evt) +/* TODO(b/35585396): Invert logic after rev1, then deprecate rev0 and remove. */ +#ifdef POPPY_REV1 +GPIO_INT(ACCELGYRO3_INT_L, PIN(3, 6), GPIO_INT_FALLING, bmi160_interrupt) +#else GPIO_INT(ACCELGYRO3_INT_L, PIN(3, 0), GPIO_INT_FALLING, bmi160_interrupt) +#endif GPIO_INT(BASE_DET_A, PIN(4, 5), GPIO_INT_BOTH, base_detect_interrupt) GPIO_INT(USB_C0_CABLE_DET, PIN(D, 2), GPIO_INT_RISING, anx74xx_cable_det_interrupt) @@ -55,21 +62,24 @@ GPIO(PCH_SLP_S0_L, PIN(7, 5), GPIO_INPUT) GPIO(ALS_INT_L, PIN(2, 5), GPIO_INPUT) GPIO(FP_INT_L, PIN(5, 6), GPIO_INPUT) -/* TODO(crosbug.com/p/61098): Make use of these GPIOs */ +/* TODO(b/35585396): Make use of these GPIOs */ GPIO(PP1800_DX_SENSOR, PIN(1, 4), GPIO_OUTPUT) GPIO(PP3300_DX_SENSOR, PIN(2, 1), GPIO_OUTPUT) GPIO(PP3300_USB_PD, PIN(2, 0), GPIO_OUTPUT) +#ifdef POPPY_REV0 GPIO(PP5000_DX_NFC, PIN(1, 5), GPIO_OUTPUT) - GPIO(PP3300_DX_CAM, PIN(1, 0), GPIO_OUT_HIGH) GPIO(CAM_PMIC_RST_L, PIN(0, 7), GPIO_INPUT) +#endif GPIO(WLAN_PE_RST, PIN(1, 2), GPIO_OUTPUT) GPIO(PP3300_DX_LTE, PIN(0, 5), GPIO_OUT_LOW) GPIO(LTE_GPS_OFF_L, PIN(0, 0), GPIO_OUTPUT) GPIO(LTE_BODY_SAR_L, PIN(0, 1), GPIO_OUTPUT) GPIO(LTE_WAKE_L, PIN(7, 1), GPIO_INPUT) +GPIO(LTE_OFF_ODL, PIN(8, 0), GPIO_ODR_LOW) +/* end of TODO */ GPIO(PP3300_DX_BASE, PIN(1, 1), GPIO_OUT_LOW) @@ -85,10 +95,12 @@ GPIO(I2C2_SDA, PIN(9, 1), GPIO_INPUT) /* EC_I2C2_PMIC_3V3_SDA */ GPIO(I2C3_SCL, PIN(D, 1), GPIO_INPUT) /* EC_I2C3_SENSOR_1V8_SCL */ GPIO(I2C3_SDA, PIN(D, 0), GPIO_INPUT) /* EC_I2C3_SENSOR_1V8_SDA */ -/* 5V enables: INPUT=1.5A, OUT_LOW=OFF, OUT_HIGH=3A */ +/* rev0: 5V enables: INPUT=1.5A, OUT_LOW=OFF, OUT_HIGH=3A */ GPIO(USB_C0_5V_EN, PIN(4, 2), GPIO_OUT_LOW) /* C0 5V Enable */ +GPIO(USB_C0_3A_EN, PIN(6, 6), GPIO_OUT_LOW) /* C0 Enable 3A */ GPIO(USB_C0_CHARGE_L, PIN(C, 0), GPIO_OUT_LOW) /* C0 Charge enable */ GPIO(USB_C1_5V_EN, PIN(B, 1), GPIO_OUT_LOW) /* C1 5V Enable */ +GPIO(USB_C1_3A_EN, PIN(3, 5), GPIO_OUT_LOW) /* C1 3A Enable */ GPIO(USB_C1_CHARGE_L, PIN(C, 3), GPIO_OUT_LOW) /* C1 Charge enable */ GPIO(USB_C0_PD_RST_L, PIN(0, 3), GPIO_OUT_LOW) /* C0 PD Reset */ GPIO(USB_C1_PD_RST_L, PIN(7, 4), GPIO_OUT_LOW) /* C1 PD Reset */ @@ -98,16 +110,20 @@ GPIO(USB_C0_TCPC_PWR, PIN(8, 4), GPIO_OUT_LOW) /* Enable C0 TCPC Power */ GPIO(USB2_OTG_ID, PIN(A, 1), GPIO_ODR_LOW) /* OTG ID */ GPIO(USB2_OTG_VBUSSENSE, PIN(9, 5), GPIO_OUT_LOW) /* OTG VBUS Sense */ +#ifdef BOARD_SORAKA +/* LEDs (2 colors on each port) */ +/* TODO(b/35585396): Implement. */ +GPIO(LED_YELLOW_C0, PIN(3, 2), GPIO_OUT_LOW) +GPIO(LED_WHITE_C0, PIN(C, 6), GPIO_OUT_LOW) +GPIO(LED_YELLOW_C1, PIN(3, 1), GPIO_OUT_LOW) +GPIO(LED_WHITE_C1, PIN(3, 0), GPIO_OUT_LOW) +#endif + /* Board ID */ GPIO(BOARD_VERSION1, PIN(C, 4), GPIO_INPUT) /* Board ID bit0 */ GPIO(BOARD_VERSION2, PIN(C, 2), GPIO_INPUT) /* Board ID bit1 */ GPIO(BOARD_VERSION3, PIN(1, 3), GPIO_INPUT) /* Board ID bit2 */ -/* Test points */ -GPIO(TP248, PIN(5, 7), GPIO_INPUT | GPIO_PULL_UP) /* EC_GPIO57 */ -GPIO(TP249, PIN(6, 6), GPIO_INPUT | GPIO_PULL_UP) /* EC_GPO66_ARM_L */ -GPIO(TP250, PIN(3, 5), GPIO_INPUT | GPIO_PULL_UP) /* EC_GPIO35_TEST_L */ - /* Alternate functions GPIO definitions */ ALTERNATE(PIN_MASK(6, 0x30), 1, MODULE_UART, 0) /* GPIO64-65 */ /* UART from EC to Servo */ ALTERNATE(PIN_MASK(8, 0x80), 1, MODULE_I2C, 0) /* GPIO87 */ /* EC_I2C1_3V3_SDA */ diff --git a/board/poppy/usb_pd_policy.c b/board/poppy/usb_pd_policy.c index 8e4f7cd428..3d926415bf 100644 --- a/board/poppy/usb_pd_policy.c +++ b/board/poppy/usb_pd_policy.c @@ -65,19 +65,36 @@ int board_vbus_source_enabled(int port) static void board_vbus_update_source_current(int port) { - enum gpio_signal gpio = port ? GPIO_USB_C1_5V_EN : GPIO_USB_C0_5V_EN; - int flags = (vbus_rp[port] == TYPEC_RP_1A5 && vbus_en[port]) ? - (GPIO_INPUT | GPIO_PULL_UP) : (GPIO_OUTPUT | GPIO_PULL_UP); + enum gpio_signal gpio_5v_en = port ? GPIO_USB_C1_5V_EN : + GPIO_USB_C0_5V_EN; + enum gpio_signal gpio_3a_en = port ? GPIO_USB_C1_3A_EN : + GPIO_USB_C0_3A_EN; - /* - * Driving USB_Cx_5V_EN high, actually put a 16.5k resistance - * (2x 33k in parallel) on the NX5P3290 load switch ILIM pin, - * setting a minimum OCP current of 3186 mA. - * Putting an internal pull-up on USB_Cx_5V_EN, effectively put a 33k - * resistor on ILIM, setting a minimum OCP current of 1505 mA. - */ - gpio_set_level(gpio, vbus_en[port]); - gpio_set_flags(gpio, flags); + if (system_get_board_version() >= 1) { + /* + * For rev1 and beyond, 1.5 vs 3.0 A limit is controlled by a + * dedicated gpio where high = 3.0A and low = 1.5A. VBUS on/off + * is controlled by GPIO_USB_C0/1_5V_EN. Both of these signals + * can remain outputs. + */ + gpio_set_level(gpio_3a_en, vbus_rp[port] == TYPEC_RP_3A0 ? + 1 : 0); + gpio_set_level(gpio_5v_en, vbus_en[port]); + } else { + /* + * Driving USB_Cx_5V_EN high, actually put a 16.5k resistance + * (2x 33k in parallel) on the NX5P3290 load switch ILIM pin, + * setting a minimum OCP current of 3186 mA. + * Putting an internal pull-up on USB_Cx_5V_EN, effectively put + * a 33k resistor on ILIM, setting a minimum OCP current of + * 1505 mA. + */ + int flags = (vbus_rp[port] == TYPEC_RP_1A5 && vbus_en[port]) ? + (GPIO_INPUT | GPIO_PULL_UP) : + (GPIO_OUTPUT | GPIO_PULL_UP); + gpio_set_level(gpio_5v_en, vbus_en[port]); + gpio_set_flags(gpio_5v_en, flags); + } } void typec_set_source_current_limit(int port, int rp)