summaryrefslogtreecommitdiff
path: root/board/atlas/gpio.inc
diff options
context:
space:
mode:
authorDuncan Laurie <dlaurie@google.com>2018-03-27 12:56:37 -0700
committerchrome-bot <chrome-bot@chromium.org>2018-04-06 14:44:06 -0700
commitc0ebdaee162cc5090458207b354fad4cb8ea89a9 (patch)
tree815f6dad3f37ff31d2a6610d2e1f5431e5c71272 /board/atlas/gpio.inc
parent7e50bfd037af520cafa3e71fafe9e95d1e9487ba (diff)
downloadchrome-ec-c0ebdaee162cc5090458207b354fad4cb8ea89a9.tar.gz
atlas: Add new board
This is based on the initial code from Caveh here: https://chromium-review.googlesource.com/959861 Most things are functional, with some workarounds for P0 boards. The type-c hotplug is not working in this commit, the HPD will be run from the tcpm in the next board build. For now we might be able to get it working on P0 with some more tweaking.. The other known issue is that the battery takes ~2 seconds to come back online after a cutoff (the auto-power-on timeout is one second so the board will not power on like it should) and sometimes the battery is not responding properly on i2c and it requires an EC reset. BUG=b:75070158 BRANCH=none TEST=tested on P0 boards Change-Id: I438cb93b78d6f501426842d6cbe3d6a994563358 Signed-off-by: Duncan Laurie <dlaurie@google.com> Signed-off-by: Caveh Jalali <caveh@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/982498 Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com> Tested-by: Caveh Jalali <caveh@google.com> Reviewed-by: Caveh Jalali <caveh@google.com>
Diffstat (limited to 'board/atlas/gpio.inc')
-rw-r--r--board/atlas/gpio.inc152
1 files changed, 152 insertions, 0 deletions
diff --git a/board/atlas/gpio.inc b/board/atlas/gpio.inc
new file mode 100644
index 0000000000..76713cf432
--- /dev/null
+++ b/board/atlas/gpio.inc
@@ -0,0 +1,152 @@
+/* -*- mode:c -*-
+ *
+ * Copyright 2018 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+/* Declare symbolic names for all the GPIOs that we care about.
+ * Note: Those with interrupt handlers must be declared first. */
+
+/* USB PD interrupt handler section */
+GPIO_INT(USB_C0_PD_INT_ODL, PIN(6, 1), GPIO_INT_FALLING, tcpc_alert_event)
+GPIO_INT(USB_C1_PD_INT_ODL, PIN(F, 5), GPIO_INT_FALLING, tcpc_alert_event)
+
+/* power seq interrupt handler section */
+GPIO_INT(ROP_DSW_PWROK_EC, PIN(F, 4), GPIO_INT_BOTH, power_signal_interrupt)
+GPIO_INT(ROP_EC_RSMRST_L, PIN(E, 2), GPIO_INT_BOTH, power_signal_interrupt)
+GPIO_INT(MECH_PWR_BTN_ODL, PIN(0, 1), GPIO_INT_BOTH | GPIO_PULL_UP, power_button_interrupt)
+GPIO_INT(SLP_S0_L, PIN(A, 4), GPIO_INT_BOTH, power_signal_interrupt)
+GPIO_INT(SLP_SUS_L_PCH, PIN(D, 4), GPIO_INT_BOTH, power_signal_interrupt)
+GPIO_INT(ROP_EC_ACOK, PIN(0, 0), GPIO_INT_BOTH, extpower_interrupt)
+
+/* misc interrupt handler section */
+GPIO_INT(EC_WP_L, PIN(A, 1), GPIO_INT_BOTH, switch_interrupt)
+GPIO_INT(LID_OPEN, PIN(D, 2), GPIO_INT_BOTH, lid_interrupt)
+GPIO_INT(ACCELGYRO3_INT_L, PIN(4, 1), GPIO_INT_FALLING, bmi160_interrupt)
+
+/* SoC section */
+GPIO(RSMRST_L, PIN(C, 2), GPIO_OUT_LOW) /* SOC Resume Reset */
+GPIO(EC_PCH_PWR_BTN_ODL, PIN(C, 1), GPIO_ODR_HIGH) /* Power button to SOC */
+GPIO(EC_PCH_RTCRST, PIN(7, 6), GPIO_OUT_LOW) /* RTC Reset (broken) */
+GPIO(EC_PCH_WAKE_L, PIN(7, 4), GPIO_ODR_HIGH) /* PCH wake */
+GPIO(EC_PROCHOT_ODL, PIN(3, 4), GPIO_ODR_HIGH) /* SOC PROCHOT# */
+GPIO(SYS_RESET_L, PIN(0, 2), GPIO_ODR_HIGH) /* SOC reset */
+GPIO(USB_C0_DP_HPD, PIN(C, 5), GPIO_OUT_LOW) /* C0 Hotplug */
+GPIO(USB_C1_DP_HPD, PIN(C, 6), GPIO_OUT_LOW) /* C1 Hotplug */
+
+/* power seq section */
+GPIO(EC_PCH_ACPRESENT, PIN(7, 3), GPIO_ODR_LOW) /* ACOK to SOC */
+/* note: SLP_SUS_L_PMIC is an input in the schematics */
+GPIO(SLP_SUS_L_PMIC, PIN(B, 7), GPIO_OUT_LOW) /* SOC SLP_SUS# */
+GPIO(SLP_S4_L, PIN(A, 3), GPIO_INPUT) /* SOC SLP_S4# */
+GPIO(SLP_S3_L, PIN(A, 6), GPIO_INPUT) /* SOC SLP_S3# */
+GPIO(ROP_INT_L, PIN(D, 5), GPIO_INPUT | GPIO_PULL_UP) /* PMIC IRQ (Unused) */
+
+/* USB PD section */
+GPIO(EN_USB_C0_5V_OUT, PIN(6, 7), GPIO_OUT_LOW) /* C0 5V Enable */
+GPIO(EN_USB_C0_CHARGE_L, PIN(0, 3), GPIO_OUT_LOW) /* alt fn */
+GPIO(EN_USB_C0_3A, PIN(6, 2), GPIO_OUT_LOW) /* 1.5/3.0 C0 current limit selection */
+GPIO(EN_USB_C1_5V_OUT, PIN(7, 0), GPIO_OUT_LOW) /* C1 5V Enable */
+GPIO(EN_USB_C1_CHARGE_L, PIN(0, 4), GPIO_OUT_LOW) /* alt fn */
+GPIO(EN_USB_C1_3A, PIN(8, 3), GPIO_OUT_LOW) /* alt fn 1.5/3.0 C1 current limit selection */
+GPIO(USB_PD_RST_L, PIN(F, 1), GPIO_OUT_LOW) /* C0,C1 PD Reset */
+
+/* misc section */
+GPIO(CCD_MODE_ODL, PIN(E, 3), GPIO_INPUT) /* Case Closed Debug Mode */
+GPIO(EC_BATT_PRES_L, PIN(E, 5), GPIO_INPUT) /* Battery Present */
+GPIO(EC_ENTERING_RW, PIN(E, 1), GPIO_OUTPUT) /* EC Entering RW */
+GPIO(EC_BL_DISABLE_L, PIN(D, 3), GPIO_ODR_LOW) /* Enable Backlight */
+GPIO(EC_BRD_ID1, PIN(9, 6), GPIO_INPUT) /* Board ID bit0 */
+GPIO(EC_BRD_ID2, PIN(9, 3), GPIO_INPUT) /* Board ID bit1 */
+GPIO(EC_BRD_ID3, PIN(F, 0), GPIO_INPUT) /* Board ID bit2 */
+GPIO(KBD_BL_EN, PIN(7, 5), GPIO_OUT_LOW) /* KB backlight enable */
+GPIO(EC_PLATFORM_RST, PIN(8, 6), GPIO_OUT_LOW) /* EC Reset to LDO_EN */
+
+/* I2C pins - these will be reconfigured for alternate function below */
+
+GPIO(EC_I2C0_USB_C0_SCL, PIN(9, 0), GPIO_INPUT) /* alt fn I2C1_SCL */
+GPIO(EC_I2C0_USB_C0_SDA, PIN(8, 7), GPIO_INPUT) /* alt fn I2C1_SDA */
+GPIO(EC_I2C0_USB_C1_SCL, PIN(9, 2), GPIO_INPUT) /* alt fn I2C2_SCL */
+GPIO(EC_I2C0_USB_C1_SDA, PIN(9, 1), GPIO_INPUT) /* alt fn I2C2_SDA */
+GPIO(EC_I2C1_GYRO_SCL, PIN(3, 3), GPIO_INPUT) /* alt fn I2C5_SCL */
+GPIO(EC_I2C1_GYRO_SDA, PIN(3, 6), GPIO_INPUT) /* alt fn I2C5_SDA */
+GPIO(EC_I2C2_SENSOR_3V3_SCL, PIN(D, 1), GPIO_INPUT) /* alt fn I2C3_SCL */
+GPIO(EC_I2C2_SENSOR_3V3_SDA, PIN(D, 0), GPIO_INPUT) /* alt fn I2C3_SDA */
+GPIO(EC_I2C3_POWER_SCL, PIN(B, 5), GPIO_INPUT) /* alt fn I2C0_SCL */
+GPIO(EC_I2C3_POWER_SDA, PIN(B, 4), GPIO_INPUT) /* alt fn I2C0_SDA */
+GPIO(EC_I2C4_BATTERY_SCL, PIN(F, 3), GPIO_INPUT) /* alt fn I2C4_SCL */
+GPIO(EC_I2C4_BATTERY_SDA, PIN(F, 2), GPIO_INPUT) /* alt fn I2C4_SDA */
+
+/* Not connected */
+GPIO(NC_GPIO32, PIN(3, 2), GPIO_INPUT | GPIO_PULL_UP)
+GPIO(NC_GPIO35, PIN(3, 5), GPIO_INPUT | GPIO_PULL_UP)
+GPIO(NC_GPIO37, PIN(3, 7), GPIO_INPUT | GPIO_PULL_UP)
+GPIO(NC_GPIO40, PIN(4, 0), GPIO_INPUT | GPIO_PULL_UP)
+GPIO(NC_GPIO44, PIN(4, 4), GPIO_INPUT | GPIO_PULL_UP)
+GPIO(NC_GPIO45, PIN(4, 5), GPIO_INPUT | GPIO_PULL_UP)
+GPIO(NC_GPIO50, PIN(5, 0), GPIO_INPUT | GPIO_PULL_UP)
+GPIO(NC_GPIO56, PIN(5, 6), GPIO_INPUT | GPIO_PULL_UP)
+GPIO(NC_GPIO57, PIN(5, 7), GPIO_INPUT | GPIO_PULL_UP)
+GPIO(NC_GPIO60, PIN(6, 0), GPIO_INPUT | GPIO_PULL_UP)
+GPIO(NC_GPIO63, PIN(6, 3), GPIO_INPUT | GPIO_PULL_UP)
+GPIO(NC_GPIO66, PIN(6, 6), GPIO_INPUT | GPIO_PULL_UP)
+GPIO(NC_GPIO82, PIN(8, 2), GPIO_INPUT | GPIO_PULL_UP)
+GPIO(NC_GPIO95, PIN(9, 5), GPIO_INPUT | GPIO_PULL_UP)
+GPIO(NC_GPIOA0, PIN(A, 0), GPIO_INPUT | GPIO_PULL_UP)
+GPIO(NC_GPIOA2, PIN(A, 2), GPIO_INPUT | GPIO_PULL_UP)
+GPIO(NC_GPIOB1, PIN(B, 1), GPIO_INPUT | GPIO_PULL_UP)
+GPIO(NC_GPIOB2, PIN(B, 2), GPIO_INPUT | GPIO_PULL_UP)
+GPIO(NC_GPIOB3, PIN(B, 3), GPIO_INPUT | GPIO_PULL_UP)
+GPIO(NC_GPIOC0, PIN(C, 0), GPIO_INPUT | GPIO_PULL_UP)
+GPIO(NC_GPIOC7, PIN(C, 7), GPIO_INPUT | GPIO_PULL_UP)
+GPIO(NC_GPIOD6, PIN(D, 6), GPIO_INPUT | GPIO_PULL_UP)
+GPIO(NC_GPIOD7, PIN(D, 7), GPIO_INPUT | GPIO_PULL_UP)
+GPIO(NC_GPIOE0, PIN(E, 0), GPIO_INPUT | GPIO_PULL_UP)
+GPIO(NC_GPIOE4, PIN(E, 4), GPIO_INPUT | GPIO_PULL_UP)
+
+/* WoV is unused */
+GPIO(NC_GPIO94, PIN(9, 4), GPIO_INPUT | GPIO_PULL_UP)
+GPIO(NC_GPIO97, PIN(9, 7), GPIO_INPUT | GPIO_PULL_UP)
+GPIO(NC_GPIOA5, PIN(A, 5), GPIO_INPUT | GPIO_PULL_UP)
+GPIO(NC_GPIOA7, PIN(A, 7), GPIO_INPUT | GPIO_PULL_UP)
+GPIO(NC_GPIOB0, PIN(B, 0), GPIO_INPUT | GPIO_PULL_UP)
+
+/* gpio alternate functions */
+ALTERNATE(PIN_MASK(0, 0x19), 0, MODULE_GPIO, 0) /* GPIO00|GPIO03|GPIO04 */
+ALTERNATE(PIN_MASK(8, 0x08), 0, MODULE_GPIO, 0) /* GPIO83 */
+ALTERNATE(PIN_MASK(A, 0x08), 0, MODULE_GPIO, 0) /* GPIOA3 */
+ALTERNATE(PIN_MASK(D, 0x04), 0, MODULE_GPIO, 0) /* GPIOD2 */
+
+/* PWM channels */
+ALTERNATE(PIN_MASK(8, 0x01), 0, MODULE_PWM, 0) /* GPIO80 PWM3 KBD_BL_PWM */
+ALTERNATE(PIN_MASK(C, 0x08), 0, MODULE_PWM, 0) /* GPIOC3 PWM0 CHARGE_LED1 */
+ALTERNATE(PIN_MASK(C, 0x10), 0, MODULE_PWM, 0) /* GPIOC4 PWM2 CHARGE_LED2 */
+
+/* I2C alternate functions */
+ALTERNATE(PIN_MASK(B, 0x30), 0, MODULE_I2C, 0) /* I2C0_SCL0|I2C0_SDA0 */
+ALTERNATE(PIN_MASK(9, 0x01), 0, MODULE_I2C, 0) /* I2C1_SCL0 */
+ALTERNATE(PIN_MASK(8, 0x80), 0, MODULE_I2C, 0) /* I2C1_SDA0 */
+ALTERNATE(PIN_MASK(9, 0x06), 0, MODULE_I2C, 0) /* I2C2_SCL0|I2C2_SDA0 */
+ALTERNATE(PIN_MASK(D, 0x03), 0, MODULE_I2C, 0) /* I2C3_SCL0|I2C3_SDA0 */
+ALTERNATE(PIN_MASK(F, 0x0c), 0, MODULE_I2C, 0) /* I2C4_SCL1|I2C4_SDA1 */
+ALTERNATE(PIN_MASK(3, 0x48), 0, MODULE_I2C, 0) /* I2C5_SDA0|I2C5_SCL0 */
+
+/* ADC alternate functions */
+ALTERNATE(PIN_MASK(4, 0x0c), 0, MODULE_ADC, 0) /* ADC2-3 */
+
+/* UART alternate functions */
+ALTERNATE(PIN_MASK(6, 0x30), 0, MODULE_UART, 0) /* UART from EC to Servo */
+
+/* keyboard */
+#define GPIO_KB_INPUT (GPIO_INPUT | GPIO_PULL_UP)
+#define GPIO_KB_OUTPUT (GPIO_ODR_HIGH)
+#define GPIO_KB_OUTPUT_COL2 (GPIO_OUT_LOW)
+
+/* keyboard alternate functions */
+ALTERNATE(PIN_MASK(0, 0xe0), 0, MODULE_KEYBOARD_SCAN, GPIO_KB_OUTPUT)
+ALTERNATE(PIN_MASK(1, 0x7f), 0, MODULE_KEYBOARD_SCAN, GPIO_KB_OUTPUT)
+ALTERNATE(PIN_MASK(2, 0x03), 0, MODULE_KEYBOARD_SCAN, GPIO_KB_OUTPUT)
+ALTERNATE(PIN_MASK(2, 0xfc), 0, MODULE_KEYBOARD_SCAN, GPIO_KB_INPUT)
+ALTERNATE(PIN_MASK(3, 0x03), 0, MODULE_KEYBOARD_SCAN, GPIO_KB_INPUT)
+GPIO(EC_KB_ROW02_INV, PIN(1, 7), GPIO_KB_OUTPUT_COL2)