1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Copyright (c) 2016-2018, The Linux Foundation. All rights reserved. 4 */ 5 6 #include <linux/module.h> 7 #include <linux/of.h> 8 #include <linux/platform_device.h> 9 10 #include "pinctrl-msm.h" 11 12 #define REG_SIZE 0x1000 13 #define PINGROUP(id, f1, f2, f3, f4, f5, f6, f7, f8, f9) \ 14 { \ 15 .grp = PINCTRL_PINGROUP("gpio" #id, \ 16 gpio##id##_pins, \ 17 ARRAY_SIZE(gpio##id##_pins)), \ 18 .funcs = (int[]){ \ 19 msm_mux_gpio, /* gpio mode */ \ 20 msm_mux_##f1, \ 21 msm_mux_##f2, \ 22 msm_mux_##f3, \ 23 msm_mux_##f4, \ 24 msm_mux_##f5, \ 25 msm_mux_##f6, \ 26 msm_mux_##f7, \ 27 msm_mux_##f8, \ 28 msm_mux_##f9 \ 29 }, \ 30 .nfuncs = 10, \ 31 .ctl_reg = REG_SIZE * id, \ 32 .io_reg = 0x4 + REG_SIZE * id, \ 33 .intr_cfg_reg = 0x8 + REG_SIZE * id, \ 34 .intr_status_reg = 0xc + REG_SIZE * id, \ 35 .intr_target_reg = 0x8 + REG_SIZE * id, \ 36 .mux_bit = 2, \ 37 .pull_bit = 0, \ 38 .drv_bit = 6, \ 39 .oe_bit = 9, \ 40 .in_bit = 0, \ 41 .out_bit = 1, \ 42 .intr_enable_bit = 0, \ 43 .intr_status_bit = 0, \ 44 .intr_target_bit = 5, \ 45 .intr_target_kpss_val = 3, \ 46 .intr_raw_status_bit = 4, \ 47 .intr_polarity_bit = 1, \ 48 .intr_detection_bit = 2, \ 49 .intr_detection_width = 2, \ 50 } 51 52 static const struct pinctrl_pin_desc ipq6018_pins[] = { 53 PINCTRL_PIN(0, "GPIO_0"), 54 PINCTRL_PIN(1, "GPIO_1"), 55 PINCTRL_PIN(2, "GPIO_2"), 56 PINCTRL_PIN(3, "GPIO_3"), 57 PINCTRL_PIN(4, "GPIO_4"), 58 PINCTRL_PIN(5, "GPIO_5"), 59 PINCTRL_PIN(6, "GPIO_6"), 60 PINCTRL_PIN(7, "GPIO_7"), 61 PINCTRL_PIN(8, "GPIO_8"), 62 PINCTRL_PIN(9, "GPIO_9"), 63 PINCTRL_PIN(10, "GPIO_10"), 64 PINCTRL_PIN(11, "GPIO_11"), 65 PINCTRL_PIN(12, "GPIO_12"), 66 PINCTRL_PIN(13, "GPIO_13"), 67 PINCTRL_PIN(14, "GPIO_14"), 68 PINCTRL_PIN(15, "GPIO_15"), 69 PINCTRL_PIN(16, "GPIO_16"), 70 PINCTRL_PIN(17, "GPIO_17"), 71 PINCTRL_PIN(18, "GPIO_18"), 72 PINCTRL_PIN(19, "GPIO_19"), 73 PINCTRL_PIN(20, "GPIO_20"), 74 PINCTRL_PIN(21, "GPIO_21"), 75 PINCTRL_PIN(22, "GPIO_22"), 76 PINCTRL_PIN(23, "GPIO_23"), 77 PINCTRL_PIN(24, "GPIO_24"), 78 PINCTRL_PIN(25, "GPIO_25"), 79 PINCTRL_PIN(26, "GPIO_26"), 80 PINCTRL_PIN(27, "GPIO_27"), 81 PINCTRL_PIN(28, "GPIO_28"), 82 PINCTRL_PIN(29, "GPIO_29"), 83 PINCTRL_PIN(30, "GPIO_30"), 84 PINCTRL_PIN(31, "GPIO_31"), 85 PINCTRL_PIN(32, "GPIO_32"), 86 PINCTRL_PIN(33, "GPIO_33"), 87 PINCTRL_PIN(34, "GPIO_34"), 88 PINCTRL_PIN(35, "GPIO_35"), 89 PINCTRL_PIN(36, "GPIO_36"), 90 PINCTRL_PIN(37, "GPIO_37"), 91 PINCTRL_PIN(38, "GPIO_38"), 92 PINCTRL_PIN(39, "GPIO_39"), 93 PINCTRL_PIN(40, "GPIO_40"), 94 PINCTRL_PIN(41, "GPIO_41"), 95 PINCTRL_PIN(42, "GPIO_42"), 96 PINCTRL_PIN(43, "GPIO_43"), 97 PINCTRL_PIN(44, "GPIO_44"), 98 PINCTRL_PIN(45, "GPIO_45"), 99 PINCTRL_PIN(46, "GPIO_46"), 100 PINCTRL_PIN(47, "GPIO_47"), 101 PINCTRL_PIN(48, "GPIO_48"), 102 PINCTRL_PIN(49, "GPIO_49"), 103 PINCTRL_PIN(50, "GPIO_50"), 104 PINCTRL_PIN(51, "GPIO_51"), 105 PINCTRL_PIN(52, "GPIO_52"), 106 PINCTRL_PIN(53, "GPIO_53"), 107 PINCTRL_PIN(54, "GPIO_54"), 108 PINCTRL_PIN(55, "GPIO_55"), 109 PINCTRL_PIN(56, "GPIO_56"), 110 PINCTRL_PIN(57, "GPIO_57"), 111 PINCTRL_PIN(58, "GPIO_58"), 112 PINCTRL_PIN(59, "GPIO_59"), 113 PINCTRL_PIN(60, "GPIO_60"), 114 PINCTRL_PIN(61, "GPIO_61"), 115 PINCTRL_PIN(62, "GPIO_62"), 116 PINCTRL_PIN(63, "GPIO_63"), 117 PINCTRL_PIN(64, "GPIO_64"), 118 PINCTRL_PIN(65, "GPIO_65"), 119 PINCTRL_PIN(66, "GPIO_66"), 120 PINCTRL_PIN(67, "GPIO_67"), 121 PINCTRL_PIN(68, "GPIO_68"), 122 PINCTRL_PIN(69, "GPIO_69"), 123 PINCTRL_PIN(70, "GPIO_70"), 124 PINCTRL_PIN(71, "GPIO_71"), 125 PINCTRL_PIN(72, "GPIO_72"), 126 PINCTRL_PIN(73, "GPIO_73"), 127 PINCTRL_PIN(74, "GPIO_74"), 128 PINCTRL_PIN(75, "GPIO_75"), 129 PINCTRL_PIN(76, "GPIO_76"), 130 PINCTRL_PIN(77, "GPIO_77"), 131 PINCTRL_PIN(78, "GPIO_78"), 132 PINCTRL_PIN(79, "GPIO_79"), 133 }; 134 135 #define DECLARE_MSM_GPIO_PINS(pin) \ 136 static const unsigned int gpio##pin##_pins[] = { pin } 137 DECLARE_MSM_GPIO_PINS(0); 138 DECLARE_MSM_GPIO_PINS(1); 139 DECLARE_MSM_GPIO_PINS(2); 140 DECLARE_MSM_GPIO_PINS(3); 141 DECLARE_MSM_GPIO_PINS(4); 142 DECLARE_MSM_GPIO_PINS(5); 143 DECLARE_MSM_GPIO_PINS(6); 144 DECLARE_MSM_GPIO_PINS(7); 145 DECLARE_MSM_GPIO_PINS(8); 146 DECLARE_MSM_GPIO_PINS(9); 147 DECLARE_MSM_GPIO_PINS(10); 148 DECLARE_MSM_GPIO_PINS(11); 149 DECLARE_MSM_GPIO_PINS(12); 150 DECLARE_MSM_GPIO_PINS(13); 151 DECLARE_MSM_GPIO_PINS(14); 152 DECLARE_MSM_GPIO_PINS(15); 153 DECLARE_MSM_GPIO_PINS(16); 154 DECLARE_MSM_GPIO_PINS(17); 155 DECLARE_MSM_GPIO_PINS(18); 156 DECLARE_MSM_GPIO_PINS(19); 157 DECLARE_MSM_GPIO_PINS(20); 158 DECLARE_MSM_GPIO_PINS(21); 159 DECLARE_MSM_GPIO_PINS(22); 160 DECLARE_MSM_GPIO_PINS(23); 161 DECLARE_MSM_GPIO_PINS(24); 162 DECLARE_MSM_GPIO_PINS(25); 163 DECLARE_MSM_GPIO_PINS(26); 164 DECLARE_MSM_GPIO_PINS(27); 165 DECLARE_MSM_GPIO_PINS(28); 166 DECLARE_MSM_GPIO_PINS(29); 167 DECLARE_MSM_GPIO_PINS(30); 168 DECLARE_MSM_GPIO_PINS(31); 169 DECLARE_MSM_GPIO_PINS(32); 170 DECLARE_MSM_GPIO_PINS(33); 171 DECLARE_MSM_GPIO_PINS(34); 172 DECLARE_MSM_GPIO_PINS(35); 173 DECLARE_MSM_GPIO_PINS(36); 174 DECLARE_MSM_GPIO_PINS(37); 175 DECLARE_MSM_GPIO_PINS(38); 176 DECLARE_MSM_GPIO_PINS(39); 177 DECLARE_MSM_GPIO_PINS(40); 178 DECLARE_MSM_GPIO_PINS(41); 179 DECLARE_MSM_GPIO_PINS(42); 180 DECLARE_MSM_GPIO_PINS(43); 181 DECLARE_MSM_GPIO_PINS(44); 182 DECLARE_MSM_GPIO_PINS(45); 183 DECLARE_MSM_GPIO_PINS(46); 184 DECLARE_MSM_GPIO_PINS(47); 185 DECLARE_MSM_GPIO_PINS(48); 186 DECLARE_MSM_GPIO_PINS(49); 187 DECLARE_MSM_GPIO_PINS(50); 188 DECLARE_MSM_GPIO_PINS(51); 189 DECLARE_MSM_GPIO_PINS(52); 190 DECLARE_MSM_GPIO_PINS(53); 191 DECLARE_MSM_GPIO_PINS(54); 192 DECLARE_MSM_GPIO_PINS(55); 193 DECLARE_MSM_GPIO_PINS(56); 194 DECLARE_MSM_GPIO_PINS(57); 195 DECLARE_MSM_GPIO_PINS(58); 196 DECLARE_MSM_GPIO_PINS(59); 197 DECLARE_MSM_GPIO_PINS(60); 198 DECLARE_MSM_GPIO_PINS(61); 199 DECLARE_MSM_GPIO_PINS(62); 200 DECLARE_MSM_GPIO_PINS(63); 201 DECLARE_MSM_GPIO_PINS(64); 202 DECLARE_MSM_GPIO_PINS(65); 203 DECLARE_MSM_GPIO_PINS(66); 204 DECLARE_MSM_GPIO_PINS(67); 205 DECLARE_MSM_GPIO_PINS(68); 206 DECLARE_MSM_GPIO_PINS(69); 207 DECLARE_MSM_GPIO_PINS(70); 208 DECLARE_MSM_GPIO_PINS(71); 209 DECLARE_MSM_GPIO_PINS(72); 210 DECLARE_MSM_GPIO_PINS(73); 211 DECLARE_MSM_GPIO_PINS(74); 212 DECLARE_MSM_GPIO_PINS(75); 213 DECLARE_MSM_GPIO_PINS(76); 214 DECLARE_MSM_GPIO_PINS(77); 215 DECLARE_MSM_GPIO_PINS(78); 216 DECLARE_MSM_GPIO_PINS(79); 217 218 enum ipq6018_functions { 219 msm_mux_atest_char, 220 msm_mux_atest_char0, 221 msm_mux_atest_char1, 222 msm_mux_atest_char2, 223 msm_mux_atest_char3, 224 msm_mux_audio0, 225 msm_mux_audio1, 226 msm_mux_audio2, 227 msm_mux_audio3, 228 msm_mux_audio_rxbclk, 229 msm_mux_audio_rxfsync, 230 msm_mux_audio_rxmclk, 231 msm_mux_audio_rxmclkin, 232 msm_mux_audio_txbclk, 233 msm_mux_audio_txfsync, 234 msm_mux_audio_txmclk, 235 msm_mux_audio_txmclkin, 236 msm_mux_blsp0_i2c, 237 msm_mux_blsp0_spi, 238 msm_mux_blsp0_uart, 239 msm_mux_blsp1_i2c, 240 msm_mux_blsp1_spi, 241 msm_mux_blsp1_uart, 242 msm_mux_blsp2_i2c, 243 msm_mux_blsp2_spi, 244 msm_mux_blsp2_uart, 245 msm_mux_blsp3_i2c, 246 msm_mux_blsp3_spi, 247 msm_mux_blsp3_uart, 248 msm_mux_blsp4_i2c, 249 msm_mux_blsp4_spi, 250 msm_mux_blsp4_uart, 251 msm_mux_blsp5_i2c, 252 msm_mux_blsp5_uart, 253 msm_mux_burn0, 254 msm_mux_burn1, 255 msm_mux_cri_trng, 256 msm_mux_cri_trng0, 257 msm_mux_cri_trng1, 258 msm_mux_cxc0, 259 msm_mux_cxc1, 260 msm_mux_dbg_out, 261 msm_mux_gcc_plltest, 262 msm_mux_gcc_tlmm, 263 msm_mux_gpio, 264 msm_mux_lpass_aud, 265 msm_mux_lpass_aud0, 266 msm_mux_lpass_aud1, 267 msm_mux_lpass_aud2, 268 msm_mux_lpass_pcm, 269 msm_mux_lpass_pdm, 270 msm_mux_mac00, 271 msm_mux_mac01, 272 msm_mux_mac10, 273 msm_mux_mac11, 274 msm_mux_mac12, 275 msm_mux_mac13, 276 msm_mux_mac20, 277 msm_mux_mac21, 278 msm_mux_mdc, 279 msm_mux_mdio, 280 msm_mux_pcie0_clk, 281 msm_mux_pcie0_rst, 282 msm_mux_pcie0_wake, 283 msm_mux_prng_rosc, 284 msm_mux_pta1_0, 285 msm_mux_pta1_1, 286 msm_mux_pta1_2, 287 msm_mux_pta2_0, 288 msm_mux_pta2_1, 289 msm_mux_pta2_2, 290 msm_mux_pwm00, 291 msm_mux_pwm01, 292 msm_mux_pwm02, 293 msm_mux_pwm03, 294 msm_mux_pwm04, 295 msm_mux_pwm10, 296 msm_mux_pwm11, 297 msm_mux_pwm12, 298 msm_mux_pwm13, 299 msm_mux_pwm14, 300 msm_mux_pwm20, 301 msm_mux_pwm21, 302 msm_mux_pwm22, 303 msm_mux_pwm23, 304 msm_mux_pwm24, 305 msm_mux_pwm30, 306 msm_mux_pwm31, 307 msm_mux_pwm32, 308 msm_mux_pwm33, 309 msm_mux_qdss_cti_trig_in_a0, 310 msm_mux_qdss_cti_trig_in_a1, 311 msm_mux_qdss_cti_trig_out_a0, 312 msm_mux_qdss_cti_trig_out_a1, 313 msm_mux_qdss_cti_trig_in_b0, 314 msm_mux_qdss_cti_trig_in_b1, 315 msm_mux_qdss_cti_trig_out_b0, 316 msm_mux_qdss_cti_trig_out_b1, 317 msm_mux_qdss_traceclk_a, 318 msm_mux_qdss_tracectl_a, 319 msm_mux_qdss_tracedata_a, 320 msm_mux_qdss_traceclk_b, 321 msm_mux_qdss_tracectl_b, 322 msm_mux_qdss_tracedata_b, 323 msm_mux_qpic_pad, 324 msm_mux_rx0, 325 msm_mux_rx1, 326 msm_mux_rx_swrm, 327 msm_mux_rx_swrm0, 328 msm_mux_rx_swrm1, 329 msm_mux_sd_card, 330 msm_mux_sd_write, 331 msm_mux_tsens_max, 332 msm_mux_tx_swrm, 333 msm_mux_tx_swrm0, 334 msm_mux_tx_swrm1, 335 msm_mux_tx_swrm2, 336 msm_mux_wci20, 337 msm_mux_wci21, 338 msm_mux_wci22, 339 msm_mux_wci23, 340 msm_mux_wsa_swrm, 341 msm_mux__, 342 }; 343 344 static const char * const blsp3_uart_groups[] = { 345 "gpio73", "gpio74", "gpio75", "gpio76", 346 }; 347 348 static const char * const blsp3_i2c_groups[] = { 349 "gpio73", "gpio74", 350 }; 351 352 static const char * const blsp3_spi_groups[] = { 353 "gpio73", "gpio74", "gpio75", "gpio76", "gpio77", "gpio78", "gpio79", 354 }; 355 356 static const char * const wci20_groups[] = { 357 "gpio0", "gpio2", 358 }; 359 360 static const char * const qpic_pad_groups[] = { 361 "gpio0", "gpio1", "gpio2", "gpio3", "gpio4", "gpio9", "gpio10", 362 "gpio11", "gpio17", "gpio15", "gpio12", "gpio13", "gpio14", "gpio5", 363 "gpio6", "gpio7", "gpio8", 364 }; 365 366 static const char * const burn0_groups[] = { 367 "gpio0", 368 }; 369 370 static const char * const mac12_groups[] = { 371 "gpio1", "gpio11", 372 }; 373 374 static const char * const qdss_tracectl_b_groups[] = { 375 "gpio1", 376 }; 377 378 static const char * const burn1_groups[] = { 379 "gpio1", 380 }; 381 382 static const char * const qdss_traceclk_b_groups[] = { 383 "gpio0", 384 }; 385 386 static const char * const qdss_tracedata_b_groups[] = { 387 "gpio2", "gpio3", "gpio4", "gpio5", "gpio6", "gpio7", "gpio8", "gpio9", 388 "gpio10", "gpio11", "gpio12", "gpio13", "gpio14", "gpio15", "gpio16", 389 "gpio17", 390 }; 391 392 static const char * const mac01_groups[] = { 393 "gpio3", "gpio4", 394 }; 395 396 static const char * const mac21_groups[] = { 397 "gpio5", "gpio6", 398 }; 399 400 static const char * const atest_char_groups[] = { 401 "gpio9", 402 }; 403 404 static const char * const cxc0_groups[] = { 405 "gpio9", "gpio16", 406 }; 407 408 static const char * const mac13_groups[] = { 409 "gpio9", "gpio16", 410 }; 411 412 static const char * const dbg_out_groups[] = { 413 "gpio9", 414 }; 415 416 static const char * const wci22_groups[] = { 417 "gpio11", "gpio17", 418 }; 419 420 static const char * const pwm00_groups[] = { 421 "gpio18", 422 }; 423 424 static const char * const atest_char0_groups[] = { 425 "gpio18", 426 }; 427 428 static const char * const wci23_groups[] = { 429 "gpio18", "gpio19", 430 }; 431 432 static const char * const mac11_groups[] = { 433 "gpio18", "gpio19", 434 }; 435 436 static const char * const pwm10_groups[] = { 437 "gpio19", 438 }; 439 440 static const char * const atest_char1_groups[] = { 441 "gpio19", 442 }; 443 444 static const char * const pwm20_groups[] = { 445 "gpio20", 446 }; 447 448 static const char * const atest_char2_groups[] = { 449 "gpio20", 450 }; 451 452 static const char * const pwm30_groups[] = { 453 "gpio21", 454 }; 455 456 static const char * const atest_char3_groups[] = { 457 "gpio21", 458 }; 459 460 static const char * const audio_txmclk_groups[] = { 461 "gpio22", 462 }; 463 464 static const char * const audio_txmclkin_groups[] = { 465 "gpio22", 466 }; 467 468 static const char * const pwm02_groups[] = { 469 "gpio22", 470 }; 471 472 static const char * const tx_swrm0_groups[] = { 473 "gpio22", 474 }; 475 476 static const char * const qdss_cti_trig_out_b0_groups[] = { 477 "gpio22", 478 }; 479 480 static const char * const audio_txbclk_groups[] = { 481 "gpio23", 482 }; 483 484 static const char * const pwm12_groups[] = { 485 "gpio23", 486 }; 487 488 static const char * const wsa_swrm_groups[] = { 489 "gpio23", "gpio24", 490 }; 491 492 static const char * const tx_swrm1_groups[] = { 493 "gpio23", 494 }; 495 496 static const char * const qdss_cti_trig_in_b0_groups[] = { 497 "gpio23", 498 }; 499 500 static const char * const audio_txfsync_groups[] = { 501 "gpio24", 502 }; 503 504 static const char * const pwm22_groups[] = { 505 "gpio24", 506 }; 507 508 static const char * const tx_swrm2_groups[] = { 509 "gpio24", 510 }; 511 512 static const char * const qdss_cti_trig_out_b1_groups[] = { 513 "gpio24", 514 }; 515 516 static const char * const audio0_groups[] = { 517 "gpio25", "gpio32", 518 }; 519 520 static const char * const pwm32_groups[] = { 521 "gpio25", 522 }; 523 524 static const char * const tx_swrm_groups[] = { 525 "gpio25", 526 }; 527 528 static const char * const qdss_cti_trig_in_b1_groups[] = { 529 "gpio25", 530 }; 531 532 static const char * const audio1_groups[] = { 533 "gpio26", "gpio33", 534 }; 535 536 static const char * const pwm04_groups[] = { 537 "gpio26", 538 }; 539 540 static const char * const audio2_groups[] = { 541 "gpio27", 542 }; 543 544 static const char * const pwm14_groups[] = { 545 "gpio27", 546 }; 547 548 static const char * const audio3_groups[] = { 549 "gpio28", 550 }; 551 552 static const char * const pwm24_groups[] = { 553 "gpio28", 554 }; 555 556 static const char * const audio_rxmclk_groups[] = { 557 "gpio29", 558 }; 559 560 static const char * const audio_rxmclkin_groups[] = { 561 "gpio29", 562 }; 563 564 static const char * const pwm03_groups[] = { 565 "gpio29", 566 }; 567 568 static const char * const lpass_pdm_groups[] = { 569 "gpio29", "gpio30", "gpio31", "gpio32", 570 }; 571 572 static const char * const lpass_aud_groups[] = { 573 "gpio29", 574 }; 575 576 static const char * const qdss_cti_trig_in_a1_groups[] = { 577 "gpio29", 578 }; 579 580 static const char * const audio_rxbclk_groups[] = { 581 "gpio30", 582 }; 583 584 static const char * const pwm13_groups[] = { 585 "gpio30", 586 }; 587 588 static const char * const lpass_aud0_groups[] = { 589 "gpio30", 590 }; 591 592 static const char * const rx_swrm_groups[] = { 593 "gpio30", 594 }; 595 596 static const char * const qdss_cti_trig_out_a1_groups[] = { 597 "gpio30", 598 }; 599 600 static const char * const audio_rxfsync_groups[] = { 601 "gpio31", 602 }; 603 604 static const char * const pwm23_groups[] = { 605 "gpio31", 606 }; 607 608 static const char * const lpass_aud1_groups[] = { 609 "gpio31", 610 }; 611 612 static const char * const rx_swrm0_groups[] = { 613 "gpio31", 614 }; 615 616 static const char * const qdss_cti_trig_in_a0_groups[] = { 617 "gpio31", 618 }; 619 620 static const char * const pwm33_groups[] = { 621 "gpio32", 622 }; 623 624 static const char * const lpass_aud2_groups[] = { 625 "gpio32", 626 }; 627 628 static const char * const rx_swrm1_groups[] = { 629 "gpio32", 630 }; 631 632 static const char * const qdss_cti_trig_out_a0_groups[] = { 633 "gpio32", 634 }; 635 636 static const char * const lpass_pcm_groups[] = { 637 "gpio34", "gpio35", "gpio36", "gpio37", 638 }; 639 640 static const char * const mac10_groups[] = { 641 "gpio34", "gpio35", 642 }; 643 644 static const char * const mac00_groups[] = { 645 "gpio34", "gpio35", 646 }; 647 648 static const char * const mac20_groups[] = { 649 "gpio36", "gpio37", 650 }; 651 652 static const char * const blsp0_uart_groups[] = { 653 "gpio38", "gpio39", "gpio40", "gpio41", 654 }; 655 656 static const char * const blsp0_i2c_groups[] = { 657 "gpio38", "gpio39", 658 }; 659 660 static const char * const blsp0_spi_groups[] = { 661 "gpio38", "gpio39", "gpio40", "gpio41", 662 }; 663 664 static const char * const blsp2_uart_groups[] = { 665 "gpio42", "gpio43", "gpio44", "gpio45", 666 }; 667 668 static const char * const blsp2_i2c_groups[] = { 669 "gpio42", "gpio43", 670 }; 671 672 static const char * const blsp2_spi_groups[] = { 673 "gpio42", "gpio43", "gpio44", "gpio45", 674 }; 675 676 static const char * const blsp5_i2c_groups[] = { 677 "gpio46", "gpio47", 678 }; 679 680 static const char * const blsp5_uart_groups[] = { 681 "gpio48", "gpio49", 682 }; 683 684 static const char * const qdss_traceclk_a_groups[] = { 685 "gpio48", 686 }; 687 688 static const char * const qdss_tracectl_a_groups[] = { 689 "gpio49", 690 }; 691 692 static const char * const pwm01_groups[] = { 693 "gpio50", 694 }; 695 696 static const char * const pta1_1_groups[] = { 697 "gpio51", 698 }; 699 700 static const char * const pwm11_groups[] = { 701 "gpio51", 702 }; 703 704 static const char * const rx1_groups[] = { 705 "gpio51", 706 }; 707 708 static const char * const pta1_2_groups[] = { 709 "gpio52", 710 }; 711 712 static const char * const pwm21_groups[] = { 713 "gpio52", 714 }; 715 716 static const char * const pta1_0_groups[] = { 717 "gpio53", 718 }; 719 720 static const char * const pwm31_groups[] = { 721 "gpio53", 722 }; 723 724 static const char * const prng_rosc_groups[] = { 725 "gpio53", 726 }; 727 728 static const char * const blsp4_uart_groups[] = { 729 "gpio55", "gpio56", "gpio57", "gpio58", 730 }; 731 732 static const char * const blsp4_i2c_groups[] = { 733 "gpio55", "gpio56", 734 }; 735 736 static const char * const blsp4_spi_groups[] = { 737 "gpio55", "gpio56", "gpio57", "gpio58", 738 }; 739 740 static const char * const pcie0_clk_groups[] = { 741 "gpio59", 742 }; 743 744 static const char * const cri_trng0_groups[] = { 745 "gpio59", 746 }; 747 748 static const char * const pcie0_rst_groups[] = { 749 "gpio60", 750 }; 751 752 static const char * const cri_trng1_groups[] = { 753 "gpio60", 754 }; 755 756 static const char * const pcie0_wake_groups[] = { 757 "gpio61", 758 }; 759 760 static const char * const cri_trng_groups[] = { 761 "gpio61", 762 }; 763 764 static const char * const sd_card_groups[] = { 765 "gpio62", 766 }; 767 768 static const char * const sd_write_groups[] = { 769 "gpio63", 770 }; 771 772 static const char * const rx0_groups[] = { 773 "gpio63", 774 }; 775 776 static const char * const tsens_max_groups[] = { 777 "gpio63", 778 }; 779 780 static const char * const mdc_groups[] = { 781 "gpio64", 782 }; 783 784 static const char * const qdss_tracedata_a_groups[] = { 785 "gpio64", "gpio65", "gpio66", "gpio67", "gpio68", "gpio69", "gpio70", 786 "gpio71", "gpio72", "gpio73", "gpio74", "gpio75", "gpio76", "gpio77", 787 "gpio78", "gpio79", 788 }; 789 790 static const char * const mdio_groups[] = { 791 "gpio65", 792 }; 793 794 static const char * const pta2_0_groups[] = { 795 "gpio66", 796 }; 797 798 static const char * const wci21_groups[] = { 799 "gpio66", "gpio68", 800 }; 801 802 static const char * const cxc1_groups[] = { 803 "gpio66", "gpio68", 804 }; 805 806 static const char * const pta2_1_groups[] = { 807 "gpio67", 808 }; 809 810 static const char * const pta2_2_groups[] = { 811 "gpio68", 812 }; 813 814 static const char * const blsp1_uart_groups[] = { 815 "gpio69", "gpio70", "gpio71", "gpio72", 816 }; 817 818 static const char * const blsp1_i2c_groups[] = { 819 "gpio69", "gpio70", 820 }; 821 822 static const char * const blsp1_spi_groups[] = { 823 "gpio69", "gpio70", "gpio71", "gpio72", 824 }; 825 826 static const char * const gcc_plltest_groups[] = { 827 "gpio69", "gpio71", 828 }; 829 830 static const char * const gcc_tlmm_groups[] = { 831 "gpio70", 832 }; 833 834 static const char * const gpio_groups[] = { 835 "gpio0", "gpio1", "gpio2", "gpio3", "gpio4", "gpio5", "gpio6", "gpio7", 836 "gpio8", "gpio9", "gpio10", "gpio11", "gpio12", "gpio13", "gpio14", 837 "gpio15", "gpio16", "gpio17", "gpio18", "gpio19", "gpio20", "gpio21", 838 "gpio22", "gpio23", "gpio24", "gpio25", "gpio26", "gpio27", "gpio28", 839 "gpio29", "gpio30", "gpio31", "gpio32", "gpio33", "gpio34", "gpio35", 840 "gpio36", "gpio37", "gpio38", "gpio39", "gpio40", "gpio41", "gpio42", 841 "gpio43", "gpio44", "gpio45", "gpio46", "gpio47", "gpio48", "gpio49", 842 "gpio50", "gpio51", "gpio52", "gpio53", "gpio54", "gpio55", "gpio56", 843 "gpio57", "gpio58", "gpio59", "gpio60", "gpio61", "gpio62", "gpio63", 844 "gpio64", "gpio65", "gpio66", "gpio67", "gpio68", "gpio69", "gpio70", 845 "gpio71", "gpio72", "gpio73", "gpio74", "gpio75", "gpio76", "gpio77", 846 "gpio78", "gpio79", 847 }; 848 849 static const struct pinfunction ipq6018_functions[] = { 850 MSM_PIN_FUNCTION(atest_char), 851 MSM_PIN_FUNCTION(atest_char0), 852 MSM_PIN_FUNCTION(atest_char1), 853 MSM_PIN_FUNCTION(atest_char2), 854 MSM_PIN_FUNCTION(atest_char3), 855 MSM_PIN_FUNCTION(audio0), 856 MSM_PIN_FUNCTION(audio1), 857 MSM_PIN_FUNCTION(audio2), 858 MSM_PIN_FUNCTION(audio3), 859 MSM_PIN_FUNCTION(audio_rxbclk), 860 MSM_PIN_FUNCTION(audio_rxfsync), 861 MSM_PIN_FUNCTION(audio_rxmclk), 862 MSM_PIN_FUNCTION(audio_rxmclkin), 863 MSM_PIN_FUNCTION(audio_txbclk), 864 MSM_PIN_FUNCTION(audio_txfsync), 865 MSM_PIN_FUNCTION(audio_txmclk), 866 MSM_PIN_FUNCTION(audio_txmclkin), 867 MSM_PIN_FUNCTION(blsp0_i2c), 868 MSM_PIN_FUNCTION(blsp0_spi), 869 MSM_PIN_FUNCTION(blsp0_uart), 870 MSM_PIN_FUNCTION(blsp1_i2c), 871 MSM_PIN_FUNCTION(blsp1_spi), 872 MSM_PIN_FUNCTION(blsp1_uart), 873 MSM_PIN_FUNCTION(blsp2_i2c), 874 MSM_PIN_FUNCTION(blsp2_spi), 875 MSM_PIN_FUNCTION(blsp2_uart), 876 MSM_PIN_FUNCTION(blsp3_i2c), 877 MSM_PIN_FUNCTION(blsp3_spi), 878 MSM_PIN_FUNCTION(blsp3_uart), 879 MSM_PIN_FUNCTION(blsp4_i2c), 880 MSM_PIN_FUNCTION(blsp4_spi), 881 MSM_PIN_FUNCTION(blsp4_uart), 882 MSM_PIN_FUNCTION(blsp5_i2c), 883 MSM_PIN_FUNCTION(blsp5_uart), 884 MSM_PIN_FUNCTION(burn0), 885 MSM_PIN_FUNCTION(burn1), 886 MSM_PIN_FUNCTION(cri_trng), 887 MSM_PIN_FUNCTION(cri_trng0), 888 MSM_PIN_FUNCTION(cri_trng1), 889 MSM_PIN_FUNCTION(cxc0), 890 MSM_PIN_FUNCTION(cxc1), 891 MSM_PIN_FUNCTION(dbg_out), 892 MSM_PIN_FUNCTION(gcc_plltest), 893 MSM_PIN_FUNCTION(gcc_tlmm), 894 MSM_PIN_FUNCTION(gpio), 895 MSM_PIN_FUNCTION(lpass_aud), 896 MSM_PIN_FUNCTION(lpass_aud0), 897 MSM_PIN_FUNCTION(lpass_aud1), 898 MSM_PIN_FUNCTION(lpass_aud2), 899 MSM_PIN_FUNCTION(lpass_pcm), 900 MSM_PIN_FUNCTION(lpass_pdm), 901 MSM_PIN_FUNCTION(mac00), 902 MSM_PIN_FUNCTION(mac01), 903 MSM_PIN_FUNCTION(mac10), 904 MSM_PIN_FUNCTION(mac11), 905 MSM_PIN_FUNCTION(mac12), 906 MSM_PIN_FUNCTION(mac13), 907 MSM_PIN_FUNCTION(mac20), 908 MSM_PIN_FUNCTION(mac21), 909 MSM_PIN_FUNCTION(mdc), 910 MSM_PIN_FUNCTION(mdio), 911 MSM_PIN_FUNCTION(pcie0_clk), 912 MSM_PIN_FUNCTION(pcie0_rst), 913 MSM_PIN_FUNCTION(pcie0_wake), 914 MSM_PIN_FUNCTION(prng_rosc), 915 MSM_PIN_FUNCTION(pta1_0), 916 MSM_PIN_FUNCTION(pta1_1), 917 MSM_PIN_FUNCTION(pta1_2), 918 MSM_PIN_FUNCTION(pta2_0), 919 MSM_PIN_FUNCTION(pta2_1), 920 MSM_PIN_FUNCTION(pta2_2), 921 MSM_PIN_FUNCTION(pwm00), 922 MSM_PIN_FUNCTION(pwm01), 923 MSM_PIN_FUNCTION(pwm02), 924 MSM_PIN_FUNCTION(pwm03), 925 MSM_PIN_FUNCTION(pwm04), 926 MSM_PIN_FUNCTION(pwm10), 927 MSM_PIN_FUNCTION(pwm11), 928 MSM_PIN_FUNCTION(pwm12), 929 MSM_PIN_FUNCTION(pwm13), 930 MSM_PIN_FUNCTION(pwm14), 931 MSM_PIN_FUNCTION(pwm20), 932 MSM_PIN_FUNCTION(pwm21), 933 MSM_PIN_FUNCTION(pwm22), 934 MSM_PIN_FUNCTION(pwm23), 935 MSM_PIN_FUNCTION(pwm24), 936 MSM_PIN_FUNCTION(pwm30), 937 MSM_PIN_FUNCTION(pwm31), 938 MSM_PIN_FUNCTION(pwm32), 939 MSM_PIN_FUNCTION(pwm33), 940 MSM_PIN_FUNCTION(qdss_cti_trig_in_a0), 941 MSM_PIN_FUNCTION(qdss_cti_trig_in_a1), 942 MSM_PIN_FUNCTION(qdss_cti_trig_out_a0), 943 MSM_PIN_FUNCTION(qdss_cti_trig_out_a1), 944 MSM_PIN_FUNCTION(qdss_cti_trig_in_b0), 945 MSM_PIN_FUNCTION(qdss_cti_trig_in_b1), 946 MSM_PIN_FUNCTION(qdss_cti_trig_out_b0), 947 MSM_PIN_FUNCTION(qdss_cti_trig_out_b1), 948 MSM_PIN_FUNCTION(qdss_traceclk_a), 949 MSM_PIN_FUNCTION(qdss_tracectl_a), 950 MSM_PIN_FUNCTION(qdss_tracedata_a), 951 MSM_PIN_FUNCTION(qdss_traceclk_b), 952 MSM_PIN_FUNCTION(qdss_tracectl_b), 953 MSM_PIN_FUNCTION(qdss_tracedata_b), 954 MSM_PIN_FUNCTION(qpic_pad), 955 MSM_PIN_FUNCTION(rx0), 956 MSM_PIN_FUNCTION(rx1), 957 MSM_PIN_FUNCTION(rx_swrm), 958 MSM_PIN_FUNCTION(rx_swrm0), 959 MSM_PIN_FUNCTION(rx_swrm1), 960 MSM_PIN_FUNCTION(sd_card), 961 MSM_PIN_FUNCTION(sd_write), 962 MSM_PIN_FUNCTION(tsens_max), 963 MSM_PIN_FUNCTION(tx_swrm), 964 MSM_PIN_FUNCTION(tx_swrm0), 965 MSM_PIN_FUNCTION(tx_swrm1), 966 MSM_PIN_FUNCTION(tx_swrm2), 967 MSM_PIN_FUNCTION(wci20), 968 MSM_PIN_FUNCTION(wci21), 969 MSM_PIN_FUNCTION(wci22), 970 MSM_PIN_FUNCTION(wci23), 971 MSM_PIN_FUNCTION(wsa_swrm), 972 }; 973 974 static const struct msm_pingroup ipq6018_groups[] = { 975 PINGROUP(0, qpic_pad, wci20, qdss_traceclk_b, _, burn0, _, _, _, _), 976 PINGROUP(1, qpic_pad, mac12, qdss_tracectl_b, _, burn1, _, _, _, _), 977 PINGROUP(2, qpic_pad, wci20, qdss_tracedata_b, _, _, _, _, _, _), 978 PINGROUP(3, qpic_pad, mac01, qdss_tracedata_b, _, _, _, _, _, _), 979 PINGROUP(4, qpic_pad, mac01, qdss_tracedata_b, _, _, _, _, _, _), 980 PINGROUP(5, qpic_pad, mac21, qdss_tracedata_b, _, _, _, _, _, _), 981 PINGROUP(6, qpic_pad, mac21, qdss_tracedata_b, _, _, _, _, _, _), 982 PINGROUP(7, qpic_pad, qdss_tracedata_b, _, _, _, _, _, _, _), 983 PINGROUP(8, qpic_pad, qdss_tracedata_b, _, _, _, _, _, _, _), 984 PINGROUP(9, qpic_pad, atest_char, cxc0, mac13, dbg_out, qdss_tracedata_b, _, _, _), 985 PINGROUP(10, qpic_pad, qdss_tracedata_b, _, _, _, _, _, _, _), 986 PINGROUP(11, qpic_pad, wci22, mac12, qdss_tracedata_b, _, _, _, _, _), 987 PINGROUP(12, qpic_pad, qdss_tracedata_b, _, _, _, _, _, _, _), 988 PINGROUP(13, qpic_pad, qdss_tracedata_b, _, _, _, _, _, _, _), 989 PINGROUP(14, qpic_pad, qdss_tracedata_b, _, _, _, _, _, _, _), 990 PINGROUP(15, qpic_pad, qdss_tracedata_b, _, _, _, _, _, _, _), 991 PINGROUP(16, qpic_pad, cxc0, mac13, qdss_tracedata_b, _, _, _, _, _), 992 PINGROUP(17, qpic_pad, qdss_tracedata_b, wci22, _, _, _, _, _, _), 993 PINGROUP(18, pwm00, atest_char0, wci23, mac11, _, _, _, _, _), 994 PINGROUP(19, pwm10, atest_char1, wci23, mac11, _, _, _, _, _), 995 PINGROUP(20, pwm20, atest_char2, _, _, _, _, _, _, _), 996 PINGROUP(21, pwm30, atest_char3, _, _, _, _, _, _, _), 997 PINGROUP(22, audio_txmclk, audio_txmclkin, pwm02, tx_swrm0, _, qdss_cti_trig_out_b0, _, _, _), 998 PINGROUP(23, audio_txbclk, pwm12, wsa_swrm, tx_swrm1, _, qdss_cti_trig_in_b0, _, _, _), 999 PINGROUP(24, audio_txfsync, pwm22, wsa_swrm, tx_swrm2, _, qdss_cti_trig_out_b1, _, _, _), 1000 PINGROUP(25, audio0, pwm32, tx_swrm, _, qdss_cti_trig_in_b1, _, _, _, _), 1001 PINGROUP(26, audio1, pwm04, _, _, _, _, _, _, _), 1002 PINGROUP(27, audio2, pwm14, _, _, _, _, _, _, _), 1003 PINGROUP(28, audio3, pwm24, _, _, _, _, _, _, _), 1004 PINGROUP(29, audio_rxmclk, audio_rxmclkin, pwm03, lpass_pdm, lpass_aud, qdss_cti_trig_in_a1, _, _, _), 1005 PINGROUP(30, audio_rxbclk, pwm13, lpass_pdm, lpass_aud0, rx_swrm, _, qdss_cti_trig_out_a1, _, _), 1006 PINGROUP(31, audio_rxfsync, pwm23, lpass_pdm, lpass_aud1, rx_swrm0, _, qdss_cti_trig_in_a0, _, _), 1007 PINGROUP(32, audio0, pwm33, lpass_pdm, lpass_aud2, rx_swrm1, _, qdss_cti_trig_out_a0, _, _), 1008 PINGROUP(33, audio1, _, _, _, _, _, _, _, _), 1009 PINGROUP(34, lpass_pcm, mac10, mac00, _, _, _, _, _, _), 1010 PINGROUP(35, lpass_pcm, mac10, mac00, _, _, _, _, _, _), 1011 PINGROUP(36, lpass_pcm, mac20, _, _, _, _, _, _, _), 1012 PINGROUP(37, lpass_pcm, mac20, _, _, _, _, _, _, _), 1013 PINGROUP(38, blsp0_uart, blsp0_i2c, blsp0_spi, _, _, _, _, _, _), 1014 PINGROUP(39, blsp0_uart, blsp0_i2c, blsp0_spi, _, _, _, _, _, _), 1015 PINGROUP(40, blsp0_uart, blsp0_spi, _, _, _, _, _, _, _), 1016 PINGROUP(41, blsp0_uart, blsp0_spi, _, _, _, _, _, _, _), 1017 PINGROUP(42, blsp2_uart, blsp2_i2c, blsp2_spi, _, _, _, _, _, _), 1018 PINGROUP(43, blsp2_uart, blsp2_i2c, blsp2_spi, _, _, _, _, _, _), 1019 PINGROUP(44, blsp2_uart, blsp2_spi, _, _, _, _, _, _, _), 1020 PINGROUP(45, blsp2_uart, blsp2_spi, _, _, _, _, _, _, _), 1021 PINGROUP(46, blsp5_i2c, _, _, _, _, _, _, _, _), 1022 PINGROUP(47, blsp5_i2c, _, _, _, _, _, _, _, _), 1023 PINGROUP(48, blsp5_uart, _, qdss_traceclk_a, _, _, _, _, _, _), 1024 PINGROUP(49, blsp5_uart, _, qdss_tracectl_a, _, _, _, _, _, _), 1025 PINGROUP(50, pwm01, _, _, _, _, _, _, _, _), 1026 PINGROUP(51, pta1_1, pwm11, _, rx1, _, _, _, _, _), 1027 PINGROUP(52, pta1_2, pwm21, _, _, _, _, _, _, _), 1028 PINGROUP(53, pta1_0, pwm31, prng_rosc, _, _, _, _, _, _), 1029 PINGROUP(54, _, _, _, _, _, _, _, _, _), 1030 PINGROUP(55, blsp4_uart, blsp4_i2c, blsp4_spi, _, _, _, _, _, _), 1031 PINGROUP(56, blsp4_uart, blsp4_i2c, blsp4_spi, _, _, _, _, _, _), 1032 PINGROUP(57, blsp4_uart, blsp4_spi, _, _, _, _, _, _, _), 1033 PINGROUP(58, blsp4_uart, blsp4_spi, _, _, _, _, _, _, _), 1034 PINGROUP(59, pcie0_clk, _, _, cri_trng0, _, _, _, _, _), 1035 PINGROUP(60, pcie0_rst, _, _, cri_trng1, _, _, _, _, _), 1036 PINGROUP(61, pcie0_wake, _, _, cri_trng, _, _, _, _, _), 1037 PINGROUP(62, sd_card, _, _, _, _, _, _, _, _), 1038 PINGROUP(63, sd_write, rx0, _, tsens_max, _, _, _, _, _), 1039 PINGROUP(64, mdc, _, qdss_tracedata_a, _, _, _, _, _, _), 1040 PINGROUP(65, mdio, _, qdss_tracedata_a, _, _, _, _, _, _), 1041 PINGROUP(66, pta2_0, wci21, cxc1, qdss_tracedata_a, _, _, _, _, _), 1042 PINGROUP(67, pta2_1, qdss_tracedata_a, _, _, _, _, _, _, _), 1043 PINGROUP(68, pta2_2, wci21, cxc1, qdss_tracedata_a, _, _, _, _, _), 1044 PINGROUP(69, blsp1_uart, blsp1_i2c, blsp1_spi, gcc_plltest, qdss_tracedata_a, _, _, _, _), 1045 PINGROUP(70, blsp1_uart, blsp1_i2c, blsp1_spi, gcc_tlmm, qdss_tracedata_a, _, _, _, _), 1046 PINGROUP(71, blsp1_uart, blsp1_spi, gcc_plltest, qdss_tracedata_a, _, _, _, _, _), 1047 PINGROUP(72, blsp1_uart, blsp1_spi, qdss_tracedata_a, _, _, _, _, _, _), 1048 PINGROUP(73, blsp3_uart, blsp3_i2c, blsp3_spi, _, qdss_tracedata_a, _, _, _, _), 1049 PINGROUP(74, blsp3_uart, blsp3_i2c, blsp3_spi, _, qdss_tracedata_a, _, _, _, _), 1050 PINGROUP(75, blsp3_uart, blsp3_spi, _, qdss_tracedata_a, _, _, _, _, _), 1051 PINGROUP(76, blsp3_uart, blsp3_spi, _, qdss_tracedata_a, _, _, _, _, _), 1052 PINGROUP(77, blsp3_spi, _, qdss_tracedata_a, _, _, _, _, _, _), 1053 PINGROUP(78, blsp3_spi, _, qdss_tracedata_a, _, _, _, _, _, _), 1054 PINGROUP(79, blsp3_spi, _, qdss_tracedata_a, _, _, _, _, _, _), 1055 }; 1056 1057 static const struct msm_pinctrl_soc_data ipq6018_pinctrl = { 1058 .pins = ipq6018_pins, 1059 .npins = ARRAY_SIZE(ipq6018_pins), 1060 .functions = ipq6018_functions, 1061 .nfunctions = ARRAY_SIZE(ipq6018_functions), 1062 .groups = ipq6018_groups, 1063 .ngroups = ARRAY_SIZE(ipq6018_groups), 1064 .ngpios = 80, 1065 }; 1066 1067 static int ipq6018_pinctrl_probe(struct platform_device *pdev) 1068 { 1069 return msm_pinctrl_probe(pdev, &ipq6018_pinctrl); 1070 } 1071 1072 static const struct of_device_id ipq6018_pinctrl_of_match[] = { 1073 { .compatible = "qcom,ipq6018-pinctrl", }, 1074 { }, 1075 }; 1076 1077 static struct platform_driver ipq6018_pinctrl_driver = { 1078 .driver = { 1079 .name = "ipq6018-pinctrl", 1080 .of_match_table = ipq6018_pinctrl_of_match, 1081 }, 1082 .probe = ipq6018_pinctrl_probe, 1083 .remove = msm_pinctrl_remove, 1084 }; 1085 1086 static int __init ipq6018_pinctrl_init(void) 1087 { 1088 return platform_driver_register(&ipq6018_pinctrl_driver); 1089 } 1090 arch_initcall(ipq6018_pinctrl_init); 1091 1092 static void __exit ipq6018_pinctrl_exit(void) 1093 { 1094 platform_driver_unregister(&ipq6018_pinctrl_driver); 1095 } 1096 module_exit(ipq6018_pinctrl_exit); 1097 1098 MODULE_DESCRIPTION("QTI ipq6018 pinctrl driver"); 1099 MODULE_LICENSE("GPL v2"); 1100 MODULE_DEVICE_TABLE(of, ipq6018_pinctrl_of_match); 1101