0001
0002
0003
0004
0005
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, \
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);