summaryrefslogtreecommitdiff
path: root/board/cheza/gpio.inc
blob: 954bf8820076cfda9949f7d5a393ae1716fac5f9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
/* -*- 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-C interrupts */
GPIO_INT(USB_C0_PD_INT_ODL,    PIN(A, 0), GPIO_INT_FALLING | GPIO_SEL_1P8V, tcpc_alert_event)  /* Interrupt from port-0 TCPC */
GPIO_INT(USB_C1_PD_INT_ODL,    PIN(F, 5), GPIO_INT_FALLING, tcpc_alert_event)  /* Interrupt from port-1 TCPC */
GPIO_INT(USB_C0_SWCTL_INT_ODL, PIN(0, 3), GPIO_INT_FALLING, ppc_interrupt)  /* Interrupt from port-0 PPC */
GPIO_INT(USB_C0_BC12_INT_L,    PIN(6, 1), GPIO_INT_FALLING, usb0_evt)  /* Interrupt from port-0 BC1.2 */
GPIO_INT(USB_C1_BC12_INT_L,    PIN(8, 2), GPIO_INT_FALLING, usb1_evt)  /* Interrupt from port-1 BC1.2 */
GPIO_INT(USB_C0_VBUS_DET_L,    PIN(6, 2), GPIO_INT_BOTH | GPIO_PULL_UP, vbus0_evt)  /* BC1.2 VBUS detection on port-0 */
GPIO_INT(USB_C1_VBUS_DET_L,    PIN(8, 3), GPIO_INT_BOTH | GPIO_PULL_UP, vbus1_evt)  /* BC1.2 VBUS detection on port-1 */
GPIO_INT(USB_C0_CABLE_DET,     PIN(3, 7), GPIO_INT_RISING, anx74xx_cable_det_interrupt)  /* Cable detection from port-0 TCPC */
GPIO_INT(ACCEL_GYRO_INT_L,     PIN(D, 3), GPIO_INT_RISING | GPIO_SEL_1P8V, bmi160_interrupt)  /* Accelerometer/gyro interrupt */

/* System interrupts */
GPIO_INT(AC_PRESENT,        PIN(0, 0), GPIO_INT_BOTH, extpower_interrupt) /* ACOK_OD */
GPIO_INT(POWER_BUTTON_L,    PIN(0, 1), GPIO_INT_BOTH, power_button_interrupt)  /* EC_PWR_BTN_ODL */
GPIO_INT(VOLUME_DOWN_L,     PIN(7, 0), GPIO_INT_BOTH | GPIO_PULL_UP, button_interrupt)  /* EC_VOLDN_BTN_ODL */
GPIO_INT(VOLUME_UP_L,       PIN(1, 1), GPIO_INT_BOTH | GPIO_PULL_UP, button_interrupt)  /* EC_VOLUP_BTN_ODL */
GPIO_INT(WP_L,              PIN(A, 1), GPIO_INT_BOTH, switch_interrupt)  /* EC_WP_ODL */
GPIO_INT(LID_OPEN,          PIN(D, 2), GPIO_INT_BOTH, lid_interrupt)  /* LID_OPEN_EC */
GPIO_INT(AP_RST_REQ,        PIN(C, 2), GPIO_INT_RISING | GPIO_PULL_DOWN | GPIO_SEL_1P8V, chipset_reset_request_interrupt)  /* Reset request from AP */
/* AP_RST_L and PS_HOLD are used for PMIC and AP negotiation. Don't change their states. */
GPIO_INT(AP_RST_L,          PIN(C, 1), GPIO_INT_BOTH | GPIO_SEL_1P8V, power_signal_interrupt)
GPIO_INT(PS_HOLD,           PIN(D, 4), GPIO_INT_BOTH | GPIO_PULL_DOWN | GPIO_SEL_1P8V, power_signal_interrupt)  /* Indicate when AP triggers reset/shutdown */
GPIO_INT(PMIC_FAULT_L,      PIN(7, 6), GPIO_INT_BOTH | GPIO_SEL_1P8V, power_signal_interrupt)  /* Any PMIC fault? */
/* When switch-cap is off, the POWER_GOOD signal is floating. Need a pull-down to make it low. */
GPIO_INT(POWER_GOOD,        PIN(5, 4), GPIO_INT_BOTH | GPIO_PULL_DOWN | GPIO_SEL_1P8V, power_signal_interrupt)  /* SRC_PP1800_S4A from PMIC */
GPIO_INT(SHI_CS_L,          PIN(5, 3), GPIO_INT_FALLING | GPIO_PULL_DOWN | GPIO_SEL_1P8V, shi_cs_event)  /* AP_EC_SPI_CS_L */
GPIO_INT(CC_LID_BASE_ADC,   PIN(4, 5), GPIO_INT_BOTH, base_detect_interrupt)  /* Base detection */

GPIO(EC_SELF_RST,           PIN(E, 0), GPIO_OUT_LOW)   /* Self-reset EC */
GPIO(EC_RST_ODL,            PIN(0, 2), GPIO_INPUT)     /* Wake source: EC reset */
GPIO(ENTERING_RW,           PIN(E, 1), GPIO_OUT_LOW)   /* EC_ENTERING_RW: Indicate when EC is entering RW code */
GPIO(CCD_MODE_ODL,          PIN(E, 3), GPIO_INPUT)     /* Case Closed Debug Mode */
GPIO(BATT_PRES_ODL,         PIN(E, 5), GPIO_INPUT)     /* EC_BATT_PRES_ODL: Battery Present */
GPIO(PROCHOT_L,             PIN(3, 4), GPIO_INPUT)

/* PMIC/AP 1.8V */
GPIO(PM845_RESIN_L,         PIN(3, 2), GPIO_ODR_HIGH | GPIO_SEL_1P8V)  /* PMIC reset trigger */
GPIO(WARM_RESET_L,          PIN(F, 4), GPIO_ODR_HIGH | GPIO_SEL_1P8V)  /* AP warm reset */
GPIO(PMIC_KPD_PWR_ODL,      PIN(D, 6), GPIO_ODR_HIGH | GPIO_SEL_1P8V)  /* PMIC power button */
GPIO(EC_INT_L,              PIN(A, 2), GPIO_ODR_HIGH | GPIO_SEL_1P8V)  /* Interrupt line between AP and EC */
GPIO(AP_SUSPEND_L,          PIN(5, 7), GPIO_INPUT | GPIO_SEL_1P8V)     /* Suspend signal from AP */

/* Power enables */
GPIO(SWITCHCAP_ON_L,        PIN(D, 5), GPIO_OUT_LOW)   /* Enable switch cap. XXX: It's active-high */
GPIO(VBOB_EN,               PIN(9, 5), GPIO_OUT_LOW)   /* Enable VBOB */
/* TODO(b/110988793): Default it to LOW and make it a S3 rail once the bug is fixed. */
GPIO(EN_PP3300_A,           PIN(A, 6), GPIO_OUT_HIGH)  /* Enable PP3300 */
GPIO(EN_PP5000,             PIN(6, 7), GPIO_OUT_LOW)   /* EN_PP5000_A: Enable PP5000 */
GPIO(ENABLE_BACKLIGHT,      PIN(2, 6), GPIO_OUT_LOW)   /* EC_BL_DISABLE_L: Backlight disable signal from EC */

/* Sensors */
GPIO(ALS_INT_L,             PIN(5, 0), GPIO_INPUT)     /* ALS sensor interrupt */
GPIO(P_SENSOR_INT_L,        PIN(1, 4), GPIO_INPUT | GPIO_SEL_1P8V) /* P-sensor interrupt */
GPIO(RCAM_VSYNC,            PIN(4, 0), GPIO_INPUT)     /* VSYNC from rear camera */

/* Base */
GPIO(EN_PPVAR_VAR_BASE,     PIN(1, 2), GPIO_OUT_LOW)   /* Power to the base */
GPIO(EN_CC_LID_BASE_PH,     PIN(0, 7), GPIO_ODR_HIGH)
GPIO(EN_CC_LID_BASE_PULLDN, PIN(1, 5), GPIO_ODR_HIGH)
GPIO(REVERSE_DOCK_EC,       PIN(C, 6), GPIO_INPUT)     /* Indicate if the dock is reversed */
GPIO(CC_LID_RX_BASE_TX,     PIN(7, 5), GPIO_INPUT)
GPIO(CC_LID_RX_BASE_RX,     PIN(8, 6), GPIO_INPUT)

/* LEDs */
GPIO(CHG_LED_Y_C0,          PIN(C, 3), GPIO_OUT_LOW)   /* EC_CHG_LED_Y_C0 */
GPIO(CHG_LED_W_C0,          PIN(C, 4), GPIO_OUT_LOW)   /* EC_CHG_LED_W_C0 */
GPIO(CHG_LED_Y_C1,          PIN(3, 1), GPIO_OUT_LOW)   /* EC_CHG_LED_Y_C1 */
GPIO(CHG_LED_W_C1,          PIN(3, 0), GPIO_OUT_LOW)   /* EC_CHG_LED_W_C1 */

/*
 * USB HS muxes
 *
 *               C0_MUX:D ----- C0_BC12 ---- C0_PORT
 * AP --+------- C0_MUX:D1
 *      |   +--- C0_MUX:D2
 *      |   |
 *      |   |
 *      |   |    C1_MUX:D ----- C1_BC12 ---- C1_PORT
 *      |   | +- C1_MUX:D1
 *      +------- C1_MUX:D2
 *          | |
 * AP --- USB_HUB
 *
 * TODO(waihong): Support auto-detection and switching.
 */
/* Switch both port-0 and port-1 to the hub, which matches the SS path. */
GPIO(USB_C0_HS_MUX_OE_L,    PIN(A, 4), GPIO_OUT_LOW)
GPIO(USB_C0_HS_MUX_SEL,     PIN(A, 3), GPIO_OUT_HIGH)  /* L:D1(AP), H:D2(hub) */
GPIO(USB_C1_HS_MUX_OE_L,    PIN(7, 3), GPIO_OUT_LOW)
GPIO(USB_C1_HS_MUX_SEL,     PIN(7, 4), GPIO_OUT_LOW)   /* L:D1(hub), H:D2(AP) */

/* USB-C port-0 controls */
GPIO(USB_C0_PD_RST_R_L,     PIN(F, 1), GPIO_OUT_HIGH)  /* Port-0 TCPC chip reset */
GPIO(EN_USB_C0_TCPC_PWR,    PIN(6, 0), GPIO_OUT_LOW)   /* Port-0 TCPC power enable */

/* USB-C port-1 controls */
GPIO(USB_C1_PD_RST_ODL,     PIN(E, 4), GPIO_ODR_HIGH)  /* Port-1 TCPC chip reset */
GPIO(EN_USB_C1_5V_OUT,      PIN(C, 0), GPIO_OUT_LOW)   /* Port-1 power switch 5V output */
GPIO(EN_USB_C1_3A,          PIN(5, 6), GPIO_OUT_LOW)   /* Port-1 power switch 3A current */
GPIO(EN_USB_C1_CHARGE_EC_L, PIN(B, 1), GPIO_OUT_LOW)   /* Port-1 enable charging */
GPIO(USBC_MUX_CONF1,        PIN(5, 1), GPIO_OUT_HIGH)  /* Port-1 enable DP switch */

/* USB-C port-1 interrupts */
GPIO(USB_C1_DP_HPD,         PIN(9, 6), GPIO_INPUT)     /* DP HPD from port-1 TCPC */
GPIO(USB_C1_OC_ODL,         PIN(D, 7), GPIO_INPUT)     /* Port-1 power switch over-current */

/* I2C */
GPIO(I2C0_SCL,              PIN(B, 5), GPIO_INPUT)     /* EC_I2C_POWER_SCL */
GPIO(I2C0_SDA,              PIN(B, 4), GPIO_INPUT)     /* EC_I2C_POWER_SDA */
GPIO(I2C1_SCL,              PIN(9, 0), GPIO_INPUT)     /* EC_I2C_USB_C0_PD_SCL */
GPIO(I2C1_SDA,              PIN(8, 7), GPIO_INPUT)     /* EC_I2C_USB_C0_PD_SDA */
GPIO(I2C2_SCL,              PIN(9, 2), GPIO_INPUT)     /* EC_I2C_USB_C1_PD_SCL */
GPIO(I2C2_SDA,              PIN(9, 1), GPIO_INPUT)     /* EC_I2C_USB_C1_PD_SDA */
GPIO(I2C5_SCL,              PIN(3, 3), GPIO_INPUT)     /* EC_I2C_EEPROM_SCL */
GPIO(I2C5_SDA,              PIN(3, 6), GPIO_INPUT)     /* EC_I2C_EEPROM_SDA */
GPIO(I2C7_SCL,              PIN(B, 3), GPIO_INPUT |
                                       GPIO_SEL_1P8V)  /* EC_I2C_SENSOR_SCL */
GPIO(I2C7_SDA,              PIN(B, 2), GPIO_INPUT |
                                       GPIO_SEL_1P8V)  /* EC_I2C_SENSOR_SDA */

/* Board/SKU IDs */
GPIO(BOARD_VERSION1,        PIN(C, 7), GPIO_INPUT)     /* BRD_ID1 */
GPIO(BOARD_VERSION2,        PIN(9, 3), GPIO_INPUT)     /* BRD_ID2 */
GPIO(BOARD_VERSION3,        PIN(8, 0), GPIO_INPUT)     /* BRD_ID3 */
GPIO(SKU_ID1,               PIN(F, 0), GPIO_INPUT)
GPIO(SKU_ID2,               PIN(4, 1), GPIO_INPUT)

/* Switchcap */
/*
 * GPIO0 is configured as PVC_PG. When the chip in power down mode, it outputs
 * high-Z. Set pull-down to avoid floating.
 */
GPIO(DA9313_GPIO0,          PIN(2, 3), GPIO_INPUT | GPIO_PULL_DOWN) /* Switchcap GPIO0 */
GPIO(DA9313_GPIO1,          PIN(2, 2), GPIO_INPUT | GPIO_PULL_DOWN) /* Switchcap GPIO1 */

/* Alternate functions GPIO definitions */
ALTERNATE(PIN_MASK(6, 0x30), 0, MODULE_UART, GPIO_PULL_UP) /* UART (GPIO64/65) */
ALTERNATE(PIN_MASK(B, 0x30), 1, MODULE_I2C, 0)             /* I2C0 (GPIOB4/B5) */
ALTERNATE(PIN_MASK(9, 0x07), 1, MODULE_I2C, 0)             /* I2C1 SDA (GPIO90), I2C2 (GPIO91/92) */
ALTERNATE(PIN_MASK(8, 0x80), 1, MODULE_I2C, 0)             /* I2C1 SCL (GPIO87) */
ALTERNATE(PIN_MASK(3, 0x48), 1, MODULE_I2C, 0)             /* I2C5 (GPIO33/36) */
ALTERNATE(PIN_MASK(B, 0x0C), 1, MODULE_I2C, GPIO_SEL_1P8V) /* I2C7 (GPIOB2/B3) - 1.8V */
ALTERNATE(PIN_MASK(4, 0x1C), 0, MODULE_ADC, 0)             /* ADC1 (GPIO44), ADC2 (GPIO43), ADC3 (GPIO42) */
ALTERNATE(PIN_MASK(4, 0xC0), 1, MODULE_SPI, GPIO_SEL_1P8V) /* SHI_SDO (GPIO47), SHI_SDI (GPIO46) */
ALTERNATE(PIN_MASK(5, 0x28), 1, MODULE_SPI, GPIO_SEL_1P8V) /* SHI_SCLK (GPIO55), SHI_CS# (GPIO53) */
ALTERNATE(PIN_MASK(B, 0x80), 1, MODULE_PWM, 0)             /* PWM5 (GPIOB7) */