1 /* 2 * Intel Broxton SoC pinctrl/GPIO driver 3 * 4 * Copyright (C) 2015, 2016 Intel Corporation 5 * Author: Mika Westerberg <mika.westerberg@linux.intel.com> 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License version 2 as 9 * published by the Free Software Foundation. 10 */ 11 12 #include <linux/acpi.h> 13 #include <linux/module.h> 14 #include <linux/platform_device.h> 15 #include <linux/pm.h> 16 #include <linux/pinctrl/pinctrl.h> 17 18 #include "pinctrl-intel.h" 19 20 #define BXT_PAD_OWN 0x020 21 #define BXT_HOSTSW_OWN 0x080 22 #define BXT_PADCFGLOCK 0x060 23 #define BXT_GPI_IE 0x110 24 25 #define BXT_COMMUNITY(s, e) \ 26 { \ 27 .padown_offset = BXT_PAD_OWN, \ 28 .padcfglock_offset = BXT_PADCFGLOCK, \ 29 .hostown_offset = BXT_HOSTSW_OWN, \ 30 .ie_offset = BXT_GPI_IE, \ 31 .gpp_size = 32, \ 32 .pin_base = (s), \ 33 .npins = ((e) - (s) + 1), \ 34 } 35 36 /* BXT */ 37 static const struct pinctrl_pin_desc bxt_north_pins[] = { 38 PINCTRL_PIN(0, "GPIO_0"), 39 PINCTRL_PIN(1, "GPIO_1"), 40 PINCTRL_PIN(2, "GPIO_2"), 41 PINCTRL_PIN(3, "GPIO_3"), 42 PINCTRL_PIN(4, "GPIO_4"), 43 PINCTRL_PIN(5, "GPIO_5"), 44 PINCTRL_PIN(6, "GPIO_6"), 45 PINCTRL_PIN(7, "GPIO_7"), 46 PINCTRL_PIN(8, "GPIO_8"), 47 PINCTRL_PIN(9, "GPIO_9"), 48 PINCTRL_PIN(10, "GPIO_10"), 49 PINCTRL_PIN(11, "GPIO_11"), 50 PINCTRL_PIN(12, "GPIO_12"), 51 PINCTRL_PIN(13, "GPIO_13"), 52 PINCTRL_PIN(14, "GPIO_14"), 53 PINCTRL_PIN(15, "GPIO_15"), 54 PINCTRL_PIN(16, "GPIO_16"), 55 PINCTRL_PIN(17, "GPIO_17"), 56 PINCTRL_PIN(18, "GPIO_18"), 57 PINCTRL_PIN(19, "GPIO_19"), 58 PINCTRL_PIN(20, "GPIO_20"), 59 PINCTRL_PIN(21, "GPIO_21"), 60 PINCTRL_PIN(22, "GPIO_22"), 61 PINCTRL_PIN(23, "GPIO_23"), 62 PINCTRL_PIN(24, "GPIO_24"), 63 PINCTRL_PIN(25, "GPIO_25"), 64 PINCTRL_PIN(26, "GPIO_26"), 65 PINCTRL_PIN(27, "GPIO_27"), 66 PINCTRL_PIN(28, "GPIO_28"), 67 PINCTRL_PIN(29, "GPIO_29"), 68 PINCTRL_PIN(30, "GPIO_30"), 69 PINCTRL_PIN(31, "GPIO_31"), 70 PINCTRL_PIN(32, "GPIO_32"), 71 PINCTRL_PIN(33, "GPIO_33"), 72 PINCTRL_PIN(34, "PWM0"), 73 PINCTRL_PIN(35, "PWM1"), 74 PINCTRL_PIN(36, "PWM2"), 75 PINCTRL_PIN(37, "PWM3"), 76 PINCTRL_PIN(38, "LPSS_UART0_RXD"), 77 PINCTRL_PIN(39, "LPSS_UART0_TXD"), 78 PINCTRL_PIN(40, "LPSS_UART0_RTS_B"), 79 PINCTRL_PIN(41, "LPSS_UART0_CTS_B"), 80 PINCTRL_PIN(42, "LPSS_UART1_RXD"), 81 PINCTRL_PIN(43, "LPSS_UART1_TXD"), 82 PINCTRL_PIN(44, "LPSS_UART1_RTS_B"), 83 PINCTRL_PIN(45, "LPSS_UART1_CTS_B"), 84 PINCTRL_PIN(46, "LPSS_UART2_RXD"), 85 PINCTRL_PIN(47, "LPSS_UART2_TXD"), 86 PINCTRL_PIN(48, "LPSS_UART2_RTS_B"), 87 PINCTRL_PIN(49, "LPSS_UART2_CTS_B"), 88 PINCTRL_PIN(50, "ISH_UART0_RXD"), 89 PINCTRL_PIN(51, "ISH_UART0_TXT"), 90 PINCTRL_PIN(52, "ISH_UART0_RTS_B"), 91 PINCTRL_PIN(53, "ISH_UART0_CTS_B"), 92 PINCTRL_PIN(54, "ISH_UART1_RXD"), 93 PINCTRL_PIN(55, "ISH_UART1_TXT"), 94 PINCTRL_PIN(56, "ISH_UART1_RTS_B"), 95 PINCTRL_PIN(57, "ISH_UART1_CTS_B"), 96 PINCTRL_PIN(58, "ISH_UART2_RXD"), 97 PINCTRL_PIN(59, "ISH_UART2_TXD"), 98 PINCTRL_PIN(60, "ISH_UART2_RTS_B"), 99 PINCTRL_PIN(61, "ISH_UART2_CTS_B"), 100 PINCTRL_PIN(62, "GP_CAMERASB00"), 101 PINCTRL_PIN(63, "GP_CAMERASB01"), 102 PINCTRL_PIN(64, "GP_CAMERASB02"), 103 PINCTRL_PIN(65, "GP_CAMERASB03"), 104 PINCTRL_PIN(66, "GP_CAMERASB04"), 105 PINCTRL_PIN(67, "GP_CAMERASB05"), 106 PINCTRL_PIN(68, "GP_CAMERASB06"), 107 PINCTRL_PIN(69, "GP_CAMERASB07"), 108 PINCTRL_PIN(70, "GP_CAMERASB08"), 109 PINCTRL_PIN(71, "GP_CAMERASB09"), 110 PINCTRL_PIN(72, "GP_CAMERASB10"), 111 PINCTRL_PIN(73, "GP_CAMERASB11"), 112 PINCTRL_PIN(74, "TCK"), 113 PINCTRL_PIN(75, "TRST_B"), 114 PINCTRL_PIN(76, "TMS"), 115 PINCTRL_PIN(77, "TDI"), 116 PINCTRL_PIN(78, "CX_PMODE"), 117 PINCTRL_PIN(79, "CX_PREQ_B"), 118 PINCTRL_PIN(80, "JTAGX"), 119 PINCTRL_PIN(81, "CX_PRDY_B"), 120 PINCTRL_PIN(82, "TDO"), 121 }; 122 123 static const unsigned bxt_north_pwm0_pins[] = { 34 }; 124 static const unsigned bxt_north_pwm1_pins[] = { 35 }; 125 static const unsigned bxt_north_pwm2_pins[] = { 36 }; 126 static const unsigned bxt_north_pwm3_pins[] = { 37 }; 127 static const unsigned bxt_north_uart0_pins[] = { 38, 39, 40, 41 }; 128 static const unsigned bxt_north_uart1_pins[] = { 42, 43, 44, 45 }; 129 static const unsigned bxt_north_uart2_pins[] = { 46, 47, 48, 49 }; 130 static const unsigned bxt_north_uart0b_pins[] = { 50, 51, 52, 53 }; 131 static const unsigned bxt_north_uart1b_pins[] = { 54, 55, 56, 57 }; 132 static const unsigned bxt_north_uart2b_pins[] = { 58, 59, 60, 61 }; 133 static const unsigned bxt_north_uart3_pins[] = { 58, 59, 60, 61 }; 134 135 static const struct intel_pingroup bxt_north_groups[] = { 136 PIN_GROUP("pwm0_grp", bxt_north_pwm0_pins, 1), 137 PIN_GROUP("pwm1_grp", bxt_north_pwm1_pins, 1), 138 PIN_GROUP("pwm2_grp", bxt_north_pwm2_pins, 1), 139 PIN_GROUP("pwm3_grp", bxt_north_pwm3_pins, 1), 140 PIN_GROUP("uart0_grp", bxt_north_uart0_pins, 1), 141 PIN_GROUP("uart1_grp", bxt_north_uart1_pins, 1), 142 PIN_GROUP("uart2_grp", bxt_north_uart2_pins, 1), 143 PIN_GROUP("uart0b_grp", bxt_north_uart0b_pins, 2), 144 PIN_GROUP("uart1b_grp", bxt_north_uart1b_pins, 2), 145 PIN_GROUP("uart2b_grp", bxt_north_uart2b_pins, 2), 146 PIN_GROUP("uart3_grp", bxt_north_uart3_pins, 3), 147 }; 148 149 static const char * const bxt_north_pwm0_groups[] = { "pwm0_grp" }; 150 static const char * const bxt_north_pwm1_groups[] = { "pwm1_grp" }; 151 static const char * const bxt_north_pwm2_groups[] = { "pwm2_grp" }; 152 static const char * const bxt_north_pwm3_groups[] = { "pwm3_grp" }; 153 static const char * const bxt_north_uart0_groups[] = { 154 "uart0_grp", "uart0b_grp", 155 }; 156 static const char * const bxt_north_uart1_groups[] = { 157 "uart1_grp", "uart1b_grp", 158 }; 159 static const char * const bxt_north_uart2_groups[] = { 160 "uart2_grp", "uart2b_grp", 161 }; 162 static const char * const bxt_north_uart3_groups[] = { "uart3_grp" }; 163 164 static const struct intel_function bxt_north_functions[] = { 165 FUNCTION("pwm0", bxt_north_pwm0_groups), 166 FUNCTION("pwm1", bxt_north_pwm1_groups), 167 FUNCTION("pwm2", bxt_north_pwm2_groups), 168 FUNCTION("pwm3", bxt_north_pwm3_groups), 169 FUNCTION("uart0", bxt_north_uart0_groups), 170 FUNCTION("uart1", bxt_north_uart1_groups), 171 FUNCTION("uart2", bxt_north_uart2_groups), 172 FUNCTION("uart3", bxt_north_uart3_groups), 173 }; 174 175 static const struct intel_community bxt_north_communities[] = { 176 BXT_COMMUNITY(0, 82), 177 }; 178 179 static const struct intel_pinctrl_soc_data bxt_north_soc_data = { 180 .uid = "1", 181 .pins = bxt_north_pins, 182 .npins = ARRAY_SIZE(bxt_north_pins), 183 .groups = bxt_north_groups, 184 .ngroups = ARRAY_SIZE(bxt_north_groups), 185 .functions = bxt_north_functions, 186 .nfunctions = ARRAY_SIZE(bxt_north_functions), 187 .communities = bxt_north_communities, 188 .ncommunities = ARRAY_SIZE(bxt_north_communities), 189 }; 190 191 static const struct pinctrl_pin_desc bxt_northwest_pins[] = { 192 PINCTRL_PIN(0, "PMC_SPI_FS0"), 193 PINCTRL_PIN(1, "PMC_SPI_FS1"), 194 PINCTRL_PIN(2, "PMC_SPI_FS2"), 195 PINCTRL_PIN(3, "PMC_SPI_RXD"), 196 PINCTRL_PIN(4, "PMC_SPI_TXD"), 197 PINCTRL_PIN(5, "PMC_SPI_CLK"), 198 PINCTRL_PIN(6, "PMC_UART_RXD"), 199 PINCTRL_PIN(7, "PMC_UART_TXD"), 200 PINCTRL_PIN(8, "PMIC_PWRGOOD"), 201 PINCTRL_PIN(9, "PMIC_RESET_B"), 202 PINCTRL_PIN(10, "RTC_CLK"), 203 PINCTRL_PIN(11, "PMIC_SDWN_B"), 204 PINCTRL_PIN(12, "PMIC_BCUDISW2"), 205 PINCTRL_PIN(13, "PMIC_BCUDISCRIT"), 206 PINCTRL_PIN(14, "PMIC_THERMTRIP_B"), 207 PINCTRL_PIN(15, "PMIC_STDBY"), 208 PINCTRL_PIN(16, "SVID0_ALERT_B"), 209 PINCTRL_PIN(17, "SVID0_DATA"), 210 PINCTRL_PIN(18, "SVID0_CLK"), 211 PINCTRL_PIN(19, "PMIC_I2C_SCL"), 212 PINCTRL_PIN(20, "PMIC_I2C_SDA"), 213 PINCTRL_PIN(21, "AVS_I2S1_MCLK"), 214 PINCTRL_PIN(22, "AVS_I2S1_BCLK"), 215 PINCTRL_PIN(23, "AVS_I2S1_WS_SYNC"), 216 PINCTRL_PIN(24, "AVS_I2S1_SDI"), 217 PINCTRL_PIN(25, "AVS_I2S1_SDO"), 218 PINCTRL_PIN(26, "AVS_M_CLK_A1"), 219 PINCTRL_PIN(27, "AVS_M_CLK_B1"), 220 PINCTRL_PIN(28, "AVS_M_DATA_1"), 221 PINCTRL_PIN(29, "AVS_M_CLK_AB2"), 222 PINCTRL_PIN(30, "AVS_M_DATA_2"), 223 PINCTRL_PIN(31, "AVS_I2S2_MCLK"), 224 PINCTRL_PIN(32, "AVS_I2S2_BCLK"), 225 PINCTRL_PIN(33, "AVS_I2S2_WS_SYNC"), 226 PINCTRL_PIN(34, "AVS_I2S2_SDI"), 227 PINCTRL_PIN(35, "AVS_I2S2_SDOK"), 228 PINCTRL_PIN(36, "AVS_I2S3_BCLK"), 229 PINCTRL_PIN(37, "AVS_I2S3_WS_SYNC"), 230 PINCTRL_PIN(38, "AVS_I2S3_SDI"), 231 PINCTRL_PIN(39, "AVS_I2S3_SDO"), 232 PINCTRL_PIN(40, "AVS_I2S4_BCLK"), 233 PINCTRL_PIN(41, "AVS_I2S4_WS_SYNC"), 234 PINCTRL_PIN(42, "AVS_I2S4_SDI"), 235 PINCTRL_PIN(43, "AVS_I2S4_SDO"), 236 PINCTRL_PIN(44, "PROCHOT_B"), 237 PINCTRL_PIN(45, "FST_SPI_CS0_B"), 238 PINCTRL_PIN(46, "FST_SPI_CS1_B"), 239 PINCTRL_PIN(47, "FST_SPI_MOSI_IO0"), 240 PINCTRL_PIN(48, "FST_SPI_MISO_IO1"), 241 PINCTRL_PIN(49, "FST_SPI_IO2"), 242 PINCTRL_PIN(50, "FST_SPI_IO3"), 243 PINCTRL_PIN(51, "FST_SPI_CLK"), 244 PINCTRL_PIN(52, "FST_SPI_CLK_FB"), 245 PINCTRL_PIN(53, "GP_SSP_0_CLK"), 246 PINCTRL_PIN(54, "GP_SSP_0_FS0"), 247 PINCTRL_PIN(55, "GP_SSP_0_FS1"), 248 PINCTRL_PIN(56, "GP_SSP_0_FS2"), 249 PINCTRL_PIN(57, "GP_SSP_0_RXD"), 250 PINCTRL_PIN(58, "GP_SSP_0_TXD"), 251 PINCTRL_PIN(59, "GP_SSP_1_CLK"), 252 PINCTRL_PIN(60, "GP_SSP_1_FS0"), 253 PINCTRL_PIN(61, "GP_SSP_1_FS1"), 254 PINCTRL_PIN(62, "GP_SSP_1_FS2"), 255 PINCTRL_PIN(63, "GP_SSP_1_FS3"), 256 PINCTRL_PIN(64, "GP_SSP_1_RXD"), 257 PINCTRL_PIN(65, "GP_SSP_1_TXD"), 258 PINCTRL_PIN(66, "GP_SSP_2_CLK"), 259 PINCTRL_PIN(67, "GP_SSP_2_FS0"), 260 PINCTRL_PIN(68, "GP_SSP_2_FS1"), 261 PINCTRL_PIN(69, "GP_SSP_2_FS2"), 262 PINCTRL_PIN(70, "GP_SSP_2_RXD"), 263 PINCTRL_PIN(71, "GP_SSP_2_TXD"), 264 }; 265 266 static const unsigned bxt_northwest_ssp0_pins[] = { 53, 54, 55, 56, 57, 58 }; 267 static const unsigned bxt_northwest_ssp1_pins[] = { 268 59, 60, 61, 62, 63, 64, 65 269 }; 270 static const unsigned bxt_northwest_ssp2_pins[] = { 66, 67, 68, 69, 70, 71 }; 271 static const unsigned bxt_northwest_uart3_pins[] = { 67, 68, 69, 70 }; 272 273 static const struct intel_pingroup bxt_northwest_groups[] = { 274 PIN_GROUP("ssp0_grp", bxt_northwest_ssp0_pins, 1), 275 PIN_GROUP("ssp1_grp", bxt_northwest_ssp1_pins, 1), 276 PIN_GROUP("ssp2_grp", bxt_northwest_ssp2_pins, 1), 277 PIN_GROUP("uart3_grp", bxt_northwest_uart3_pins, 2), 278 }; 279 280 static const char * const bxt_northwest_ssp0_groups[] = { "ssp0_grp" }; 281 static const char * const bxt_northwest_ssp1_groups[] = { "ssp1_grp" }; 282 static const char * const bxt_northwest_ssp2_groups[] = { "ssp2_grp" }; 283 static const char * const bxt_northwest_uart3_groups[] = { "uart3_grp" }; 284 285 static const struct intel_function bxt_northwest_functions[] = { 286 FUNCTION("ssp0", bxt_northwest_ssp0_groups), 287 FUNCTION("ssp1", bxt_northwest_ssp1_groups), 288 FUNCTION("ssp2", bxt_northwest_ssp2_groups), 289 FUNCTION("uart3", bxt_northwest_uart3_groups), 290 }; 291 292 static const struct intel_community bxt_northwest_communities[] = { 293 BXT_COMMUNITY(0, 71), 294 }; 295 296 static const struct intel_pinctrl_soc_data bxt_northwest_soc_data = { 297 .uid = "2", 298 .pins = bxt_northwest_pins, 299 .npins = ARRAY_SIZE(bxt_northwest_pins), 300 .groups = bxt_northwest_groups, 301 .ngroups = ARRAY_SIZE(bxt_northwest_groups), 302 .functions = bxt_northwest_functions, 303 .nfunctions = ARRAY_SIZE(bxt_northwest_functions), 304 .communities = bxt_northwest_communities, 305 .ncommunities = ARRAY_SIZE(bxt_northwest_communities), 306 }; 307 308 static const struct pinctrl_pin_desc bxt_west_pins[] = { 309 PINCTRL_PIN(0, "LPSS_I2C0_SDA"), 310 PINCTRL_PIN(1, "LPSS_I2C0_SCL"), 311 PINCTRL_PIN(2, "LPSS_I2C1_SDA"), 312 PINCTRL_PIN(3, "LPSS_I2C1_SCL"), 313 PINCTRL_PIN(4, "LPSS_I2C2_SDA"), 314 PINCTRL_PIN(5, "LPSS_I2C2_SCL"), 315 PINCTRL_PIN(6, "LPSS_I2C3_SDA"), 316 PINCTRL_PIN(7, "LPSS_I2C3_SCL"), 317 PINCTRL_PIN(8, "LPSS_I2C4_SDA"), 318 PINCTRL_PIN(9, "LPSS_I2C4_SCL"), 319 PINCTRL_PIN(10, "LPSS_I2C5_SDA"), 320 PINCTRL_PIN(11, "LPSS_I2C5_SCL"), 321 PINCTRL_PIN(12, "LPSS_I2C6_SDA"), 322 PINCTRL_PIN(13, "LPSS_I2C6_SCL"), 323 PINCTRL_PIN(14, "LPSS_I2C7_SDA"), 324 PINCTRL_PIN(15, "LPSS_I2C7_SCL"), 325 PINCTRL_PIN(16, "ISH_I2C0_SDA"), 326 PINCTRL_PIN(17, "ISH_I2C0_SCL"), 327 PINCTRL_PIN(18, "ISH_I2C1_SDA"), 328 PINCTRL_PIN(19, "ISH_I2C1_SCL"), 329 PINCTRL_PIN(20, "ISH_I2C2_SDA"), 330 PINCTRL_PIN(21, "ISH_I2C2_SCL"), 331 PINCTRL_PIN(22, "ISH_GPIO_0"), 332 PINCTRL_PIN(23, "ISH_GPIO_1"), 333 PINCTRL_PIN(24, "ISH_GPIO_2"), 334 PINCTRL_PIN(25, "ISH_GPIO_3"), 335 PINCTRL_PIN(26, "ISH_GPIO_4"), 336 PINCTRL_PIN(27, "ISH_GPIO_5"), 337 PINCTRL_PIN(28, "ISH_GPIO_6"), 338 PINCTRL_PIN(29, "ISH_GPIO_7"), 339 PINCTRL_PIN(30, "ISH_GPIO_8"), 340 PINCTRL_PIN(31, "ISH_GPIO_9"), 341 PINCTRL_PIN(32, "MODEM_CLKREQ"), 342 PINCTRL_PIN(33, "DGCLKDBG_PMC_0"), 343 PINCTRL_PIN(34, "DGCLKDBG_PMC_1"), 344 PINCTRL_PIN(35, "DGCLKDBG_PMC_2"), 345 PINCTRL_PIN(36, "DGCLKDBG_ICLK_0"), 346 PINCTRL_PIN(37, "DGCLKDBG_ICLK_1"), 347 PINCTRL_PIN(38, "OSC_CLK_OUT_0"), 348 PINCTRL_PIN(39, "OSC_CLK_OUT_1"), 349 PINCTRL_PIN(40, "OSC_CLK_OUT_2"), 350 PINCTRL_PIN(41, "OSC_CLK_OUT_3"), 351 }; 352 353 static const unsigned bxt_west_i2c0_pins[] = { 0, 1 }; 354 static const unsigned bxt_west_i2c1_pins[] = { 2, 3 }; 355 static const unsigned bxt_west_i2c2_pins[] = { 4, 5 }; 356 static const unsigned bxt_west_i2c3_pins[] = { 6, 7 }; 357 static const unsigned bxt_west_i2c4_pins[] = { 8, 9 }; 358 static const unsigned bxt_west_i2c5_pins[] = { 10, 11 }; 359 static const unsigned bxt_west_i2c6_pins[] = { 12, 13 }; 360 static const unsigned bxt_west_i2c7_pins[] = { 14, 15 }; 361 static const unsigned bxt_west_i2c5b_pins[] = { 16, 17 }; 362 static const unsigned bxt_west_i2c6b_pins[] = { 18, 19 }; 363 static const unsigned bxt_west_i2c7b_pins[] = { 20, 21 }; 364 365 static const struct intel_pingroup bxt_west_groups[] = { 366 PIN_GROUP("i2c0_grp", bxt_west_i2c0_pins, 1), 367 PIN_GROUP("i2c1_grp", bxt_west_i2c1_pins, 1), 368 PIN_GROUP("i2c2_grp", bxt_west_i2c2_pins, 1), 369 PIN_GROUP("i2c3_grp", bxt_west_i2c3_pins, 1), 370 PIN_GROUP("i2c4_grp", bxt_west_i2c4_pins, 1), 371 PIN_GROUP("i2c5_grp", bxt_west_i2c5_pins, 1), 372 PIN_GROUP("i2c6_grp", bxt_west_i2c6_pins, 1), 373 PIN_GROUP("i2c7_grp", bxt_west_i2c7_pins, 1), 374 PIN_GROUP("i2c5b_grp", bxt_west_i2c5b_pins, 2), 375 PIN_GROUP("i2c6b_grp", bxt_west_i2c6b_pins, 2), 376 PIN_GROUP("i2c7b_grp", bxt_west_i2c7b_pins, 2), 377 }; 378 379 static const char * const bxt_west_i2c0_groups[] = { "i2c0_grp" }; 380 static const char * const bxt_west_i2c1_groups[] = { "i2c1_grp" }; 381 static const char * const bxt_west_i2c2_groups[] = { "i2c2_grp" }; 382 static const char * const bxt_west_i2c3_groups[] = { "i2c3_grp" }; 383 static const char * const bxt_west_i2c4_groups[] = { "i2c4_grp" }; 384 static const char * const bxt_west_i2c5_groups[] = { "i2c5_grp", "i2c5b_grp" }; 385 static const char * const bxt_west_i2c6_groups[] = { "i2c6_grp", "i2c6b_grp" }; 386 static const char * const bxt_west_i2c7_groups[] = { "i2c7_grp", "i2c7b_grp" }; 387 388 static const struct intel_function bxt_west_functions[] = { 389 FUNCTION("i2c0", bxt_west_i2c0_groups), 390 FUNCTION("i2c1", bxt_west_i2c1_groups), 391 FUNCTION("i2c2", bxt_west_i2c2_groups), 392 FUNCTION("i2c3", bxt_west_i2c3_groups), 393 FUNCTION("i2c4", bxt_west_i2c4_groups), 394 FUNCTION("i2c5", bxt_west_i2c5_groups), 395 FUNCTION("i2c6", bxt_west_i2c6_groups), 396 FUNCTION("i2c7", bxt_west_i2c7_groups), 397 }; 398 399 static const struct intel_community bxt_west_communities[] = { 400 BXT_COMMUNITY(0, 41), 401 }; 402 403 static const struct intel_pinctrl_soc_data bxt_west_soc_data = { 404 .uid = "3", 405 .pins = bxt_west_pins, 406 .npins = ARRAY_SIZE(bxt_west_pins), 407 .groups = bxt_west_groups, 408 .ngroups = ARRAY_SIZE(bxt_west_groups), 409 .functions = bxt_west_functions, 410 .nfunctions = ARRAY_SIZE(bxt_west_functions), 411 .communities = bxt_west_communities, 412 .ncommunities = ARRAY_SIZE(bxt_west_communities), 413 }; 414 415 static const struct pinctrl_pin_desc bxt_southwest_pins[] = { 416 PINCTRL_PIN(0, "EMMC0_CLK"), 417 PINCTRL_PIN(1, "EMMC0_D0"), 418 PINCTRL_PIN(2, "EMMC0_D1"), 419 PINCTRL_PIN(3, "EMMC0_D2"), 420 PINCTRL_PIN(4, "EMMC0_D3"), 421 PINCTRL_PIN(5, "EMMC0_D4"), 422 PINCTRL_PIN(6, "EMMC0_D5"), 423 PINCTRL_PIN(7, "EMMC0_D6"), 424 PINCTRL_PIN(8, "EMMC0_D7"), 425 PINCTRL_PIN(9, "EMMC0_CMD"), 426 PINCTRL_PIN(10, "SDIO_CLK"), 427 PINCTRL_PIN(11, "SDIO_D0"), 428 PINCTRL_PIN(12, "SDIO_D1"), 429 PINCTRL_PIN(13, "SDIO_D2"), 430 PINCTRL_PIN(14, "SDIO_D3"), 431 PINCTRL_PIN(15, "SDIO_CMD"), 432 PINCTRL_PIN(16, "SDCARD_CLK"), 433 PINCTRL_PIN(17, "SDCARD_D0"), 434 PINCTRL_PIN(18, "SDCARD_D1"), 435 PINCTRL_PIN(19, "SDCARD_D2"), 436 PINCTRL_PIN(20, "SDCARD_D3"), 437 PINCTRL_PIN(21, "SDCARD_CD_B"), 438 PINCTRL_PIN(22, "SDCARD_CMD"), 439 PINCTRL_PIN(23, "SDCARD_LVL_CLK_FB"), 440 PINCTRL_PIN(24, "SDCARD_LVL_CMD_DIR"), 441 PINCTRL_PIN(25, "SDCARD_LVL_DAT_DIR"), 442 PINCTRL_PIN(26, "EMMC0_STROBE"), 443 PINCTRL_PIN(27, "SDIO_PWR_DOWN_B"), 444 PINCTRL_PIN(28, "SDCARD_PWR_DOWN_B"), 445 PINCTRL_PIN(29, "SDCARD_LVL_SEL"), 446 PINCTRL_PIN(30, "SDCARD_LVL_WP"), 447 }; 448 449 static const unsigned bxt_southwest_emmc0_pins[] = { 450 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 26, 451 }; 452 static const unsigned bxt_southwest_sdio_pins[] = { 453 10, 11, 12, 13, 14, 15, 27, 454 }; 455 static const unsigned bxt_southwest_sdcard_pins[] = { 456 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 457 }; 458 459 static const struct intel_pingroup bxt_southwest_groups[] = { 460 PIN_GROUP("emmc0_grp", bxt_southwest_emmc0_pins, 1), 461 PIN_GROUP("sdio_grp", bxt_southwest_sdio_pins, 1), 462 PIN_GROUP("sdcard_grp", bxt_southwest_sdcard_pins, 1), 463 }; 464 465 static const char * const bxt_southwest_emmc0_groups[] = { "emmc0_grp" }; 466 static const char * const bxt_southwest_sdio_groups[] = { "sdio_grp" }; 467 static const char * const bxt_southwest_sdcard_groups[] = { "sdcard_grp" }; 468 469 static const struct intel_function bxt_southwest_functions[] = { 470 FUNCTION("emmc0", bxt_southwest_emmc0_groups), 471 FUNCTION("sdio", bxt_southwest_sdio_groups), 472 FUNCTION("sdcard", bxt_southwest_sdcard_groups), 473 }; 474 475 static const struct intel_community bxt_southwest_communities[] = { 476 BXT_COMMUNITY(0, 30), 477 }; 478 479 static const struct intel_pinctrl_soc_data bxt_southwest_soc_data = { 480 .uid = "4", 481 .pins = bxt_southwest_pins, 482 .npins = ARRAY_SIZE(bxt_southwest_pins), 483 .groups = bxt_southwest_groups, 484 .ngroups = ARRAY_SIZE(bxt_southwest_groups), 485 .functions = bxt_southwest_functions, 486 .nfunctions = ARRAY_SIZE(bxt_southwest_functions), 487 .communities = bxt_southwest_communities, 488 .ncommunities = ARRAY_SIZE(bxt_southwest_communities), 489 }; 490 491 static const struct pinctrl_pin_desc bxt_south_pins[] = { 492 PINCTRL_PIN(0, "HV_DDI0_DDC_SDA"), 493 PINCTRL_PIN(1, "HV_DDI0_DDC_SCL"), 494 PINCTRL_PIN(2, "HV_DDI1_DDC_SDA"), 495 PINCTRL_PIN(3, "HV_DDI1_DDC_SCL"), 496 PINCTRL_PIN(4, "DBI_SDA"), 497 PINCTRL_PIN(5, "DBI_SCL"), 498 PINCTRL_PIN(6, "PANEL0_VDDEN"), 499 PINCTRL_PIN(7, "PANEL0_BKLTEN"), 500 PINCTRL_PIN(8, "PANEL0_BKLTCTL"), 501 PINCTRL_PIN(9, "PANEL1_VDDEN"), 502 PINCTRL_PIN(10, "PANEL1_BKLTEN"), 503 PINCTRL_PIN(11, "PANEL1_BKLTCTL"), 504 PINCTRL_PIN(12, "DBI_CSX"), 505 PINCTRL_PIN(13, "DBI_RESX"), 506 PINCTRL_PIN(14, "GP_INTD_DSI_TE1"), 507 PINCTRL_PIN(15, "GP_INTD_DSI_TE2"), 508 PINCTRL_PIN(16, "USB_OC0_B"), 509 PINCTRL_PIN(17, "USB_OC1_B"), 510 PINCTRL_PIN(18, "MEX_WAKE0_B"), 511 PINCTRL_PIN(19, "MEX_WAKE1_B"), 512 }; 513 514 static const struct intel_community bxt_south_communities[] = { 515 BXT_COMMUNITY(0, 19), 516 }; 517 518 static const struct intel_pinctrl_soc_data bxt_south_soc_data = { 519 .uid = "5", 520 .pins = bxt_south_pins, 521 .npins = ARRAY_SIZE(bxt_south_pins), 522 .communities = bxt_south_communities, 523 .ncommunities = ARRAY_SIZE(bxt_south_communities), 524 }; 525 526 static const struct intel_pinctrl_soc_data *bxt_pinctrl_soc_data[] = { 527 &bxt_north_soc_data, 528 &bxt_northwest_soc_data, 529 &bxt_west_soc_data, 530 &bxt_southwest_soc_data, 531 &bxt_south_soc_data, 532 NULL, 533 }; 534 535 /* APL */ 536 static const struct pinctrl_pin_desc apl_north_pins[] = { 537 PINCTRL_PIN(0, "GPIO_0"), 538 PINCTRL_PIN(1, "GPIO_1"), 539 PINCTRL_PIN(2, "GPIO_2"), 540 PINCTRL_PIN(3, "GPIO_3"), 541 PINCTRL_PIN(4, "GPIO_4"), 542 PINCTRL_PIN(5, "GPIO_5"), 543 PINCTRL_PIN(6, "GPIO_6"), 544 PINCTRL_PIN(7, "GPIO_7"), 545 PINCTRL_PIN(8, "GPIO_8"), 546 PINCTRL_PIN(9, "GPIO_9"), 547 PINCTRL_PIN(10, "GPIO_10"), 548 PINCTRL_PIN(11, "GPIO_11"), 549 PINCTRL_PIN(12, "GPIO_12"), 550 PINCTRL_PIN(13, "GPIO_13"), 551 PINCTRL_PIN(14, "GPIO_14"), 552 PINCTRL_PIN(15, "GPIO_15"), 553 PINCTRL_PIN(16, "GPIO_16"), 554 PINCTRL_PIN(17, "GPIO_17"), 555 PINCTRL_PIN(18, "GPIO_18"), 556 PINCTRL_PIN(19, "GPIO_19"), 557 PINCTRL_PIN(20, "GPIO_20"), 558 PINCTRL_PIN(21, "GPIO_21"), 559 PINCTRL_PIN(22, "GPIO_22"), 560 PINCTRL_PIN(23, "GPIO_23"), 561 PINCTRL_PIN(24, "GPIO_24"), 562 PINCTRL_PIN(25, "GPIO_25"), 563 PINCTRL_PIN(26, "GPIO_26"), 564 PINCTRL_PIN(27, "GPIO_27"), 565 PINCTRL_PIN(28, "GPIO_28"), 566 PINCTRL_PIN(29, "GPIO_29"), 567 PINCTRL_PIN(30, "GPIO_30"), 568 PINCTRL_PIN(31, "GPIO_31"), 569 PINCTRL_PIN(32, "GPIO_32"), 570 PINCTRL_PIN(33, "GPIO_33"), 571 PINCTRL_PIN(34, "PWM0"), 572 PINCTRL_PIN(35, "PWM1"), 573 PINCTRL_PIN(36, "PWM2"), 574 PINCTRL_PIN(37, "PWM3"), 575 PINCTRL_PIN(38, "LPSS_UART0_RXD"), 576 PINCTRL_PIN(39, "LPSS_UART0_TXD"), 577 PINCTRL_PIN(40, "LPSS_UART0_RTS_B"), 578 PINCTRL_PIN(41, "LPSS_UART0_CTS_B"), 579 PINCTRL_PIN(42, "LPSS_UART1_RXD"), 580 PINCTRL_PIN(43, "LPSS_UART1_TXD"), 581 PINCTRL_PIN(44, "LPSS_UART1_RTS_B"), 582 PINCTRL_PIN(45, "LPSS_UART1_CTS_B"), 583 PINCTRL_PIN(46, "LPSS_UART2_RXD"), 584 PINCTRL_PIN(47, "LPSS_UART2_TXD"), 585 PINCTRL_PIN(48, "LPSS_UART2_RTS_B"), 586 PINCTRL_PIN(49, "LPSS_UART2_CTS_B"), 587 PINCTRL_PIN(50, "GP_CAMERASB00"), 588 PINCTRL_PIN(51, "GP_CAMERASB01"), 589 PINCTRL_PIN(52, "GP_CAMERASB02"), 590 PINCTRL_PIN(53, "GP_CAMERASB03"), 591 PINCTRL_PIN(54, "GP_CAMERASB04"), 592 PINCTRL_PIN(55, "GP_CAMERASB05"), 593 PINCTRL_PIN(56, "GP_CAMERASB06"), 594 PINCTRL_PIN(57, "GP_CAMERASB07"), 595 PINCTRL_PIN(58, "GP_CAMERASB08"), 596 PINCTRL_PIN(59, "GP_CAMERASB09"), 597 PINCTRL_PIN(60, "GP_CAMERASB10"), 598 PINCTRL_PIN(61, "GP_CAMERASB11"), 599 PINCTRL_PIN(62, "TCK"), 600 PINCTRL_PIN(63, "TRST_B"), 601 PINCTRL_PIN(64, "TMS"), 602 PINCTRL_PIN(65, "TDI"), 603 PINCTRL_PIN(66, "CX_PMODE"), 604 PINCTRL_PIN(67, "CX_PREQ_B"), 605 PINCTRL_PIN(68, "JTAGX"), 606 PINCTRL_PIN(69, "CX_PRDY_B"), 607 PINCTRL_PIN(70, "TDO"), 608 PINCTRL_PIN(71, "CNV_BRI_DT"), 609 PINCTRL_PIN(72, "CNV_BRI_RSP"), 610 PINCTRL_PIN(73, "CNV_RGI_DT"), 611 PINCTRL_PIN(74, "CNV_RGI_RSP"), 612 PINCTRL_PIN(75, "SVID0_ALERT_B"), 613 PINCTRL_PIN(76, "SVID0_DATA"), 614 PINCTRL_PIN(77, "SVID0_CLK"), 615 }; 616 617 static const unsigned apl_north_pwm0_pins[] = { 34 }; 618 static const unsigned apl_north_pwm1_pins[] = { 35 }; 619 static const unsigned apl_north_pwm2_pins[] = { 36 }; 620 static const unsigned apl_north_pwm3_pins[] = { 37 }; 621 static const unsigned apl_north_uart0_pins[] = { 38, 39, 40, 41 }; 622 static const unsigned apl_north_uart1_pins[] = { 42, 43, 44, 45 }; 623 static const unsigned apl_north_uart2_pins[] = { 46, 47, 48, 49 }; 624 625 static const struct intel_pingroup apl_north_groups[] = { 626 PIN_GROUP("pwm0_grp", apl_north_pwm0_pins, 1), 627 PIN_GROUP("pwm1_grp", apl_north_pwm1_pins, 1), 628 PIN_GROUP("pwm2_grp", apl_north_pwm2_pins, 1), 629 PIN_GROUP("pwm3_grp", apl_north_pwm3_pins, 1), 630 PIN_GROUP("uart0_grp", apl_north_uart0_pins, 1), 631 PIN_GROUP("uart1_grp", apl_north_uart1_pins, 1), 632 PIN_GROUP("uart2_grp", apl_north_uart2_pins, 1), 633 }; 634 635 static const char * const apl_north_pwm0_groups[] = { "pwm0_grp" }; 636 static const char * const apl_north_pwm1_groups[] = { "pwm1_grp" }; 637 static const char * const apl_north_pwm2_groups[] = { "pwm2_grp" }; 638 static const char * const apl_north_pwm3_groups[] = { "pwm3_grp" }; 639 static const char * const apl_north_uart0_groups[] = { "uart0_grp" }; 640 static const char * const apl_north_uart1_groups[] = { "uart1_grp" }; 641 static const char * const apl_north_uart2_groups[] = { "uart2_grp" }; 642 643 static const struct intel_function apl_north_functions[] = { 644 FUNCTION("pwm0", apl_north_pwm0_groups), 645 FUNCTION("pwm1", apl_north_pwm1_groups), 646 FUNCTION("pwm2", apl_north_pwm2_groups), 647 FUNCTION("pwm3", apl_north_pwm3_groups), 648 FUNCTION("uart0", apl_north_uart0_groups), 649 FUNCTION("uart1", apl_north_uart1_groups), 650 FUNCTION("uart2", apl_north_uart2_groups), 651 }; 652 653 static const struct intel_community apl_north_communities[] = { 654 BXT_COMMUNITY(0, 77), 655 }; 656 657 static const struct intel_pinctrl_soc_data apl_north_soc_data = { 658 .uid = "1", 659 .pins = apl_north_pins, 660 .npins = ARRAY_SIZE(apl_north_pins), 661 .groups = apl_north_groups, 662 .ngroups = ARRAY_SIZE(apl_north_groups), 663 .functions = apl_north_functions, 664 .nfunctions = ARRAY_SIZE(apl_north_functions), 665 .communities = apl_north_communities, 666 .ncommunities = ARRAY_SIZE(apl_north_communities), 667 }; 668 669 static const struct pinctrl_pin_desc apl_northwest_pins[] = { 670 PINCTRL_PIN(0, "HV_DDI0_DDC_SDA"), 671 PINCTRL_PIN(1, "HV_DDI0_DDC_SCL"), 672 PINCTRL_PIN(2, "HV_DDI1_DDC_SDA"), 673 PINCTRL_PIN(3, "HV_DDI1_DDC_SCL"), 674 PINCTRL_PIN(4, "DBI_SDA"), 675 PINCTRL_PIN(5, "DBI_SCL"), 676 PINCTRL_PIN(6, "PANEL0_VDDEN"), 677 PINCTRL_PIN(7, "PANEL0_BKLTEN"), 678 PINCTRL_PIN(8, "PANEL0_BKLTCTL"), 679 PINCTRL_PIN(9, "PANEL1_VDDEN"), 680 PINCTRL_PIN(10, "PANEL1_BKLTEN"), 681 PINCTRL_PIN(11, "PANEL1_BKLTCTL"), 682 PINCTRL_PIN(12, "DBI_CSX"), 683 PINCTRL_PIN(13, "DBI_RESX"), 684 PINCTRL_PIN(14, "GP_INTD_DSI_TE1"), 685 PINCTRL_PIN(15, "GP_INTD_DSI_TE2"), 686 PINCTRL_PIN(16, "USB_OC0_B"), 687 PINCTRL_PIN(17, "USB_OC1_B"), 688 PINCTRL_PIN(18, "PMC_SPI_FS0"), 689 PINCTRL_PIN(19, "PMC_SPI_FS1"), 690 PINCTRL_PIN(20, "PMC_SPI_FS2"), 691 PINCTRL_PIN(21, "PMC_SPI_RXD"), 692 PINCTRL_PIN(22, "PMC_SPI_TXD"), 693 PINCTRL_PIN(23, "PMC_SPI_CLK"), 694 PINCTRL_PIN(24, "PMIC_PWRGOOD"), 695 PINCTRL_PIN(25, "PMIC_RESET_B"), 696 PINCTRL_PIN(26, "PMIC_SDWN_B"), 697 PINCTRL_PIN(27, "PMIC_BCUDISW2"), 698 PINCTRL_PIN(28, "PMIC_BCUDISCRIT"), 699 PINCTRL_PIN(29, "PMIC_THERMTRIP_B"), 700 PINCTRL_PIN(30, "PMIC_STDBY"), 701 PINCTRL_PIN(31, "PROCHOT_B"), 702 PINCTRL_PIN(32, "PMIC_I2C_SCL"), 703 PINCTRL_PIN(33, "PMIC_I2C_SDA"), 704 PINCTRL_PIN(34, "AVS_I2S1_MCLK"), 705 PINCTRL_PIN(35, "AVS_I2S1_BCLK"), 706 PINCTRL_PIN(36, "AVS_I2S1_WS_SYNC"), 707 PINCTRL_PIN(37, "AVS_I2S1_SDI"), 708 PINCTRL_PIN(38, "AVS_I2S1_SDO"), 709 PINCTRL_PIN(39, "AVS_M_CLK_A1"), 710 PINCTRL_PIN(40, "AVS_M_CLK_B1"), 711 PINCTRL_PIN(41, "AVS_M_DATA_1"), 712 PINCTRL_PIN(42, "AVS_M_CLK_AB2"), 713 PINCTRL_PIN(43, "AVS_M_DATA_2"), 714 PINCTRL_PIN(44, "AVS_I2S2_MCLK"), 715 PINCTRL_PIN(45, "AVS_I2S2_BCLK"), 716 PINCTRL_PIN(46, "AVS_I2S2_WS_SYNC"), 717 PINCTRL_PIN(47, "AVS_I2S2_SDI"), 718 PINCTRL_PIN(48, "AVS_I2S2_SDO"), 719 PINCTRL_PIN(49, "AVS_I2S3_BCLK"), 720 PINCTRL_PIN(50, "AVS_I2S3_WS_SYNC"), 721 PINCTRL_PIN(51, "AVS_I2S3_SDI"), 722 PINCTRL_PIN(52, "AVS_I2S3_SDO"), 723 PINCTRL_PIN(53, "FST_SPI_CS0_B"), 724 PINCTRL_PIN(54, "FST_SPI_CS1_B"), 725 PINCTRL_PIN(55, "FST_SPI_MOSI_IO0"), 726 PINCTRL_PIN(56, "FST_SPI_MISO_IO1"), 727 PINCTRL_PIN(57, "FST_SPI_IO2"), 728 PINCTRL_PIN(58, "FST_SPI_IO3"), 729 PINCTRL_PIN(59, "FST_SPI_CLK"), 730 PINCTRL_PIN(60, "FST_SPI_CLK_FB"), 731 PINCTRL_PIN(61, "GP_SSP_0_CLK"), 732 PINCTRL_PIN(62, "GP_SSP_0_FS0"), 733 PINCTRL_PIN(63, "GP_SSP_0_FS1"), 734 PINCTRL_PIN(64, "GP_SSP_0_RXD"), 735 PINCTRL_PIN(65, "GP_SSP_0_TXD"), 736 PINCTRL_PIN(66, "GP_SSP_1_CLK"), 737 PINCTRL_PIN(67, "GP_SSP_1_FS0"), 738 PINCTRL_PIN(68, "GP_SSP_1_FS1"), 739 PINCTRL_PIN(69, "GP_SSP_1_RXD"), 740 PINCTRL_PIN(70, "GP_SSP_1_TXD"), 741 PINCTRL_PIN(71, "GP_SSP_2_CLK"), 742 PINCTRL_PIN(72, "GP_SSP_2_FS0"), 743 PINCTRL_PIN(73, "GP_SSP_2_FS1"), 744 PINCTRL_PIN(74, "GP_SSP_2_FS2"), 745 PINCTRL_PIN(75, "GP_SSP_2_RXD"), 746 PINCTRL_PIN(76, "GP_SSP_2_TXD"), 747 }; 748 749 static const unsigned apl_northwest_ssp0_pins[] = { 61, 62, 63, 64, 65 }; 750 static const unsigned apl_northwest_ssp1_pins[] = { 66, 67, 68, 69, 70 }; 751 static const unsigned apl_northwest_ssp2_pins[] = { 71, 72, 73, 74, 75, 76 }; 752 static const unsigned apl_northwest_uart3_pins[] = { 67, 68, 69, 70 }; 753 754 static const struct intel_pingroup apl_northwest_groups[] = { 755 PIN_GROUP("ssp0_grp", apl_northwest_ssp0_pins, 1), 756 PIN_GROUP("ssp1_grp", apl_northwest_ssp1_pins, 1), 757 PIN_GROUP("ssp2_grp", apl_northwest_ssp2_pins, 1), 758 PIN_GROUP("uart3_grp", apl_northwest_uart3_pins, 2), 759 }; 760 761 static const char * const apl_northwest_ssp0_groups[] = { "ssp0_grp" }; 762 static const char * const apl_northwest_ssp1_groups[] = { "ssp1_grp" }; 763 static const char * const apl_northwest_ssp2_groups[] = { "ssp2_grp" }; 764 static const char * const apl_northwest_uart3_groups[] = { "uart3_grp" }; 765 766 static const struct intel_function apl_northwest_functions[] = { 767 FUNCTION("ssp0", apl_northwest_ssp0_groups), 768 FUNCTION("ssp1", apl_northwest_ssp1_groups), 769 FUNCTION("ssp2", apl_northwest_ssp2_groups), 770 FUNCTION("uart3", apl_northwest_uart3_groups), 771 }; 772 773 static const struct intel_community apl_northwest_communities[] = { 774 BXT_COMMUNITY(0, 76), 775 }; 776 777 static const struct intel_pinctrl_soc_data apl_northwest_soc_data = { 778 .uid = "2", 779 .pins = apl_northwest_pins, 780 .npins = ARRAY_SIZE(apl_northwest_pins), 781 .groups = apl_northwest_groups, 782 .ngroups = ARRAY_SIZE(apl_northwest_groups), 783 .functions = apl_northwest_functions, 784 .nfunctions = ARRAY_SIZE(apl_northwest_functions), 785 .communities = apl_northwest_communities, 786 .ncommunities = ARRAY_SIZE(apl_northwest_communities), 787 }; 788 789 static const struct pinctrl_pin_desc apl_west_pins[] = { 790 PINCTRL_PIN(0, "LPSS_I2C0_SDA"), 791 PINCTRL_PIN(1, "LPSS_I2C0_SCL"), 792 PINCTRL_PIN(2, "LPSS_I2C1_SDA"), 793 PINCTRL_PIN(3, "LPSS_I2C1_SCL"), 794 PINCTRL_PIN(4, "LPSS_I2C2_SDA"), 795 PINCTRL_PIN(5, "LPSS_I2C2_SCL"), 796 PINCTRL_PIN(6, "LPSS_I2C3_SDA"), 797 PINCTRL_PIN(7, "LPSS_I2C3_SCL"), 798 PINCTRL_PIN(8, "LPSS_I2C4_SDA"), 799 PINCTRL_PIN(9, "LPSS_I2C4_SCL"), 800 PINCTRL_PIN(10, "LPSS_I2C5_SDA"), 801 PINCTRL_PIN(11, "LPSS_I2C5_SCL"), 802 PINCTRL_PIN(12, "LPSS_I2C6_SDA"), 803 PINCTRL_PIN(13, "LPSS_I2C6_SCL"), 804 PINCTRL_PIN(14, "LPSS_I2C7_SDA"), 805 PINCTRL_PIN(15, "LPSS_I2C7_SCL"), 806 PINCTRL_PIN(16, "ISH_GPIO_0"), 807 PINCTRL_PIN(17, "ISH_GPIO_1"), 808 PINCTRL_PIN(18, "ISH_GPIO_2"), 809 PINCTRL_PIN(19, "ISH_GPIO_3"), 810 PINCTRL_PIN(20, "ISH_GPIO_4"), 811 PINCTRL_PIN(21, "ISH_GPIO_5"), 812 PINCTRL_PIN(22, "ISH_GPIO_6"), 813 PINCTRL_PIN(23, "ISH_GPIO_7"), 814 PINCTRL_PIN(24, "ISH_GPIO_8"), 815 PINCTRL_PIN(25, "ISH_GPIO_9"), 816 PINCTRL_PIN(26, "PCIE_CLKREQ0_B"), 817 PINCTRL_PIN(27, "PCIE_CLKREQ1_B"), 818 PINCTRL_PIN(28, "PCIE_CLKREQ2_B"), 819 PINCTRL_PIN(29, "PCIE_CLKREQ3_B"), 820 PINCTRL_PIN(30, "OSC_CLK_OUT_0"), 821 PINCTRL_PIN(31, "OSC_CLK_OUT_1"), 822 PINCTRL_PIN(32, "OSC_CLK_OUT_2"), 823 PINCTRL_PIN(33, "OSC_CLK_OUT_3"), 824 PINCTRL_PIN(34, "OSC_CLK_OUT_4"), 825 PINCTRL_PIN(35, "PMU_AC_PRESENT"), 826 PINCTRL_PIN(36, "PMU_BATLOW_B"), 827 PINCTRL_PIN(37, "PMU_PLTRST_B"), 828 PINCTRL_PIN(38, "PMU_PWRBTN_B"), 829 PINCTRL_PIN(39, "PMU_RESETBUTTON_B"), 830 PINCTRL_PIN(40, "PMU_SLP_S0_B"), 831 PINCTRL_PIN(41, "PMU_SLP_S3_B"), 832 PINCTRL_PIN(42, "PMU_SLP_S4_B"), 833 PINCTRL_PIN(43, "PMU_SUSCLK"), 834 PINCTRL_PIN(44, "PMU_WAKE_B"), 835 PINCTRL_PIN(45, "SUS_STAT_B"), 836 PINCTRL_PIN(46, "SUSPWRDNACK"), 837 }; 838 839 static const unsigned apl_west_i2c0_pins[] = { 0, 1 }; 840 static const unsigned apl_west_i2c1_pins[] = { 2, 3 }; 841 static const unsigned apl_west_i2c2_pins[] = { 4, 5 }; 842 static const unsigned apl_west_i2c3_pins[] = { 6, 7 }; 843 static const unsigned apl_west_i2c4_pins[] = { 8, 9 }; 844 static const unsigned apl_west_i2c5_pins[] = { 10, 11 }; 845 static const unsigned apl_west_i2c6_pins[] = { 12, 13 }; 846 static const unsigned apl_west_i2c7_pins[] = { 14, 15 }; 847 static const unsigned apl_west_uart2_pins[] = { 20, 21, 22, 34 }; 848 849 static const struct intel_pingroup apl_west_groups[] = { 850 PIN_GROUP("i2c0_grp", apl_west_i2c0_pins, 1), 851 PIN_GROUP("i2c1_grp", apl_west_i2c1_pins, 1), 852 PIN_GROUP("i2c2_grp", apl_west_i2c2_pins, 1), 853 PIN_GROUP("i2c3_grp", apl_west_i2c3_pins, 1), 854 PIN_GROUP("i2c4_grp", apl_west_i2c4_pins, 1), 855 PIN_GROUP("i2c5_grp", apl_west_i2c5_pins, 1), 856 PIN_GROUP("i2c6_grp", apl_west_i2c6_pins, 1), 857 PIN_GROUP("i2c7_grp", apl_west_i2c7_pins, 1), 858 PIN_GROUP("uart2_grp", apl_west_uart2_pins, 3), 859 }; 860 861 static const char * const apl_west_i2c0_groups[] = { "i2c0_grp" }; 862 static const char * const apl_west_i2c1_groups[] = { "i2c1_grp" }; 863 static const char * const apl_west_i2c2_groups[] = { "i2c2_grp" }; 864 static const char * const apl_west_i2c3_groups[] = { "i2c3_grp" }; 865 static const char * const apl_west_i2c4_groups[] = { "i2c4_grp" }; 866 static const char * const apl_west_i2c5_groups[] = { "i2c5_grp" }; 867 static const char * const apl_west_i2c6_groups[] = { "i2c6_grp" }; 868 static const char * const apl_west_i2c7_groups[] = { "i2c7_grp" }; 869 static const char * const apl_west_uart2_groups[] = { "uart2_grp" }; 870 871 static const struct intel_function apl_west_functions[] = { 872 FUNCTION("i2c0", apl_west_i2c0_groups), 873 FUNCTION("i2c1", apl_west_i2c1_groups), 874 FUNCTION("i2c2", apl_west_i2c2_groups), 875 FUNCTION("i2c3", apl_west_i2c3_groups), 876 FUNCTION("i2c4", apl_west_i2c4_groups), 877 FUNCTION("i2c5", apl_west_i2c5_groups), 878 FUNCTION("i2c6", apl_west_i2c6_groups), 879 FUNCTION("i2c7", apl_west_i2c7_groups), 880 FUNCTION("uart2", apl_west_uart2_groups), 881 }; 882 883 static const struct intel_community apl_west_communities[] = { 884 BXT_COMMUNITY(0, 46), 885 }; 886 887 static const struct intel_pinctrl_soc_data apl_west_soc_data = { 888 .uid = "3", 889 .pins = apl_west_pins, 890 .npins = ARRAY_SIZE(apl_west_pins), 891 .groups = apl_west_groups, 892 .ngroups = ARRAY_SIZE(apl_west_groups), 893 .functions = apl_west_functions, 894 .nfunctions = ARRAY_SIZE(apl_west_functions), 895 .communities = apl_west_communities, 896 .ncommunities = ARRAY_SIZE(apl_west_communities), 897 }; 898 899 static const struct pinctrl_pin_desc apl_southwest_pins[] = { 900 PINCTRL_PIN(0, "PCIE_WAKE0_B"), 901 PINCTRL_PIN(1, "PCIE_WAKE1_B"), 902 PINCTRL_PIN(2, "PCIE_WAKE2_B"), 903 PINCTRL_PIN(3, "PCIE_WAKE3_B"), 904 PINCTRL_PIN(4, "EMMC0_CLK"), 905 PINCTRL_PIN(5, "EMMC0_D0"), 906 PINCTRL_PIN(6, "EMMC0_D1"), 907 PINCTRL_PIN(7, "EMMC0_D2"), 908 PINCTRL_PIN(8, "EMMC0_D3"), 909 PINCTRL_PIN(9, "EMMC0_D4"), 910 PINCTRL_PIN(10, "EMMC0_D5"), 911 PINCTRL_PIN(11, "EMMC0_D6"), 912 PINCTRL_PIN(12, "EMMC0_D7"), 913 PINCTRL_PIN(13, "EMMC0_CMD"), 914 PINCTRL_PIN(14, "SDIO_CLK"), 915 PINCTRL_PIN(15, "SDIO_D0"), 916 PINCTRL_PIN(16, "SDIO_D1"), 917 PINCTRL_PIN(17, "SDIO_D2"), 918 PINCTRL_PIN(18, "SDIO_D3"), 919 PINCTRL_PIN(19, "SDIO_CMD"), 920 PINCTRL_PIN(20, "SDCARD_CLK"), 921 PINCTRL_PIN(21, "SDCARD_CLK_FB"), 922 PINCTRL_PIN(22, "SDCARD_D0"), 923 PINCTRL_PIN(23, "SDCARD_D1"), 924 PINCTRL_PIN(24, "SDCARD_D2"), 925 PINCTRL_PIN(25, "SDCARD_D3"), 926 PINCTRL_PIN(26, "SDCARD_CD_B"), 927 PINCTRL_PIN(27, "SDCARD_CMD"), 928 PINCTRL_PIN(28, "SDCARD_LVL_WP"), 929 PINCTRL_PIN(29, "EMMC0_STROBE"), 930 PINCTRL_PIN(30, "SDIO_PWR_DOWN_B"), 931 PINCTRL_PIN(31, "SMB_ALERTB"), 932 PINCTRL_PIN(32, "SMB_CLK"), 933 PINCTRL_PIN(33, "SMB_DATA"), 934 PINCTRL_PIN(34, "LPC_ILB_SERIRQ"), 935 PINCTRL_PIN(35, "LPC_CLKOUT0"), 936 PINCTRL_PIN(36, "LPC_CLKOUT1"), 937 PINCTRL_PIN(37, "LPC_AD0"), 938 PINCTRL_PIN(38, "LPC_AD1"), 939 PINCTRL_PIN(39, "LPC_AD2"), 940 PINCTRL_PIN(40, "LPC_AD3"), 941 PINCTRL_PIN(41, "LPC_CLKRUNB"), 942 PINCTRL_PIN(42, "LPC_FRAMEB"), 943 }; 944 945 static const unsigned apl_southwest_emmc0_pins[] = { 946 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 29, 947 }; 948 static const unsigned apl_southwest_sdio_pins[] = { 949 14, 15, 16, 17, 18, 19, 30, 950 }; 951 static const unsigned apl_southwest_sdcard_pins[] = { 952 20, 21, 22, 23, 24, 25, 26, 27, 28, 953 }; 954 static const unsigned apl_southwest_i2c7_pins[] = { 32, 33 }; 955 956 static const struct intel_pingroup apl_southwest_groups[] = { 957 PIN_GROUP("emmc0_grp", apl_southwest_emmc0_pins, 1), 958 PIN_GROUP("sdio_grp", apl_southwest_sdio_pins, 1), 959 PIN_GROUP("sdcard_grp", apl_southwest_sdcard_pins, 1), 960 PIN_GROUP("i2c7_grp", apl_southwest_i2c7_pins, 2), 961 }; 962 963 static const char * const apl_southwest_emmc0_groups[] = { "emmc0_grp" }; 964 static const char * const apl_southwest_sdio_groups[] = { "sdio_grp" }; 965 static const char * const apl_southwest_sdcard_groups[] = { "sdcard_grp" }; 966 static const char * const apl_southwest_i2c7_groups[] = { "i2c7_grp" }; 967 968 static const struct intel_function apl_southwest_functions[] = { 969 FUNCTION("emmc0", apl_southwest_emmc0_groups), 970 FUNCTION("sdio", apl_southwest_sdio_groups), 971 FUNCTION("sdcard", apl_southwest_sdcard_groups), 972 FUNCTION("i2c7", apl_southwest_i2c7_groups), 973 }; 974 975 static const struct intel_community apl_southwest_communities[] = { 976 BXT_COMMUNITY(0, 42), 977 }; 978 979 static const struct intel_pinctrl_soc_data apl_southwest_soc_data = { 980 .uid = "4", 981 .pins = apl_southwest_pins, 982 .npins = ARRAY_SIZE(apl_southwest_pins), 983 .groups = apl_southwest_groups, 984 .ngroups = ARRAY_SIZE(apl_southwest_groups), 985 .functions = apl_southwest_functions, 986 .nfunctions = ARRAY_SIZE(apl_southwest_functions), 987 .communities = apl_southwest_communities, 988 .ncommunities = ARRAY_SIZE(apl_southwest_communities), 989 }; 990 991 static const struct intel_pinctrl_soc_data *apl_pinctrl_soc_data[] = { 992 &apl_north_soc_data, 993 &apl_northwest_soc_data, 994 &apl_west_soc_data, 995 &apl_southwest_soc_data, 996 NULL, 997 }; 998 999 static const struct acpi_device_id bxt_pinctrl_acpi_match[] = { 1000 { "INT3452", (kernel_ulong_t)apl_pinctrl_soc_data }, 1001 { "INT34D1", (kernel_ulong_t)bxt_pinctrl_soc_data }, 1002 { } 1003 }; 1004 MODULE_DEVICE_TABLE(acpi, bxt_pinctrl_acpi_match); 1005 1006 static const struct platform_device_id bxt_pinctrl_platform_ids[] = { 1007 { "apollolake-pinctrl", (kernel_ulong_t)apl_pinctrl_soc_data }, 1008 { "broxton-pinctrl", (kernel_ulong_t)bxt_pinctrl_soc_data }, 1009 { }, 1010 }; 1011 1012 static int bxt_pinctrl_probe(struct platform_device *pdev) 1013 { 1014 const struct intel_pinctrl_soc_data *soc_data = NULL; 1015 const struct intel_pinctrl_soc_data **soc_table; 1016 struct acpi_device *adev; 1017 int i; 1018 1019 adev = ACPI_COMPANION(&pdev->dev); 1020 if (adev) { 1021 const struct acpi_device_id *id; 1022 1023 id = acpi_match_device(bxt_pinctrl_acpi_match, &pdev->dev); 1024 if (!id) 1025 return -ENODEV; 1026 1027 soc_table = (const struct intel_pinctrl_soc_data **) 1028 id->driver_data; 1029 1030 for (i = 0; soc_table[i]; i++) { 1031 if (!strcmp(adev->pnp.unique_id, soc_table[i]->uid)) { 1032 soc_data = soc_table[i]; 1033 break; 1034 } 1035 } 1036 } else { 1037 const struct platform_device_id *pid; 1038 1039 pid = platform_get_device_id(pdev); 1040 if (!pid) 1041 return -ENODEV; 1042 1043 soc_table = (const struct intel_pinctrl_soc_data **) 1044 pid->driver_data; 1045 soc_data = soc_table[pdev->id]; 1046 } 1047 1048 if (!soc_data) 1049 return -ENODEV; 1050 1051 return intel_pinctrl_probe(pdev, soc_data); 1052 } 1053 1054 static const struct dev_pm_ops bxt_pinctrl_pm_ops = { 1055 SET_LATE_SYSTEM_SLEEP_PM_OPS(intel_pinctrl_suspend, 1056 intel_pinctrl_resume) 1057 }; 1058 1059 static struct platform_driver bxt_pinctrl_driver = { 1060 .probe = bxt_pinctrl_probe, 1061 .driver = { 1062 .name = "broxton-pinctrl", 1063 .acpi_match_table = bxt_pinctrl_acpi_match, 1064 .pm = &bxt_pinctrl_pm_ops, 1065 }, 1066 .id_table = bxt_pinctrl_platform_ids, 1067 }; 1068 1069 static int __init bxt_pinctrl_init(void) 1070 { 1071 return platform_driver_register(&bxt_pinctrl_driver); 1072 } 1073 subsys_initcall(bxt_pinctrl_init); 1074 1075 static void __exit bxt_pinctrl_exit(void) 1076 { 1077 platform_driver_unregister(&bxt_pinctrl_driver); 1078 } 1079 module_exit(bxt_pinctrl_exit); 1080 1081 MODULE_AUTHOR("Mika Westerberg <mika.westerberg@linux.intel.com>"); 1082 MODULE_DESCRIPTION("Intel Broxton SoC pinctrl/GPIO driver"); 1083 MODULE_LICENSE("GPL v2"); 1084 MODULE_ALIAS("platform:broxton-pinctrl"); 1085