1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 3 #include <southbridge/intel/common/gpio.h> 4 5 static const struct pch_gpio_set1 pch_gpio_set1_mode = { 6 .gpio0 = GPIO_MODE_NONE, /* Unused */ 7 .gpio1 = GPIO_MODE_NONE, /* Unused */ 8 .gpio2 = GPIO_MODE_NONE, /* Unused */ 9 .gpio3 = GPIO_MODE_NONE, /* Unused */ 10 .gpio4 = GPIO_MODE_NATIVE, /* Native - TPSINT# for TP SMBus IRQ */ 11 .gpio5 = GPIO_MODE_NONE, /* Unused */ 12 .gpio6 = GPIO_MODE_GPIO, /* Input - BOARD_ID4 */ 13 .gpio7 = GPIO_MODE_GPIO, /* Input - BOARD_ID5 */ 14 .gpio8 = GPIO_MODE_GPIO, /* Output - BT on/off */ 15 .gpio9 = GPIO_MODE_NONE, /* Unused */ 16 .gpio10 = GPIO_MODE_NONE, /* Unused */ 17 .gpio11 = GPIO_MODE_GPIO, /* Input - TP WAKEUP Event */ 18 .gpio12 = GPIO_MODE_NONE, /* Unused */ 19 .gpio13 = GPIO_MODE_GPIO, /* Input - SCI from EC */ 20 .gpio14 = GPIO_MODE_GPIO, /* Output - AOAC WLAN power control */ 21 .gpio15 = GPIO_MODE_GPIO, /* Unused - Do not control WLAN*/ 22 .gpio16 = GPIO_MODE_NONE, /* Unused */ 23 .gpio17 = GPIO_MODE_GPIO, /* Input - DGPU_PWROK */ 24 .gpio18 = GPIO_MODE_NATIVE, /* Native - PCIECLKRQ1# LAN clock pin*/ 25 .gpio19 = GPIO_MODE_GPIO, /* Input - Boot BIOS Selection 0 */ 26 .gpio20 = GPIO_MODE_NATIVE, /* Native - PCIECLKRQ2# SDCard clock pin */ 27 .gpio21 = GPIO_MODE_GPIO, /* Input - EC_ENTERING_RW for Google OS */ 28 .gpio22 = GPIO_MODE_GPIO, /* Input - BIOS RECOVERY */ 29 .gpio23 = GPIO_MODE_NONE, /* Unused */ 30 .gpio24 = GPIO_MODE_GPIO, /* Output - DGPU_HOLD_RST# */ 31 .gpio25 = GPIO_MODE_NONE, /* Unused */ 32 .gpio26 = GPIO_MODE_NONE, /* Unused */ 33 .gpio27 = GPIO_MODE_NONE, /* Unused */ 34 .gpio28 = GPIO_MODE_NONE, /* Unused */ 35 .gpio29 = GPIO_MODE_NONE, /* Unused */ 36 .gpio30 = GPIO_MODE_NATIVE, /* Native - SUSWARN_EC# */ 37 .gpio31 = GPIO_MODE_NONE, /* Unused */ 38 }; 39 40 static const struct pch_gpio_set1 pch_gpio_set1_direction = { 41 .gpio0 = GPIO_DIR_INPUT, /* Unused */ 42 .gpio1 = GPIO_DIR_INPUT, /* Unused */ 43 .gpio2 = GPIO_DIR_INPUT, /* Unused */ 44 .gpio3 = GPIO_DIR_INPUT, /* Unused */ 45 .gpio4 = GPIO_DIR_INPUT, /* Native */ 46 .gpio5 = GPIO_DIR_INPUT, /* Unused */ 47 .gpio6 = GPIO_DIR_INPUT, /* Input */ 48 .gpio7 = GPIO_DIR_INPUT, /* Input */ 49 .gpio8 = GPIO_DIR_INPUT, /* Output HIGH - set in mainboard.c */ 50 .gpio9 = GPIO_DIR_INPUT, /* Unused */ 51 .gpio10 = GPIO_DIR_INPUT, /* Unused */ 52 .gpio11 = GPIO_DIR_INPUT, /* Input */ 53 .gpio12 = GPIO_DIR_INPUT, /* Unused */ 54 .gpio13 = GPIO_DIR_INPUT, /* Input */ 55 .gpio14 = GPIO_DIR_OUTPUT, /* Output HIGH */ 56 .gpio15 = GPIO_DIR_INPUT, /* Unused */ 57 .gpio16 = GPIO_DIR_INPUT, /* Unused */ 58 .gpio17 = GPIO_DIR_INPUT, /* Input */ 59 .gpio18 = GPIO_DIR_INPUT, /* Native */ 60 .gpio19 = GPIO_DIR_INPUT, /* Input */ 61 .gpio20 = GPIO_DIR_INPUT, /* Native */ 62 .gpio21 = GPIO_DIR_INPUT, /* Input */ 63 .gpio22 = GPIO_DIR_INPUT, /* Input */ 64 .gpio23 = GPIO_DIR_INPUT, /* Unused */ 65 .gpio24 = GPIO_DIR_OUTPUT, /* Output HIGH */ 66 .gpio25 = GPIO_DIR_INPUT, /* Unused */ 67 .gpio26 = GPIO_DIR_INPUT, /* Unused */ 68 .gpio27 = GPIO_DIR_INPUT, /* Unused */ 69 .gpio28 = GPIO_DIR_INPUT, /* Unused */ 70 .gpio29 = GPIO_DIR_INPUT, /* Unused */ 71 .gpio30 = GPIO_DIR_INPUT, /* Native */ 72 .gpio31 = GPIO_DIR_INPUT, /* Unused */ 73 }; 74 75 static const struct pch_gpio_set1 pch_gpio_set1_level = { 76 .gpio0 = GPIO_LEVEL_LOW, /* Unused */ 77 .gpio1 = GPIO_LEVEL_LOW, /* Unused */ 78 .gpio2 = GPIO_LEVEL_LOW, /* Unused */ 79 .gpio3 = GPIO_LEVEL_LOW, /* Unused */ 80 .gpio4 = GPIO_LEVEL_LOW, /* Native */ 81 .gpio5 = GPIO_LEVEL_LOW, /* Unused */ 82 .gpio6 = GPIO_LEVEL_LOW, /* Input */ 83 .gpio7 = GPIO_LEVEL_LOW, /* Input */ 84 .gpio8 = GPIO_LEVEL_HIGH, /* Output HIGH - set in mainboard.c */ 85 .gpio9 = GPIO_LEVEL_LOW, /* Unused */ 86 .gpio10 = GPIO_LEVEL_LOW, /* Unused */ 87 .gpio11 = GPIO_LEVEL_LOW, /* Input */ 88 .gpio12 = GPIO_LEVEL_LOW, /* Unused */ 89 .gpio13 = GPIO_LEVEL_LOW, /* Input */ 90 .gpio14 = GPIO_LEVEL_HIGH, /* Output HIGH */ 91 .gpio15 = GPIO_LEVEL_HIGH, /* Unused */ 92 .gpio16 = GPIO_LEVEL_LOW, /* Unused */ 93 .gpio17 = GPIO_LEVEL_LOW, /* Input */ 94 .gpio18 = GPIO_LEVEL_LOW, /* Native */ 95 .gpio19 = GPIO_LEVEL_LOW, /* Input */ 96 .gpio20 = GPIO_LEVEL_LOW, /* Native */ 97 .gpio21 = GPIO_LEVEL_LOW, /* Input */ 98 .gpio22 = GPIO_LEVEL_LOW, /* Input */ 99 .gpio23 = GPIO_LEVEL_LOW, /* Unused */ 100 .gpio24 = GPIO_LEVEL_HIGH, /* Output HIGH */ 101 .gpio25 = GPIO_LEVEL_LOW, /* Unused */ 102 .gpio26 = GPIO_LEVEL_LOW, /* Unused */ 103 .gpio27 = GPIO_LEVEL_LOW, /* Unused */ 104 .gpio28 = GPIO_LEVEL_LOW, /* Unused */ 105 .gpio29 = GPIO_LEVEL_LOW, /* Unused */ 106 .gpio30 = GPIO_LEVEL_LOW, /* Native */ 107 .gpio31 = GPIO_LEVEL_LOW, /* Unused */ 108 }; 109 110 static const struct pch_gpio_set1 pch_gpio_set1_invert = { 111 .gpio11 = GPIO_INVERT, /* invert touchpad wakeup pin */ 112 .gpio13 = GPIO_INVERT, /* invert EC SCI pin */ 113 }; 114 115 static const struct pch_gpio_set2 pch_gpio_set2_mode = { 116 .gpio32 = GPIO_MODE_NATIVE, /* Native - Connect to EC Clock Run */ 117 .gpio33 = GPIO_MODE_GPIO, /* Input - (Google protect BIOS ROM) */ 118 .gpio34 = GPIO_MODE_NONE, /* Unused */ 119 .gpio35 = GPIO_MODE_NONE, /* Unused */ 120 .gpio36 = GPIO_MODE_GPIO, /* Output - DGPU_PWR_EN */ 121 .gpio37 = GPIO_MODE_GPIO, /* Input - FDI TERM / VOLTAGE OVERRIDE */ 122 .gpio38 = GPIO_MODE_GPIO, /* Input - MFG_MODE test */ 123 .gpio39 = GPIO_MODE_GPIO, /* Input - DGPU_PRSNT */ 124 .gpio40 = GPIO_MODE_NONE, /* Unused */ 125 .gpio41 = GPIO_MODE_NONE, /* Unused */ 126 .gpio42 = GPIO_MODE_NONE, /* Unused */ 127 .gpio43 = GPIO_MODE_NONE, /* Unused */ 128 .gpio44 = GPIO_MODE_GPIO, /* Input - BOARD_ID0 */ 129 .gpio45 = GPIO_MODE_GPIO, /* Input - BOARD_ID1 */ 130 .gpio46 = GPIO_MODE_GPIO, /* Input - BOARD_ID2 */ 131 .gpio47 = GPIO_MODE_NATIVE, /* Native - PEGA_GPU clock request */ 132 .gpio48 = GPIO_MODE_NONE, /* Unused */ 133 .gpio49 = GPIO_MODE_NONE, /* Unused */ 134 .gpio50 = GPIO_MODE_NONE, /* Unused */ 135 .gpio51 = GPIO_MODE_GPIO, /* Input - Boot BIOS Selection 1 */ 136 .gpio52 = GPIO_MODE_GPIO, /* Input - Google recovery, Pull up +3V */ 137 .gpio53 = GPIO_MODE_GPIO, /* Output - G Sensor LED */ 138 .gpio54 = GPIO_MODE_GPIO, /* Input - Google Development */ 139 .gpio55 = GPIO_MODE_GPIO, /* Input - Top-Block Swap Override */ 140 .gpio56 = GPIO_MODE_NONE, /* Unused */ 141 .gpio57 = GPIO_MODE_GPIO, /* Input - SV_DET */ 142 .gpio58 = GPIO_MODE_NONE, /* Unused */ 143 .gpio59 = GPIO_MODE_NONE, /* Unused */ 144 .gpio60 = GPIO_MODE_NONE, /* GPO - DRAMRST_CNTRL_PCH */ 145 .gpio61 = GPIO_MODE_NONE, /* Unused */ 146 .gpio62 = GPIO_MODE_NATIVE, /* Native - Connect to EC 32.768KHz */ 147 .gpio63 = GPIO_MODE_NATIVE, /* Native - SLP_S5 */ 148 }; 149 150 static const struct pch_gpio_set2 pch_gpio_set2_direction = { 151 .gpio32 = GPIO_DIR_INPUT, /* Native */ 152 .gpio33 = GPIO_DIR_INPUT, /* Input */ 153 .gpio34 = GPIO_DIR_INPUT, /* Unused */ 154 .gpio35 = GPIO_DIR_INPUT, /* Unused */ 155 .gpio36 = GPIO_DIR_OUTPUT, /* Output HIGH */ 156 .gpio37 = GPIO_DIR_INPUT, /* Input */ 157 .gpio38 = GPIO_DIR_INPUT, /* Input */ 158 .gpio39 = GPIO_DIR_INPUT, /* Input */ 159 .gpio40 = GPIO_DIR_INPUT, /* Unused */ 160 .gpio41 = GPIO_DIR_INPUT, /* Unused */ 161 .gpio42 = GPIO_DIR_INPUT, /* Unused */ 162 .gpio43 = GPIO_DIR_INPUT, /* Unused */ 163 .gpio44 = GPIO_DIR_INPUT, /* Input */ 164 .gpio45 = GPIO_DIR_INPUT, /* Input */ 165 .gpio46 = GPIO_DIR_INPUT, /* Input */ 166 .gpio47 = GPIO_DIR_INPUT, /* Native */ 167 .gpio48 = GPIO_DIR_INPUT, /* Unused */ 168 .gpio49 = GPIO_DIR_INPUT, /* Unused */ 169 .gpio50 = GPIO_DIR_INPUT, /* Unused */ 170 .gpio51 = GPIO_DIR_INPUT, /* Input */ 171 .gpio52 = GPIO_DIR_INPUT, /* Input */ 172 .gpio53 = GPIO_DIR_OUTPUT, /* Input */ 173 .gpio54 = GPIO_DIR_INPUT, /* Input */ 174 .gpio55 = GPIO_DIR_INPUT, /* Input */ 175 .gpio56 = GPIO_DIR_INPUT, /* Unused */ 176 .gpio57 = GPIO_DIR_INPUT, /* Input */ 177 .gpio58 = GPIO_DIR_INPUT, /* Unused */ 178 .gpio59 = GPIO_DIR_INPUT, /* Unused */ 179 .gpio60 = GPIO_DIR_OUTPUT, /* Output HIGH */ 180 .gpio61 = GPIO_DIR_INPUT, /* Unused */ 181 .gpio62 = GPIO_DIR_INPUT, /* Native */ 182 .gpio63 = GPIO_DIR_INPUT, /* Native */ 183 }; 184 185 static const struct pch_gpio_set2 pch_gpio_set2_level = { 186 .gpio32 = GPIO_LEVEL_LOW, /* Native */ 187 .gpio33 = GPIO_LEVEL_LOW, /* Input */ 188 .gpio34 = GPIO_LEVEL_LOW, /* Unused */ 189 .gpio35 = GPIO_LEVEL_LOW, /* Unused */ 190 .gpio36 = GPIO_LEVEL_HIGH, /* Output HIGH */ 191 .gpio37 = GPIO_LEVEL_LOW, /* Input */ 192 .gpio38 = GPIO_LEVEL_LOW, /* Input */ 193 .gpio39 = GPIO_LEVEL_LOW, /* Input */ 194 .gpio40 = GPIO_LEVEL_LOW, /* Unused */ 195 .gpio41 = GPIO_LEVEL_LOW, /* Unused */ 196 .gpio42 = GPIO_LEVEL_LOW, /* Unused */ 197 .gpio43 = GPIO_LEVEL_LOW, /* Unused */ 198 .gpio44 = GPIO_LEVEL_LOW, /* Input */ 199 .gpio45 = GPIO_LEVEL_LOW, /* Input */ 200 .gpio46 = GPIO_LEVEL_LOW, /* Input */ 201 .gpio47 = GPIO_LEVEL_LOW, /* Native */ 202 .gpio48 = GPIO_LEVEL_LOW, /* Unused */ 203 .gpio49 = GPIO_LEVEL_LOW, /* Unused */ 204 .gpio50 = GPIO_LEVEL_LOW, /* Unused */ 205 .gpio51 = GPIO_LEVEL_LOW, /* Input */ 206 .gpio52 = GPIO_LEVEL_LOW, /* Input */ 207 .gpio53 = GPIO_LEVEL_HIGH, /* Input */ 208 .gpio54 = GPIO_LEVEL_LOW, /* Input */ 209 .gpio55 = GPIO_LEVEL_LOW, /* Input */ 210 .gpio56 = GPIO_LEVEL_LOW, /* Unused */ 211 .gpio57 = GPIO_LEVEL_LOW, /* Input */ 212 .gpio58 = GPIO_LEVEL_LOW, /* Unused */ 213 .gpio59 = GPIO_LEVEL_LOW, /* Unused */ 214 .gpio60 = GPIO_LEVEL_HIGH, /* Output HIGH */ 215 .gpio61 = GPIO_LEVEL_LOW, /* Unused */ 216 .gpio62 = GPIO_LEVEL_LOW, /* Native */ 217 .gpio63 = GPIO_LEVEL_LOW, /* Native */ 218 }; 219 220 static const struct pch_gpio_set3 pch_gpio_set3_mode = { 221 .gpio64 = GPIO_MODE_NONE, /* Unused */ 222 .gpio65 = GPIO_MODE_NONE, /* Unused */ 223 .gpio66 = GPIO_MODE_NONE, /* Unused */ 224 .gpio67 = GPIO_MODE_NONE, /* Unused */ 225 .gpio68 = GPIO_MODE_GPIO, /* Input - DGPU_PWR_EN */ 226 .gpio69 = GPIO_MODE_NONE, /* Unused */ 227 .gpio70 = GPIO_MODE_NONE, /* Unused */ 228 .gpio71 = GPIO_MODE_NONE, /* Unused */ 229 .gpio72 = GPIO_MODE_NONE, /* Unused */ 230 .gpio73 = GPIO_MODE_NATIVE, /* Native - PCIECLKRQ0# WLAN clock request */ 231 .gpio74 = GPIO_MODE_NONE, /* Unused */ 232 .gpio75 = GPIO_MODE_GPIO, /* Input - SMB_ME1_DAT */ 233 }; 234 235 static const struct pch_gpio_set3 pch_gpio_set3_direction = { 236 .gpio64 = GPIO_DIR_INPUT, /* Unused */ 237 .gpio65 = GPIO_DIR_INPUT, /* Unused */ 238 .gpio66 = GPIO_DIR_INPUT, /* Unused */ 239 .gpio67 = GPIO_DIR_INPUT, /* Unused */ 240 .gpio68 = GPIO_DIR_INPUT, /* Input */ 241 .gpio69 = GPIO_DIR_INPUT, /* Unused */ 242 .gpio70 = GPIO_DIR_INPUT, /* Unused */ 243 .gpio71 = GPIO_DIR_INPUT, /* Unused */ 244 .gpio72 = GPIO_DIR_INPUT, /* Unused */ 245 .gpio73 = GPIO_DIR_INPUT, /* Native */ 246 .gpio74 = GPIO_DIR_INPUT, /* Unused */ 247 .gpio75 = GPIO_DIR_INPUT, /* Input */ 248 }; 249 250 static const struct pch_gpio_set3 pch_gpio_set3_level = { 251 .gpio64 = GPIO_LEVEL_LOW, /* Unused */ 252 .gpio65 = GPIO_LEVEL_LOW, /* Unused */ 253 .gpio66 = GPIO_LEVEL_LOW, /* Unused */ 254 .gpio67 = GPIO_LEVEL_LOW, /* Unused */ 255 .gpio68 = GPIO_LEVEL_LOW, /* Input */ 256 .gpio69 = GPIO_LEVEL_LOW, /* Unused */ 257 .gpio70 = GPIO_LEVEL_LOW, /* Unused */ 258 .gpio71 = GPIO_LEVEL_LOW, /* Unused */ 259 .gpio72 = GPIO_LEVEL_LOW, /* Unused */ 260 .gpio73 = GPIO_LEVEL_LOW, /* Native */ 261 .gpio74 = GPIO_LEVEL_LOW, /* Unused */ 262 .gpio75 = GPIO_LEVEL_LOW, /* Input */ 263 }; 264 265 const struct pch_gpio_map mainboard_gpio_map = { 266 .set1 = { 267 .mode = &pch_gpio_set1_mode, 268 .direction = &pch_gpio_set1_direction, 269 .level = &pch_gpio_set1_level, 270 .invert = &pch_gpio_set1_invert, 271 272 }, 273 .set2 = { 274 .mode = &pch_gpio_set2_mode, 275 .direction = &pch_gpio_set2_direction, 276 .level = &pch_gpio_set2_level, 277 }, 278 .set3 = { 279 .mode = &pch_gpio_set3_mode, 280 .direction = &pch_gpio_set3_direction, 281 .level = &pch_gpio_set3_level, 282 }, 283 }; 284