Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0
0002 /*
0003  * Copyright (c) 2015-2016, The Linux Foundation. All rights reserved.
0004  *
0005  * Copyright (c) 2016, AngeloGioacchino Del Regno <kholk11@gmail.com>
0006  */
0007 
0008 #include <linux/module.h>
0009 #include <linux/of.h>
0010 #include <linux/platform_device.h>
0011 #include <linux/pinctrl/pinctrl.h>
0012 
0013 #include "pinctrl-msm.h"
0014 
0015 #define FUNCTION(fname)                         \
0016     [msm_mux_##fname] = {                       \
0017         .name = #fname,             \
0018         .groups = fname##_groups,               \
0019         .ngroups = ARRAY_SIZE(fname##_groups),  \
0020     }
0021 
0022 #define REG_BASE 0x0
0023 #define REG_SIZE 0x1000
0024 #define PINGROUP(id, f1, f2, f3, f4, f5, f6, f7, f8, f9)    \
0025     {                           \
0026         .name = "gpio" #id,         \
0027         .pins = gpio##id##_pins,        \
0028         .npins = ARRAY_SIZE(gpio##id##_pins),   \
0029         .funcs = (int[]){           \
0030             msm_mux_gpio, /* gpio mode */   \
0031             msm_mux_##f1,           \
0032             msm_mux_##f2,           \
0033             msm_mux_##f3,           \
0034             msm_mux_##f4,           \
0035             msm_mux_##f5,           \
0036             msm_mux_##f6,           \
0037             msm_mux_##f7,           \
0038             msm_mux_##f8,           \
0039             msm_mux_##f9            \
0040         },                      \
0041         .nfuncs = 10,               \
0042         .ctl_reg = REG_BASE + REG_SIZE * id,            \
0043         .io_reg = REG_BASE + 0x4 + REG_SIZE * id,       \
0044         .intr_cfg_reg = REG_BASE + 0x8 + REG_SIZE * id,     \
0045         .intr_status_reg = REG_BASE + 0xc + REG_SIZE * id,  \
0046         .intr_target_reg = REG_BASE + 0x8 + REG_SIZE * id,  \
0047         .mux_bit = 2,           \
0048         .pull_bit = 0,          \
0049         .drv_bit = 6,           \
0050         .oe_bit = 9,            \
0051         .in_bit = 0,            \
0052         .out_bit = 1,           \
0053         .intr_enable_bit = 0,       \
0054         .intr_status_bit = 0,       \
0055         .intr_target_bit = 5,       \
0056         .intr_target_kpss_val = 4,  \
0057         .intr_raw_status_bit = 4,   \
0058         .intr_polarity_bit = 1,     \
0059         .intr_detection_bit = 2,    \
0060         .intr_detection_width = 2,  \
0061     }
0062 
0063 #define SDC_QDSD_PINGROUP(pg_name, ctl, pull, drv)  \
0064     {                           \
0065         .name = #pg_name,           \
0066         .pins = pg_name##_pins,         \
0067         .npins = ARRAY_SIZE(pg_name##_pins),    \
0068         .ctl_reg = ctl,             \
0069         .io_reg = 0,                \
0070         .intr_cfg_reg = 0,          \
0071         .intr_status_reg = 0,           \
0072         .intr_target_reg = 0,           \
0073         .mux_bit = -1,              \
0074         .pull_bit = pull,           \
0075         .drv_bit = drv,             \
0076         .oe_bit = -1,               \
0077         .in_bit = -1,               \
0078         .out_bit = -1,              \
0079         .intr_enable_bit = -1,          \
0080         .intr_status_bit = -1,          \
0081         .intr_target_bit = -1,          \
0082         .intr_raw_status_bit = -1,      \
0083         .intr_polarity_bit = -1,        \
0084         .intr_detection_bit = -1,       \
0085         .intr_detection_width = -1,     \
0086     }
0087 static const struct pinctrl_pin_desc msm8976_pins[] = {
0088     PINCTRL_PIN(0, "GPIO_0"),
0089     PINCTRL_PIN(1, "GPIO_1"),
0090     PINCTRL_PIN(2, "GPIO_2"),
0091     PINCTRL_PIN(3, "GPIO_3"),
0092     PINCTRL_PIN(4, "GPIO_4"),
0093     PINCTRL_PIN(5, "GPIO_5"),
0094     PINCTRL_PIN(6, "GPIO_6"),
0095     PINCTRL_PIN(7, "GPIO_7"),
0096     PINCTRL_PIN(8, "GPIO_8"),
0097     PINCTRL_PIN(9, "GPIO_9"),
0098     PINCTRL_PIN(10, "GPIO_10"),
0099     PINCTRL_PIN(11, "GPIO_11"),
0100     PINCTRL_PIN(12, "GPIO_12"),
0101     PINCTRL_PIN(13, "GPIO_13"),
0102     PINCTRL_PIN(14, "GPIO_14"),
0103     PINCTRL_PIN(15, "GPIO_15"),
0104     PINCTRL_PIN(16, "GPIO_16"),
0105     PINCTRL_PIN(17, "GPIO_17"),
0106     PINCTRL_PIN(18, "GPIO_18"),
0107     PINCTRL_PIN(19, "GPIO_19"),
0108     PINCTRL_PIN(20, "GPIO_20"),
0109     PINCTRL_PIN(21, "GPIO_21"),
0110     PINCTRL_PIN(22, "GPIO_22"),
0111     PINCTRL_PIN(23, "GPIO_23"),
0112     PINCTRL_PIN(24, "GPIO_24"),
0113     PINCTRL_PIN(25, "GPIO_25"),
0114     PINCTRL_PIN(26, "GPIO_26"),
0115     PINCTRL_PIN(27, "GPIO_27"),
0116     PINCTRL_PIN(28, "GPIO_28"),
0117     PINCTRL_PIN(29, "GPIO_29"),
0118     PINCTRL_PIN(30, "GPIO_30"),
0119     PINCTRL_PIN(31, "GPIO_31"),
0120     PINCTRL_PIN(32, "GPIO_32"),
0121     PINCTRL_PIN(33, "GPIO_33"),
0122     PINCTRL_PIN(34, "GPIO_34"),
0123     PINCTRL_PIN(35, "GPIO_35"),
0124     PINCTRL_PIN(36, "GPIO_36"),
0125     PINCTRL_PIN(37, "GPIO_37"),
0126     PINCTRL_PIN(38, "GPIO_38"),
0127     PINCTRL_PIN(39, "GPIO_39"),
0128     PINCTRL_PIN(40, "GPIO_40"),
0129     PINCTRL_PIN(41, "GPIO_41"),
0130     PINCTRL_PIN(42, "GPIO_42"),
0131     PINCTRL_PIN(43, "GPIO_43"),
0132     PINCTRL_PIN(44, "GPIO_44"),
0133     PINCTRL_PIN(45, "GPIO_45"),
0134     PINCTRL_PIN(46, "GPIO_46"),
0135     PINCTRL_PIN(47, "GPIO_47"),
0136     PINCTRL_PIN(48, "GPIO_48"),
0137     PINCTRL_PIN(49, "GPIO_49"),
0138     PINCTRL_PIN(50, "GPIO_50"),
0139     PINCTRL_PIN(51, "GPIO_51"),
0140     PINCTRL_PIN(52, "GPIO_52"),
0141     PINCTRL_PIN(53, "GPIO_53"),
0142     PINCTRL_PIN(54, "GPIO_54"),
0143     PINCTRL_PIN(55, "GPIO_55"),
0144     PINCTRL_PIN(56, "GPIO_56"),
0145     PINCTRL_PIN(57, "GPIO_57"),
0146     PINCTRL_PIN(58, "GPIO_58"),
0147     PINCTRL_PIN(59, "GPIO_59"),
0148     PINCTRL_PIN(60, "GPIO_60"),
0149     PINCTRL_PIN(61, "GPIO_61"),
0150     PINCTRL_PIN(62, "GPIO_62"),
0151     PINCTRL_PIN(63, "GPIO_63"),
0152     PINCTRL_PIN(64, "GPIO_64"),
0153     PINCTRL_PIN(65, "GPIO_65"),
0154     PINCTRL_PIN(66, "GPIO_66"),
0155     PINCTRL_PIN(67, "GPIO_67"),
0156     PINCTRL_PIN(68, "GPIO_68"),
0157     PINCTRL_PIN(69, "GPIO_69"),
0158     PINCTRL_PIN(70, "GPIO_70"),
0159     PINCTRL_PIN(71, "GPIO_71"),
0160     PINCTRL_PIN(72, "GPIO_72"),
0161     PINCTRL_PIN(73, "GPIO_73"),
0162     PINCTRL_PIN(74, "GPIO_74"),
0163     PINCTRL_PIN(75, "GPIO_75"),
0164     PINCTRL_PIN(76, "GPIO_76"),
0165     PINCTRL_PIN(77, "GPIO_77"),
0166     PINCTRL_PIN(78, "GPIO_78"),
0167     PINCTRL_PIN(79, "GPIO_79"),
0168     PINCTRL_PIN(80, "GPIO_80"),
0169     PINCTRL_PIN(81, "GPIO_81"),
0170     PINCTRL_PIN(82, "GPIO_82"),
0171     PINCTRL_PIN(83, "GPIO_83"),
0172     PINCTRL_PIN(84, "GPIO_84"),
0173     PINCTRL_PIN(85, "GPIO_85"),
0174     PINCTRL_PIN(86, "GPIO_86"),
0175     PINCTRL_PIN(87, "GPIO_87"),
0176     PINCTRL_PIN(88, "GPIO_88"),
0177     PINCTRL_PIN(89, "GPIO_89"),
0178     PINCTRL_PIN(90, "GPIO_90"),
0179     PINCTRL_PIN(91, "GPIO_91"),
0180     PINCTRL_PIN(92, "GPIO_92"),
0181     PINCTRL_PIN(93, "GPIO_93"),
0182     PINCTRL_PIN(94, "GPIO_94"),
0183     PINCTRL_PIN(95, "GPIO_95"),
0184     PINCTRL_PIN(96, "GPIO_96"),
0185     PINCTRL_PIN(97, "GPIO_97"),
0186     PINCTRL_PIN(98, "GPIO_98"),
0187     PINCTRL_PIN(99, "GPIO_99"),
0188     PINCTRL_PIN(100, "GPIO_100"),
0189     PINCTRL_PIN(101, "GPIO_101"),
0190     PINCTRL_PIN(102, "GPIO_102"),
0191     PINCTRL_PIN(103, "GPIO_103"),
0192     PINCTRL_PIN(104, "GPIO_104"),
0193     PINCTRL_PIN(105, "GPIO_105"),
0194     PINCTRL_PIN(106, "GPIO_106"),
0195     PINCTRL_PIN(107, "GPIO_107"),
0196     PINCTRL_PIN(108, "GPIO_108"),
0197     PINCTRL_PIN(109, "GPIO_109"),
0198     PINCTRL_PIN(110, "GPIO_110"),
0199     PINCTRL_PIN(111, "GPIO_111"),
0200     PINCTRL_PIN(112, "GPIO_112"),
0201     PINCTRL_PIN(113, "GPIO_113"),
0202     PINCTRL_PIN(114, "GPIO_114"),
0203     PINCTRL_PIN(115, "GPIO_115"),
0204     PINCTRL_PIN(116, "GPIO_116"),
0205     PINCTRL_PIN(117, "GPIO_117"),
0206     PINCTRL_PIN(118, "GPIO_118"),
0207     PINCTRL_PIN(119, "GPIO_119"),
0208     PINCTRL_PIN(120, "GPIO_120"),
0209     PINCTRL_PIN(121, "GPIO_121"),
0210     PINCTRL_PIN(122, "GPIO_122"),
0211     PINCTRL_PIN(123, "GPIO_123"),
0212     PINCTRL_PIN(124, "GPIO_124"),
0213     PINCTRL_PIN(125, "GPIO_125"),
0214     PINCTRL_PIN(126, "GPIO_126"),
0215     PINCTRL_PIN(127, "GPIO_127"),
0216     PINCTRL_PIN(128, "GPIO_128"),
0217     PINCTRL_PIN(129, "GPIO_129"),
0218     PINCTRL_PIN(130, "GPIO_130"),
0219     PINCTRL_PIN(131, "GPIO_131"),
0220     PINCTRL_PIN(132, "GPIO_132"),
0221     PINCTRL_PIN(133, "GPIO_133"),
0222     PINCTRL_PIN(134, "GPIO_134"),
0223     PINCTRL_PIN(135, "GPIO_135"),
0224     PINCTRL_PIN(136, "GPIO_136"),
0225     PINCTRL_PIN(137, "GPIO_137"),
0226     PINCTRL_PIN(138, "GPIO_138"),
0227     PINCTRL_PIN(139, "GPIO_139"),
0228     PINCTRL_PIN(140, "GPIO_140"),
0229     PINCTRL_PIN(141, "GPIO_141"),
0230     PINCTRL_PIN(142, "GPIO_142"),
0231     PINCTRL_PIN(143, "GPIO_143"),
0232     PINCTRL_PIN(144, "GPIO_144"),
0233     PINCTRL_PIN(145, "SDC1_CLK"),
0234     PINCTRL_PIN(146, "SDC1_CMD"),
0235     PINCTRL_PIN(147, "SDC1_DATA"),
0236     PINCTRL_PIN(148, "SDC1_RCLK"),
0237     PINCTRL_PIN(149, "SDC2_CLK"),
0238     PINCTRL_PIN(150, "SDC2_CMD"),
0239     PINCTRL_PIN(151, "SDC2_DATA"),
0240     PINCTRL_PIN(152, "QDSD_CLK"),
0241     PINCTRL_PIN(153, "QDSD_CMD"),
0242     PINCTRL_PIN(154, "QDSD_DATA0"),
0243     PINCTRL_PIN(155, "QDSD_DATA1"),
0244     PINCTRL_PIN(156, "QDSD_DATA2"),
0245     PINCTRL_PIN(157, "QDSD_DATA3"),
0246 };
0247 
0248 #define DECLARE_MSM_GPIO_PINS(pin) \
0249     static const unsigned int gpio##pin##_pins[] = { pin }
0250 DECLARE_MSM_GPIO_PINS(0);
0251 DECLARE_MSM_GPIO_PINS(1);
0252 DECLARE_MSM_GPIO_PINS(2);
0253 DECLARE_MSM_GPIO_PINS(3);
0254 DECLARE_MSM_GPIO_PINS(4);
0255 DECLARE_MSM_GPIO_PINS(5);
0256 DECLARE_MSM_GPIO_PINS(6);
0257 DECLARE_MSM_GPIO_PINS(7);
0258 DECLARE_MSM_GPIO_PINS(8);
0259 DECLARE_MSM_GPIO_PINS(9);
0260 DECLARE_MSM_GPIO_PINS(10);
0261 DECLARE_MSM_GPIO_PINS(11);
0262 DECLARE_MSM_GPIO_PINS(12);
0263 DECLARE_MSM_GPIO_PINS(13);
0264 DECLARE_MSM_GPIO_PINS(14);
0265 DECLARE_MSM_GPIO_PINS(15);
0266 DECLARE_MSM_GPIO_PINS(16);
0267 DECLARE_MSM_GPIO_PINS(17);
0268 DECLARE_MSM_GPIO_PINS(18);
0269 DECLARE_MSM_GPIO_PINS(19);
0270 DECLARE_MSM_GPIO_PINS(20);
0271 DECLARE_MSM_GPIO_PINS(21);
0272 DECLARE_MSM_GPIO_PINS(22);
0273 DECLARE_MSM_GPIO_PINS(23);
0274 DECLARE_MSM_GPIO_PINS(24);
0275 DECLARE_MSM_GPIO_PINS(25);
0276 DECLARE_MSM_GPIO_PINS(26);
0277 DECLARE_MSM_GPIO_PINS(27);
0278 DECLARE_MSM_GPIO_PINS(28);
0279 DECLARE_MSM_GPIO_PINS(29);
0280 DECLARE_MSM_GPIO_PINS(30);
0281 DECLARE_MSM_GPIO_PINS(31);
0282 DECLARE_MSM_GPIO_PINS(32);
0283 DECLARE_MSM_GPIO_PINS(33);
0284 DECLARE_MSM_GPIO_PINS(34);
0285 DECLARE_MSM_GPIO_PINS(35);
0286 DECLARE_MSM_GPIO_PINS(36);
0287 DECLARE_MSM_GPIO_PINS(37);
0288 DECLARE_MSM_GPIO_PINS(38);
0289 DECLARE_MSM_GPIO_PINS(39);
0290 DECLARE_MSM_GPIO_PINS(40);
0291 DECLARE_MSM_GPIO_PINS(41);
0292 DECLARE_MSM_GPIO_PINS(42);
0293 DECLARE_MSM_GPIO_PINS(43);
0294 DECLARE_MSM_GPIO_PINS(44);
0295 DECLARE_MSM_GPIO_PINS(45);
0296 DECLARE_MSM_GPIO_PINS(46);
0297 DECLARE_MSM_GPIO_PINS(47);
0298 DECLARE_MSM_GPIO_PINS(48);
0299 DECLARE_MSM_GPIO_PINS(49);
0300 DECLARE_MSM_GPIO_PINS(50);
0301 DECLARE_MSM_GPIO_PINS(51);
0302 DECLARE_MSM_GPIO_PINS(52);
0303 DECLARE_MSM_GPIO_PINS(53);
0304 DECLARE_MSM_GPIO_PINS(54);
0305 DECLARE_MSM_GPIO_PINS(55);
0306 DECLARE_MSM_GPIO_PINS(56);
0307 DECLARE_MSM_GPIO_PINS(57);
0308 DECLARE_MSM_GPIO_PINS(58);
0309 DECLARE_MSM_GPIO_PINS(59);
0310 DECLARE_MSM_GPIO_PINS(60);
0311 DECLARE_MSM_GPIO_PINS(61);
0312 DECLARE_MSM_GPIO_PINS(62);
0313 DECLARE_MSM_GPIO_PINS(63);
0314 DECLARE_MSM_GPIO_PINS(64);
0315 DECLARE_MSM_GPIO_PINS(65);
0316 DECLARE_MSM_GPIO_PINS(66);
0317 DECLARE_MSM_GPIO_PINS(67);
0318 DECLARE_MSM_GPIO_PINS(68);
0319 DECLARE_MSM_GPIO_PINS(69);
0320 DECLARE_MSM_GPIO_PINS(70);
0321 DECLARE_MSM_GPIO_PINS(71);
0322 DECLARE_MSM_GPIO_PINS(72);
0323 DECLARE_MSM_GPIO_PINS(73);
0324 DECLARE_MSM_GPIO_PINS(74);
0325 DECLARE_MSM_GPIO_PINS(75);
0326 DECLARE_MSM_GPIO_PINS(76);
0327 DECLARE_MSM_GPIO_PINS(77);
0328 DECLARE_MSM_GPIO_PINS(78);
0329 DECLARE_MSM_GPIO_PINS(79);
0330 DECLARE_MSM_GPIO_PINS(80);
0331 DECLARE_MSM_GPIO_PINS(81);
0332 DECLARE_MSM_GPIO_PINS(82);
0333 DECLARE_MSM_GPIO_PINS(83);
0334 DECLARE_MSM_GPIO_PINS(84);
0335 DECLARE_MSM_GPIO_PINS(85);
0336 DECLARE_MSM_GPIO_PINS(86);
0337 DECLARE_MSM_GPIO_PINS(87);
0338 DECLARE_MSM_GPIO_PINS(88);
0339 DECLARE_MSM_GPIO_PINS(89);
0340 DECLARE_MSM_GPIO_PINS(90);
0341 DECLARE_MSM_GPIO_PINS(91);
0342 DECLARE_MSM_GPIO_PINS(92);
0343 DECLARE_MSM_GPIO_PINS(93);
0344 DECLARE_MSM_GPIO_PINS(94);
0345 DECLARE_MSM_GPIO_PINS(95);
0346 DECLARE_MSM_GPIO_PINS(96);
0347 DECLARE_MSM_GPIO_PINS(97);
0348 DECLARE_MSM_GPIO_PINS(98);
0349 DECLARE_MSM_GPIO_PINS(99);
0350 DECLARE_MSM_GPIO_PINS(100);
0351 DECLARE_MSM_GPIO_PINS(101);
0352 DECLARE_MSM_GPIO_PINS(102);
0353 DECLARE_MSM_GPIO_PINS(103);
0354 DECLARE_MSM_GPIO_PINS(104);
0355 DECLARE_MSM_GPIO_PINS(105);
0356 DECLARE_MSM_GPIO_PINS(106);
0357 DECLARE_MSM_GPIO_PINS(107);
0358 DECLARE_MSM_GPIO_PINS(108);
0359 DECLARE_MSM_GPIO_PINS(109);
0360 DECLARE_MSM_GPIO_PINS(110);
0361 DECLARE_MSM_GPIO_PINS(111);
0362 DECLARE_MSM_GPIO_PINS(112);
0363 DECLARE_MSM_GPIO_PINS(113);
0364 DECLARE_MSM_GPIO_PINS(114);
0365 DECLARE_MSM_GPIO_PINS(115);
0366 DECLARE_MSM_GPIO_PINS(116);
0367 DECLARE_MSM_GPIO_PINS(117);
0368 DECLARE_MSM_GPIO_PINS(118);
0369 DECLARE_MSM_GPIO_PINS(119);
0370 DECLARE_MSM_GPIO_PINS(120);
0371 DECLARE_MSM_GPIO_PINS(121);
0372 DECLARE_MSM_GPIO_PINS(122);
0373 DECLARE_MSM_GPIO_PINS(123);
0374 DECLARE_MSM_GPIO_PINS(124);
0375 DECLARE_MSM_GPIO_PINS(125);
0376 DECLARE_MSM_GPIO_PINS(126);
0377 DECLARE_MSM_GPIO_PINS(127);
0378 DECLARE_MSM_GPIO_PINS(128);
0379 DECLARE_MSM_GPIO_PINS(129);
0380 DECLARE_MSM_GPIO_PINS(130);
0381 DECLARE_MSM_GPIO_PINS(131);
0382 DECLARE_MSM_GPIO_PINS(132);
0383 DECLARE_MSM_GPIO_PINS(133);
0384 DECLARE_MSM_GPIO_PINS(134);
0385 DECLARE_MSM_GPIO_PINS(135);
0386 DECLARE_MSM_GPIO_PINS(136);
0387 DECLARE_MSM_GPIO_PINS(137);
0388 DECLARE_MSM_GPIO_PINS(138);
0389 DECLARE_MSM_GPIO_PINS(139);
0390 DECLARE_MSM_GPIO_PINS(140);
0391 DECLARE_MSM_GPIO_PINS(141);
0392 DECLARE_MSM_GPIO_PINS(142);
0393 DECLARE_MSM_GPIO_PINS(143);
0394 DECLARE_MSM_GPIO_PINS(144);
0395 
0396 static const unsigned int sdc1_clk_pins[] = { 145 };
0397 static const unsigned int sdc1_cmd_pins[] = { 146 };
0398 static const unsigned int sdc1_data_pins[] = { 147 };
0399 static const unsigned int sdc1_rclk_pins[] = { 148 };
0400 static const unsigned int sdc2_clk_pins[] = { 149 };
0401 static const unsigned int sdc2_cmd_pins[] = { 150 };
0402 static const unsigned int sdc2_data_pins[] = { 151 };
0403 static const unsigned int qdsd_clk_pins[] = { 152 };
0404 static const unsigned int qdsd_cmd_pins[] = { 153 };
0405 static const unsigned int qdsd_data0_pins[] = { 154 };
0406 static const unsigned int qdsd_data1_pins[] = { 155 };
0407 static const unsigned int qdsd_data2_pins[] = { 156 };
0408 static const unsigned int qdsd_data3_pins[] = { 157 };
0409 
0410 enum msm8976_functions {
0411     msm_mux_gpio,
0412     msm_mux_blsp_uart1,
0413     msm_mux_blsp_spi1,
0414     msm_mux_smb_int,
0415     msm_mux_blsp_i2c1,
0416     msm_mux_blsp_spi2,
0417     msm_mux_blsp_uart2,
0418     msm_mux_blsp_i2c2,
0419     msm_mux_gcc_gp1_clk_b,
0420     msm_mux_blsp_spi3,
0421     msm_mux_qdss_tracedata_b,
0422     msm_mux_blsp_i2c3,
0423     msm_mux_gcc_gp2_clk_b,
0424     msm_mux_gcc_gp3_clk_b,
0425     msm_mux_blsp_spi4,
0426     msm_mux_cap_int,
0427     msm_mux_blsp_i2c4,
0428     msm_mux_blsp_spi5,
0429     msm_mux_blsp_uart5,
0430     msm_mux_qdss_traceclk_a,
0431     msm_mux_m_voc,
0432     msm_mux_blsp_i2c5,
0433     msm_mux_qdss_tracectl_a,
0434     msm_mux_qdss_tracedata_a,
0435     msm_mux_blsp_spi6,
0436     msm_mux_blsp_uart6,
0437     msm_mux_qdss_tracectl_b,
0438     msm_mux_blsp_i2c6,
0439     msm_mux_qdss_traceclk_b,
0440     msm_mux_mdp_vsync,
0441     msm_mux_pri_mi2s_mclk_a,
0442     msm_mux_sec_mi2s_mclk_a,
0443     msm_mux_cam_mclk,
0444     msm_mux_cci0_i2c,
0445     msm_mux_cci1_i2c,
0446     msm_mux_blsp1_spi,
0447     msm_mux_blsp3_spi,
0448     msm_mux_gcc_gp1_clk_a,
0449     msm_mux_gcc_gp2_clk_a,
0450     msm_mux_gcc_gp3_clk_a,
0451     msm_mux_uim_batt,
0452     msm_mux_sd_write,
0453     msm_mux_uim1_data,
0454     msm_mux_uim1_clk,
0455     msm_mux_uim1_reset,
0456     msm_mux_uim1_present,
0457     msm_mux_uim2_data,
0458     msm_mux_uim2_clk,
0459     msm_mux_uim2_reset,
0460     msm_mux_uim2_present,
0461     msm_mux_ts_xvdd,
0462     msm_mux_mipi_dsi0,
0463     msm_mux_us_euro,
0464     msm_mux_ts_resout,
0465     msm_mux_ts_sample,
0466     msm_mux_sec_mi2s_mclk_b,
0467     msm_mux_pri_mi2s,
0468     msm_mux_codec_reset,
0469     msm_mux_cdc_pdm0,
0470     msm_mux_us_emitter,
0471     msm_mux_pri_mi2s_mclk_b,
0472     msm_mux_pri_mi2s_mclk_c,
0473     msm_mux_lpass_slimbus,
0474     msm_mux_lpass_slimbus0,
0475     msm_mux_lpass_slimbus1,
0476     msm_mux_codec_int1,
0477     msm_mux_codec_int2,
0478     msm_mux_wcss_bt,
0479     msm_mux_sdc3,
0480     msm_mux_wcss_wlan2,
0481     msm_mux_wcss_wlan1,
0482     msm_mux_wcss_wlan0,
0483     msm_mux_wcss_wlan,
0484     msm_mux_wcss_fm,
0485     msm_mux_key_volp,
0486     msm_mux_key_snapshot,
0487     msm_mux_key_focus,
0488     msm_mux_key_home,
0489     msm_mux_pwr_down,
0490     msm_mux_dmic0_clk,
0491     msm_mux_hdmi_int,
0492     msm_mux_dmic0_data,
0493     msm_mux_wsa_vi,
0494     msm_mux_wsa_en,
0495     msm_mux_blsp_spi8,
0496     msm_mux_wsa_irq,
0497     msm_mux_blsp_i2c8,
0498     msm_mux_pa_indicator,
0499     msm_mux_modem_tsync,
0500     msm_mux_ssbi_wtr1,
0501     msm_mux_gsm1_tx,
0502     msm_mux_gsm0_tx,
0503     msm_mux_sdcard_det,
0504     msm_mux_sec_mi2s,
0505     msm_mux_ss_switch,
0506     msm_mux_NA,
0507 };
0508 
0509 static const char * const gpio_groups[] = {
0510     "gpio0", "gpio1", "gpio2", "gpio3", "gpio4", "gpio5", "gpio6", "gpio7",
0511     "gpio8", "gpio9", "gpio10", "gpio11", "gpio12", "gpio13", "gpio14",
0512     "gpio15", "gpio16", "gpio17", "gpio18", "gpio19", "gpio20", "gpio21",
0513     "gpio22", "gpio23", "gpio24", "gpio25", "gpio26", "gpio27", "gpio28",
0514     "gpio29", "gpio30", "gpio31", "gpio32", "gpio33", "gpio34", "gpio35",
0515     "gpio36", "gpio37", "gpio38", "gpio39", "gpio40", "gpio41", "gpio42",
0516     "gpio43", "gpio44", "gpio45", "gpio46", "gpio47", "gpio48", "gpio49",
0517     "gpio50", "gpio51", "gpio52", "gpio53", "gpio54", "gpio55", "gpio56",
0518     "gpio57", "gpio58", "gpio59", "gpio60", "gpio61", "gpio62", "gpio63",
0519     "gpio64", "gpio65", "gpio66", "gpio67", "gpio68", "gpio69", "gpio70",
0520     "gpio71", "gpio72", "gpio73", "gpio74", "gpio75", "gpio76", "gpio77",
0521     "gpio78", "gpio79", "gpio80", "gpio81", "gpio82", "gpio83", "gpio84",
0522     "gpio85", "gpio86", "gpio87", "gpio88", "gpio89", "gpio90", "gpio91",
0523     "gpio92", "gpio93", "gpio94", "gpio95", "gpio96", "gpio97", "gpio98",
0524     "gpio99", "gpio100", "gpio101", "gpio102", "gpio103", "gpio104",
0525     "gpio105", "gpio106", "gpio107", "gpio108", "gpio109", "gpio110",
0526     "gpio111", "gpio112", "gpio113", "gpio114", "gpio115", "gpio116",
0527     "gpio117", "gpio118", "gpio119", "gpio120", "gpio121", "gpio122",
0528     "gpio123", "gpio124", "gpio125", "gpio126", "gpio127", "gpio128",
0529     "gpio129", "gpio130", "gpio131", "gpio132", "gpio133", "gpio134",
0530     "gpio135", "gpio136", "gpio137", "gpio138", "gpio139", "gpio140",
0531     "gpio141", "gpio142", "gpio143", "gpio144",
0532 };
0533 static const char * const blsp_uart1_groups[] = {
0534     "gpio0", "gpio1", "gpio2", "gpio3",
0535 };
0536 static const char * const blsp_spi1_groups[] = {
0537     "gpio0", "gpio1", "gpio2", "gpio3",
0538 };
0539 static const char * const smb_int_groups[] = {
0540     "gpio1",
0541 };
0542 static const char * const blsp_i2c1_groups[] = {
0543     "gpio2", "gpio3",
0544 };
0545 static const char * const blsp_spi2_groups[] = {
0546     "gpio4", "gpio5", "gpio6", "gpio7",
0547 };
0548 static const char * const blsp_uart2_groups[] = {
0549     "gpio4", "gpio5", "gpio6", "gpio7",
0550 };
0551 static const char * const blsp_i2c2_groups[] = {
0552     "gpio6", "gpio7",
0553 };
0554 static const char * const gcc_gp1_clk_b_groups[] = {
0555     "gpio105",
0556 };
0557 static const char * const blsp_spi3_groups[] = {
0558     "gpio8", "gpio9", "gpio10", "gpio11",
0559 };
0560 static const char * const qdss_tracedata_b_groups[] = {
0561     "gpio26", "gpio27", "gpio28", "gpio29", "gpio30",
0562     "gpio31", "gpio33", "gpio34", "gpio35", "gpio36", "gpio37", "gpio38",
0563     "gpio116", "gpio126", "gpio128", "gpio129",
0564 };
0565 static const char * const blsp_i2c3_groups[] = {
0566     "gpio10", "gpio11",
0567 };
0568 static const char * const gcc_gp2_clk_b_groups[] = {
0569     "gpio12",
0570 };
0571 static const char * const gcc_gp3_clk_b_groups[] = {
0572     "gpio13",
0573 };
0574 static const char * const blsp_spi4_groups[] = {
0575     "gpio12", "gpio13", "gpio14", "gpio15",
0576 };
0577 static const char * const cap_int_groups[] = {
0578     "gpio13",
0579 };
0580 static const char * const blsp_i2c4_groups[] = {
0581     "gpio14", "gpio15",
0582 };
0583 static const char * const blsp_spi5_groups[] = {
0584     "gpio134", "gpio135", "gpio136", "gpio137",
0585 };
0586 static const char * const blsp_uart5_groups[] = {
0587     "gpio134", "gpio135", "gpio136", "gpio137",
0588 };
0589 static const char * const qdss_traceclk_a_groups[] = {
0590     "gpio46",
0591 };
0592 static const char * const m_voc_groups[] = {
0593     "gpio123", "gpio124",
0594 };
0595 static const char * const blsp_i2c5_groups[] = {
0596     "gpio136", "gpio137",
0597 };
0598 static const char * const qdss_tracectl_a_groups[] = {
0599     "gpio45",
0600 };
0601 static const char * const qdss_tracedata_a_groups[] = {
0602     "gpio8", "gpio9", "gpio10", "gpio39", "gpio40", "gpio41", "gpio42",
0603     "gpio43", "gpio44", "gpio47", "gpio48", "gpio62", "gpio69", "gpio120",
0604     "gpio121", "gpio130", "gpio131",
0605 };
0606 static const char * const blsp_spi6_groups[] = {
0607     "gpio20", "gpio21", "gpio22", "gpio23",
0608 };
0609 static const char * const blsp_uart6_groups[] = {
0610     "gpio20", "gpio21", "gpio22", "gpio23",
0611 };
0612 static const char * const qdss_tracectl_b_groups[] = {
0613     "gpio5",
0614 };
0615 static const char * const blsp_i2c6_groups[] = {
0616     "gpio22", "gpio23",
0617 };
0618 static const char * const qdss_traceclk_b_groups[] = {
0619     "gpio5",
0620 };
0621 static const char * const mdp_vsync_groups[] = {
0622     "gpio24", "gpio25",
0623 };
0624 static const char * const pri_mi2s_mclk_a_groups[] = {
0625     "gpio126",
0626 };
0627 static const char * const sec_mi2s_mclk_a_groups[] = {
0628     "gpio62",
0629 };
0630 static const char * const cam_mclk_groups[] = {
0631     "gpio26", "gpio27", "gpio28",
0632 };
0633 static const char * const cci0_i2c_groups[] = {
0634     "gpio30", "gpio29",
0635 };
0636 static const char * const cci1_i2c_groups[] = {
0637     "gpio104", "gpio103",
0638 };
0639 static const char * const blsp1_spi_groups[] = {
0640     "gpio101",
0641 };
0642 static const char * const blsp3_spi_groups[] = {
0643     "gpio106", "gpio107",
0644 };
0645 static const char * const gcc_gp1_clk_a_groups[] = {
0646     "gpio49",
0647 };
0648 static const char * const gcc_gp2_clk_a_groups[] = {
0649     "gpio50",
0650 };
0651 static const char * const gcc_gp3_clk_a_groups[] = {
0652     "gpio51",
0653 };
0654 static const char * const uim_batt_groups[] = {
0655     "gpio61",
0656 };
0657 static const char * const sd_write_groups[] = {
0658     "gpio50",
0659 };
0660 static const char * const uim2_data_groups[] = {
0661     "gpio51",
0662 };
0663 static const char * const uim2_clk_groups[] = {
0664     "gpio52",
0665 };
0666 static const char * const uim2_reset_groups[] = {
0667     "gpio53",
0668 };
0669 static const char * const uim2_present_groups[] = {
0670     "gpio54",
0671 };
0672 static const char * const uim1_data_groups[] = {
0673     "gpio55",
0674 };
0675 static const char * const uim1_clk_groups[] = {
0676     "gpio56",
0677 };
0678 static const char * const uim1_reset_groups[] = {
0679     "gpio57",
0680 };
0681 static const char * const uim1_present_groups[] = {
0682     "gpio58",
0683 };
0684 static const char * const ts_xvdd_groups[] = {
0685     "gpio60",
0686 };
0687 static const char * const mipi_dsi0_groups[] = {
0688     "gpio61",
0689 };
0690 static const char * const us_euro_groups[] = {
0691     "gpio63",
0692 };
0693 static const char * const ts_resout_groups[] = {
0694     "gpio64",
0695 };
0696 static const char * const ts_sample_groups[] = {
0697     "gpio65",
0698 };
0699 static const char * const sec_mi2s_mclk_b_groups[] = {
0700     "gpio66",
0701 };
0702 static const char * const pri_mi2s_groups[] = {
0703     "gpio122", "gpio123", "gpio124", "gpio125", "gpio127",
0704 };
0705 static const char * const codec_reset_groups[] = {
0706     "gpio67",
0707 };
0708 static const char * const cdc_pdm0_groups[] = {
0709     "gpio116", "gpio117", "gpio118", "gpio119", "gpio120", "gpio121",
0710 };
0711 static const char * const us_emitter_groups[] = {
0712     "gpio68",
0713 };
0714 static const char * const pri_mi2s_mclk_b_groups[] = {
0715     "gpio62",
0716 };
0717 static const char * const pri_mi2s_mclk_c_groups[] = {
0718     "gpio116",
0719 };
0720 static const char * const lpass_slimbus_groups[] = {
0721     "gpio117",
0722 };
0723 static const char * const lpass_slimbus0_groups[] = {
0724     "gpio118",
0725 };
0726 static const char * const lpass_slimbus1_groups[] = {
0727     "gpio119",
0728 };
0729 static const char * const codec_int1_groups[] = {
0730     "gpio73",
0731 };
0732 static const char * const codec_int2_groups[] = {
0733     "gpio74",
0734 };
0735 static const char * const wcss_bt_groups[] = {
0736     "gpio39", "gpio47", "gpio88",
0737 };
0738 static const char * const sdc3_groups[] = {
0739     "gpio39", "gpio40", "gpio41",
0740     "gpio42", "gpio43", "gpio44",
0741 };
0742 static const char * const wcss_wlan2_groups[] = {
0743     "gpio40",
0744 };
0745 static const char * const wcss_wlan1_groups[] = {
0746     "gpio41",
0747 };
0748 static const char * const wcss_wlan0_groups[] = {
0749     "gpio42",
0750 };
0751 static const char * const wcss_wlan_groups[] = {
0752     "gpio43", "gpio44",
0753 };
0754 static const char * const wcss_fm_groups[] = {
0755     "gpio45", "gpio46",
0756 };
0757 static const char * const key_volp_groups[] = {
0758     "gpio85",
0759 };
0760 static const char * const key_snapshot_groups[] = {
0761     "gpio86",
0762 };
0763 static const char * const key_focus_groups[] = {
0764     "gpio87",
0765 };
0766 static const char * const key_home_groups[] = {
0767     "gpio88",
0768 };
0769 static const char * const pwr_down_groups[] = {
0770     "gpio89",
0771 };
0772 static const char * const dmic0_clk_groups[] = {
0773     "gpio66",
0774 };
0775 static const char * const hdmi_int_groups[] = {
0776     "gpio90",
0777 };
0778 static const char * const dmic0_data_groups[] = {
0779     "gpio67",
0780 };
0781 static const char * const wsa_vi_groups[] = {
0782     "gpio108", "gpio109",
0783 };
0784 static const char * const wsa_en_groups[] = {
0785     "gpio96",
0786 };
0787 static const char * const blsp_spi8_groups[] = {
0788     "gpio16", "gpio17", "gpio18", "gpio19",
0789 };
0790 static const char * const wsa_irq_groups[] = {
0791     "gpio97",
0792 };
0793 static const char * const blsp_i2c8_groups[] = {
0794     "gpio18", "gpio19",
0795 };
0796 static const char * const pa_indicator_groups[] = {
0797     "gpio92",
0798 };
0799 static const char * const modem_tsync_groups[] = {
0800     "gpio93",
0801 };
0802 static const char * const ssbi_wtr1_groups[] = {
0803     "gpio79", "gpio94",
0804 };
0805 static const char * const gsm1_tx_groups[] = {
0806     "gpio95",
0807 };
0808 static const char * const gsm0_tx_groups[] = {
0809     "gpio99",
0810 };
0811 static const char * const sdcard_det_groups[] = {
0812     "gpio133",
0813 };
0814 static const char * const sec_mi2s_groups[] = {
0815     "gpio102", "gpio105", "gpio134", "gpio135",
0816 };
0817 
0818 static const char * const ss_switch_groups[] = {
0819     "gpio139",
0820 };
0821 
0822 static const struct msm_function msm8976_functions[] = {
0823     FUNCTION(gpio),
0824     FUNCTION(blsp_spi1),
0825     FUNCTION(smb_int),
0826     FUNCTION(blsp_i2c1),
0827     FUNCTION(blsp_spi2),
0828     FUNCTION(blsp_uart1),
0829     FUNCTION(blsp_uart2),
0830     FUNCTION(blsp_i2c2),
0831     FUNCTION(gcc_gp1_clk_b),
0832     FUNCTION(blsp_spi3),
0833     FUNCTION(qdss_tracedata_b),
0834     FUNCTION(blsp_i2c3),
0835     FUNCTION(gcc_gp2_clk_b),
0836     FUNCTION(gcc_gp3_clk_b),
0837     FUNCTION(blsp_spi4),
0838     FUNCTION(cap_int),
0839     FUNCTION(blsp_i2c4),
0840     FUNCTION(blsp_spi5),
0841     FUNCTION(blsp_uart5),
0842     FUNCTION(qdss_traceclk_a),
0843     FUNCTION(m_voc),
0844     FUNCTION(blsp_i2c5),
0845     FUNCTION(qdss_tracectl_a),
0846     FUNCTION(qdss_tracedata_a),
0847     FUNCTION(blsp_spi6),
0848     FUNCTION(blsp_uart6),
0849     FUNCTION(qdss_tracectl_b),
0850     FUNCTION(blsp_i2c6),
0851     FUNCTION(qdss_traceclk_b),
0852     FUNCTION(mdp_vsync),
0853     FUNCTION(pri_mi2s_mclk_a),
0854     FUNCTION(sec_mi2s_mclk_a),
0855     FUNCTION(cam_mclk),
0856     FUNCTION(cci0_i2c),
0857     FUNCTION(cci1_i2c),
0858     FUNCTION(blsp1_spi),
0859     FUNCTION(blsp3_spi),
0860     FUNCTION(gcc_gp1_clk_a),
0861     FUNCTION(gcc_gp2_clk_a),
0862     FUNCTION(gcc_gp3_clk_a),
0863     FUNCTION(uim_batt),
0864     FUNCTION(sd_write),
0865     FUNCTION(uim1_data),
0866     FUNCTION(uim1_clk),
0867     FUNCTION(uim1_reset),
0868     FUNCTION(uim1_present),
0869     FUNCTION(uim2_data),
0870     FUNCTION(uim2_clk),
0871     FUNCTION(uim2_reset),
0872     FUNCTION(uim2_present),
0873     FUNCTION(ts_xvdd),
0874     FUNCTION(mipi_dsi0),
0875     FUNCTION(us_euro),
0876     FUNCTION(ts_resout),
0877     FUNCTION(ts_sample),
0878     FUNCTION(sec_mi2s_mclk_b),
0879     FUNCTION(pri_mi2s),
0880     FUNCTION(codec_reset),
0881     FUNCTION(cdc_pdm0),
0882     FUNCTION(us_emitter),
0883     FUNCTION(pri_mi2s_mclk_b),
0884     FUNCTION(pri_mi2s_mclk_c),
0885     FUNCTION(lpass_slimbus),
0886     FUNCTION(lpass_slimbus0),
0887     FUNCTION(lpass_slimbus1),
0888     FUNCTION(codec_int1),
0889     FUNCTION(codec_int2),
0890     FUNCTION(wcss_bt),
0891     FUNCTION(sdc3),
0892     FUNCTION(wcss_wlan2),
0893     FUNCTION(wcss_wlan1),
0894     FUNCTION(wcss_wlan0),
0895     FUNCTION(wcss_wlan),
0896     FUNCTION(wcss_fm),
0897     FUNCTION(key_volp),
0898     FUNCTION(key_snapshot),
0899     FUNCTION(key_focus),
0900     FUNCTION(key_home),
0901     FUNCTION(pwr_down),
0902     FUNCTION(dmic0_clk),
0903     FUNCTION(hdmi_int),
0904     FUNCTION(dmic0_data),
0905     FUNCTION(wsa_vi),
0906     FUNCTION(wsa_en),
0907     FUNCTION(blsp_spi8),
0908     FUNCTION(wsa_irq),
0909     FUNCTION(blsp_i2c8),
0910     FUNCTION(pa_indicator),
0911     FUNCTION(modem_tsync),
0912     FUNCTION(ssbi_wtr1),
0913     FUNCTION(gsm1_tx),
0914     FUNCTION(gsm0_tx),
0915     FUNCTION(sdcard_det),
0916     FUNCTION(sec_mi2s),
0917     FUNCTION(ss_switch),
0918 };
0919 
0920 static const struct msm_pingroup msm8976_groups[] = {
0921     PINGROUP(0, blsp_spi1, blsp_uart1, NA, NA, NA, NA, NA, NA, NA),
0922     PINGROUP(1, blsp_spi1, blsp_uart1, NA, NA, NA, NA, NA, NA, NA),
0923     PINGROUP(2, blsp_spi1, blsp_uart1, blsp_i2c1, NA, NA, NA, NA, NA, NA),
0924     PINGROUP(3, blsp_spi1, blsp_uart1, blsp_i2c1, NA, NA, NA, NA, NA, NA),
0925     PINGROUP(4, blsp_spi2, blsp_uart2, NA, NA, NA, qdss_tracectl_b, NA, NA, NA),
0926     PINGROUP(5, blsp_spi2, blsp_uart2, NA, NA, NA, qdss_traceclk_b, NA, NA, NA),
0927     PINGROUP(6, blsp_spi2, blsp_uart2, blsp_i2c2, NA, NA, NA, NA, NA, NA),
0928     PINGROUP(7, blsp_spi2, blsp_uart2, blsp_i2c2, NA, NA, NA, NA, NA, NA),
0929     PINGROUP(8, blsp_spi3, NA, NA, NA, NA, qdss_tracedata_a, NA, NA, NA),
0930     PINGROUP(9, blsp_spi3, NA, NA, NA, qdss_tracedata_a, NA, NA, NA, NA),
0931     PINGROUP(10, blsp_spi3, NA, blsp_i2c3, NA, NA, qdss_tracedata_a, NA, NA, NA),
0932     PINGROUP(11, blsp_spi3, NA, blsp_i2c3, NA, NA, NA, NA, NA, NA),
0933     PINGROUP(12, blsp_spi4, NA, gcc_gp2_clk_b, NA, NA, NA, NA, NA, NA),
0934     PINGROUP(13, blsp_spi4, NA, gcc_gp3_clk_b, NA, NA, NA, NA, NA, NA),
0935     PINGROUP(14, blsp_spi4, NA, blsp_i2c4, NA, NA, NA, NA, NA, NA),
0936     PINGROUP(15, blsp_spi4, NA, blsp_i2c4, NA, NA, NA, NA, NA, NA),
0937     PINGROUP(16, blsp_spi8, NA, NA, NA, NA, NA, NA, NA, NA),
0938     PINGROUP(17, blsp_spi8, NA, NA, NA, NA, NA, NA, NA, NA),
0939     PINGROUP(18, blsp_spi8, NA, blsp_i2c8, NA, NA, NA, NA, NA, NA),
0940     PINGROUP(19, blsp_spi8, NA, blsp_i2c8, NA, NA, NA, NA, NA, NA),
0941     PINGROUP(20, blsp_spi6, blsp_uart6, NA, NA, NA, NA, NA, NA, NA),
0942     PINGROUP(21, blsp_spi6, blsp_uart6, NA, NA, NA, NA, NA, NA, NA),
0943     PINGROUP(22, blsp_spi6, blsp_uart6, blsp_i2c6, NA, NA, NA, NA, NA, NA),
0944     PINGROUP(23, blsp_spi6, blsp_uart6, blsp_i2c6, NA, NA, NA, NA, NA, NA),
0945     PINGROUP(24, mdp_vsync, NA, NA, NA, NA, NA, NA, NA, NA),
0946     PINGROUP(25, mdp_vsync, NA, NA, NA, NA, NA, NA, NA, NA),
0947     PINGROUP(26, cam_mclk, NA, NA, NA, NA, qdss_tracedata_b, NA, NA, NA),
0948     PINGROUP(27, cam_mclk, NA, NA, NA, NA, NA, qdss_tracedata_b, NA, NA),
0949     PINGROUP(28, cam_mclk, NA, NA, NA, NA, qdss_tracedata_b, NA, NA, NA),
0950     PINGROUP(29, cci0_i2c, NA, NA, NA, NA, qdss_tracedata_b, NA, NA, NA),
0951     PINGROUP(30, cci0_i2c, NA, NA, NA, NA, NA, qdss_tracedata_b, NA, NA),
0952     PINGROUP(31, NA, NA, NA, NA, NA, NA, NA, qdss_tracedata_b, NA),
0953     PINGROUP(32, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0954     PINGROUP(33, NA, NA, NA, NA, NA, NA, qdss_tracedata_b, NA, NA),
0955     PINGROUP(34, NA, NA, NA, NA, NA, NA, NA, NA, qdss_tracedata_b),
0956     PINGROUP(35, NA, NA, NA, NA, NA, NA, NA, NA, qdss_tracedata_b),
0957     PINGROUP(36, NA, NA, NA, NA, NA, NA, qdss_tracedata_b, NA, NA),
0958     PINGROUP(37, NA, NA, NA, qdss_tracedata_b, NA, NA, NA, NA, NA),
0959     PINGROUP(38, NA, NA, NA, NA, NA, NA, NA, qdss_tracedata_b, NA),
0960     PINGROUP(39, wcss_bt, sdc3, NA, qdss_tracedata_a, NA, NA, NA, NA, NA),
0961     PINGROUP(40, wcss_wlan, sdc3, NA, qdss_tracedata_a, NA, NA, NA, NA, NA),
0962     PINGROUP(41, wcss_wlan, sdc3, NA, qdss_tracedata_a, NA, NA, NA, NA, NA),
0963     PINGROUP(42, wcss_wlan, sdc3, NA, qdss_tracedata_a, NA, NA, NA, NA, NA),
0964     PINGROUP(43, wcss_wlan, sdc3, NA, NA, qdss_tracedata_a, NA, NA, NA, NA),
0965     PINGROUP(44, wcss_wlan, sdc3, NA, NA, NA, NA, NA, NA, NA),
0966     PINGROUP(45, wcss_fm, NA, qdss_tracectl_a, NA, NA, NA, NA, NA, NA),
0967     PINGROUP(46, wcss_fm, NA, NA, qdss_traceclk_a, NA, NA, NA, NA, NA),
0968     PINGROUP(47, wcss_bt, NA, qdss_tracedata_a, NA, NA, NA, NA, NA, NA),
0969     PINGROUP(48, wcss_bt, NA, qdss_tracedata_a, NA, NA, NA, NA, NA, NA),
0970     PINGROUP(49, NA, NA, gcc_gp1_clk_a, NA, NA, NA, NA, NA, NA),
0971     PINGROUP(50, NA, sd_write, gcc_gp2_clk_a, NA, NA, NA, NA, NA, NA),
0972     PINGROUP(51, uim2_data, gcc_gp3_clk_a, NA, NA, NA, NA, NA, NA, NA),
0973     PINGROUP(52, uim2_clk, NA, NA, NA, NA, NA, NA, NA, NA),
0974     PINGROUP(53, uim2_reset, NA, NA, NA, NA, NA, NA, NA, NA),
0975     PINGROUP(54, uim2_present, NA, NA, NA, NA, NA, NA, NA, NA),
0976     PINGROUP(55, uim1_data, NA, NA, NA, NA, NA, NA, NA, NA),
0977     PINGROUP(56, uim1_clk, NA, NA, NA, NA, NA, NA, NA, NA),
0978     PINGROUP(57, uim1_reset, NA, NA, NA, NA, NA, NA, NA, NA),
0979     PINGROUP(58, uim1_present, NA, NA, NA, NA, NA, NA, NA, NA),
0980     PINGROUP(59, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0981     PINGROUP(60, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0982     PINGROUP(61, uim_batt, NA, NA, NA, NA, NA, NA, NA, NA),
0983     PINGROUP(62, sec_mi2s_mclk_a, pri_mi2s_mclk_b, qdss_tracedata_a, NA, NA, NA, NA, NA, NA),
0984     PINGROUP(63, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0985     PINGROUP(64, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0986     PINGROUP(65, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0987     PINGROUP(66, dmic0_clk, NA, NA, NA, NA, NA, NA, NA, NA),
0988     PINGROUP(67, dmic0_data, NA, NA, NA, NA, NA, NA, NA, NA),
0989     PINGROUP(68, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0990     PINGROUP(69, qdss_tracedata_a, NA, NA, NA, NA, NA, NA, NA, NA),
0991     PINGROUP(70, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0992     PINGROUP(71, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0993     PINGROUP(72, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0994     PINGROUP(73, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0995     PINGROUP(74, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0996     PINGROUP(75, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0997     PINGROUP(76, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0998     PINGROUP(77, NA, NA, NA, NA, NA, NA, NA, NA, NA),
0999     PINGROUP(78, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1000     PINGROUP(79, NA, ssbi_wtr1, NA, NA, NA, NA, NA, NA, NA),
1001     PINGROUP(80, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1002     PINGROUP(81, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1003     PINGROUP(82, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1004     PINGROUP(83, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1005     PINGROUP(84, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1006     PINGROUP(85, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1007     PINGROUP(86, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1008     PINGROUP(87, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1009     PINGROUP(88, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1010     PINGROUP(89, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1011     PINGROUP(90, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1012     PINGROUP(91, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1013     PINGROUP(92, NA, NA, pa_indicator, NA, NA, NA, NA, NA, NA),
1014     PINGROUP(93, NA, modem_tsync, NA, NA, NA, NA, NA, NA, NA),
1015     PINGROUP(94, NA, ssbi_wtr1, NA, NA, NA, NA, NA, NA, NA),
1016     PINGROUP(95, NA, gsm1_tx, NA, NA, NA, NA, NA, NA, NA),
1017     PINGROUP(96, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1018     PINGROUP(97, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1019     PINGROUP(98, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1020     PINGROUP(99, gsm0_tx, NA, NA, NA, NA, NA, NA, NA, NA),
1021     PINGROUP(100, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1022     PINGROUP(101, blsp1_spi, NA, NA, NA, NA, NA, NA, NA, NA),
1023     PINGROUP(102, sec_mi2s, NA, NA, NA, NA, NA, NA, NA, NA),
1024     PINGROUP(103, cci1_i2c, NA, NA, NA, NA, NA, NA, NA, NA),
1025     PINGROUP(104, cci1_i2c, NA, NA, NA, NA, NA, NA, NA, NA),
1026     PINGROUP(105, sec_mi2s, gcc_gp1_clk_b, NA, NA, NA, NA, NA, NA, NA),
1027     PINGROUP(106, blsp3_spi, NA, NA, NA, NA, NA, NA, NA, NA),
1028     PINGROUP(107, blsp3_spi, NA, NA, NA, NA, NA, NA, NA, NA),
1029     PINGROUP(108, wsa_vi, NA, NA, NA, NA, NA, NA, NA, NA),
1030     PINGROUP(109, wsa_vi, NA, NA, NA, NA, NA, NA, NA, NA),
1031     PINGROUP(110, NA, NA, NA, NA,  NA, NA, NA, NA, NA),
1032     PINGROUP(111, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1033     PINGROUP(112, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1034     PINGROUP(113, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1035     PINGROUP(114, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1036     PINGROUP(115, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1037     PINGROUP(116, pri_mi2s_mclk_c, cdc_pdm0, NA, NA, NA, qdss_tracedata_b, NA, NA, NA),
1038     PINGROUP(117, lpass_slimbus, cdc_pdm0, NA, NA, NA, NA, NA, NA, NA),
1039     PINGROUP(118, lpass_slimbus0, cdc_pdm0, NA, NA, NA, NA, NA, NA, NA),
1040     PINGROUP(119, lpass_slimbus1, cdc_pdm0, NA, NA, NA, NA, NA, NA, NA),
1041     PINGROUP(120, cdc_pdm0, NA, NA, NA, NA, NA, NA, qdss_tracedata_a, NA),
1042     PINGROUP(121, cdc_pdm0, NA, NA, NA, NA, NA, NA, qdss_tracedata_a, NA),
1043     PINGROUP(122, pri_mi2s, NA, NA, NA, NA, NA, NA, NA, NA),
1044     PINGROUP(123, pri_mi2s, m_voc, NA, NA, NA, NA, NA, NA, NA),
1045     PINGROUP(124, pri_mi2s, m_voc, NA, NA, NA, NA, NA, NA, NA),
1046     PINGROUP(125, pri_mi2s, NA, NA, NA, NA, NA, NA, NA, NA),
1047     PINGROUP(126, pri_mi2s_mclk_a, sec_mi2s_mclk_b, NA, NA, NA, NA, NA, NA, qdss_tracedata_b),
1048     PINGROUP(127, pri_mi2s, NA, NA, NA, NA, NA, NA, NA, NA),
1049     PINGROUP(128, NA, NA, NA, NA, NA, NA, qdss_tracedata_b, NA, NA),
1050     PINGROUP(129, qdss_tracedata_b, NA, NA, NA, NA, NA, NA, NA, NA),
1051     PINGROUP(130, qdss_tracedata_a, NA, NA, NA, NA, NA, NA, NA, NA),
1052     PINGROUP(131, qdss_tracedata_a, NA, NA, NA, NA, NA, NA, NA, NA),
1053     PINGROUP(132, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1054     PINGROUP(133, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1055     PINGROUP(134, blsp_spi5, blsp_uart5, sec_mi2s, NA, NA, NA, NA, NA, NA),
1056     PINGROUP(135, blsp_spi5, blsp_uart5, sec_mi2s, NA, NA, NA, NA, NA, NA),
1057     PINGROUP(136, blsp_spi5, blsp_uart5, blsp_i2c5, NA, NA, NA, NA, NA, NA),
1058     PINGROUP(137, blsp_spi5, blsp_uart5, blsp_i2c5, NA, NA, NA, NA, NA, NA),
1059     PINGROUP(138, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1060     PINGROUP(139, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1061     PINGROUP(140, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1062     PINGROUP(141, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1063     PINGROUP(142, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1064     PINGROUP(143, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1065     PINGROUP(144, NA, NA, NA, NA, NA, NA, NA, NA, NA),
1066     SDC_QDSD_PINGROUP(sdc1_clk, 0x10a000, 13, 6),
1067     SDC_QDSD_PINGROUP(sdc1_cmd, 0x10a000, 11, 3),
1068     SDC_QDSD_PINGROUP(sdc1_data, 0x10a000, 9, 0),
1069     SDC_QDSD_PINGROUP(sdc1_rclk, 0x10a000, 15, 0),
1070     SDC_QDSD_PINGROUP(sdc2_clk, 0x109000, 14, 6),
1071     SDC_QDSD_PINGROUP(sdc2_cmd, 0x109000, 11, 3),
1072     SDC_QDSD_PINGROUP(sdc2_data, 0x109000, 9, 0),
1073     SDC_QDSD_PINGROUP(qdsd_clk, 0x19c000, 3, 0),
1074     SDC_QDSD_PINGROUP(qdsd_cmd, 0x19c000, 8, 5),
1075     SDC_QDSD_PINGROUP(qdsd_data0, 0x19c000, 13, 10),
1076     SDC_QDSD_PINGROUP(qdsd_data1, 0x19c000, 18, 15),
1077     SDC_QDSD_PINGROUP(qdsd_data2, 0x19c000, 23, 20),
1078     SDC_QDSD_PINGROUP(qdsd_data3, 0x19c000, 28, 25),
1079 };
1080 
1081 static const struct msm_pinctrl_soc_data msm8976_pinctrl = {
1082     .pins = msm8976_pins,
1083     .npins = ARRAY_SIZE(msm8976_pins),
1084     .functions = msm8976_functions,
1085     .nfunctions = ARRAY_SIZE(msm8976_functions),
1086     .groups = msm8976_groups,
1087     .ngroups = ARRAY_SIZE(msm8976_groups),
1088     .ngpios = 145,
1089 };
1090 
1091 static int msm8976_pinctrl_probe(struct platform_device *pdev)
1092 {
1093     return msm_pinctrl_probe(pdev, &msm8976_pinctrl);
1094 }
1095 
1096 static const struct of_device_id msm8976_pinctrl_of_match[] = {
1097     { .compatible = "qcom,msm8976-pinctrl", },
1098     { },
1099 };
1100 
1101 static struct platform_driver msm8976_pinctrl_driver = {
1102     .driver = {
1103         .name = "msm8976-pinctrl",
1104         .of_match_table = msm8976_pinctrl_of_match,
1105     },
1106     .probe = msm8976_pinctrl_probe,
1107     .remove = msm_pinctrl_remove,
1108 };
1109 
1110 static int __init msm8976_pinctrl_init(void)
1111 {
1112     return platform_driver_register(&msm8976_pinctrl_driver);
1113 }
1114 arch_initcall(msm8976_pinctrl_init);
1115 
1116 static void __exit msm8976_pinctrl_exit(void)
1117 {
1118     platform_driver_unregister(&msm8976_pinctrl_driver);
1119 }
1120 module_exit(msm8976_pinctrl_exit);
1121 
1122 MODULE_DESCRIPTION("Qualcomm msm8976 pinctrl driver");
1123 MODULE_LICENSE("GPL v2");
1124 MODULE_DEVICE_TABLE(of, msm8976_pinctrl_of_match);