Merge tag 'for-linus-5.17-ofs-1' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-microblaze.git] / drivers / pinctrl / qcom / pinctrl-msm8976.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (c) 2015-2016, The Linux Foundation. All rights reserved.
4  *
5  * Copyright (c) 2016, AngeloGioacchino Del Regno <kholk11@gmail.com>
6  */
7
8 #include <linux/module.h>
9 #include <linux/of.h>
10 #include <linux/platform_device.h>
11 #include <linux/pinctrl/pinctrl.h>
12
13 #include "pinctrl-msm.h"
14
15 #define FUNCTION(fname)                                 \
16         [msm_mux_##fname] = {                           \
17                 .name = #fname,                         \
18                 .groups = fname##_groups,               \
19                 .ngroups = ARRAY_SIZE(fname##_groups),  \
20         }
21
22 #define REG_BASE 0x0
23 #define REG_SIZE 0x1000
24 #define PINGROUP(id, f1, f2, f3, f4, f5, f6, f7, f8, f9)        \
25         {                                               \
26                 .name = "gpio" #id,                     \
27                 .pins = gpio##id##_pins,                \
28                 .npins = ARRAY_SIZE(gpio##id##_pins),   \
29                 .funcs = (int[]){                       \
30                         msm_mux_gpio, /* gpio mode */   \
31                         msm_mux_##f1,                   \
32                         msm_mux_##f2,                   \
33                         msm_mux_##f3,                   \
34                         msm_mux_##f4,                   \
35                         msm_mux_##f5,                   \
36                         msm_mux_##f6,                   \
37                         msm_mux_##f7,                   \
38                         msm_mux_##f8,                   \
39                         msm_mux_##f9                    \
40                 },                                      \
41                 .nfuncs = 10,                           \
42                 .ctl_reg = REG_BASE + REG_SIZE * id,                    \
43                 .io_reg = REG_BASE + 0x4 + REG_SIZE * id,               \
44                 .intr_cfg_reg = REG_BASE + 0x8 + REG_SIZE * id,         \
45                 .intr_status_reg = REG_BASE + 0xc + REG_SIZE * id,      \
46                 .intr_target_reg = REG_BASE + 0x8 + REG_SIZE * id,      \
47                 .mux_bit = 2,                   \
48                 .pull_bit = 0,                  \
49                 .drv_bit = 6,                   \
50                 .oe_bit = 9,                    \
51                 .in_bit = 0,                    \
52                 .out_bit = 1,                   \
53                 .intr_enable_bit = 0,           \
54                 .intr_status_bit = 0,           \
55                 .intr_target_bit = 5,           \
56                 .intr_target_kpss_val = 4,      \
57                 .intr_raw_status_bit = 4,       \
58                 .intr_polarity_bit = 1,         \
59                 .intr_detection_bit = 2,        \
60                 .intr_detection_width = 2,      \
61         }
62
63 #define SDC_QDSD_PINGROUP(pg_name, ctl, pull, drv)      \
64         {                                               \
65                 .name = #pg_name,                       \
66                 .pins = pg_name##_pins,                 \
67                 .npins = ARRAY_SIZE(pg_name##_pins),    \
68                 .ctl_reg = ctl,                         \
69                 .io_reg = 0,                            \
70                 .intr_cfg_reg = 0,                      \
71                 .intr_status_reg = 0,                   \
72                 .intr_target_reg = 0,                   \
73                 .mux_bit = -1,                          \
74                 .pull_bit = pull,                       \
75                 .drv_bit = drv,                         \
76                 .oe_bit = -1,                           \
77                 .in_bit = -1,                           \
78                 .out_bit = -1,                          \
79                 .intr_enable_bit = -1,                  \
80                 .intr_status_bit = -1,                  \
81                 .intr_target_bit = -1,                  \
82                 .intr_raw_status_bit = -1,              \
83                 .intr_polarity_bit = -1,                \
84                 .intr_detection_bit = -1,               \
85                 .intr_detection_width = -1,             \
86         }
87 static const struct pinctrl_pin_desc msm8976_pins[] = {
88         PINCTRL_PIN(0, "GPIO_0"),
89         PINCTRL_PIN(1, "GPIO_1"),
90         PINCTRL_PIN(2, "GPIO_2"),
91         PINCTRL_PIN(3, "GPIO_3"),
92         PINCTRL_PIN(4, "GPIO_4"),
93         PINCTRL_PIN(5, "GPIO_5"),
94         PINCTRL_PIN(6, "GPIO_6"),
95         PINCTRL_PIN(7, "GPIO_7"),
96         PINCTRL_PIN(8, "GPIO_8"),
97         PINCTRL_PIN(9, "GPIO_9"),
98         PINCTRL_PIN(10, "GPIO_10"),
99         PINCTRL_PIN(11, "GPIO_11"),
100         PINCTRL_PIN(12, "GPIO_12"),
101         PINCTRL_PIN(13, "GPIO_13"),
102         PINCTRL_PIN(14, "GPIO_14"),
103         PINCTRL_PIN(15, "GPIO_15"),
104         PINCTRL_PIN(16, "GPIO_16"),
105         PINCTRL_PIN(17, "GPIO_17"),
106         PINCTRL_PIN(18, "GPIO_18"),
107         PINCTRL_PIN(19, "GPIO_19"),
108         PINCTRL_PIN(20, "GPIO_20"),
109         PINCTRL_PIN(21, "GPIO_21"),
110         PINCTRL_PIN(22, "GPIO_22"),
111         PINCTRL_PIN(23, "GPIO_23"),
112         PINCTRL_PIN(24, "GPIO_24"),
113         PINCTRL_PIN(25, "GPIO_25"),
114         PINCTRL_PIN(26, "GPIO_26"),
115         PINCTRL_PIN(27, "GPIO_27"),
116         PINCTRL_PIN(28, "GPIO_28"),
117         PINCTRL_PIN(29, "GPIO_29"),
118         PINCTRL_PIN(30, "GPIO_30"),
119         PINCTRL_PIN(31, "GPIO_31"),
120         PINCTRL_PIN(32, "GPIO_32"),
121         PINCTRL_PIN(33, "GPIO_33"),
122         PINCTRL_PIN(34, "GPIO_34"),
123         PINCTRL_PIN(35, "GPIO_35"),
124         PINCTRL_PIN(36, "GPIO_36"),
125         PINCTRL_PIN(37, "GPIO_37"),
126         PINCTRL_PIN(38, "GPIO_38"),
127         PINCTRL_PIN(39, "GPIO_39"),
128         PINCTRL_PIN(40, "GPIO_40"),
129         PINCTRL_PIN(41, "GPIO_41"),
130         PINCTRL_PIN(42, "GPIO_42"),
131         PINCTRL_PIN(43, "GPIO_43"),
132         PINCTRL_PIN(44, "GPIO_44"),
133         PINCTRL_PIN(45, "GPIO_45"),
134         PINCTRL_PIN(46, "GPIO_46"),
135         PINCTRL_PIN(47, "GPIO_47"),
136         PINCTRL_PIN(48, "GPIO_48"),
137         PINCTRL_PIN(49, "GPIO_49"),
138         PINCTRL_PIN(50, "GPIO_50"),
139         PINCTRL_PIN(51, "GPIO_51"),
140         PINCTRL_PIN(52, "GPIO_52"),
141         PINCTRL_PIN(53, "GPIO_53"),
142         PINCTRL_PIN(54, "GPIO_54"),
143         PINCTRL_PIN(55, "GPIO_55"),
144         PINCTRL_PIN(56, "GPIO_56"),
145         PINCTRL_PIN(57, "GPIO_57"),
146         PINCTRL_PIN(58, "GPIO_58"),
147         PINCTRL_PIN(59, "GPIO_59"),
148         PINCTRL_PIN(60, "GPIO_60"),
149         PINCTRL_PIN(61, "GPIO_61"),
150         PINCTRL_PIN(62, "GPIO_62"),
151         PINCTRL_PIN(63, "GPIO_63"),
152         PINCTRL_PIN(64, "GPIO_64"),
153         PINCTRL_PIN(65, "GPIO_65"),
154         PINCTRL_PIN(66, "GPIO_66"),
155         PINCTRL_PIN(67, "GPIO_67"),
156         PINCTRL_PIN(68, "GPIO_68"),
157         PINCTRL_PIN(69, "GPIO_69"),
158         PINCTRL_PIN(70, "GPIO_70"),
159         PINCTRL_PIN(71, "GPIO_71"),
160         PINCTRL_PIN(72, "GPIO_72"),
161         PINCTRL_PIN(73, "GPIO_73"),
162         PINCTRL_PIN(74, "GPIO_74"),
163         PINCTRL_PIN(75, "GPIO_75"),
164         PINCTRL_PIN(76, "GPIO_76"),
165         PINCTRL_PIN(77, "GPIO_77"),
166         PINCTRL_PIN(78, "GPIO_78"),
167         PINCTRL_PIN(79, "GPIO_79"),
168         PINCTRL_PIN(80, "GPIO_80"),
169         PINCTRL_PIN(81, "GPIO_81"),
170         PINCTRL_PIN(82, "GPIO_82"),
171         PINCTRL_PIN(83, "GPIO_83"),
172         PINCTRL_PIN(84, "GPIO_84"),
173         PINCTRL_PIN(85, "GPIO_85"),
174         PINCTRL_PIN(86, "GPIO_86"),
175         PINCTRL_PIN(87, "GPIO_87"),
176         PINCTRL_PIN(88, "GPIO_88"),
177         PINCTRL_PIN(89, "GPIO_89"),
178         PINCTRL_PIN(90, "GPIO_90"),
179         PINCTRL_PIN(91, "GPIO_91"),
180         PINCTRL_PIN(92, "GPIO_92"),
181         PINCTRL_PIN(93, "GPIO_93"),
182         PINCTRL_PIN(94, "GPIO_94"),
183         PINCTRL_PIN(95, "GPIO_95"),
184         PINCTRL_PIN(96, "GPIO_96"),
185         PINCTRL_PIN(97, "GPIO_97"),
186         PINCTRL_PIN(98, "GPIO_98"),
187         PINCTRL_PIN(99, "GPIO_99"),
188         PINCTRL_PIN(100, "GPIO_100"),
189         PINCTRL_PIN(101, "GPIO_101"),
190         PINCTRL_PIN(102, "GPIO_102"),
191         PINCTRL_PIN(103, "GPIO_103"),
192         PINCTRL_PIN(104, "GPIO_104"),
193         PINCTRL_PIN(105, "GPIO_105"),
194         PINCTRL_PIN(106, "GPIO_106"),
195         PINCTRL_PIN(107, "GPIO_107"),
196         PINCTRL_PIN(108, "GPIO_108"),
197         PINCTRL_PIN(109, "GPIO_109"),
198         PINCTRL_PIN(110, "GPIO_110"),
199         PINCTRL_PIN(111, "GPIO_111"),
200         PINCTRL_PIN(112, "GPIO_112"),
201         PINCTRL_PIN(113, "GPIO_113"),
202         PINCTRL_PIN(114, "GPIO_114"),
203         PINCTRL_PIN(115, "GPIO_115"),
204         PINCTRL_PIN(116, "GPIO_116"),
205         PINCTRL_PIN(117, "GPIO_117"),
206         PINCTRL_PIN(118, "GPIO_118"),
207         PINCTRL_PIN(119, "GPIO_119"),
208         PINCTRL_PIN(120, "GPIO_120"),
209         PINCTRL_PIN(121, "GPIO_121"),
210         PINCTRL_PIN(122, "GPIO_122"),
211         PINCTRL_PIN(123, "GPIO_123"),
212         PINCTRL_PIN(124, "GPIO_124"),
213         PINCTRL_PIN(125, "GPIO_125"),
214         PINCTRL_PIN(126, "GPIO_126"),
215         PINCTRL_PIN(127, "GPIO_127"),
216         PINCTRL_PIN(128, "GPIO_128"),
217         PINCTRL_PIN(129, "GPIO_129"),
218         PINCTRL_PIN(130, "GPIO_130"),
219         PINCTRL_PIN(131, "GPIO_131"),
220         PINCTRL_PIN(132, "GPIO_132"),
221         PINCTRL_PIN(133, "GPIO_133"),
222         PINCTRL_PIN(134, "GPIO_134"),
223         PINCTRL_PIN(135, "GPIO_135"),
224         PINCTRL_PIN(136, "GPIO_136"),
225         PINCTRL_PIN(137, "GPIO_137"),
226         PINCTRL_PIN(138, "GPIO_138"),
227         PINCTRL_PIN(139, "GPIO_139"),
228         PINCTRL_PIN(140, "GPIO_140"),
229         PINCTRL_PIN(141, "GPIO_141"),
230         PINCTRL_PIN(142, "GPIO_142"),
231         PINCTRL_PIN(143, "GPIO_143"),
232         PINCTRL_PIN(144, "GPIO_144"),
233         PINCTRL_PIN(145, "SDC1_CLK"),
234         PINCTRL_PIN(146, "SDC1_CMD"),
235         PINCTRL_PIN(147, "SDC1_DATA"),
236         PINCTRL_PIN(148, "SDC1_RCLK"),
237         PINCTRL_PIN(149, "SDC2_CLK"),
238         PINCTRL_PIN(150, "SDC2_CMD"),
239         PINCTRL_PIN(151, "SDC2_DATA"),
240         PINCTRL_PIN(152, "QDSD_CLK"),
241         PINCTRL_PIN(153, "QDSD_CMD"),
242         PINCTRL_PIN(154, "QDSD_DATA0"),
243         PINCTRL_PIN(155, "QDSD_DATA1"),
244         PINCTRL_PIN(156, "QDSD_DATA2"),
245         PINCTRL_PIN(157, "QDSD_DATA3"),
246 };
247
248 #define DECLARE_MSM_GPIO_PINS(pin) \
249         static const unsigned int gpio##pin##_pins[] = { pin }
250 DECLARE_MSM_GPIO_PINS(0);
251 DECLARE_MSM_GPIO_PINS(1);
252 DECLARE_MSM_GPIO_PINS(2);
253 DECLARE_MSM_GPIO_PINS(3);
254 DECLARE_MSM_GPIO_PINS(4);
255 DECLARE_MSM_GPIO_PINS(5);
256 DECLARE_MSM_GPIO_PINS(6);
257 DECLARE_MSM_GPIO_PINS(7);
258 DECLARE_MSM_GPIO_PINS(8);
259 DECLARE_MSM_GPIO_PINS(9);
260 DECLARE_MSM_GPIO_PINS(10);
261 DECLARE_MSM_GPIO_PINS(11);
262 DECLARE_MSM_GPIO_PINS(12);
263 DECLARE_MSM_GPIO_PINS(13);
264 DECLARE_MSM_GPIO_PINS(14);
265 DECLARE_MSM_GPIO_PINS(15);
266 DECLARE_MSM_GPIO_PINS(16);
267 DECLARE_MSM_GPIO_PINS(17);
268 DECLARE_MSM_GPIO_PINS(18);
269 DECLARE_MSM_GPIO_PINS(19);
270 DECLARE_MSM_GPIO_PINS(20);
271 DECLARE_MSM_GPIO_PINS(21);
272 DECLARE_MSM_GPIO_PINS(22);
273 DECLARE_MSM_GPIO_PINS(23);
274 DECLARE_MSM_GPIO_PINS(24);
275 DECLARE_MSM_GPIO_PINS(25);
276 DECLARE_MSM_GPIO_PINS(26);
277 DECLARE_MSM_GPIO_PINS(27);
278 DECLARE_MSM_GPIO_PINS(28);
279 DECLARE_MSM_GPIO_PINS(29);
280 DECLARE_MSM_GPIO_PINS(30);
281 DECLARE_MSM_GPIO_PINS(31);
282 DECLARE_MSM_GPIO_PINS(32);
283 DECLARE_MSM_GPIO_PINS(33);
284 DECLARE_MSM_GPIO_PINS(34);
285 DECLARE_MSM_GPIO_PINS(35);
286 DECLARE_MSM_GPIO_PINS(36);
287 DECLARE_MSM_GPIO_PINS(37);
288 DECLARE_MSM_GPIO_PINS(38);
289 DECLARE_MSM_GPIO_PINS(39);
290 DECLARE_MSM_GPIO_PINS(40);
291 DECLARE_MSM_GPIO_PINS(41);
292 DECLARE_MSM_GPIO_PINS(42);
293 DECLARE_MSM_GPIO_PINS(43);
294 DECLARE_MSM_GPIO_PINS(44);
295 DECLARE_MSM_GPIO_PINS(45);
296 DECLARE_MSM_GPIO_PINS(46);
297 DECLARE_MSM_GPIO_PINS(47);
298 DECLARE_MSM_GPIO_PINS(48);
299 DECLARE_MSM_GPIO_PINS(49);
300 DECLARE_MSM_GPIO_PINS(50);
301 DECLARE_MSM_GPIO_PINS(51);
302 DECLARE_MSM_GPIO_PINS(52);
303 DECLARE_MSM_GPIO_PINS(53);
304 DECLARE_MSM_GPIO_PINS(54);
305 DECLARE_MSM_GPIO_PINS(55);
306 DECLARE_MSM_GPIO_PINS(56);
307 DECLARE_MSM_GPIO_PINS(57);
308 DECLARE_MSM_GPIO_PINS(58);
309 DECLARE_MSM_GPIO_PINS(59);
310 DECLARE_MSM_GPIO_PINS(60);
311 DECLARE_MSM_GPIO_PINS(61);
312 DECLARE_MSM_GPIO_PINS(62);
313 DECLARE_MSM_GPIO_PINS(63);
314 DECLARE_MSM_GPIO_PINS(64);
315 DECLARE_MSM_GPIO_PINS(65);
316 DECLARE_MSM_GPIO_PINS(66);
317 DECLARE_MSM_GPIO_PINS(67);
318 DECLARE_MSM_GPIO_PINS(68);
319 DECLARE_MSM_GPIO_PINS(69);
320 DECLARE_MSM_GPIO_PINS(70);
321 DECLARE_MSM_GPIO_PINS(71);
322 DECLARE_MSM_GPIO_PINS(72);
323 DECLARE_MSM_GPIO_PINS(73);
324 DECLARE_MSM_GPIO_PINS(74);
325 DECLARE_MSM_GPIO_PINS(75);
326 DECLARE_MSM_GPIO_PINS(76);
327 DECLARE_MSM_GPIO_PINS(77);
328 DECLARE_MSM_GPIO_PINS(78);
329 DECLARE_MSM_GPIO_PINS(79);
330 DECLARE_MSM_GPIO_PINS(80);
331 DECLARE_MSM_GPIO_PINS(81);
332 DECLARE_MSM_GPIO_PINS(82);
333 DECLARE_MSM_GPIO_PINS(83);
334 DECLARE_MSM_GPIO_PINS(84);
335 DECLARE_MSM_GPIO_PINS(85);
336 DECLARE_MSM_GPIO_PINS(86);
337 DECLARE_MSM_GPIO_PINS(87);
338 DECLARE_MSM_GPIO_PINS(88);
339 DECLARE_MSM_GPIO_PINS(89);
340 DECLARE_MSM_GPIO_PINS(90);
341 DECLARE_MSM_GPIO_PINS(91);
342 DECLARE_MSM_GPIO_PINS(92);
343 DECLARE_MSM_GPIO_PINS(93);
344 DECLARE_MSM_GPIO_PINS(94);
345 DECLARE_MSM_GPIO_PINS(95);
346 DECLARE_MSM_GPIO_PINS(96);
347 DECLARE_MSM_GPIO_PINS(97);
348 DECLARE_MSM_GPIO_PINS(98);
349 DECLARE_MSM_GPIO_PINS(99);
350 DECLARE_MSM_GPIO_PINS(100);
351 DECLARE_MSM_GPIO_PINS(101);
352 DECLARE_MSM_GPIO_PINS(102);
353 DECLARE_MSM_GPIO_PINS(103);
354 DECLARE_MSM_GPIO_PINS(104);
355 DECLARE_MSM_GPIO_PINS(105);
356 DECLARE_MSM_GPIO_PINS(106);
357 DECLARE_MSM_GPIO_PINS(107);
358 DECLARE_MSM_GPIO_PINS(108);
359 DECLARE_MSM_GPIO_PINS(109);
360 DECLARE_MSM_GPIO_PINS(110);
361 DECLARE_MSM_GPIO_PINS(111);
362 DECLARE_MSM_GPIO_PINS(112);
363 DECLARE_MSM_GPIO_PINS(113);
364 DECLARE_MSM_GPIO_PINS(114);
365 DECLARE_MSM_GPIO_PINS(115);
366 DECLARE_MSM_GPIO_PINS(116);
367 DECLARE_MSM_GPIO_PINS(117);
368 DECLARE_MSM_GPIO_PINS(118);
369 DECLARE_MSM_GPIO_PINS(119);
370 DECLARE_MSM_GPIO_PINS(120);
371 DECLARE_MSM_GPIO_PINS(121);
372 DECLARE_MSM_GPIO_PINS(122);
373 DECLARE_MSM_GPIO_PINS(123);
374 DECLARE_MSM_GPIO_PINS(124);
375 DECLARE_MSM_GPIO_PINS(125);
376 DECLARE_MSM_GPIO_PINS(126);
377 DECLARE_MSM_GPIO_PINS(127);
378 DECLARE_MSM_GPIO_PINS(128);
379 DECLARE_MSM_GPIO_PINS(129);
380 DECLARE_MSM_GPIO_PINS(130);
381 DECLARE_MSM_GPIO_PINS(131);
382 DECLARE_MSM_GPIO_PINS(132);
383 DECLARE_MSM_GPIO_PINS(133);
384 DECLARE_MSM_GPIO_PINS(134);
385 DECLARE_MSM_GPIO_PINS(135);
386 DECLARE_MSM_GPIO_PINS(136);
387 DECLARE_MSM_GPIO_PINS(137);
388 DECLARE_MSM_GPIO_PINS(138);
389 DECLARE_MSM_GPIO_PINS(139);
390 DECLARE_MSM_GPIO_PINS(140);
391 DECLARE_MSM_GPIO_PINS(141);
392 DECLARE_MSM_GPIO_PINS(142);
393 DECLARE_MSM_GPIO_PINS(143);
394 DECLARE_MSM_GPIO_PINS(144);
395
396 static const unsigned int sdc1_clk_pins[] = { 145 };
397 static const unsigned int sdc1_cmd_pins[] = { 146 };
398 static const unsigned int sdc1_data_pins[] = { 147 };
399 static const unsigned int sdc1_rclk_pins[] = { 148 };
400 static const unsigned int sdc2_clk_pins[] = { 149 };
401 static const unsigned int sdc2_cmd_pins[] = { 150 };
402 static const unsigned int sdc2_data_pins[] = { 151 };
403 static const unsigned int qdsd_clk_pins[] = { 152 };
404 static const unsigned int qdsd_cmd_pins[] = { 153 };
405 static const unsigned int qdsd_data0_pins[] = { 154 };
406 static const unsigned int qdsd_data1_pins[] = { 155 };
407 static const unsigned int qdsd_data2_pins[] = { 156 };
408 static const unsigned int qdsd_data3_pins[] = { 157 };
409
410 enum msm8976_functions {
411         msm_mux_gpio,
412         msm_mux_blsp_uart1,
413         msm_mux_blsp_spi1,
414         msm_mux_smb_int,
415         msm_mux_blsp_i2c1,
416         msm_mux_blsp_spi2,
417         msm_mux_blsp_uart2,
418         msm_mux_blsp_i2c2,
419         msm_mux_gcc_gp1_clk_b,
420         msm_mux_blsp_spi3,
421         msm_mux_qdss_tracedata_b,
422         msm_mux_blsp_i2c3,
423         msm_mux_gcc_gp2_clk_b,
424         msm_mux_gcc_gp3_clk_b,
425         msm_mux_blsp_spi4,
426         msm_mux_cap_int,
427         msm_mux_blsp_i2c4,
428         msm_mux_blsp_spi5,
429         msm_mux_blsp_uart5,
430         msm_mux_qdss_traceclk_a,
431         msm_mux_m_voc,
432         msm_mux_blsp_i2c5,
433         msm_mux_qdss_tracectl_a,
434         msm_mux_qdss_tracedata_a,
435         msm_mux_blsp_spi6,
436         msm_mux_blsp_uart6,
437         msm_mux_qdss_tracectl_b,
438         msm_mux_blsp_i2c6,
439         msm_mux_qdss_traceclk_b,
440         msm_mux_mdp_vsync,
441         msm_mux_pri_mi2s_mclk_a,
442         msm_mux_sec_mi2s_mclk_a,
443         msm_mux_cam_mclk,
444         msm_mux_cci0_i2c,
445         msm_mux_cci1_i2c,
446         msm_mux_blsp1_spi,
447         msm_mux_blsp3_spi,
448         msm_mux_gcc_gp1_clk_a,
449         msm_mux_gcc_gp2_clk_a,
450         msm_mux_gcc_gp3_clk_a,
451         msm_mux_uim_batt,
452         msm_mux_sd_write,
453         msm_mux_uim1_data,
454         msm_mux_uim1_clk,
455         msm_mux_uim1_reset,
456         msm_mux_uim1_present,
457         msm_mux_uim2_data,
458         msm_mux_uim2_clk,
459         msm_mux_uim2_reset,
460         msm_mux_uim2_present,
461         msm_mux_ts_xvdd,
462         msm_mux_mipi_dsi0,
463         msm_mux_us_euro,
464         msm_mux_ts_resout,
465         msm_mux_ts_sample,
466         msm_mux_sec_mi2s_mclk_b,
467         msm_mux_pri_mi2s,
468         msm_mux_codec_reset,
469         msm_mux_cdc_pdm0,
470         msm_mux_us_emitter,
471         msm_mux_pri_mi2s_mclk_b,
472         msm_mux_pri_mi2s_mclk_c,
473         msm_mux_lpass_slimbus,
474         msm_mux_lpass_slimbus0,
475         msm_mux_lpass_slimbus1,
476         msm_mux_codec_int1,
477         msm_mux_codec_int2,
478         msm_mux_wcss_bt,
479         msm_mux_sdc3,
480         msm_mux_wcss_wlan2,
481         msm_mux_wcss_wlan1,
482         msm_mux_wcss_wlan0,
483         msm_mux_wcss_wlan,
484         msm_mux_wcss_fm,
485         msm_mux_key_volp,
486         msm_mux_key_snapshot,
487         msm_mux_key_focus,
488         msm_mux_key_home,
489         msm_mux_pwr_down,
490         msm_mux_dmic0_clk,
491         msm_mux_hdmi_int,
492         msm_mux_dmic0_data,
493         msm_mux_wsa_vi,
494         msm_mux_wsa_en,
495         msm_mux_blsp_spi8,
496         msm_mux_wsa_irq,
497         msm_mux_blsp_i2c8,
498         msm_mux_pa_indicator,
499         msm_mux_modem_tsync,
500         msm_mux_ssbi_wtr1,
501         msm_mux_gsm1_tx,
502         msm_mux_gsm0_tx,
503         msm_mux_sdcard_det,
504         msm_mux_sec_mi2s,
505         msm_mux_ss_switch,
506         msm_mux_NA,
507 };
508
509 static const char * const gpio_groups[] = {
510         "gpio0", "gpio1", "gpio2", "gpio3", "gpio4", "gpio5", "gpio6", "gpio7",
511         "gpio8", "gpio9", "gpio10", "gpio11", "gpio12", "gpio13", "gpio14",
512         "gpio15", "gpio16", "gpio17", "gpio18", "gpio19", "gpio20", "gpio21",
513         "gpio22", "gpio23", "gpio24", "gpio25", "gpio26", "gpio27", "gpio28",
514         "gpio29", "gpio30", "gpio31", "gpio32", "gpio33", "gpio34", "gpio35",
515         "gpio36", "gpio37", "gpio38", "gpio39", "gpio40", "gpio41", "gpio42",
516         "gpio43", "gpio44", "gpio45", "gpio46", "gpio47", "gpio48", "gpio49",
517         "gpio50", "gpio51", "gpio52", "gpio53", "gpio54", "gpio55", "gpio56",
518         "gpio57", "gpio58", "gpio59", "gpio60", "gpio61", "gpio62", "gpio63",
519         "gpio64", "gpio65", "gpio66", "gpio67", "gpio68", "gpio69", "gpio70",
520         "gpio71", "gpio72", "gpio73", "gpio74", "gpio75", "gpio76", "gpio77",
521         "gpio78", "gpio79", "gpio80", "gpio81", "gpio82", "gpio83", "gpio84",
522         "gpio85", "gpio86", "gpio87", "gpio88", "gpio89", "gpio90", "gpio91",
523         "gpio92", "gpio93", "gpio94", "gpio95", "gpio96", "gpio97", "gpio98",
524         "gpio99", "gpio100", "gpio101", "gpio102", "gpio103", "gpio104",
525         "gpio105", "gpio106", "gpio107", "gpio108", "gpio109", "gpio110",
526         "gpio111", "gpio112", "gpio113", "gpio114", "gpio115", "gpio116",
527         "gpio117", "gpio118", "gpio119", "gpio120", "gpio121", "gpio122",
528         "gpio123", "gpio124", "gpio125", "gpio126", "gpio127", "gpio128",
529         "gpio129", "gpio130", "gpio131", "gpio132", "gpio133", "gpio134",
530         "gpio135", "gpio136", "gpio137", "gpio138", "gpio139", "gpio140",
531         "gpio141", "gpio142", "gpio143", "gpio144",
532 };
533 static const char * const blsp_uart1_groups[] = {
534         "gpio0", "gpio1", "gpio2", "gpio3",
535 };
536 static const char * const blsp_spi1_groups[] = {
537         "gpio0", "gpio1", "gpio2", "gpio3",
538 };
539 static const char * const smb_int_groups[] = {
540         "gpio1",
541 };
542 static const char * const blsp_i2c1_groups[] = {
543         "gpio2", "gpio3",
544 };
545 static const char * const blsp_spi2_groups[] = {
546         "gpio4", "gpio5", "gpio6", "gpio7",
547 };
548 static const char * const blsp_uart2_groups[] = {
549         "gpio4", "gpio5", "gpio6", "gpio7",
550 };
551 static const char * const blsp_i2c2_groups[] = {
552         "gpio6", "gpio7",
553 };
554 static const char * const gcc_gp1_clk_b_groups[] = {
555         "gpio105",
556 };
557 static const char * const blsp_spi3_groups[] = {
558         "gpio8", "gpio9", "gpio10", "gpio11",
559 };
560 static const char * const qdss_tracedata_b_groups[] = {
561         "gpio26", "gpio27", "gpio28", "gpio29", "gpio30",
562         "gpio31", "gpio33", "gpio34", "gpio35", "gpio36", "gpio37", "gpio38",
563         "gpio116", "gpio126", "gpio128", "gpio129",
564 };
565 static const char * const blsp_i2c3_groups[] = {
566         "gpio10", "gpio11",
567 };
568 static const char * const gcc_gp2_clk_b_groups[] = {
569         "gpio12",
570 };
571 static const char * const gcc_gp3_clk_b_groups[] = {
572         "gpio13",
573 };
574 static const char * const blsp_spi4_groups[] = {
575         "gpio12", "gpio13", "gpio14", "gpio15",
576 };
577 static const char * const cap_int_groups[] = {
578         "gpio13",
579 };
580 static const char * const blsp_i2c4_groups[] = {
581         "gpio14", "gpio15",
582 };
583 static const char * const blsp_spi5_groups[] = {
584         "gpio134", "gpio135", "gpio136", "gpio137",
585 };
586 static const char * const blsp_uart5_groups[] = {
587         "gpio134", "gpio135", "gpio136", "gpio137",
588 };
589 static const char * const qdss_traceclk_a_groups[] = {
590         "gpio46",
591 };
592 static const char * const m_voc_groups[] = {
593         "gpio123", "gpio124",
594 };
595 static const char * const blsp_i2c5_groups[] = {
596         "gpio136", "gpio137",
597 };
598 static const char * const qdss_tracectl_a_groups[] = {
599         "gpio45",
600 };
601 static const char * const qdss_tracedata_a_groups[] = {
602         "gpio8", "gpio9", "gpio10", "gpio39", "gpio40", "gpio41", "gpio42",
603         "gpio43", "gpio44", "gpio47", "gpio48", "gpio62", "gpio69", "gpio120",
604         "gpio121", "gpio130", "gpio131",
605 };
606 static const char * const blsp_spi6_groups[] = {
607         "gpio20", "gpio21", "gpio22", "gpio23",
608 };
609 static const char * const blsp_uart6_groups[] = {
610         "gpio20", "gpio21", "gpio22", "gpio23",
611 };
612 static const char * const qdss_tracectl_b_groups[] = {
613         "gpio5",
614 };
615 static const char * const blsp_i2c6_groups[] = {
616         "gpio22", "gpio23",
617 };
618 static const char * const qdss_traceclk_b_groups[] = {
619         "gpio5",
620 };
621 static const char * const mdp_vsync_groups[] = {
622         "gpio24", "gpio25",
623 };
624 static const char * const pri_mi2s_mclk_a_groups[] = {
625         "gpio126",
626 };
627 static const char * const sec_mi2s_mclk_a_groups[] = {
628         "gpio62",
629 };
630 static const char * const cam_mclk_groups[] = {
631         "gpio26", "gpio27", "gpio28",
632 };
633 static const char * const cci0_i2c_groups[] = {
634         "gpio30", "gpio29",
635 };
636 static const char * const cci1_i2c_groups[] = {
637         "gpio104", "gpio103",
638 };
639 static const char * const blsp1_spi_groups[] = {
640         "gpio101",
641 };
642 static const char * const blsp3_spi_groups[] = {
643         "gpio106", "gpio107",
644 };
645 static const char * const gcc_gp1_clk_a_groups[] = {
646         "gpio49",
647 };
648 static const char * const gcc_gp2_clk_a_groups[] = {
649         "gpio50",
650 };
651 static const char * const gcc_gp3_clk_a_groups[] = {
652         "gpio51",
653 };
654 static const char * const uim_batt_groups[] = {
655         "gpio61",
656 };
657 static const char * const sd_write_groups[] = {
658         "gpio50",
659 };
660 static const char * const uim2_data_groups[] = {
661         "gpio51",
662 };
663 static const char * const uim2_clk_groups[] = {
664         "gpio52",
665 };
666 static const char * const uim2_reset_groups[] = {
667         "gpio53",
668 };
669 static const char * const uim2_present_groups[] = {
670         "gpio54",
671 };
672 static const char * const uim1_data_groups[] = {
673         "gpio55",
674 };
675 static const char * const uim1_clk_groups[] = {
676         "gpio56",
677 };
678 static const char * const uim1_reset_groups[] = {
679         "gpio57",
680 };
681 static const char * const uim1_present_groups[] = {
682         "gpio58",
683 };
684 static const char * const ts_xvdd_groups[] = {
685         "gpio60",
686 };
687 static const char * const mipi_dsi0_groups[] = {
688         "gpio61",
689 };
690 static const char * const us_euro_groups[] = {
691         "gpio63",
692 };
693 static const char * const ts_resout_groups[] = {
694         "gpio64",
695 };
696 static const char * const ts_sample_groups[] = {
697         "gpio65",
698 };
699 static const char * const sec_mi2s_mclk_b_groups[] = {
700         "gpio66",
701 };
702 static const char * const pri_mi2s_groups[] = {
703         "gpio122", "gpio123", "gpio124", "gpio125", "gpio127",
704 };
705 static const char * const codec_reset_groups[] = {
706         "gpio67",
707 };
708 static const char * const cdc_pdm0_groups[] = {
709         "gpio116", "gpio117", "gpio118", "gpio119", "gpio120", "gpio121",
710 };
711 static const char * const us_emitter_groups[] = {
712         "gpio68",
713 };
714 static const char * const pri_mi2s_mclk_b_groups[] = {
715         "gpio62",
716 };
717 static const char * const pri_mi2s_mclk_c_groups[] = {
718         "gpio116",
719 };
720 static const char * const lpass_slimbus_groups[] = {
721         "gpio117",
722 };
723 static const char * const lpass_slimbus0_groups[] = {
724         "gpio118",
725 };
726 static const char * const lpass_slimbus1_groups[] = {
727         "gpio119",
728 };
729 static const char * const codec_int1_groups[] = {
730         "gpio73",
731 };
732 static const char * const codec_int2_groups[] = {
733         "gpio74",
734 };
735 static const char * const wcss_bt_groups[] = {
736         "gpio39", "gpio47", "gpio88",
737 };
738 static const char * const sdc3_groups[] = {
739         "gpio39", "gpio40", "gpio41",
740         "gpio42", "gpio43", "gpio44",
741 };
742 static const char * const wcss_wlan2_groups[] = {
743         "gpio40",
744 };
745 static const char * const wcss_wlan1_groups[] = {
746         "gpio41",
747 };
748 static const char * const wcss_wlan0_groups[] = {
749         "gpio42",
750 };
751 static const char * const wcss_wlan_groups[] = {
752         "gpio43", "gpio44",
753 };
754 static const char * const wcss_fm_groups[] = {
755         "gpio45", "gpio46",
756 };
757 static const char * const key_volp_groups[] = {
758         "gpio85",
759 };
760 static const char * const key_snapshot_groups[] = {
761         "gpio86",
762 };
763 static const char * const key_focus_groups[] = {
764         "gpio87",
765 };
766 static const char * const key_home_groups[] = {
767         "gpio88",
768 };
769 static const char * const pwr_down_groups[] = {
770         "gpio89",
771 };
772 static const char * const dmic0_clk_groups[] = {
773         "gpio66",
774 };
775 static const char * const hdmi_int_groups[] = {
776         "gpio90",
777 };
778 static const char * const dmic0_data_groups[] = {
779         "gpio67",
780 };
781 static const char * const wsa_vi_groups[] = {
782         "gpio108", "gpio109",
783 };
784 static const char * const wsa_en_groups[] = {
785         "gpio96",
786 };
787 static const char * const blsp_spi8_groups[] = {
788         "gpio16", "gpio17", "gpio18", "gpio19",
789 };
790 static const char * const wsa_irq_groups[] = {
791         "gpio97",
792 };
793 static const char * const blsp_i2c8_groups[] = {
794         "gpio18", "gpio19",
795 };
796 static const char * const pa_indicator_groups[] = {
797         "gpio92",
798 };
799 static const char * const modem_tsync_groups[] = {
800         "gpio93",
801 };
802 static const char * const ssbi_wtr1_groups[] = {
803         "gpio79", "gpio94",
804 };
805 static const char * const gsm1_tx_groups[] = {
806         "gpio95",
807 };
808 static const char * const gsm0_tx_groups[] = {
809         "gpio99",
810 };
811 static const char * const sdcard_det_groups[] = {
812         "gpio133",
813 };
814 static const char * const sec_mi2s_groups[] = {
815         "gpio102", "gpio105", "gpio134", "gpio135",
816 };
817
818 static const char * const ss_switch_groups[] = {
819         "gpio139",
820 };
821
822 static const struct msm_function msm8976_functions[] = {
823         FUNCTION(gpio),
824         FUNCTION(blsp_spi1),
825         FUNCTION(smb_int),
826         FUNCTION(blsp_i2c1),
827         FUNCTION(blsp_spi2),
828         FUNCTION(blsp_uart1),
829         FUNCTION(blsp_uart2),
830         FUNCTION(blsp_i2c2),
831         FUNCTION(gcc_gp1_clk_b),
832         FUNCTION(blsp_spi3),
833         FUNCTION(qdss_tracedata_b),
834         FUNCTION(blsp_i2c3),
835         FUNCTION(gcc_gp2_clk_b),
836         FUNCTION(gcc_gp3_clk_b),
837         FUNCTION(blsp_spi4),
838         FUNCTION(cap_int),
839         FUNCTION(blsp_i2c4),
840         FUNCTION(blsp_spi5),
841         FUNCTION(blsp_uart5),
842         FUNCTION(qdss_traceclk_a),
843         FUNCTION(m_voc),
844         FUNCTION(blsp_i2c5),
845         FUNCTION(qdss_tracectl_a),
846         FUNCTION(qdss_tracedata_a),
847         FUNCTION(blsp_spi6),
848         FUNCTION(blsp_uart6),
849         FUNCTION(qdss_tracectl_b),
850         FUNCTION(blsp_i2c6),
851         FUNCTION(qdss_traceclk_b),
852         FUNCTION(mdp_vsync),
853         FUNCTION(pri_mi2s_mclk_a),
854         FUNCTION(sec_mi2s_mclk_a),
855         FUNCTION(cam_mclk),
856         FUNCTION(cci0_i2c),
857         FUNCTION(cci1_i2c),
858         FUNCTION(blsp1_spi),
859         FUNCTION(blsp3_spi),
860         FUNCTION(gcc_gp1_clk_a),
861         FUNCTION(gcc_gp2_clk_a),
862         FUNCTION(gcc_gp3_clk_a),
863         FUNCTION(uim_batt),
864         FUNCTION(sd_write),
865         FUNCTION(uim1_data),
866         FUNCTION(uim1_clk),
867         FUNCTION(uim1_reset),
868         FUNCTION(uim1_present),
869         FUNCTION(uim2_data),
870         FUNCTION(uim2_clk),
871         FUNCTION(uim2_reset),
872         FUNCTION(uim2_present),
873         FUNCTION(ts_xvdd),
874         FUNCTION(mipi_dsi0),
875         FUNCTION(us_euro),
876         FUNCTION(ts_resout),
877         FUNCTION(ts_sample),
878         FUNCTION(sec_mi2s_mclk_b),
879         FUNCTION(pri_mi2s),
880         FUNCTION(codec_reset),
881         FUNCTION(cdc_pdm0),
882         FUNCTION(us_emitter),
883         FUNCTION(pri_mi2s_mclk_b),
884         FUNCTION(pri_mi2s_mclk_c),
885         FUNCTION(lpass_slimbus),
886         FUNCTION(lpass_slimbus0),
887         FUNCTION(lpass_slimbus1),
888         FUNCTION(codec_int1),
889         FUNCTION(codec_int2),
890         FUNCTION(wcss_bt),
891         FUNCTION(sdc3),
892         FUNCTION(wcss_wlan2),
893         FUNCTION(wcss_wlan1),
894         FUNCTION(wcss_wlan0),
895         FUNCTION(wcss_wlan),
896         FUNCTION(wcss_fm),
897         FUNCTION(key_volp),
898         FUNCTION(key_snapshot),
899         FUNCTION(key_focus),
900         FUNCTION(key_home),
901         FUNCTION(pwr_down),
902         FUNCTION(dmic0_clk),
903         FUNCTION(hdmi_int),
904         FUNCTION(dmic0_data),
905         FUNCTION(wsa_vi),
906         FUNCTION(wsa_en),
907         FUNCTION(blsp_spi8),
908         FUNCTION(wsa_irq),
909         FUNCTION(blsp_i2c8),
910         FUNCTION(pa_indicator),
911         FUNCTION(modem_tsync),
912         FUNCTION(ssbi_wtr1),
913         FUNCTION(gsm1_tx),
914         FUNCTION(gsm0_tx),
915         FUNCTION(sdcard_det),
916         FUNCTION(sec_mi2s),
917         FUNCTION(ss_switch),
918 };
919
920 static const struct msm_pingroup msm8976_groups[] = {
921         PINGROUP(0, blsp_spi1, blsp_uart1, NA, NA, NA, NA, NA, NA, NA),
922         PINGROUP(1, blsp_spi1, blsp_uart1, NA, NA, NA, NA, NA, NA, NA),
923         PINGROUP(2, blsp_spi1, blsp_uart1, blsp_i2c1, NA, NA, NA, NA, NA, NA),
924         PINGROUP(3, blsp_spi1, blsp_uart1, blsp_i2c1, NA, NA, NA, NA, NA, NA),
925         PINGROUP(4, blsp_spi2, blsp_uart2, NA, NA, NA, qdss_tracectl_b, NA, NA, NA),
926         PINGROUP(5, blsp_spi2, blsp_uart2, NA, NA, NA, qdss_traceclk_b, NA, NA, NA),
927         PINGROUP(6, blsp_spi2, blsp_uart2, blsp_i2c2, NA, NA, NA, NA, NA, NA),
928         PINGROUP(7, blsp_spi2, blsp_uart2, blsp_i2c2, NA, NA, NA, NA, NA, NA),
929         PINGROUP(8, blsp_spi3, NA, NA, NA, NA, qdss_tracedata_a, NA, NA, NA),
930         PINGROUP(9, blsp_spi3, NA, NA, NA, qdss_tracedata_a, NA, NA, NA, NA),
931         PINGROUP(10, blsp_spi3, NA, blsp_i2c3, NA, NA, qdss_tracedata_a, NA, NA, NA),
932         PINGROUP(11, blsp_spi3, NA, blsp_i2c3, NA, NA, NA, NA, NA, NA),
933         PINGROUP(12, blsp_spi4, NA, gcc_gp2_clk_b, NA, NA, NA, NA, NA, NA),
934         PINGROUP(13, blsp_spi4, NA, gcc_gp3_clk_b, NA, NA, NA, NA, NA, NA),
935         PINGROUP(14, blsp_spi4, NA, blsp_i2c4, NA, NA, NA, NA, NA, NA),
936         PINGROUP(15, blsp_spi4, NA, blsp_i2c4, NA, NA, NA, NA, NA, NA),
937         PINGROUP(16, blsp_spi8, NA, NA, NA, NA, NA, NA, NA, NA),
938         PINGROUP(17, blsp_spi8, NA, NA, NA, NA, NA, NA, NA, NA),
939         PINGROUP(18, blsp_spi8, NA, blsp_i2c8, NA, NA, NA, NA, NA, NA),
940         PINGROUP(19, blsp_spi8, NA, blsp_i2c8, NA, NA, NA, NA, NA, NA),
941         PINGROUP(20, blsp_spi6, blsp_uart6, NA, NA, NA, NA, NA, NA, NA),
942         PINGROUP(21, blsp_spi6, blsp_uart6, NA, NA, NA, NA, NA, NA, NA),
943         PINGROUP(22, blsp_spi6, blsp_uart6, blsp_i2c6, NA, NA, NA, NA, NA, NA),
944         PINGROUP(23, blsp_spi6, blsp_uart6, blsp_i2c6, NA, NA, NA, NA, NA, NA),
945         PINGROUP(24, mdp_vsync, NA, NA, NA, NA, NA, NA, NA, NA),
946         PINGROUP(25, mdp_vsync, NA, NA, NA, NA, NA, NA, NA, NA),
947         PINGROUP(26, cam_mclk, NA, NA, NA, NA, qdss_tracedata_b, NA, NA, NA),
948         PINGROUP(27, cam_mclk, NA, NA, NA, NA, NA, qdss_tracedata_b, NA, NA),
949         PINGROUP(28, cam_mclk, NA, NA, NA, NA, qdss_tracedata_b, NA, NA, NA),
950         PINGROUP(29, cci0_i2c, NA, NA, NA, NA, qdss_tracedata_b, NA, NA, NA),
951         PINGROUP(30, cci0_i2c, NA, NA, NA, NA, NA, qdss_tracedata_b, NA, NA),
952         PINGROUP(31, NA, NA, NA, NA, NA, NA, NA, qdss_tracedata_b, NA),
953         PINGROUP(32, NA, NA, NA, NA, NA, NA, NA, NA, NA),
954         PINGROUP(33, NA, NA, NA, NA, NA, NA, qdss_tracedata_b, NA, NA),
955         PINGROUP(34, NA, NA, NA, NA, NA, NA, NA, NA, qdss_tracedata_b),
956         PINGROUP(35, NA, NA, NA, NA, NA, NA, NA, NA, qdss_tracedata_b),
957         PINGROUP(36, NA, NA, NA, NA, NA, NA, qdss_tracedata_b, NA, NA),
958         PINGROUP(37, NA, NA, NA, qdss_tracedata_b, NA, NA, NA, NA, NA),
959         PINGROUP(38, NA, NA, NA, NA, NA, NA, NA, qdss_tracedata_b, NA),
960         PINGROUP(39, wcss_bt, sdc3, NA, qdss_tracedata_a, NA, NA, NA, NA, NA),
961         PINGROUP(40, wcss_wlan, sdc3, NA, qdss_tracedata_a, NA, NA, NA, NA, NA),
962         PINGROUP(41, wcss_wlan, sdc3, NA, qdss_tracedata_a, NA, NA, NA, NA, NA),
963         PINGROUP(42, wcss_wlan, sdc3, NA, qdss_tracedata_a, NA, NA, NA, NA, NA),
964         PINGROUP(43, wcss_wlan, sdc3, NA, NA, qdss_tracedata_a, NA, NA, NA, NA),
965         PINGROUP(44, wcss_wlan, sdc3, NA, NA, NA, NA, NA, NA, NA),
966         PINGROUP(45, wcss_fm, NA, qdss_tracectl_a, NA, NA, NA, NA, NA, NA),
967         PINGROUP(46, wcss_fm, NA, NA, qdss_traceclk_a, NA, NA, NA, NA, NA),
968         PINGROUP(47, wcss_bt, NA, qdss_tracedata_a, NA, NA, NA, NA, NA, NA),
969         PINGROUP(48, wcss_bt, NA, qdss_tracedata_a, NA, NA, NA, NA, NA, NA),
970         PINGROUP(49, NA, NA, gcc_gp1_clk_a, NA, NA, NA, NA, NA, NA),
971         PINGROUP(50, NA, sd_write, gcc_gp2_clk_a, NA, NA, NA, NA, NA, NA),
972         PINGROUP(51, uim2_data, gcc_gp3_clk_a, NA, NA, NA, NA, NA, NA, NA),
973         PINGROUP(52, uim2_clk, NA, NA, NA, NA, NA, NA, NA, NA),
974         PINGROUP(53, uim2_reset, NA, NA, NA, NA, NA, NA, NA, NA),
975         PINGROUP(54, uim2_present, NA, NA, NA, NA, NA, NA, NA, NA),
976         PINGROUP(55, uim1_data, NA, NA, NA, NA, NA, NA, NA, NA),
977         PINGROUP(56, uim1_clk, NA, NA, NA, NA, NA, NA, NA, NA),
978         PINGROUP(57, uim1_reset, NA, NA, NA, NA, NA, NA, NA, NA),
979         PINGROUP(58, uim1_present, NA, NA, NA, NA, NA, NA, NA, NA),
980         PINGROUP(59, NA, NA, NA, NA, NA, NA, NA, NA, NA),
981         PINGROUP(60, NA, NA, NA, NA, NA, NA, NA, NA, NA),
982         PINGROUP(61, uim_batt, NA, NA, NA, NA, NA, NA, NA, NA),
983         PINGROUP(62, sec_mi2s_mclk_a, pri_mi2s_mclk_b, qdss_tracedata_a, NA, NA, NA, NA, NA, NA),
984         PINGROUP(63, NA, NA, NA, NA, NA, NA, NA, NA, NA),
985         PINGROUP(64, NA, NA, NA, NA, NA, NA, NA, NA, NA),
986         PINGROUP(65, NA, NA, NA, NA, NA, NA, NA, NA, NA),
987         PINGROUP(66, dmic0_clk, NA, NA, NA, NA, NA, NA, NA, NA),
988         PINGROUP(67, dmic0_data, NA, NA, NA, NA, NA, NA, NA, NA),
989         PINGROUP(68, NA, NA, NA, NA, NA, NA, NA, NA, NA),
990         PINGROUP(69, qdss_tracedata_a, NA, NA, NA, NA, NA, NA, NA, NA),
991         PINGROUP(70, NA, NA, NA, NA, NA, NA, NA, NA, NA),
992         PINGROUP(71, NA, NA, NA, NA, NA, NA, NA, NA, NA),
993         PINGROUP(72, NA, NA, NA, NA, NA, NA, NA, NA, NA),
994         PINGROUP(73, NA, NA, NA, NA, NA, NA, NA, NA, NA),
995         PINGROUP(74, NA, NA, NA, NA, NA, NA, NA, NA, NA),
996         PINGROUP(75, NA, NA, NA, NA, NA, NA, NA, NA, NA),
997         PINGROUP(76, NA, NA, NA, NA, NA, NA, NA, NA, NA),
998         PINGROUP(77, NA, NA, NA, NA, NA, NA, NA, NA, NA),
999         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);