poppy/soraka: Add support for poppy-rev1

Update GPIO pinout for poppy rev1. The incompatible changes
are gated with #ifdef POPPY_REV1, which can be set in board.h.

For soraka, rev1 is the default.

For poppy, we'll switch the default board revision at a later stage.

BRANCH=none
BUG=b:35585396
TEST=Build and boot poppy and soraka on poppy-rev0, still works fine.

Change-Id: Iaca1721f38566848cd725dbc396d93e4913de0d7
Reviewed-on: https://chromium-review.googlesource.com/481564
Commit-Ready: Nicolas Boichat <drinkcat@chromium.org>
Tested-by: Nicolas Boichat <drinkcat@chromium.org>
Reviewed-by: Furquan Shaikh <furquan@chromium.org>
This commit is contained in:
Nicolas Boichat
2017-04-19 14:36:27 +08:00
committed by chrome-bot
parent 769464c544
commit ecae0ea6ba
3 changed files with 63 additions and 22 deletions

View File

@@ -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.

View File

@@ -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 */

View File

@@ -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)