linux/drivers/pinctrl/qcom/pinctrl-ipq4019.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * Copyright (c) 2015, 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#include <linux/pinctrl/pinctrl.h>
  10
  11#include "pinctrl-msm.h"
  12
  13static const struct pinctrl_pin_desc ipq4019_pins[] = {
  14        PINCTRL_PIN(0, "GPIO_0"),
  15        PINCTRL_PIN(1, "GPIO_1"),
  16        PINCTRL_PIN(2, "GPIO_2"),
  17        PINCTRL_PIN(3, "GPIO_3"),
  18        PINCTRL_PIN(4, "GPIO_4"),
  19        PINCTRL_PIN(5, "GPIO_5"),
  20        PINCTRL_PIN(6, "GPIO_6"),
  21        PINCTRL_PIN(7, "GPIO_7"),
  22        PINCTRL_PIN(8, "GPIO_8"),
  23        PINCTRL_PIN(9, "GPIO_9"),
  24        PINCTRL_PIN(10, "GPIO_10"),
  25        PINCTRL_PIN(11, "GPIO_11"),
  26        PINCTRL_PIN(12, "GPIO_12"),
  27        PINCTRL_PIN(13, "GPIO_13"),
  28        PINCTRL_PIN(14, "GPIO_14"),
  29        PINCTRL_PIN(15, "GPIO_15"),
  30        PINCTRL_PIN(16, "GPIO_16"),
  31        PINCTRL_PIN(17, "GPIO_17"),
  32        PINCTRL_PIN(18, "GPIO_18"),
  33        PINCTRL_PIN(19, "GPIO_19"),
  34        PINCTRL_PIN(20, "GPIO_20"),
  35        PINCTRL_PIN(21, "GPIO_21"),
  36        PINCTRL_PIN(22, "GPIO_22"),
  37        PINCTRL_PIN(23, "GPIO_23"),
  38        PINCTRL_PIN(24, "GPIO_24"),
  39        PINCTRL_PIN(25, "GPIO_25"),
  40        PINCTRL_PIN(26, "GPIO_26"),
  41        PINCTRL_PIN(27, "GPIO_27"),
  42        PINCTRL_PIN(28, "GPIO_28"),
  43        PINCTRL_PIN(29, "GPIO_29"),
  44        PINCTRL_PIN(30, "GPIO_30"),
  45        PINCTRL_PIN(31, "GPIO_31"),
  46        PINCTRL_PIN(32, "GPIO_32"),
  47        PINCTRL_PIN(33, "GPIO_33"),
  48        PINCTRL_PIN(34, "GPIO_34"),
  49        PINCTRL_PIN(35, "GPIO_35"),
  50        PINCTRL_PIN(36, "GPIO_36"),
  51        PINCTRL_PIN(37, "GPIO_37"),
  52        PINCTRL_PIN(38, "GPIO_38"),
  53        PINCTRL_PIN(39, "GPIO_39"),
  54        PINCTRL_PIN(40, "GPIO_40"),
  55        PINCTRL_PIN(41, "GPIO_41"),
  56        PINCTRL_PIN(42, "GPIO_42"),
  57        PINCTRL_PIN(43, "GPIO_43"),
  58        PINCTRL_PIN(44, "GPIO_44"),
  59        PINCTRL_PIN(45, "GPIO_45"),
  60        PINCTRL_PIN(46, "GPIO_46"),
  61        PINCTRL_PIN(47, "GPIO_47"),
  62        PINCTRL_PIN(48, "GPIO_48"),
  63        PINCTRL_PIN(49, "GPIO_49"),
  64        PINCTRL_PIN(50, "GPIO_50"),
  65        PINCTRL_PIN(51, "GPIO_51"),
  66        PINCTRL_PIN(52, "GPIO_52"),
  67        PINCTRL_PIN(53, "GPIO_53"),
  68        PINCTRL_PIN(54, "GPIO_54"),
  69        PINCTRL_PIN(55, "GPIO_55"),
  70        PINCTRL_PIN(56, "GPIO_56"),
  71        PINCTRL_PIN(57, "GPIO_57"),
  72        PINCTRL_PIN(58, "GPIO_58"),
  73        PINCTRL_PIN(59, "GPIO_59"),
  74        PINCTRL_PIN(60, "GPIO_60"),
  75        PINCTRL_PIN(61, "GPIO_61"),
  76        PINCTRL_PIN(62, "GPIO_62"),
  77        PINCTRL_PIN(63, "GPIO_63"),
  78        PINCTRL_PIN(64, "GPIO_64"),
  79        PINCTRL_PIN(65, "GPIO_65"),
  80        PINCTRL_PIN(66, "GPIO_66"),
  81        PINCTRL_PIN(67, "GPIO_67"),
  82        PINCTRL_PIN(68, "GPIO_68"),
  83        PINCTRL_PIN(69, "GPIO_69"),
  84        PINCTRL_PIN(70, "GPIO_70"),
  85        PINCTRL_PIN(71, "GPIO_71"),
  86        PINCTRL_PIN(72, "GPIO_72"),
  87        PINCTRL_PIN(73, "GPIO_73"),
  88        PINCTRL_PIN(74, "GPIO_74"),
  89        PINCTRL_PIN(75, "GPIO_75"),
  90        PINCTRL_PIN(76, "GPIO_76"),
  91        PINCTRL_PIN(77, "GPIO_77"),
  92        PINCTRL_PIN(78, "GPIO_78"),
  93        PINCTRL_PIN(79, "GPIO_79"),
  94        PINCTRL_PIN(80, "GPIO_80"),
  95        PINCTRL_PIN(81, "GPIO_81"),
  96        PINCTRL_PIN(82, "GPIO_82"),
  97        PINCTRL_PIN(83, "GPIO_83"),
  98        PINCTRL_PIN(84, "GPIO_84"),
  99        PINCTRL_PIN(85, "GPIO_85"),
 100        PINCTRL_PIN(86, "GPIO_86"),
 101        PINCTRL_PIN(87, "GPIO_87"),
 102        PINCTRL_PIN(88, "GPIO_88"),
 103        PINCTRL_PIN(89, "GPIO_89"),
 104        PINCTRL_PIN(90, "GPIO_90"),
 105        PINCTRL_PIN(91, "GPIO_91"),
 106        PINCTRL_PIN(92, "GPIO_92"),
 107        PINCTRL_PIN(93, "GPIO_93"),
 108        PINCTRL_PIN(94, "GPIO_94"),
 109        PINCTRL_PIN(95, "GPIO_95"),
 110        PINCTRL_PIN(96, "GPIO_96"),
 111        PINCTRL_PIN(97, "GPIO_97"),
 112        PINCTRL_PIN(98, "GPIO_98"),
 113        PINCTRL_PIN(99, "GPIO_99"),
 114};
 115
 116#define DECLARE_QCA_GPIO_PINS(pin) \
 117        static const unsigned int gpio##pin##_pins[] = { pin }
 118DECLARE_QCA_GPIO_PINS(0);
 119DECLARE_QCA_GPIO_PINS(1);
 120DECLARE_QCA_GPIO_PINS(2);
 121DECLARE_QCA_GPIO_PINS(3);
 122DECLARE_QCA_GPIO_PINS(4);
 123DECLARE_QCA_GPIO_PINS(5);
 124DECLARE_QCA_GPIO_PINS(6);
 125DECLARE_QCA_GPIO_PINS(7);
 126DECLARE_QCA_GPIO_PINS(8);
 127DECLARE_QCA_GPIO_PINS(9);
 128DECLARE_QCA_GPIO_PINS(10);
 129DECLARE_QCA_GPIO_PINS(11);
 130DECLARE_QCA_GPIO_PINS(12);
 131DECLARE_QCA_GPIO_PINS(13);
 132DECLARE_QCA_GPIO_PINS(14);
 133DECLARE_QCA_GPIO_PINS(15);
 134DECLARE_QCA_GPIO_PINS(16);
 135DECLARE_QCA_GPIO_PINS(17);
 136DECLARE_QCA_GPIO_PINS(18);
 137DECLARE_QCA_GPIO_PINS(19);
 138DECLARE_QCA_GPIO_PINS(20);
 139DECLARE_QCA_GPIO_PINS(21);
 140DECLARE_QCA_GPIO_PINS(22);
 141DECLARE_QCA_GPIO_PINS(23);
 142DECLARE_QCA_GPIO_PINS(24);
 143DECLARE_QCA_GPIO_PINS(25);
 144DECLARE_QCA_GPIO_PINS(26);
 145DECLARE_QCA_GPIO_PINS(27);
 146DECLARE_QCA_GPIO_PINS(28);
 147DECLARE_QCA_GPIO_PINS(29);
 148DECLARE_QCA_GPIO_PINS(30);
 149DECLARE_QCA_GPIO_PINS(31);
 150DECLARE_QCA_GPIO_PINS(32);
 151DECLARE_QCA_GPIO_PINS(33);
 152DECLARE_QCA_GPIO_PINS(34);
 153DECLARE_QCA_GPIO_PINS(35);
 154DECLARE_QCA_GPIO_PINS(36);
 155DECLARE_QCA_GPIO_PINS(37);
 156DECLARE_QCA_GPIO_PINS(38);
 157DECLARE_QCA_GPIO_PINS(39);
 158DECLARE_QCA_GPIO_PINS(40);
 159DECLARE_QCA_GPIO_PINS(41);
 160DECLARE_QCA_GPIO_PINS(42);
 161DECLARE_QCA_GPIO_PINS(43);
 162DECLARE_QCA_GPIO_PINS(44);
 163DECLARE_QCA_GPIO_PINS(45);
 164DECLARE_QCA_GPIO_PINS(46);
 165DECLARE_QCA_GPIO_PINS(47);
 166DECLARE_QCA_GPIO_PINS(48);
 167DECLARE_QCA_GPIO_PINS(49);
 168DECLARE_QCA_GPIO_PINS(50);
 169DECLARE_QCA_GPIO_PINS(51);
 170DECLARE_QCA_GPIO_PINS(52);
 171DECLARE_QCA_GPIO_PINS(53);
 172DECLARE_QCA_GPIO_PINS(54);
 173DECLARE_QCA_GPIO_PINS(55);
 174DECLARE_QCA_GPIO_PINS(56);
 175DECLARE_QCA_GPIO_PINS(57);
 176DECLARE_QCA_GPIO_PINS(58);
 177DECLARE_QCA_GPIO_PINS(59);
 178DECLARE_QCA_GPIO_PINS(60);
 179DECLARE_QCA_GPIO_PINS(61);
 180DECLARE_QCA_GPIO_PINS(62);
 181DECLARE_QCA_GPIO_PINS(63);
 182DECLARE_QCA_GPIO_PINS(64);
 183DECLARE_QCA_GPIO_PINS(65);
 184DECLARE_QCA_GPIO_PINS(66);
 185DECLARE_QCA_GPIO_PINS(67);
 186DECLARE_QCA_GPIO_PINS(68);
 187DECLARE_QCA_GPIO_PINS(69);
 188DECLARE_QCA_GPIO_PINS(70);
 189DECLARE_QCA_GPIO_PINS(71);
 190DECLARE_QCA_GPIO_PINS(72);
 191DECLARE_QCA_GPIO_PINS(73);
 192DECLARE_QCA_GPIO_PINS(74);
 193DECLARE_QCA_GPIO_PINS(75);
 194DECLARE_QCA_GPIO_PINS(76);
 195DECLARE_QCA_GPIO_PINS(77);
 196DECLARE_QCA_GPIO_PINS(78);
 197DECLARE_QCA_GPIO_PINS(79);
 198DECLARE_QCA_GPIO_PINS(80);
 199DECLARE_QCA_GPIO_PINS(81);
 200DECLARE_QCA_GPIO_PINS(82);
 201DECLARE_QCA_GPIO_PINS(83);
 202DECLARE_QCA_GPIO_PINS(84);
 203DECLARE_QCA_GPIO_PINS(85);
 204DECLARE_QCA_GPIO_PINS(86);
 205DECLARE_QCA_GPIO_PINS(87);
 206DECLARE_QCA_GPIO_PINS(88);
 207DECLARE_QCA_GPIO_PINS(89);
 208DECLARE_QCA_GPIO_PINS(90);
 209DECLARE_QCA_GPIO_PINS(91);
 210DECLARE_QCA_GPIO_PINS(92);
 211DECLARE_QCA_GPIO_PINS(93);
 212DECLARE_QCA_GPIO_PINS(94);
 213DECLARE_QCA_GPIO_PINS(95);
 214DECLARE_QCA_GPIO_PINS(96);
 215DECLARE_QCA_GPIO_PINS(97);
 216DECLARE_QCA_GPIO_PINS(98);
 217DECLARE_QCA_GPIO_PINS(99);
 218
 219#define FUNCTION(fname)                                 \
 220        [qca_mux_##fname] = {                           \
 221                .name = #fname,                         \
 222                .groups = fname##_groups,               \
 223                .ngroups = ARRAY_SIZE(fname##_groups),  \
 224        }
 225
 226#define PINGROUP(id, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14) \
 227        {                                               \
 228                .name = "gpio" #id,                     \
 229                .pins = gpio##id##_pins,                \
 230                .npins = (unsigned)ARRAY_SIZE(gpio##id##_pins), \
 231                .funcs = (int[]){                       \
 232                        qca_mux_gpio, /* gpio mode */   \
 233                        qca_mux_##f1,                   \
 234                        qca_mux_##f2,                   \
 235                        qca_mux_##f3,                   \
 236                        qca_mux_##f4,                   \
 237                        qca_mux_##f5,                   \
 238                        qca_mux_##f6,                   \
 239                        qca_mux_##f7,                   \
 240                        qca_mux_##f8,                   \
 241                        qca_mux_##f9,                   \
 242                        qca_mux_##f10,                  \
 243                        qca_mux_##f11,                  \
 244                        qca_mux_##f12,                  \
 245                        qca_mux_##f13,                  \
 246                        qca_mux_##f14                   \
 247                },                                      \
 248                .nfuncs = 15,                           \
 249                .ctl_reg = 0x0 + 0x1000 * id,           \
 250                .io_reg = 0x4 + 0x1000 * id,            \
 251                .intr_cfg_reg = 0x8 + 0x1000 * id,      \
 252                .intr_status_reg = 0xc + 0x1000 * id,   \
 253                .intr_target_reg = 0x8 + 0x1000 * id,   \
 254                .mux_bit = 2,                   \
 255                .pull_bit = 0,                  \
 256                .drv_bit = 6,                   \
 257                .oe_bit = 9,                    \
 258                .in_bit = 0,                    \
 259                .out_bit = 1,                   \
 260                .intr_enable_bit = 0,           \
 261                .intr_status_bit = 0,           \
 262                .intr_target_bit = 5,           \
 263                .intr_raw_status_bit = 4,       \
 264                .intr_polarity_bit = 1,         \
 265                .intr_detection_bit = 2,        \
 266                .intr_detection_width = 2,      \
 267        }
 268
 269
 270enum ipq4019_functions {
 271        qca_mux_gpio,
 272        qca_mux_aud_pin,
 273        qca_mux_audio_pwm,
 274        qca_mux_blsp_i2c0,
 275        qca_mux_blsp_i2c1,
 276        qca_mux_blsp_spi0,
 277        qca_mux_blsp_spi1,
 278        qca_mux_blsp_uart0,
 279        qca_mux_blsp_uart1,
 280        qca_mux_chip_rst,
 281        qca_mux_i2s_rx,
 282        qca_mux_i2s_spdif_in,
 283        qca_mux_i2s_spdif_out,
 284        qca_mux_i2s_td,
 285        qca_mux_i2s_tx,
 286        qca_mux_jtag,
 287        qca_mux_led0,
 288        qca_mux_led1,
 289        qca_mux_led2,
 290        qca_mux_led3,
 291        qca_mux_led4,
 292        qca_mux_led5,
 293        qca_mux_led6,
 294        qca_mux_led7,
 295        qca_mux_led8,
 296        qca_mux_led9,
 297        qca_mux_led10,
 298        qca_mux_led11,
 299        qca_mux_mdc,
 300        qca_mux_mdio,
 301        qca_mux_pcie,
 302        qca_mux_pmu,
 303        qca_mux_prng_rosc,
 304        qca_mux_qpic,
 305        qca_mux_rgmii,
 306        qca_mux_rmii,
 307        qca_mux_sdio,
 308        qca_mux_smart0,
 309        qca_mux_smart1,
 310        qca_mux_smart2,
 311        qca_mux_smart3,
 312        qca_mux_tm,
 313        qca_mux_wifi0,
 314        qca_mux_wifi1,
 315        qca_mux_NA,
 316};
 317
 318static const char * const gpio_groups[] = {
 319        "gpio0", "gpio1", "gpio2", "gpio3", "gpio4", "gpio5", "gpio6", "gpio7",
 320        "gpio8", "gpio9", "gpio10", "gpio11", "gpio12", "gpio13", "gpio14",
 321        "gpio15", "gpio16", "gpio17", "gpio18", "gpio19", "gpio20", "gpio21",
 322        "gpio22", "gpio23", "gpio24", "gpio25", "gpio26", "gpio27", "gpio28",
 323        "gpio29", "gpio30", "gpio31", "gpio32", "gpio33", "gpio34", "gpio35",
 324        "gpio36", "gpio37", "gpio38", "gpio39", "gpio40", "gpio41", "gpio42",
 325        "gpio43", "gpio44", "gpio45", "gpio46", "gpio47", "gpio48", "gpio49",
 326        "gpio50", "gpio51", "gpio52", "gpio53", "gpio54", "gpio55", "gpio56",
 327        "gpio57", "gpio58", "gpio59", "gpio60", "gpio61", "gpio62", "gpio63",
 328        "gpio64", "gpio65", "gpio66", "gpio67", "gpio68", "gpio69", "gpio70",
 329        "gpio71", "gpio72", "gpio73", "gpio74", "gpio75", "gpio76", "gpio77",
 330        "gpio78", "gpio79", "gpio80", "gpio81", "gpio82", "gpio83", "gpio84",
 331        "gpio85", "gpio86", "gpio87", "gpio88", "gpio89", "gpio90", "gpio91",
 332        "gpio92", "gpio93", "gpio94", "gpio95", "gpio96", "gpio97", "gpio98",
 333        "gpio99",
 334};
 335static const char * const aud_pin_groups[] = {
 336        "gpio48", "gpio49", "gpio50", "gpio51",
 337};
 338static const char * const audio_pwm_groups[] = {
 339        "gpio30", "gpio31", "gpio32", "gpio33", "gpio64", "gpio65", "gpio66",
 340        "gpio67",
 341};
 342static const char * const blsp_i2c0_groups[] = {
 343        "gpio10", "gpio11", "gpio20", "gpio21", "gpio58", "gpio59",
 344};
 345static const char * const blsp_i2c1_groups[] = {
 346        "gpio12", "gpio13", "gpio34", "gpio35",
 347};
 348static const char * const blsp_spi0_groups[] = {
 349        "gpio12", "gpio13", "gpio14", "gpio15", "gpio45", "gpio54", "gpio55",
 350        "gpio56", "gpio57",
 351};
 352static const char * const blsp_spi1_groups[] = {
 353        "gpio44", "gpio45", "gpio46", "gpio47",
 354};
 355static const char * const blsp_uart0_groups[] = {
 356        "gpio16", "gpio17", "gpio60", "gpio61",
 357};
 358static const char * const blsp_uart1_groups[] = {
 359        "gpio8", "gpio9", "gpio10", "gpio11",
 360};
 361static const char * const chip_rst_groups[] = {
 362        "gpio62",
 363};
 364static const char * const i2s_rx_groups[] = {
 365        "gpio0", "gpio1", "gpio2", "gpio20", "gpio21", "gpio22", "gpio23",
 366        "gpio58", "gpio60", "gpio61", "gpio63",
 367};
 368static const char * const i2s_spdif_in_groups[] = {
 369        "gpio34", "gpio59", "gpio63",
 370};
 371static const char * const i2s_spdif_out_groups[] = {
 372        "gpio35", "gpio62", "gpio63",
 373};
 374static const char * const i2s_td_groups[] = {
 375        "gpio27", "gpio28", "gpio29", "gpio54", "gpio55", "gpio56", "gpio63",
 376};
 377static const char * const i2s_tx_groups[] = {
 378        "gpio24", "gpio25", "gpio26", "gpio52", "gpio53", "gpio57", "gpio60",
 379        "gpio61",
 380};
 381static const char * const jtag_groups[] = {
 382        "gpio0", "gpio1", "gpio2", "gpio3", "gpio4", "gpio5",
 383};
 384static const char * const led0_groups[] = {
 385        "gpio16", "gpio36", "gpio60",
 386};
 387static const char * const led1_groups[] = {
 388        "gpio17", "gpio37", "gpio61",
 389};
 390static const char * const led2_groups[] = {
 391        "gpio36", "gpio38", "gpio58",
 392};
 393static const char * const led3_groups[] = {
 394        "gpio39",
 395};
 396static const char * const led4_groups[] = {
 397        "gpio40",
 398};
 399static const char * const led5_groups[] = {
 400        "gpio44",
 401};
 402static const char * const led6_groups[] = {
 403        "gpio45",
 404};
 405static const char * const led7_groups[] = {
 406        "gpio46",
 407};
 408static const char * const led8_groups[] = {
 409        "gpio47",
 410};
 411static const char * const led9_groups[] = {
 412        "gpio48",
 413};
 414static const char * const led10_groups[] = {
 415        "gpio49",
 416};
 417static const char * const led11_groups[] = {
 418        "gpio50",
 419};
 420static const char * const mdc_groups[] = {
 421        "gpio7", "gpio52",
 422};
 423static const char * const mdio_groups[] = {
 424        "gpio6", "gpio53",
 425};
 426static const char * const pcie_groups[] = {
 427        "gpio39", "gpio52",
 428};
 429static const char * const pmu_groups[] = {
 430        "gpio54", "gpio55",
 431};
 432static const char * const prng_rosc_groups[] = {
 433        "gpio53",
 434};
 435static const char * const qpic_groups[] = {
 436        "gpio52", "gpio53", "gpio54", "gpio55", "gpio56", "gpio57", "gpio58",
 437        "gpio59", "gpio60", "gpio61", "gpio62", "gpio63", "gpio64", "gpio65",
 438        "gpio66", "gpio67", "gpio68", "gpio69",
 439};
 440static const char * const rgmii_groups[] = {
 441        "gpio22", "gpio23", "gpio24", "gpio25", "gpio26", "gpio27", "gpio28",
 442        "gpio29", "gpio30", "gpio31", "gpio32", "gpio33",
 443};
 444static const char * const rmii_groups[] = {
 445        "gpio36", "gpio37", "gpio38", "gpio39", "gpio40", "gpio41", "gpio42",
 446        "gpio43", "gpio44", "gpio45", "gpio46", "gpio47", "gpio48", "gpio49",
 447        "gpio50", "gpio51",
 448};
 449static const char * const sdio_groups[] = {
 450        "gpio23", "gpio24", "gpio25", "gpio26", "gpio27", "gpio28", "gpio29",
 451        "gpio30", "gpio31", "gpio32",
 452};
 453static const char * const smart0_groups[] = {
 454        "gpio0", "gpio1", "gpio2", "gpio5", "gpio44", "gpio45", "gpio46",
 455        "gpio47",
 456};
 457static const char * const smart1_groups[] = {
 458        "gpio8", "gpio9", "gpio16", "gpio17", "gpio58", "gpio59", "gpio60",
 459        "gpio61",
 460};
 461static const char * const smart2_groups[] = {
 462        "gpio40", "gpio41", "gpio48", "gpio49",
 463};
 464static const char * const smart3_groups[] = {
 465        "gpio58", "gpio59", "gpio60", "gpio61",
 466};
 467static const char * const tm_groups[] = {
 468        "gpio52", "gpio53", "gpio54", "gpio55", "gpio56", "gpio57", "gpio58",
 469        "gpio59", "gpio60", "gpio61", "gpio62", "gpio63",
 470};
 471static const char * const wifi0_groups[] = {
 472        "gpio37", "gpio40", "gpio41", "gpio42", "gpio50", "gpio51", "gpio52",
 473        "gpio53", "gpio56", "gpio57", "gpio58", "gpio98",
 474};
 475static const char * const wifi1_groups[] = {
 476        "gpio37", "gpio40", "gpio41", "gpio43", "gpio50", "gpio51", "gpio52",
 477        "gpio53", "gpio56", "gpio57", "gpio58", "gpio98",
 478};
 479
 480static const struct msm_function ipq4019_functions[] = {
 481        FUNCTION(aud_pin),
 482        FUNCTION(audio_pwm),
 483        FUNCTION(blsp_i2c0),
 484        FUNCTION(blsp_i2c1),
 485        FUNCTION(blsp_spi0),
 486        FUNCTION(blsp_spi1),
 487        FUNCTION(blsp_uart0),
 488        FUNCTION(blsp_uart1),
 489        FUNCTION(chip_rst),
 490        FUNCTION(gpio),
 491        FUNCTION(i2s_rx),
 492        FUNCTION(i2s_spdif_in),
 493        FUNCTION(i2s_spdif_out),
 494        FUNCTION(i2s_td),
 495        FUNCTION(i2s_tx),
 496        FUNCTION(jtag),
 497        FUNCTION(led0),
 498        FUNCTION(led1),
 499        FUNCTION(led2),
 500        FUNCTION(led3),
 501        FUNCTION(led4),
 502        FUNCTION(led5),
 503        FUNCTION(led6),
 504        FUNCTION(led7),
 505        FUNCTION(led8),
 506        FUNCTION(led9),
 507        FUNCTION(led10),
 508        FUNCTION(led11),
 509        FUNCTION(mdc),
 510        FUNCTION(mdio),
 511        FUNCTION(pcie),
 512        FUNCTION(pmu),
 513        FUNCTION(prng_rosc),
 514        FUNCTION(qpic),
 515        FUNCTION(rgmii),
 516        FUNCTION(rmii),
 517        FUNCTION(sdio),
 518        FUNCTION(smart0),
 519        FUNCTION(smart1),
 520        FUNCTION(smart2),
 521        FUNCTION(smart3),
 522        FUNCTION(tm),
 523        FUNCTION(wifi0),
 524        FUNCTION(wifi1),
 525};
 526
 527static const struct msm_pingroup ipq4019_groups[] = {
 528        PINGROUP(0, jtag, smart0, i2s_rx, NA, NA, NA, NA, NA, NA, NA, NA, NA,
 529                 NA, NA),
 530        PINGROUP(1, jtag, smart0, i2s_rx, NA, NA, NA, NA, NA, NA, NA, NA, NA,
 531                 NA, NA),
 532        PINGROUP(2, jtag, smart0, i2s_rx, NA, NA, NA, NA, NA, NA, NA, NA, NA,
 533                 NA, NA),
 534        PINGROUP(3, jtag, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 535        PINGROUP(4, jtag, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 536        PINGROUP(5, jtag, smart0, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
 537                 NA),
 538        PINGROUP(6, mdio, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 539        PINGROUP(7, mdc, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 540        PINGROUP(8, blsp_uart1, NA, NA, smart1, NA, NA, NA, NA, NA, NA, NA,
 541                 NA, NA, NA),
 542        PINGROUP(9, blsp_uart1, NA, NA, smart1, NA, NA, NA, NA, NA, NA, NA,
 543                 NA, NA, NA),
 544        PINGROUP(10, blsp_uart1, NA, NA, blsp_i2c0, NA, NA, NA, NA, NA, NA, NA,
 545                 NA, NA, NA),
 546        PINGROUP(11, blsp_uart1, NA, NA, blsp_i2c0, NA, NA, NA, NA, NA, NA, NA,
 547                 NA, NA, NA),
 548        PINGROUP(12, blsp_spi0, blsp_i2c1, NA, NA, NA, NA, NA, NA, NA, NA, NA,
 549                 NA, NA, NA),
 550        PINGROUP(13, blsp_spi0, blsp_i2c1, NA, NA, NA, NA, NA, NA, NA, NA, NA,
 551                 NA, NA, NA),
 552        PINGROUP(14, blsp_spi0, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
 553                 NA),
 554        PINGROUP(15, blsp_spi0, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
 555                 NA),
 556        PINGROUP(16, blsp_uart0, led0, smart1, NA, NA, NA, NA, NA, NA, NA, NA,
 557                 NA, NA, NA),
 558        PINGROUP(17, blsp_uart0, led1, smart1, NA, NA, NA, NA, NA, NA, NA, NA,
 559                 NA, NA, NA),
 560        PINGROUP(18, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 561        PINGROUP(19, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 562        PINGROUP(20, blsp_i2c0, i2s_rx, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
 563                 NA, NA),
 564        PINGROUP(21, blsp_i2c0, i2s_rx, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
 565                 NA, NA),
 566        PINGROUP(22, rgmii, i2s_rx, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
 567                 NA),
 568        PINGROUP(23, sdio, rgmii, i2s_rx, NA, NA, NA, NA, NA, NA, NA, NA, NA,
 569                 NA, NA),
 570        PINGROUP(24, sdio, rgmii, i2s_tx, NA, NA, NA, NA, NA, NA, NA, NA, NA,
 571                 NA, NA),
 572        PINGROUP(25, sdio, rgmii, i2s_tx, NA, NA, NA, NA, NA, NA, NA, NA, NA,
 573                 NA, NA),
 574        PINGROUP(26, sdio, rgmii, i2s_tx, NA, NA, NA, NA, NA, NA, NA, NA, NA,
 575                 NA, NA),
 576        PINGROUP(27, sdio, rgmii, i2s_td, NA, NA, NA, NA, NA, NA, NA, NA, NA,
 577                 NA, NA),
 578        PINGROUP(28, sdio, rgmii, i2s_td, NA, NA, NA, NA, NA, NA, NA, NA, NA,
 579                 NA, NA),
 580        PINGROUP(29, sdio, rgmii, i2s_td, NA, NA, NA, NA, NA, NA, NA, NA, NA,
 581                 NA, NA),
 582        PINGROUP(30, sdio, rgmii, audio_pwm, NA, NA, NA, NA, NA, NA, NA, NA,
 583                 NA, NA, NA),
 584        PINGROUP(31, sdio, rgmii, audio_pwm, NA, NA, NA, NA, NA, NA, NA, NA,
 585                 NA, NA, NA),
 586        PINGROUP(32, sdio, rgmii, audio_pwm, NA, NA, NA, NA, NA, NA, NA, NA,
 587                 NA, NA, NA),
 588        PINGROUP(33, rgmii, audio_pwm, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
 589                 NA, NA),
 590        PINGROUP(34, blsp_i2c1, i2s_spdif_in, NA, NA, NA, NA, NA, NA, NA, NA,
 591                 NA, NA, NA, NA),
 592        PINGROUP(35, blsp_i2c1, i2s_spdif_out, NA, NA, NA, NA, NA, NA, NA, NA,
 593                 NA, NA, NA, NA),
 594        PINGROUP(36, rmii, led2, led0, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
 595                 NA),
 596        PINGROUP(37, rmii, wifi0, wifi1, led1, NA, NA, NA, NA, NA, NA, NA, NA,
 597                 NA, NA),
 598        PINGROUP(38, rmii, led2, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
 599                 NA),
 600        PINGROUP(39, rmii, pcie, led3, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
 601                 NA),
 602        PINGROUP(40, rmii, wifi0, wifi1, smart2, led4, NA, NA, NA, NA, NA, NA,
 603                 NA, NA, NA),
 604        PINGROUP(41, rmii, wifi0, wifi1, smart2, NA, NA, NA, NA, NA, NA, NA,
 605                 NA, NA, NA),
 606        PINGROUP(42, rmii, wifi0, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
 607                 NA),
 608        PINGROUP(43, rmii, wifi1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
 609                 NA),
 610        PINGROUP(44, rmii, blsp_spi1, smart0, led5, NA, NA, NA, NA, NA, NA, NA,
 611                 NA, NA, NA),
 612        PINGROUP(45, rmii, blsp_spi1, blsp_spi0, smart0, led6, NA, NA, NA, NA,
 613                 NA, NA, NA, NA, NA),
 614        PINGROUP(46, rmii, blsp_spi1, smart0, led7, NA, NA, NA, NA, NA, NA, NA,
 615                 NA, NA, NA),
 616        PINGROUP(47, rmii, blsp_spi1, smart0, led8, NA, NA, NA, NA, NA, NA, NA,
 617                 NA, NA, NA),
 618        PINGROUP(48, rmii, aud_pin, smart2, led9, NA, NA, NA, NA, NA, NA, NA,
 619                 NA, NA, NA),
 620        PINGROUP(49, rmii, aud_pin, smart2, led10, NA, NA, NA, NA, NA, NA, NA,
 621                 NA, NA, NA),
 622        PINGROUP(50, rmii, aud_pin, wifi0, wifi1, led11, NA, NA, NA, NA, NA,
 623                 NA, NA, NA, NA),
 624        PINGROUP(51, rmii, aud_pin, wifi0, wifi1, NA, NA, NA, NA, NA, NA, NA,
 625                 NA, NA, NA),
 626        PINGROUP(52, qpic, mdc, pcie, i2s_tx, NA, NA, NA, tm, wifi0, wifi1, NA,
 627                 NA, NA, NA),
 628        PINGROUP(53, qpic, mdio, i2s_tx, prng_rosc, NA, tm, wifi0, wifi1, NA,
 629                 NA, NA, NA, NA, NA),
 630        PINGROUP(54, qpic, blsp_spi0, i2s_td, NA, pmu, NA, NA, NA, tm, NA, NA,
 631                 NA, NA, NA),
 632        PINGROUP(55, qpic, blsp_spi0, i2s_td, NA, pmu, NA, NA, NA, tm, NA, NA,
 633                 NA, NA, NA),
 634        PINGROUP(56, qpic, blsp_spi0, i2s_td, NA, NA, tm, wifi0, wifi1, NA, NA,
 635                 NA, NA, NA, NA),
 636        PINGROUP(57, qpic, blsp_spi0, i2s_tx, NA, NA, tm, wifi0, wifi1, NA, NA,
 637                 NA, NA, NA, NA),
 638        PINGROUP(58, qpic, led2, blsp_i2c0, smart3, smart1, i2s_rx, NA, NA, tm,
 639                 wifi0, wifi1, NA, NA, NA),
 640        PINGROUP(59, qpic, blsp_i2c0, smart3, smart1, i2s_spdif_in, NA, NA, NA,
 641                 NA, NA, tm, NA, NA, NA),
 642        PINGROUP(60, qpic, blsp_uart0, smart1, smart3, led0, i2s_tx, i2s_rx,
 643                 NA, NA, NA, NA, NA, tm, NA),
 644        PINGROUP(61, qpic, blsp_uart0, smart1, smart3, led1, i2s_tx, i2s_rx,
 645                 NA, NA, NA, NA, NA, tm, NA),
 646        PINGROUP(62, qpic, chip_rst, NA, NA, i2s_spdif_out, NA, NA, NA, NA, NA,
 647                 tm, NA, NA, NA),
 648        PINGROUP(63, qpic, NA, NA, NA, i2s_td, i2s_rx, i2s_spdif_out,
 649                 i2s_spdif_in, NA, NA, NA, NA, tm, NA),
 650        PINGROUP(64, qpic, audio_pwm, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
 651                 NA, NA),
 652        PINGROUP(65, qpic, audio_pwm, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
 653                 NA, NA),
 654        PINGROUP(66, qpic, audio_pwm, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
 655                 NA, NA),
 656        PINGROUP(67, qpic, audio_pwm, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
 657                 NA, NA),
 658        PINGROUP(68, qpic, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 659        PINGROUP(69, qpic, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 660        PINGROUP(70, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 661        PINGROUP(71, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 662        PINGROUP(72, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 663        PINGROUP(73, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 664        PINGROUP(74, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 665        PINGROUP(75, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 666        PINGROUP(76, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 667        PINGROUP(77, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 668        PINGROUP(78, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 669        PINGROUP(79, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 670        PINGROUP(80, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 671        PINGROUP(81, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 672        PINGROUP(82, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 673        PINGROUP(83, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 674        PINGROUP(84, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 675        PINGROUP(85, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 676        PINGROUP(86, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 677        PINGROUP(87, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 678        PINGROUP(88, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 679        PINGROUP(89, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 680        PINGROUP(90, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 681        PINGROUP(91, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 682        PINGROUP(92, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 683        PINGROUP(93, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 684        PINGROUP(94, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 685        PINGROUP(95, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 686        PINGROUP(96, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 687        PINGROUP(97, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 688        PINGROUP(98, wifi0, wifi1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
 689                 NA),
 690        PINGROUP(99, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
 691};
 692
 693static const struct msm_pinctrl_soc_data ipq4019_pinctrl = {
 694        .pins = ipq4019_pins,
 695        .npins = ARRAY_SIZE(ipq4019_pins),
 696        .functions = ipq4019_functions,
 697        .nfunctions = ARRAY_SIZE(ipq4019_functions),
 698        .groups = ipq4019_groups,
 699        .ngroups = ARRAY_SIZE(ipq4019_groups),
 700        .ngpios = 100,
 701        .pull_no_keeper = true,
 702};
 703
 704static int ipq4019_pinctrl_probe(struct platform_device *pdev)
 705{
 706        return msm_pinctrl_probe(pdev, &ipq4019_pinctrl);
 707}
 708
 709static const struct of_device_id ipq4019_pinctrl_of_match[] = {
 710        { .compatible = "qcom,ipq4019-pinctrl", },
 711        { },
 712};
 713
 714static struct platform_driver ipq4019_pinctrl_driver = {
 715        .driver = {
 716                .name = "ipq4019-pinctrl",
 717                .of_match_table = ipq4019_pinctrl_of_match,
 718        },
 719        .probe = ipq4019_pinctrl_probe,
 720        .remove = msm_pinctrl_remove,
 721};
 722
 723static int __init ipq4019_pinctrl_init(void)
 724{
 725        return platform_driver_register(&ipq4019_pinctrl_driver);
 726}
 727arch_initcall(ipq4019_pinctrl_init);
 728
 729static void __exit ipq4019_pinctrl_exit(void)
 730{
 731        platform_driver_unregister(&ipq4019_pinctrl_driver);
 732}
 733module_exit(ipq4019_pinctrl_exit);
 734
 735MODULE_DESCRIPTION("Qualcomm ipq4019 pinctrl driver");
 736MODULE_LICENSE("GPL v2");
 737MODULE_DEVICE_TABLE(of, ipq4019_pinctrl_of_match);
 738