0001
0002
0003
0004
0005
0006 #include <linux/module.h>
0007 #include <linux/of.h>
0008 #include <linux/platform_device.h>
0009 #include <linux/pinctrl/pinctrl.h>
0010
0011 #include "pinctrl-msm.h"
0012
0013 static const struct pinctrl_pin_desc ipq4019_pins[] = {
0014 PINCTRL_PIN(0, "GPIO_0"),
0015 PINCTRL_PIN(1, "GPIO_1"),
0016 PINCTRL_PIN(2, "GPIO_2"),
0017 PINCTRL_PIN(3, "GPIO_3"),
0018 PINCTRL_PIN(4, "GPIO_4"),
0019 PINCTRL_PIN(5, "GPIO_5"),
0020 PINCTRL_PIN(6, "GPIO_6"),
0021 PINCTRL_PIN(7, "GPIO_7"),
0022 PINCTRL_PIN(8, "GPIO_8"),
0023 PINCTRL_PIN(9, "GPIO_9"),
0024 PINCTRL_PIN(10, "GPIO_10"),
0025 PINCTRL_PIN(11, "GPIO_11"),
0026 PINCTRL_PIN(12, "GPIO_12"),
0027 PINCTRL_PIN(13, "GPIO_13"),
0028 PINCTRL_PIN(14, "GPIO_14"),
0029 PINCTRL_PIN(15, "GPIO_15"),
0030 PINCTRL_PIN(16, "GPIO_16"),
0031 PINCTRL_PIN(17, "GPIO_17"),
0032 PINCTRL_PIN(18, "GPIO_18"),
0033 PINCTRL_PIN(19, "GPIO_19"),
0034 PINCTRL_PIN(20, "GPIO_20"),
0035 PINCTRL_PIN(21, "GPIO_21"),
0036 PINCTRL_PIN(22, "GPIO_22"),
0037 PINCTRL_PIN(23, "GPIO_23"),
0038 PINCTRL_PIN(24, "GPIO_24"),
0039 PINCTRL_PIN(25, "GPIO_25"),
0040 PINCTRL_PIN(26, "GPIO_26"),
0041 PINCTRL_PIN(27, "GPIO_27"),
0042 PINCTRL_PIN(28, "GPIO_28"),
0043 PINCTRL_PIN(29, "GPIO_29"),
0044 PINCTRL_PIN(30, "GPIO_30"),
0045 PINCTRL_PIN(31, "GPIO_31"),
0046 PINCTRL_PIN(32, "GPIO_32"),
0047 PINCTRL_PIN(33, "GPIO_33"),
0048 PINCTRL_PIN(34, "GPIO_34"),
0049 PINCTRL_PIN(35, "GPIO_35"),
0050 PINCTRL_PIN(36, "GPIO_36"),
0051 PINCTRL_PIN(37, "GPIO_37"),
0052 PINCTRL_PIN(38, "GPIO_38"),
0053 PINCTRL_PIN(39, "GPIO_39"),
0054 PINCTRL_PIN(40, "GPIO_40"),
0055 PINCTRL_PIN(41, "GPIO_41"),
0056 PINCTRL_PIN(42, "GPIO_42"),
0057 PINCTRL_PIN(43, "GPIO_43"),
0058 PINCTRL_PIN(44, "GPIO_44"),
0059 PINCTRL_PIN(45, "GPIO_45"),
0060 PINCTRL_PIN(46, "GPIO_46"),
0061 PINCTRL_PIN(47, "GPIO_47"),
0062 PINCTRL_PIN(48, "GPIO_48"),
0063 PINCTRL_PIN(49, "GPIO_49"),
0064 PINCTRL_PIN(50, "GPIO_50"),
0065 PINCTRL_PIN(51, "GPIO_51"),
0066 PINCTRL_PIN(52, "GPIO_52"),
0067 PINCTRL_PIN(53, "GPIO_53"),
0068 PINCTRL_PIN(54, "GPIO_54"),
0069 PINCTRL_PIN(55, "GPIO_55"),
0070 PINCTRL_PIN(56, "GPIO_56"),
0071 PINCTRL_PIN(57, "GPIO_57"),
0072 PINCTRL_PIN(58, "GPIO_58"),
0073 PINCTRL_PIN(59, "GPIO_59"),
0074 PINCTRL_PIN(60, "GPIO_60"),
0075 PINCTRL_PIN(61, "GPIO_61"),
0076 PINCTRL_PIN(62, "GPIO_62"),
0077 PINCTRL_PIN(63, "GPIO_63"),
0078 PINCTRL_PIN(64, "GPIO_64"),
0079 PINCTRL_PIN(65, "GPIO_65"),
0080 PINCTRL_PIN(66, "GPIO_66"),
0081 PINCTRL_PIN(67, "GPIO_67"),
0082 PINCTRL_PIN(68, "GPIO_68"),
0083 PINCTRL_PIN(69, "GPIO_69"),
0084 PINCTRL_PIN(70, "GPIO_70"),
0085 PINCTRL_PIN(71, "GPIO_71"),
0086 PINCTRL_PIN(72, "GPIO_72"),
0087 PINCTRL_PIN(73, "GPIO_73"),
0088 PINCTRL_PIN(74, "GPIO_74"),
0089 PINCTRL_PIN(75, "GPIO_75"),
0090 PINCTRL_PIN(76, "GPIO_76"),
0091 PINCTRL_PIN(77, "GPIO_77"),
0092 PINCTRL_PIN(78, "GPIO_78"),
0093 PINCTRL_PIN(79, "GPIO_79"),
0094 PINCTRL_PIN(80, "GPIO_80"),
0095 PINCTRL_PIN(81, "GPIO_81"),
0096 PINCTRL_PIN(82, "GPIO_82"),
0097 PINCTRL_PIN(83, "GPIO_83"),
0098 PINCTRL_PIN(84, "GPIO_84"),
0099 PINCTRL_PIN(85, "GPIO_85"),
0100 PINCTRL_PIN(86, "GPIO_86"),
0101 PINCTRL_PIN(87, "GPIO_87"),
0102 PINCTRL_PIN(88, "GPIO_88"),
0103 PINCTRL_PIN(89, "GPIO_89"),
0104 PINCTRL_PIN(90, "GPIO_90"),
0105 PINCTRL_PIN(91, "GPIO_91"),
0106 PINCTRL_PIN(92, "GPIO_92"),
0107 PINCTRL_PIN(93, "GPIO_93"),
0108 PINCTRL_PIN(94, "GPIO_94"),
0109 PINCTRL_PIN(95, "GPIO_95"),
0110 PINCTRL_PIN(96, "GPIO_96"),
0111 PINCTRL_PIN(97, "GPIO_97"),
0112 PINCTRL_PIN(98, "GPIO_98"),
0113 PINCTRL_PIN(99, "GPIO_99"),
0114 };
0115
0116 #define DECLARE_QCA_GPIO_PINS(pin) \
0117 static const unsigned int gpio##pin##_pins[] = { pin }
0118 DECLARE_QCA_GPIO_PINS(0);
0119 DECLARE_QCA_GPIO_PINS(1);
0120 DECLARE_QCA_GPIO_PINS(2);
0121 DECLARE_QCA_GPIO_PINS(3);
0122 DECLARE_QCA_GPIO_PINS(4);
0123 DECLARE_QCA_GPIO_PINS(5);
0124 DECLARE_QCA_GPIO_PINS(6);
0125 DECLARE_QCA_GPIO_PINS(7);
0126 DECLARE_QCA_GPIO_PINS(8);
0127 DECLARE_QCA_GPIO_PINS(9);
0128 DECLARE_QCA_GPIO_PINS(10);
0129 DECLARE_QCA_GPIO_PINS(11);
0130 DECLARE_QCA_GPIO_PINS(12);
0131 DECLARE_QCA_GPIO_PINS(13);
0132 DECLARE_QCA_GPIO_PINS(14);
0133 DECLARE_QCA_GPIO_PINS(15);
0134 DECLARE_QCA_GPIO_PINS(16);
0135 DECLARE_QCA_GPIO_PINS(17);
0136 DECLARE_QCA_GPIO_PINS(18);
0137 DECLARE_QCA_GPIO_PINS(19);
0138 DECLARE_QCA_GPIO_PINS(20);
0139 DECLARE_QCA_GPIO_PINS(21);
0140 DECLARE_QCA_GPIO_PINS(22);
0141 DECLARE_QCA_GPIO_PINS(23);
0142 DECLARE_QCA_GPIO_PINS(24);
0143 DECLARE_QCA_GPIO_PINS(25);
0144 DECLARE_QCA_GPIO_PINS(26);
0145 DECLARE_QCA_GPIO_PINS(27);
0146 DECLARE_QCA_GPIO_PINS(28);
0147 DECLARE_QCA_GPIO_PINS(29);
0148 DECLARE_QCA_GPIO_PINS(30);
0149 DECLARE_QCA_GPIO_PINS(31);
0150 DECLARE_QCA_GPIO_PINS(32);
0151 DECLARE_QCA_GPIO_PINS(33);
0152 DECLARE_QCA_GPIO_PINS(34);
0153 DECLARE_QCA_GPIO_PINS(35);
0154 DECLARE_QCA_GPIO_PINS(36);
0155 DECLARE_QCA_GPIO_PINS(37);
0156 DECLARE_QCA_GPIO_PINS(38);
0157 DECLARE_QCA_GPIO_PINS(39);
0158 DECLARE_QCA_GPIO_PINS(40);
0159 DECLARE_QCA_GPIO_PINS(41);
0160 DECLARE_QCA_GPIO_PINS(42);
0161 DECLARE_QCA_GPIO_PINS(43);
0162 DECLARE_QCA_GPIO_PINS(44);
0163 DECLARE_QCA_GPIO_PINS(45);
0164 DECLARE_QCA_GPIO_PINS(46);
0165 DECLARE_QCA_GPIO_PINS(47);
0166 DECLARE_QCA_GPIO_PINS(48);
0167 DECLARE_QCA_GPIO_PINS(49);
0168 DECLARE_QCA_GPIO_PINS(50);
0169 DECLARE_QCA_GPIO_PINS(51);
0170 DECLARE_QCA_GPIO_PINS(52);
0171 DECLARE_QCA_GPIO_PINS(53);
0172 DECLARE_QCA_GPIO_PINS(54);
0173 DECLARE_QCA_GPIO_PINS(55);
0174 DECLARE_QCA_GPIO_PINS(56);
0175 DECLARE_QCA_GPIO_PINS(57);
0176 DECLARE_QCA_GPIO_PINS(58);
0177 DECLARE_QCA_GPIO_PINS(59);
0178 DECLARE_QCA_GPIO_PINS(60);
0179 DECLARE_QCA_GPIO_PINS(61);
0180 DECLARE_QCA_GPIO_PINS(62);
0181 DECLARE_QCA_GPIO_PINS(63);
0182 DECLARE_QCA_GPIO_PINS(64);
0183 DECLARE_QCA_GPIO_PINS(65);
0184 DECLARE_QCA_GPIO_PINS(66);
0185 DECLARE_QCA_GPIO_PINS(67);
0186 DECLARE_QCA_GPIO_PINS(68);
0187 DECLARE_QCA_GPIO_PINS(69);
0188 DECLARE_QCA_GPIO_PINS(70);
0189 DECLARE_QCA_GPIO_PINS(71);
0190 DECLARE_QCA_GPIO_PINS(72);
0191 DECLARE_QCA_GPIO_PINS(73);
0192 DECLARE_QCA_GPIO_PINS(74);
0193 DECLARE_QCA_GPIO_PINS(75);
0194 DECLARE_QCA_GPIO_PINS(76);
0195 DECLARE_QCA_GPIO_PINS(77);
0196 DECLARE_QCA_GPIO_PINS(78);
0197 DECLARE_QCA_GPIO_PINS(79);
0198 DECLARE_QCA_GPIO_PINS(80);
0199 DECLARE_QCA_GPIO_PINS(81);
0200 DECLARE_QCA_GPIO_PINS(82);
0201 DECLARE_QCA_GPIO_PINS(83);
0202 DECLARE_QCA_GPIO_PINS(84);
0203 DECLARE_QCA_GPIO_PINS(85);
0204 DECLARE_QCA_GPIO_PINS(86);
0205 DECLARE_QCA_GPIO_PINS(87);
0206 DECLARE_QCA_GPIO_PINS(88);
0207 DECLARE_QCA_GPIO_PINS(89);
0208 DECLARE_QCA_GPIO_PINS(90);
0209 DECLARE_QCA_GPIO_PINS(91);
0210 DECLARE_QCA_GPIO_PINS(92);
0211 DECLARE_QCA_GPIO_PINS(93);
0212 DECLARE_QCA_GPIO_PINS(94);
0213 DECLARE_QCA_GPIO_PINS(95);
0214 DECLARE_QCA_GPIO_PINS(96);
0215 DECLARE_QCA_GPIO_PINS(97);
0216 DECLARE_QCA_GPIO_PINS(98);
0217 DECLARE_QCA_GPIO_PINS(99);
0218
0219 #define FUNCTION(fname) \
0220 [qca_mux_##fname] = { \
0221 .name = #fname, \
0222 .groups = fname##_groups, \
0223 .ngroups = ARRAY_SIZE(fname##_groups), \
0224 }
0225
0226 #define PINGROUP(id, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14) \
0227 { \
0228 .name = "gpio" #id, \
0229 .pins = gpio##id##_pins, \
0230 .npins = (unsigned)ARRAY_SIZE(gpio##id##_pins), \
0231 .funcs = (int[]){ \
0232 qca_mux_gpio, \
0233 qca_mux_##f1, \
0234 qca_mux_##f2, \
0235 qca_mux_##f3, \
0236 qca_mux_##f4, \
0237 qca_mux_##f5, \
0238 qca_mux_##f6, \
0239 qca_mux_##f7, \
0240 qca_mux_##f8, \
0241 qca_mux_##f9, \
0242 qca_mux_##f10, \
0243 qca_mux_##f11, \
0244 qca_mux_##f12, \
0245 qca_mux_##f13, \
0246 qca_mux_##f14 \
0247 }, \
0248 .nfuncs = 15, \
0249 .ctl_reg = 0x0 + 0x1000 * id, \
0250 .io_reg = 0x4 + 0x1000 * id, \
0251 .intr_cfg_reg = 0x8 + 0x1000 * id, \
0252 .intr_status_reg = 0xc + 0x1000 * id, \
0253 .intr_target_reg = 0x8 + 0x1000 * id, \
0254 .mux_bit = 2, \
0255 .pull_bit = 0, \
0256 .drv_bit = 6, \
0257 .od_bit = 12, \
0258 .oe_bit = 9, \
0259 .in_bit = 0, \
0260 .out_bit = 1, \
0261 .intr_enable_bit = 0, \
0262 .intr_status_bit = 0, \
0263 .intr_target_bit = 5, \
0264 .intr_raw_status_bit = 4, \
0265 .intr_polarity_bit = 1, \
0266 .intr_detection_bit = 2, \
0267 .intr_detection_width = 2, \
0268 }
0269
0270
0271 enum ipq4019_functions {
0272 qca_mux_gpio,
0273 qca_mux_aud_pin,
0274 qca_mux_audio_pwm,
0275 qca_mux_blsp_i2c0,
0276 qca_mux_blsp_i2c1,
0277 qca_mux_blsp_spi0,
0278 qca_mux_blsp_spi1,
0279 qca_mux_blsp_uart0,
0280 qca_mux_blsp_uart1,
0281 qca_mux_chip_rst,
0282 qca_mux_i2s_rx,
0283 qca_mux_i2s_spdif_in,
0284 qca_mux_i2s_spdif_out,
0285 qca_mux_i2s_td,
0286 qca_mux_i2s_tx,
0287 qca_mux_jtag,
0288 qca_mux_led0,
0289 qca_mux_led1,
0290 qca_mux_led2,
0291 qca_mux_led3,
0292 qca_mux_led4,
0293 qca_mux_led5,
0294 qca_mux_led6,
0295 qca_mux_led7,
0296 qca_mux_led8,
0297 qca_mux_led9,
0298 qca_mux_led10,
0299 qca_mux_led11,
0300 qca_mux_mdc,
0301 qca_mux_mdio,
0302 qca_mux_pcie,
0303 qca_mux_pmu,
0304 qca_mux_prng_rosc,
0305 qca_mux_qpic,
0306 qca_mux_rgmii,
0307 qca_mux_rmii,
0308 qca_mux_sdio,
0309 qca_mux_smart0,
0310 qca_mux_smart1,
0311 qca_mux_smart2,
0312 qca_mux_smart3,
0313 qca_mux_tm,
0314 qca_mux_wifi0,
0315 qca_mux_wifi1,
0316 qca_mux_NA,
0317 };
0318
0319 static const char * const gpio_groups[] = {
0320 "gpio0", "gpio1", "gpio2", "gpio3", "gpio4", "gpio5", "gpio6", "gpio7",
0321 "gpio8", "gpio9", "gpio10", "gpio11", "gpio12", "gpio13", "gpio14",
0322 "gpio15", "gpio16", "gpio17", "gpio18", "gpio19", "gpio20", "gpio21",
0323 "gpio22", "gpio23", "gpio24", "gpio25", "gpio26", "gpio27", "gpio28",
0324 "gpio29", "gpio30", "gpio31", "gpio32", "gpio33", "gpio34", "gpio35",
0325 "gpio36", "gpio37", "gpio38", "gpio39", "gpio40", "gpio41", "gpio42",
0326 "gpio43", "gpio44", "gpio45", "gpio46", "gpio47", "gpio48", "gpio49",
0327 "gpio50", "gpio51", "gpio52", "gpio53", "gpio54", "gpio55", "gpio56",
0328 "gpio57", "gpio58", "gpio59", "gpio60", "gpio61", "gpio62", "gpio63",
0329 "gpio64", "gpio65", "gpio66", "gpio67", "gpio68", "gpio69", "gpio70",
0330 "gpio71", "gpio72", "gpio73", "gpio74", "gpio75", "gpio76", "gpio77",
0331 "gpio78", "gpio79", "gpio80", "gpio81", "gpio82", "gpio83", "gpio84",
0332 "gpio85", "gpio86", "gpio87", "gpio88", "gpio89", "gpio90", "gpio91",
0333 "gpio92", "gpio93", "gpio94", "gpio95", "gpio96", "gpio97", "gpio98",
0334 "gpio99",
0335 };
0336 static const char * const aud_pin_groups[] = {
0337 "gpio48", "gpio49", "gpio50", "gpio51",
0338 };
0339 static const char * const audio_pwm_groups[] = {
0340 "gpio30", "gpio31", "gpio32", "gpio33", "gpio64", "gpio65", "gpio66",
0341 "gpio67",
0342 };
0343 static const char * const blsp_i2c0_groups[] = {
0344 "gpio10", "gpio11", "gpio20", "gpio21", "gpio58", "gpio59",
0345 };
0346 static const char * const blsp_i2c1_groups[] = {
0347 "gpio12", "gpio13", "gpio34", "gpio35",
0348 };
0349 static const char * const blsp_spi0_groups[] = {
0350 "gpio12", "gpio13", "gpio14", "gpio15", "gpio45", "gpio54", "gpio55",
0351 "gpio56", "gpio57",
0352 };
0353 static const char * const blsp_spi1_groups[] = {
0354 "gpio44", "gpio45", "gpio46", "gpio47",
0355 };
0356 static const char * const blsp_uart0_groups[] = {
0357 "gpio16", "gpio17", "gpio60", "gpio61",
0358 };
0359 static const char * const blsp_uart1_groups[] = {
0360 "gpio8", "gpio9", "gpio10", "gpio11",
0361 };
0362 static const char * const chip_rst_groups[] = {
0363 "gpio62",
0364 };
0365 static const char * const i2s_rx_groups[] = {
0366 "gpio0", "gpio1", "gpio2", "gpio20", "gpio21", "gpio22", "gpio23",
0367 "gpio58", "gpio60", "gpio61", "gpio63",
0368 };
0369 static const char * const i2s_spdif_in_groups[] = {
0370 "gpio34", "gpio59", "gpio63",
0371 };
0372 static const char * const i2s_spdif_out_groups[] = {
0373 "gpio35", "gpio62", "gpio63",
0374 };
0375 static const char * const i2s_td_groups[] = {
0376 "gpio27", "gpio28", "gpio29", "gpio54", "gpio55", "gpio56", "gpio63",
0377 };
0378 static const char * const i2s_tx_groups[] = {
0379 "gpio24", "gpio25", "gpio26", "gpio52", "gpio53", "gpio57", "gpio60",
0380 "gpio61",
0381 };
0382 static const char * const jtag_groups[] = {
0383 "gpio0", "gpio1", "gpio2", "gpio3", "gpio4", "gpio5",
0384 };
0385 static const char * const led0_groups[] = {
0386 "gpio16", "gpio36", "gpio60",
0387 };
0388 static const char * const led1_groups[] = {
0389 "gpio17", "gpio37", "gpio61",
0390 };
0391 static const char * const led2_groups[] = {
0392 "gpio36", "gpio38", "gpio58",
0393 };
0394 static const char * const led3_groups[] = {
0395 "gpio39",
0396 };
0397 static const char * const led4_groups[] = {
0398 "gpio40",
0399 };
0400 static const char * const led5_groups[] = {
0401 "gpio44",
0402 };
0403 static const char * const led6_groups[] = {
0404 "gpio45",
0405 };
0406 static const char * const led7_groups[] = {
0407 "gpio46",
0408 };
0409 static const char * const led8_groups[] = {
0410 "gpio47",
0411 };
0412 static const char * const led9_groups[] = {
0413 "gpio48",
0414 };
0415 static const char * const led10_groups[] = {
0416 "gpio49",
0417 };
0418 static const char * const led11_groups[] = {
0419 "gpio50",
0420 };
0421 static const char * const mdc_groups[] = {
0422 "gpio7", "gpio52",
0423 };
0424 static const char * const mdio_groups[] = {
0425 "gpio6", "gpio53",
0426 };
0427 static const char * const pcie_groups[] = {
0428 "gpio39", "gpio52",
0429 };
0430 static const char * const pmu_groups[] = {
0431 "gpio54", "gpio55",
0432 };
0433 static const char * const prng_rosc_groups[] = {
0434 "gpio53",
0435 };
0436 static const char * const qpic_groups[] = {
0437 "gpio52", "gpio53", "gpio54", "gpio55", "gpio56", "gpio57", "gpio58",
0438 "gpio59", "gpio60", "gpio61", "gpio62", "gpio63", "gpio64", "gpio65",
0439 "gpio66", "gpio67", "gpio68", "gpio69",
0440 };
0441 static const char * const rgmii_groups[] = {
0442 "gpio22", "gpio23", "gpio24", "gpio25", "gpio26", "gpio27", "gpio28",
0443 "gpio29", "gpio30", "gpio31", "gpio32", "gpio33",
0444 };
0445 static const char * const rmii_groups[] = {
0446 "gpio36", "gpio37", "gpio38", "gpio39", "gpio40", "gpio41", "gpio42",
0447 "gpio43", "gpio44", "gpio45", "gpio46", "gpio47", "gpio48", "gpio49",
0448 "gpio50", "gpio51",
0449 };
0450 static const char * const sdio_groups[] = {
0451 "gpio23", "gpio24", "gpio25", "gpio26", "gpio27", "gpio28", "gpio29",
0452 "gpio30", "gpio31", "gpio32",
0453 };
0454 static const char * const smart0_groups[] = {
0455 "gpio0", "gpio1", "gpio2", "gpio5", "gpio44", "gpio45", "gpio46",
0456 "gpio47",
0457 };
0458 static const char * const smart1_groups[] = {
0459 "gpio8", "gpio9", "gpio16", "gpio17", "gpio58", "gpio59", "gpio60",
0460 "gpio61",
0461 };
0462 static const char * const smart2_groups[] = {
0463 "gpio40", "gpio41", "gpio48", "gpio49",
0464 };
0465 static const char * const smart3_groups[] = {
0466 "gpio58", "gpio59", "gpio60", "gpio61",
0467 };
0468 static const char * const tm_groups[] = {
0469 "gpio52", "gpio53", "gpio54", "gpio55", "gpio56", "gpio57", "gpio58",
0470 "gpio59", "gpio60", "gpio61", "gpio62", "gpio63",
0471 };
0472 static const char * const wifi0_groups[] = {
0473 "gpio37", "gpio40", "gpio41", "gpio42", "gpio50", "gpio51", "gpio52",
0474 "gpio53", "gpio56", "gpio57", "gpio58", "gpio98",
0475 };
0476 static const char * const wifi1_groups[] = {
0477 "gpio37", "gpio40", "gpio41", "gpio43", "gpio50", "gpio51", "gpio52",
0478 "gpio53", "gpio56", "gpio57", "gpio58", "gpio98",
0479 };
0480
0481 static const struct msm_function ipq4019_functions[] = {
0482 FUNCTION(aud_pin),
0483 FUNCTION(audio_pwm),
0484 FUNCTION(blsp_i2c0),
0485 FUNCTION(blsp_i2c1),
0486 FUNCTION(blsp_spi0),
0487 FUNCTION(blsp_spi1),
0488 FUNCTION(blsp_uart0),
0489 FUNCTION(blsp_uart1),
0490 FUNCTION(chip_rst),
0491 FUNCTION(gpio),
0492 FUNCTION(i2s_rx),
0493 FUNCTION(i2s_spdif_in),
0494 FUNCTION(i2s_spdif_out),
0495 FUNCTION(i2s_td),
0496 FUNCTION(i2s_tx),
0497 FUNCTION(jtag),
0498 FUNCTION(led0),
0499 FUNCTION(led1),
0500 FUNCTION(led2),
0501 FUNCTION(led3),
0502 FUNCTION(led4),
0503 FUNCTION(led5),
0504 FUNCTION(led6),
0505 FUNCTION(led7),
0506 FUNCTION(led8),
0507 FUNCTION(led9),
0508 FUNCTION(led10),
0509 FUNCTION(led11),
0510 FUNCTION(mdc),
0511 FUNCTION(mdio),
0512 FUNCTION(pcie),
0513 FUNCTION(pmu),
0514 FUNCTION(prng_rosc),
0515 FUNCTION(qpic),
0516 FUNCTION(rgmii),
0517 FUNCTION(rmii),
0518 FUNCTION(sdio),
0519 FUNCTION(smart0),
0520 FUNCTION(smart1),
0521 FUNCTION(smart2),
0522 FUNCTION(smart3),
0523 FUNCTION(tm),
0524 FUNCTION(wifi0),
0525 FUNCTION(wifi1),
0526 };
0527
0528 static const struct msm_pingroup ipq4019_groups[] = {
0529 PINGROUP(0, jtag, smart0, i2s_rx, NA, NA, NA, NA, NA, NA, NA, NA, NA,
0530 NA, NA),
0531 PINGROUP(1, jtag, smart0, i2s_rx, NA, NA, NA, NA, NA, NA, NA, NA, NA,
0532 NA, NA),
0533 PINGROUP(2, jtag, smart0, i2s_rx, NA, NA, NA, NA, NA, NA, NA, NA, NA,
0534 NA, NA),
0535 PINGROUP(3, jtag, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0536 PINGROUP(4, jtag, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0537 PINGROUP(5, jtag, smart0, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
0538 NA),
0539 PINGROUP(6, mdio, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0540 PINGROUP(7, mdc, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0541 PINGROUP(8, blsp_uart1, NA, NA, smart1, NA, NA, NA, NA, NA, NA, NA,
0542 NA, NA, NA),
0543 PINGROUP(9, blsp_uart1, NA, NA, smart1, NA, NA, NA, NA, NA, NA, NA,
0544 NA, NA, NA),
0545 PINGROUP(10, blsp_uart1, NA, NA, blsp_i2c0, NA, NA, NA, NA, NA, NA, NA,
0546 NA, NA, NA),
0547 PINGROUP(11, blsp_uart1, NA, NA, blsp_i2c0, NA, NA, NA, NA, NA, NA, NA,
0548 NA, NA, NA),
0549 PINGROUP(12, blsp_spi0, blsp_i2c1, NA, NA, NA, NA, NA, NA, NA, NA, NA,
0550 NA, NA, NA),
0551 PINGROUP(13, blsp_spi0, blsp_i2c1, NA, NA, NA, NA, NA, NA, NA, NA, NA,
0552 NA, NA, NA),
0553 PINGROUP(14, blsp_spi0, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
0554 NA),
0555 PINGROUP(15, blsp_spi0, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
0556 NA),
0557 PINGROUP(16, blsp_uart0, led0, smart1, NA, NA, NA, NA, NA, NA, NA, NA,
0558 NA, NA, NA),
0559 PINGROUP(17, blsp_uart0, led1, smart1, NA, NA, NA, NA, NA, NA, NA, NA,
0560 NA, NA, NA),
0561 PINGROUP(18, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0562 PINGROUP(19, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0563 PINGROUP(20, blsp_i2c0, i2s_rx, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
0564 NA, NA),
0565 PINGROUP(21, blsp_i2c0, i2s_rx, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
0566 NA, NA),
0567 PINGROUP(22, rgmii, i2s_rx, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
0568 NA),
0569 PINGROUP(23, sdio, rgmii, i2s_rx, NA, NA, NA, NA, NA, NA, NA, NA, NA,
0570 NA, NA),
0571 PINGROUP(24, sdio, rgmii, i2s_tx, NA, NA, NA, NA, NA, NA, NA, NA, NA,
0572 NA, NA),
0573 PINGROUP(25, sdio, rgmii, i2s_tx, NA, NA, NA, NA, NA, NA, NA, NA, NA,
0574 NA, NA),
0575 PINGROUP(26, sdio, rgmii, i2s_tx, NA, NA, NA, NA, NA, NA, NA, NA, NA,
0576 NA, NA),
0577 PINGROUP(27, sdio, rgmii, i2s_td, NA, NA, NA, NA, NA, NA, NA, NA, NA,
0578 NA, NA),
0579 PINGROUP(28, sdio, rgmii, i2s_td, NA, NA, NA, NA, NA, NA, NA, NA, NA,
0580 NA, NA),
0581 PINGROUP(29, sdio, rgmii, i2s_td, NA, NA, NA, NA, NA, NA, NA, NA, NA,
0582 NA, NA),
0583 PINGROUP(30, sdio, rgmii, audio_pwm, NA, NA, NA, NA, NA, NA, NA, NA,
0584 NA, NA, NA),
0585 PINGROUP(31, sdio, rgmii, audio_pwm, NA, NA, NA, NA, NA, NA, NA, NA,
0586 NA, NA, NA),
0587 PINGROUP(32, sdio, rgmii, audio_pwm, NA, NA, NA, NA, NA, NA, NA, NA,
0588 NA, NA, NA),
0589 PINGROUP(33, rgmii, audio_pwm, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
0590 NA, NA),
0591 PINGROUP(34, blsp_i2c1, i2s_spdif_in, NA, NA, NA, NA, NA, NA, NA, NA,
0592 NA, NA, NA, NA),
0593 PINGROUP(35, blsp_i2c1, i2s_spdif_out, NA, NA, NA, NA, NA, NA, NA, NA,
0594 NA, NA, NA, NA),
0595 PINGROUP(36, rmii, led2, led0, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
0596 NA),
0597 PINGROUP(37, rmii, wifi0, wifi1, led1, NA, NA, NA, NA, NA, NA, NA, NA,
0598 NA, NA),
0599 PINGROUP(38, rmii, led2, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
0600 NA),
0601 PINGROUP(39, rmii, pcie, led3, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
0602 NA),
0603 PINGROUP(40, rmii, wifi0, wifi1, smart2, led4, NA, NA, NA, NA, NA, NA,
0604 NA, NA, NA),
0605 PINGROUP(41, rmii, wifi0, wifi1, smart2, NA, NA, NA, NA, NA, NA, NA,
0606 NA, NA, NA),
0607 PINGROUP(42, rmii, wifi0, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
0608 NA),
0609 PINGROUP(43, rmii, wifi1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
0610 NA),
0611 PINGROUP(44, rmii, blsp_spi1, smart0, led5, NA, NA, NA, NA, NA, NA, NA,
0612 NA, NA, NA),
0613 PINGROUP(45, rmii, blsp_spi1, blsp_spi0, smart0, led6, NA, NA, NA, NA,
0614 NA, NA, NA, NA, NA),
0615 PINGROUP(46, rmii, blsp_spi1, smart0, led7, NA, NA, NA, NA, NA, NA, NA,
0616 NA, NA, NA),
0617 PINGROUP(47, rmii, blsp_spi1, smart0, led8, NA, NA, NA, NA, NA, NA, NA,
0618 NA, NA, NA),
0619 PINGROUP(48, rmii, aud_pin, smart2, led9, NA, NA, NA, NA, NA, NA, NA,
0620 NA, NA, NA),
0621 PINGROUP(49, rmii, aud_pin, smart2, led10, NA, NA, NA, NA, NA, NA, NA,
0622 NA, NA, NA),
0623 PINGROUP(50, rmii, aud_pin, wifi0, wifi1, led11, NA, NA, NA, NA, NA,
0624 NA, NA, NA, NA),
0625 PINGROUP(51, rmii, aud_pin, wifi0, wifi1, NA, NA, NA, NA, NA, NA, NA,
0626 NA, NA, NA),
0627 PINGROUP(52, qpic, mdc, pcie, i2s_tx, NA, NA, NA, tm, wifi0, wifi1, NA,
0628 NA, NA, NA),
0629 PINGROUP(53, qpic, mdio, i2s_tx, prng_rosc, NA, tm, wifi0, wifi1, NA,
0630 NA, NA, NA, NA, NA),
0631 PINGROUP(54, qpic, blsp_spi0, i2s_td, NA, pmu, NA, NA, NA, tm, NA, NA,
0632 NA, NA, NA),
0633 PINGROUP(55, qpic, blsp_spi0, i2s_td, NA, pmu, NA, NA, NA, tm, NA, NA,
0634 NA, NA, NA),
0635 PINGROUP(56, qpic, blsp_spi0, i2s_td, NA, NA, tm, wifi0, wifi1, NA, NA,
0636 NA, NA, NA, NA),
0637 PINGROUP(57, qpic, blsp_spi0, i2s_tx, NA, NA, tm, wifi0, wifi1, NA, NA,
0638 NA, NA, NA, NA),
0639 PINGROUP(58, qpic, led2, blsp_i2c0, smart3, smart1, i2s_rx, NA, NA, tm,
0640 wifi0, wifi1, NA, NA, NA),
0641 PINGROUP(59, qpic, blsp_i2c0, smart3, smart1, i2s_spdif_in, NA, NA, NA,
0642 NA, NA, tm, NA, NA, NA),
0643 PINGROUP(60, qpic, blsp_uart0, smart1, smart3, led0, i2s_tx, i2s_rx,
0644 NA, NA, NA, NA, NA, tm, NA),
0645 PINGROUP(61, qpic, blsp_uart0, smart1, smart3, led1, i2s_tx, i2s_rx,
0646 NA, NA, NA, NA, NA, tm, NA),
0647 PINGROUP(62, qpic, chip_rst, NA, NA, i2s_spdif_out, NA, NA, NA, NA, NA,
0648 tm, NA, NA, NA),
0649 PINGROUP(63, qpic, NA, NA, NA, i2s_td, i2s_rx, i2s_spdif_out,
0650 i2s_spdif_in, NA, NA, NA, NA, tm, NA),
0651 PINGROUP(64, qpic, audio_pwm, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
0652 NA, NA),
0653 PINGROUP(65, qpic, audio_pwm, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
0654 NA, NA),
0655 PINGROUP(66, qpic, audio_pwm, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
0656 NA, NA),
0657 PINGROUP(67, qpic, audio_pwm, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
0658 NA, NA),
0659 PINGROUP(68, qpic, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0660 PINGROUP(69, qpic, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0661 PINGROUP(70, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0662 PINGROUP(71, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0663 PINGROUP(72, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0664 PINGROUP(73, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0665 PINGROUP(74, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0666 PINGROUP(75, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0667 PINGROUP(76, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0668 PINGROUP(77, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0669 PINGROUP(78, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0670 PINGROUP(79, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0671 PINGROUP(80, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0672 PINGROUP(81, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0673 PINGROUP(82, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0674 PINGROUP(83, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0675 PINGROUP(84, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0676 PINGROUP(85, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0677 PINGROUP(86, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0678 PINGROUP(87, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0679 PINGROUP(88, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0680 PINGROUP(89, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0681 PINGROUP(90, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0682 PINGROUP(91, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0683 PINGROUP(92, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0684 PINGROUP(93, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0685 PINGROUP(94, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0686 PINGROUP(95, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0687 PINGROUP(96, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0688 PINGROUP(97, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0689 PINGROUP(98, wifi0, wifi1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
0690 NA),
0691 PINGROUP(99, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0692 };
0693
0694 static const struct msm_pinctrl_soc_data ipq4019_pinctrl = {
0695 .pins = ipq4019_pins,
0696 .npins = ARRAY_SIZE(ipq4019_pins),
0697 .functions = ipq4019_functions,
0698 .nfunctions = ARRAY_SIZE(ipq4019_functions),
0699 .groups = ipq4019_groups,
0700 .ngroups = ARRAY_SIZE(ipq4019_groups),
0701 .ngpios = 100,
0702 .pull_no_keeper = true,
0703 };
0704
0705 static int ipq4019_pinctrl_probe(struct platform_device *pdev)
0706 {
0707 return msm_pinctrl_probe(pdev, &ipq4019_pinctrl);
0708 }
0709
0710 static const struct of_device_id ipq4019_pinctrl_of_match[] = {
0711 { .compatible = "qcom,ipq4019-pinctrl", },
0712 { },
0713 };
0714
0715 static struct platform_driver ipq4019_pinctrl_driver = {
0716 .driver = {
0717 .name = "ipq4019-pinctrl",
0718 .of_match_table = ipq4019_pinctrl_of_match,
0719 },
0720 .probe = ipq4019_pinctrl_probe,
0721 .remove = msm_pinctrl_remove,
0722 };
0723
0724 static int __init ipq4019_pinctrl_init(void)
0725 {
0726 return platform_driver_register(&ipq4019_pinctrl_driver);
0727 }
0728 arch_initcall(ipq4019_pinctrl_init);
0729
0730 static void __exit ipq4019_pinctrl_exit(void)
0731 {
0732 platform_driver_unregister(&ipq4019_pinctrl_driver);
0733 }
0734 module_exit(ipq4019_pinctrl_exit);
0735
0736 MODULE_DESCRIPTION("Qualcomm ipq4019 pinctrl driver");
0737 MODULE_LICENSE("GPL v2");
0738 MODULE_DEVICE_TABLE(of, ipq4019_pinctrl_of_match);