coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
gpio.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <soc/gpio.h>
5 
6 /* NCORE GPIOs */
7 static const struct soc_gpio_map gpncore_gpio_map[] = {
8  GPIO_FUNC2, /* S0_NC00 - INT_HDMI_HPD - INT */
9  GPIO_FUNC2, /* S0_NC01 - HDMI_DDCDATA_SW */
10  GPIO_FUNC2, /* S0_NC02 - HDMI_DDCCLK_SW */
11  GPIO_NC, /* S0_NC03 - NC */
12  GPIO_NC, /* S0_NC04 - NC */
13  GPIO_NC, /* S0_NC05 - NC */
14  GPIO_FUNC2, /* S0_NC06 - EDP_HPD_L */
15  GPIO_INPUT, /* S0_NC07 - DDI1_DDCDATA - STRAP */
16  GPIO_NC, /* S0_NC08 - NC */
17  GPIO_OUT_HIGH, /* S0_NC09 - SOC_DISP_ON_C */
18  GPIO_FUNC2, /* S0_NC10 - SOC_EDP_BLON_C */
19  GPIO_FUNC2, /* S0_NC11 - SOC_DPST_PWM_C */
20  GPIO_NC, /* S0_NC12 - NC */
21  GPIO_INPUT, /* S0_NC13 - GPIO_NC13 - STRAP */
22  GPIO_NC, /* S0_NC14 - NC */
23  GPIO_DEFAULT, /* S0_NC15 - XDP_GPIO_S0_NC15 */
24  GPIO_DEFAULT, /* S0_NC16 - XDP_GPIO_S0_NC16 */
25  GPIO_DEFAULT, /* S0_NC17 - XDP_GPIO_S0_NC17 */
26  GPIO_DEFAULT, /* S0_NC18 - XDP_GPIO_S0_NC18 */
27  GPIO_DEFAULT, /* S0_NC19 - XDP_GPIO_S0_NC19 */
28  GPIO_DEFAULT, /* S0_NC20 - XDP_GPIO_S0_NC20 */
29  GPIO_DEFAULT, /* S0_NC21 - XDP_GPIO_S0_NC21 */
30  GPIO_DEFAULT, /* S0_NC22 - XDP_GPIO_S0_NC22 */
31  GPIO_DEFAULT, /* S0_NC23 - XDP_GPIO_S0_NC23 */
32  GPIO_NC, /* S0_NC24 - NC */
33  GPIO_NC, /* S0_NC25 - NC */
34  GPIO_NC, /* S0_NC26 - NC */
35  GPIO_END
36 };
37 
38 /* SCORE GPIOs */
39 static const struct soc_gpio_map gpscore_gpio_map[] = {
40  GPIO_ACPI_SCI, /* S0_SC000 - SOC_KBC_SCI - INT */
41  GPIO_FUNC2, /* S0_SC001 - SATA_DEVSLP_C */
42  GPIO_NC, /* S0-SC002 - SATA_LED_R_N (NC/PU) */
43  GPIO_NC, /* S0-SC003 - PCIE_CLKREQ_IMAGE# */
44  GPIO_FUNC1, /* S0-SC004 - PCIE_CLKREQ_WLAN# */
45  GPIO_NC, /* S0-SC005 - PCIE_CLKREQ_LAN# (NC) */
46  GPIO_NC, /* S0-SC006 - PCIE_CLKREQ3# (NC) */
47  GPIO_FUNC(2, PULL_DISABLE, 10K), /* S0-SC007 - SD3_WP external pull */
48  GPIO_NC, /* S0-SC008 - ACZ_RST# (NC) */
49  GPIO_NC, /* S0-SC009 - ACZ_SYNC (NC) */
50  GPIO_NC, /* S0-SC010 - ACZ_BCLK (NC) */
51  GPIO_NC, /* S0-SC011 - ACZ_STDOUT (NC) */
52  GPIO_NC, /* S0-SC012 - PCH_AZ_CODEC_SDIN0 (NC) */
53  GPIO_NC, /* S0-SC013 - NC */
54  GPIO_INPUT, /* S0-SC014 - DET_TRIGGER - INT */
55  GPIO_INPUT, /* S0-SC015 - AJACK_MICPRES_L - INT */
56  GPIO_FUNC(3, PULL_DOWN, 20K), /* S0-SC016 - MMC1_45_CLK */
57  GPIO_FUNC(3, PULL_UP, 20K), /* S0-SC017 - MMC1_45_D[0] */
58  GPIO_FUNC(3, PULL_UP, 20K), /* S0-SC018 - MMC1_45_D[1] */
59  GPIO_FUNC(3, PULL_UP, 20K), /* S0-SC019 - MMC1_45_D[2] */
60  GPIO_FUNC(3, PULL_UP, 20K), /* S0-SC020 - MMC1_45_D[3] */
61  GPIO_FUNC(3, PULL_UP, 20K), /* S0-SC021 - MMC1_45_D[4] */
62  GPIO_FUNC(3, PULL_UP, 20K), /* S0-SC022 - MMC1_45_D[5] */
63  GPIO_FUNC(3, PULL_UP, 20K), /* S0-SC023 - MMC1_45_D[6] */
64  GPIO_FUNC(3, PULL_UP, 20K), /* S0-SC024 - MMC1_45_D[7] */
65  GPIO_FUNC(3, PULL_UP, 20K), /* S0-SC025 - MMC1_45_CMD */
66  GPIO_FUNC(3, PULL_UP, 20K), /* S0-SC026 - MMC1_45_RST */
67  GPIO_NC, /* S0-SC027 - NC */
68  GPIO_NC, /* S0-SC028 - NC */
69  GPIO_NC, /* S0-SC029 - NC */
70  GPIO_NC, /* S0-SC030 - NC */
71  GPIO_NC, /* S0-SC031 - NC */
72  GPIO_NC, /* S0-SC032 - NC */
73  GPIO_NC, /* S0-SC033 - SD3_CLK */
74  GPIO_NC, /* S0-SC034 - SD3_D0 */
75  GPIO_NC, /* S0-SC035 - SD3_D1 */
76  GPIO_NC, /* S0-SC036 - SD3_D2 */
77  GPIO_NC, /* S0-SC037 - SD3_D3 */
78  GPIO_FUNC(1, PULL_UP, 20K), /* S0-SC038 - SD3_CD# */
79  GPIO_NC, /* S0-SC039 - SD3_CMD */
80  GPIO_NC, /* S0-SC040 - SDMMC3_1P8_EN - TP3 */
81  GPIO_NC, /* S0-SC041 - SDIO3_PWR_EN# */
82  GPIO_FUNC1, /* S0-SC042 - LPC_LAD0 */
83  GPIO_FUNC1, /* S0-SC043 - LPC-LAD1 */
84  GPIO_FUNC1, /* S0-SC044 - LPC_LAD2 */
85  GPIO_FUNC1, /* S0-SC045 - LPC_LAD3 */
86  GPIO_FUNC1, /* S0-SC046 - LPC_LFRAME# */
87  GPIO_FUNC1, /* S0-SC047 - PCLK_TPM */
88  GPIO_FUNC1, /* S0-SC048 - CLK_PCI_EC */
89  GPIO_FUNC1, /* S0-SC049 - LPC_CLKRUN_L */
90  GPIO_NC, /* S0-SC050 - IRQ_SERIRQ */
91  GPIO_NC, /* S0-SC051 - SMB_SOC_DATA (XDP) */
92  GPIO_NC, /* S0-SC052 - SMB_SOC_CLK (XDP) */
93  GPIO_NC, /* S0-SC053 - SMB_SOC_ALERTB (NC) */
94  GPIO_DEFAULT, /* S0-SC054 - NC */
95  GPIO_DIRQ, /* S0-SC055 - TRACKPAD_INT_DX */
96  GPIO_INPUT, /* S0-SC056 - GPIO_S0_SC_56 - STRAP */
97  GPIO_FUNC1, /* S0-SC057 - PCH_UART_TXD */
98  GPIO_INPUT, /* S0-SC058 - SIM_DET_C */
99  GPIO_INPUT_LEGACY, /* S0-SC059 - EC_IN_RW_C */
100  GPIO_NC, /* S0-SC060 - NC */
101  GPIO_FUNC1, /* S0-SC061 - SOC_UART_RX */
102  GPIO_FUNC1, /* S0-SC062 - I2S_BCLK */
103  GPIO_FUNC1, /* S0-SC063 - I2S_LRCLK */
104  GPIO_FUNC1, /* S0-SC064 - I2S_DIN */
105  GPIO_FUNC1, /* S0-SC065 - I2S_DOUT */
106  GPIO_FUNC1, /* S0-SC066 - SIO_SPI_CS# */
107  GPIO_FUNC1, /* S0-SC067 - SIO_SPI_MISO */
108  GPIO_FUNC1, /* S0-SC068 - SIO_SPI_MOSI */
109  GPIO_FUNC1, /* S0-SC069 - SIO_SPI_CLK */
110  GPIO_NC, /* S0-SC070 - ALS_INT_L - INT(NC) */
111  GPIO_NC, /* S0-SC071 - NC */
112  GPIO_DIRQ, /* S0-SC072 - TOUCH_INT_L_DX */
113  GPIO_NC, /* S0-SC073 - NC */
114  GPIO_NC, /* S0-SC074 - SIO_UART2_RXD (NC) */
115  GPIO_NC, /* S0-SC075 - SIO_UART2_TXD (NC) */
116  GPIO_INPUT, /* S0-SC076 - BIOS_STRAP - STRAP */
117  GPIO_INPUT, /* S0-SC077 - SOC_OVERRIDE - STRAP */
118  GPIO_FUNC1, /* S0-SC078 - I2C_0_SDA */
119  GPIO_FUNC1, /* S0-SC079 - I2C_0_SCL */
120  GPIO_FUNC1, /* S0-SC080 - I2C_1_SDA */
121  GPIO_FUNC1, /* S0-SC081 - I2C_1_SCL */
122  GPIO_NC, /* S0-SC082 - NC */
123  GPIO_NC, /* S0-SC083 - NC */
124  GPIO_NC, /* S0-SC084 - NC */
125  GPIO_NC, /* S0-SC085 - NC */
126  GPIO_NC, /* S0-SC086 - I2C_4_SDA */
127  GPIO_NC, /* S0-SC087 - I2C_4_SCL */
128  GPIO_NC, /* S0-SC088 - I2C_5_SDA */
129  GPIO_NC, /* S0-SC089 - I2C_5_SCL */
130  GPIO_NC, /* S0-SC090 - NC */
131  GPIO_NC, /* S0-SC091 - NC */
132  GPIO_NC, /* S0-SC092 - I2C_NGFF_SDA (NC/PU) */
133  GPIO_NC, /* S0-SC093 - I2C_NGFF_SCL (NC/PU) */
134  GPIO_NC, /* S0-SC094 - NC */
135  GPIO_NC, /* S0-SC095 - SIO_PWM1 (NC) */
136  GPIO_FUNC1, /* S0-SC096 - I2S_MCLK */
137  GPIO_NC, /* S0-SC097 - NC */
138  GPIO_NC, /* S0-SC098 - NC */
139  GPIO_NC, /* S0-SC099 - NC */
140  GPIO_NC, /* S0-SC100 - NC */
141  GPIO_DIRQ, /* S0-SC101 - KBD_IRQ# */
142  GPIO_END
143 };
144 
145 /* SSUS GPIOs */
146 static const struct soc_gpio_map gpssus_gpio_map[] = {
147  GPIO_ACPI_WAKE, /* S500 - PCH_WAKE# */
148  GPIO_ACPI_WAKE, /* S501 - TRACKPAD_INT# - INT */
149  GPIO_NC, /* S502 - TOUCH_INT# - INT */
150  GPIO_FUNC6, /* S503 - LTE_WAKE_L# - INT */
151  GPIO_NC, /* S504 - SOC_JTAG2_TDO (NC/PU) */
152  GPIO_FUNC1, /* S505 - SUS_CLK_WLAN (NC) */
153  GPIO_INPUT_PU, /* S506 - PCH_SPI_WP */
154  GPIO_ACPI_SMI, /* S507 - SOC_KBC_SMI - INT */
155  GPIO_NC, /* S508 - NC */
156  GPIO_DIRQ, /* S509 - MUX_AUD_INT1# */
157  GPIO_OUT_HIGH, /* S510 - WIFI_DISABLE_L */
158  GPIO_FUNC0, /* S511 - SUSPWRDNACK */
159  GPIO_FUNC0, /* S512 - WIFI_SUSCLK */
160  GPIO_FUNC0, /* S513 - SLP_SX */
161  GPIO_NC, /* S514 - NC */
162  GPIO_FUNC0, /* S515 - WLAN_WAKE_L - INT */
163  GPIO_FUNC0, /* S516 - PCH_PWRBTN_L */
164  GPIO_NC, /* S517 - NC */
165  GPIO_FUNC0, /* S518 - SUS_STAT# */
166  GPIO_FUNC0, /* S519 - USB_OC0# */
167  GPIO_FUNC0, /* S520 - USB_OC1# */
168  GPIO_NC, /* S521 - NC */
169  GPIO_NC, /* S522 - XDP_GPIO_DFX0 */
170  GPIO_NC, /* S523 - XDP_GPIO_DFX1 */
171  GPIO_NC, /* S524 - XDP_GPIO_DFX2 */
172  GPIO_NC, /* S525 - XDP_GPIO_DFX3 */
173  GPIO_NC, /* S526 - XDP_GPIO_DFX4 */
174  GPIO_NC, /* S527 - XDP_GPIO_DFX5 */
175  GPIO_NC, /* S528 - XDP_GPIO_DFX6 */
176  GPIO_NC, /* S529 - XDP_GPIO_DFX7 */
177  GPIO_NC, /* S530 - XDP_GPIO_DFX8 */
178  GPIO_NC, /* S531 - NC */
179  GPIO_NC, /* S532 - NC */
180  GPIO_NC, /* S533 - NC */
181  GPIO_NC, /* S534 - NC */
182  GPIO_OUT_HIGH, /* S535 - LTE_DISABLE_L */
183  GPIO_NC, /* S536 - NC */
184  GPIO_INPUT, /* S537 - RAM_ID0 */
185  GPIO_INPUT, /* S538 - RAM_ID1 */
186  GPIO_INPUT, /* S539 - RAM_ID2 */
187  GPIO_NC, /* S540 - NC */
188  GPIO_NC, /* S541 - NC */
189  GPIO_NC, /* S542 - NC */
190  GPIO_NC, /* S543 - NC */
191  GPIO_END
192 };
193 
198 };
199 
202 };
203 
204 static struct soc_gpio_config gpio_config = {
205  .ncore = gpncore_gpio_map,
206  .score = gpscore_gpio_map,
207  .ssus = gpssus_gpio_map,
208  .core_dirq = &core_dedicated_irq,
209  .sus_dirq = &sus_dedicated_irq,
210 };
211 
213 {
214  return &gpio_config;
215 }
#define GPIO_INPUT
Definition: gpio_ftns.h:24
#define CODEC_IRQ_GPIO
Definition: irqroute.h:47
#define I8042_IRQ_OFFSET
Definition: irqroute.h:36
#define TOUCH_IRQ_OFFSET
Definition: irqroute.h:35
#define TPAD_IRQ_GPIO
Definition: irqroute.h:39
#define CODEC_IRQ_OFFSET
Definition: irqroute.h:45
#define TPAD_IRQ_OFFSET
Definition: irqroute.h:34
#define TOUCH_IRQ_GPIO
Definition: irqroute.h:40
#define I8042_IRQ_GPIO
Definition: irqroute.h:41
#define PULL_DOWN
Definition: buildOpts.c:71
#define PULL_UP
Definition: buildOpts.c:70
struct soc_gpio_config * mainboard_get_gpios(void)
Definition: gpio.c:207
static const struct soc_gpio_map gpssus_gpio_map[]
Definition: gpio.c:146
static const u8 sus_dedicated_irq[GPIO_MAX_DIRQS]
Definition: gpio.c:200
static const struct soc_gpio_map gpncore_gpio_map[]
Definition: gpio.c:7
static const struct soc_gpio_map gpscore_gpio_map[]
Definition: gpio.c:39
static struct soc_gpio_config gpio_config
Definition: gpio.c:204
static const u8 core_dedicated_irq[GPIO_MAX_DIRQS]
Definition: gpio.c:194
#define GPIO_END
Definition: gpio.h:302
#define GPIO_FUNC0
Definition: gpio.h:263
#define GPIO_ACPI_SCI
Definition: gpio.h:273
#define GPIO_FUNC2
Definition: gpio.h:265
#define GPIO_FUNC(_func, _pudir, _str)
Definition: gpio.h:255
#define GPIO_DIRQ
Definition: gpio.h:188
#define GPIO_ACPI_SMI
Definition: gpio.h:290
#define GPIO_MAX_DIRQS
Definition: gpio.h:314
#define GPIO_DEFAULT
Definition: gpio.h:311
#define GPIO_INPUT_PU
Definition: gpio.h:308
#define GPIO_FUNC6
Definition: gpio.h:269
#define GPIO_INPUT_LEGACY
Definition: gpio.h:307
#define GPIO_OUT_HIGH
Definition: gpio.h:245
#define GPIO_ACPI_WAKE
Definition: gpio.h:282
#define GPIO_FUNC1
Definition: gpio.h:264
#define GPIO_NC
Definition: gpio.h:310
uint8_t u8
Definition: stdint.h:45