1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
4  */
5 
6 #include <linux/module.h>
7 #include <linux/of.h>
8 #include <linux/platform_device.h>
9 #include <linux/pinctrl/pinctrl.h>
10 
11 #include "pinctrl-msm.h"
12 
13 #define FUNCTION(fname)			                \
14 	[msm_mux_##fname] = {		                \
15 		.name = #fname,				\
16 		.groups = fname##_groups,               \
17 		.ngroups = ARRAY_SIZE(fname##_groups),	\
18 	}
19 
20 #define REG_SIZE 0x1000
21 #define PINGROUP(id, f1, f2, f3, f4, f5, f6, f7, f8, f9)	\
22 	{					        \
23 		.name = "gpio" #id,			\
24 		.pins = gpio##id##_pins,		\
25 		.npins = (unsigned int)ARRAY_SIZE(gpio##id##_pins),	\
26 		.funcs = (int[]){			\
27 			msm_mux_gpio, /* gpio mode */	\
28 			msm_mux_##f1,			\
29 			msm_mux_##f2,			\
30 			msm_mux_##f3,			\
31 			msm_mux_##f4,			\
32 			msm_mux_##f5,			\
33 			msm_mux_##f6,			\
34 			msm_mux_##f7,			\
35 			msm_mux_##f8,			\
36 			msm_mux_##f9			\
37 		},				        \
38 		.nfuncs = 10,				\
39 		.ctl_reg = REG_SIZE * id,			\
40 		.io_reg = 0x4 + REG_SIZE * id,		\
41 		.intr_cfg_reg = 0x8 + REG_SIZE * id,		\
42 		.intr_status_reg = 0xc + REG_SIZE * id,	\
43 		.intr_target_reg = 0x8 + REG_SIZE * id,	\
44 		.mux_bit = 2,			\
45 		.pull_bit = 0,			\
46 		.drv_bit = 6,			\
47 		.oe_bit = 9,			\
48 		.in_bit = 0,			\
49 		.out_bit = 1,			\
50 		.intr_enable_bit = 0,		\
51 		.intr_status_bit = 0,		\
52 		.intr_target_bit = 5,		\
53 		.intr_target_kpss_val = 3,	\
54 		.intr_raw_status_bit = 4,	\
55 		.intr_polarity_bit = 1,		\
56 		.intr_detection_bit = 2,	\
57 		.intr_detection_width = 2,	\
58 	}
59 
60 static const struct pinctrl_pin_desc ipq6018_pins[] = {
61 	PINCTRL_PIN(0, "GPIO_0"),
62 	PINCTRL_PIN(1, "GPIO_1"),
63 	PINCTRL_PIN(2, "GPIO_2"),
64 	PINCTRL_PIN(3, "GPIO_3"),
65 	PINCTRL_PIN(4, "GPIO_4"),
66 	PINCTRL_PIN(5, "GPIO_5"),
67 	PINCTRL_PIN(6, "GPIO_6"),
68 	PINCTRL_PIN(7, "GPIO_7"),
69 	PINCTRL_PIN(8, "GPIO_8"),
70 	PINCTRL_PIN(9, "GPIO_9"),
71 	PINCTRL_PIN(10, "GPIO_10"),
72 	PINCTRL_PIN(11, "GPIO_11"),
73 	PINCTRL_PIN(12, "GPIO_12"),
74 	PINCTRL_PIN(13, "GPIO_13"),
75 	PINCTRL_PIN(14, "GPIO_14"),
76 	PINCTRL_PIN(15, "GPIO_15"),
77 	PINCTRL_PIN(16, "GPIO_16"),
78 	PINCTRL_PIN(17, "GPIO_17"),
79 	PINCTRL_PIN(18, "GPIO_18"),
80 	PINCTRL_PIN(19, "GPIO_19"),
81 	PINCTRL_PIN(20, "GPIO_20"),
82 	PINCTRL_PIN(21, "GPIO_21"),
83 	PINCTRL_PIN(22, "GPIO_22"),
84 	PINCTRL_PIN(23, "GPIO_23"),
85 	PINCTRL_PIN(24, "GPIO_24"),
86 	PINCTRL_PIN(25, "GPIO_25"),
87 	PINCTRL_PIN(26, "GPIO_26"),
88 	PINCTRL_PIN(27, "GPIO_27"),
89 	PINCTRL_PIN(28, "GPIO_28"),
90 	PINCTRL_PIN(29, "GPIO_29"),
91 	PINCTRL_PIN(30, "GPIO_30"),
92 	PINCTRL_PIN(31, "GPIO_31"),
93 	PINCTRL_PIN(32, "GPIO_32"),
94 	PINCTRL_PIN(33, "GPIO_33"),
95 	PINCTRL_PIN(34, "GPIO_34"),
96 	PINCTRL_PIN(35, "GPIO_35"),
97 	PINCTRL_PIN(36, "GPIO_36"),
98 	PINCTRL_PIN(37, "GPIO_37"),
99 	PINCTRL_PIN(38, "GPIO_38"),
100 	PINCTRL_PIN(39, "GPIO_39"),
101 	PINCTRL_PIN(40, "GPIO_40"),
102 	PINCTRL_PIN(41, "GPIO_41"),
103 	PINCTRL_PIN(42, "GPIO_42"),
104 	PINCTRL_PIN(43, "GPIO_43"),
105 	PINCTRL_PIN(44, "GPIO_44"),
106 	PINCTRL_PIN(45, "GPIO_45"),
107 	PINCTRL_PIN(46, "GPIO_46"),
108 	PINCTRL_PIN(47, "GPIO_47"),
109 	PINCTRL_PIN(48, "GPIO_48"),
110 	PINCTRL_PIN(49, "GPIO_49"),
111 	PINCTRL_PIN(50, "GPIO_50"),
112 	PINCTRL_PIN(51, "GPIO_51"),
113 	PINCTRL_PIN(52, "GPIO_52"),
114 	PINCTRL_PIN(53, "GPIO_53"),
115 	PINCTRL_PIN(54, "GPIO_54"),
116 	PINCTRL_PIN(55, "GPIO_55"),
117 	PINCTRL_PIN(56, "GPIO_56"),
118 	PINCTRL_PIN(57, "GPIO_57"),
119 	PINCTRL_PIN(58, "GPIO_58"),
120 	PINCTRL_PIN(59, "GPIO_59"),
121 	PINCTRL_PIN(60, "GPIO_60"),
122 	PINCTRL_PIN(61, "GPIO_61"),
123 	PINCTRL_PIN(62, "GPIO_62"),
124 	PINCTRL_PIN(63, "GPIO_63"),
125 	PINCTRL_PIN(64, "GPIO_64"),
126 	PINCTRL_PIN(65, "GPIO_65"),
127 	PINCTRL_PIN(66, "GPIO_66"),
128 	PINCTRL_PIN(67, "GPIO_67"),
129 	PINCTRL_PIN(68, "GPIO_68"),
130 	PINCTRL_PIN(69, "GPIO_69"),
131 	PINCTRL_PIN(70, "GPIO_70"),
132 	PINCTRL_PIN(71, "GPIO_71"),
133 	PINCTRL_PIN(72, "GPIO_72"),
134 	PINCTRL_PIN(73, "GPIO_73"),
135 	PINCTRL_PIN(74, "GPIO_74"),
136 	PINCTRL_PIN(75, "GPIO_75"),
137 	PINCTRL_PIN(76, "GPIO_76"),
138 	PINCTRL_PIN(77, "GPIO_77"),
139 	PINCTRL_PIN(78, "GPIO_78"),
140 	PINCTRL_PIN(79, "GPIO_79"),
141 };
142 
143 #define DECLARE_MSM_GPIO_PINS(pin) \
144 	static const unsigned int gpio##pin##_pins[] = { pin }
145 DECLARE_MSM_GPIO_PINS(0);
146 DECLARE_MSM_GPIO_PINS(1);
147 DECLARE_MSM_GPIO_PINS(2);
148 DECLARE_MSM_GPIO_PINS(3);
149 DECLARE_MSM_GPIO_PINS(4);
150 DECLARE_MSM_GPIO_PINS(5);
151 DECLARE_MSM_GPIO_PINS(6);
152 DECLARE_MSM_GPIO_PINS(7);
153 DECLARE_MSM_GPIO_PINS(8);
154 DECLARE_MSM_GPIO_PINS(9);
155 DECLARE_MSM_GPIO_PINS(10);
156 DECLARE_MSM_GPIO_PINS(11);
157 DECLARE_MSM_GPIO_PINS(12);
158 DECLARE_MSM_GPIO_PINS(13);
159 DECLARE_MSM_GPIO_PINS(14);
160 DECLARE_MSM_GPIO_PINS(15);
161 DECLARE_MSM_GPIO_PINS(16);
162 DECLARE_MSM_GPIO_PINS(17);
163 DECLARE_MSM_GPIO_PINS(18);
164 DECLARE_MSM_GPIO_PINS(19);
165 DECLARE_MSM_GPIO_PINS(20);
166 DECLARE_MSM_GPIO_PINS(21);
167 DECLARE_MSM_GPIO_PINS(22);
168 DECLARE_MSM_GPIO_PINS(23);
169 DECLARE_MSM_GPIO_PINS(24);
170 DECLARE_MSM_GPIO_PINS(25);
171 DECLARE_MSM_GPIO_PINS(26);
172 DECLARE_MSM_GPIO_PINS(27);
173 DECLARE_MSM_GPIO_PINS(28);
174 DECLARE_MSM_GPIO_PINS(29);
175 DECLARE_MSM_GPIO_PINS(30);
176 DECLARE_MSM_GPIO_PINS(31);
177 DECLARE_MSM_GPIO_PINS(32);
178 DECLARE_MSM_GPIO_PINS(33);
179 DECLARE_MSM_GPIO_PINS(34);
180 DECLARE_MSM_GPIO_PINS(35);
181 DECLARE_MSM_GPIO_PINS(36);
182 DECLARE_MSM_GPIO_PINS(37);
183 DECLARE_MSM_GPIO_PINS(38);
184 DECLARE_MSM_GPIO_PINS(39);
185 DECLARE_MSM_GPIO_PINS(40);
186 DECLARE_MSM_GPIO_PINS(41);
187 DECLARE_MSM_GPIO_PINS(42);
188 DECLARE_MSM_GPIO_PINS(43);
189 DECLARE_MSM_GPIO_PINS(44);
190 DECLARE_MSM_GPIO_PINS(45);
191 DECLARE_MSM_GPIO_PINS(46);
192 DECLARE_MSM_GPIO_PINS(47);
193 DECLARE_MSM_GPIO_PINS(48);
194 DECLARE_MSM_GPIO_PINS(49);
195 DECLARE_MSM_GPIO_PINS(50);
196 DECLARE_MSM_GPIO_PINS(51);
197 DECLARE_MSM_GPIO_PINS(52);
198 DECLARE_MSM_GPIO_PINS(53);
199 DECLARE_MSM_GPIO_PINS(54);
200 DECLARE_MSM_GPIO_PINS(55);
201 DECLARE_MSM_GPIO_PINS(56);
202 DECLARE_MSM_GPIO_PINS(57);
203 DECLARE_MSM_GPIO_PINS(58);
204 DECLARE_MSM_GPIO_PINS(59);
205 DECLARE_MSM_GPIO_PINS(60);
206 DECLARE_MSM_GPIO_PINS(61);
207 DECLARE_MSM_GPIO_PINS(62);
208 DECLARE_MSM_GPIO_PINS(63);
209 DECLARE_MSM_GPIO_PINS(64);
210 DECLARE_MSM_GPIO_PINS(65);
211 DECLARE_MSM_GPIO_PINS(66);
212 DECLARE_MSM_GPIO_PINS(67);
213 DECLARE_MSM_GPIO_PINS(68);
214 DECLARE_MSM_GPIO_PINS(69);
215 DECLARE_MSM_GPIO_PINS(70);
216 DECLARE_MSM_GPIO_PINS(71);
217 DECLARE_MSM_GPIO_PINS(72);
218 DECLARE_MSM_GPIO_PINS(73);
219 DECLARE_MSM_GPIO_PINS(74);
220 DECLARE_MSM_GPIO_PINS(75);
221 DECLARE_MSM_GPIO_PINS(76);
222 DECLARE_MSM_GPIO_PINS(77);
223 DECLARE_MSM_GPIO_PINS(78);
224 DECLARE_MSM_GPIO_PINS(79);
225 
226 enum ipq6018_functions {
227 	msm_mux_atest_char,
228 	msm_mux_atest_char0,
229 	msm_mux_atest_char1,
230 	msm_mux_atest_char2,
231 	msm_mux_atest_char3,
232 	msm_mux_audio0,
233 	msm_mux_audio1,
234 	msm_mux_audio2,
235 	msm_mux_audio3,
236 	msm_mux_audio_rxbclk,
237 	msm_mux_audio_rxfsync,
238 	msm_mux_audio_rxmclk,
239 	msm_mux_audio_rxmclkin,
240 	msm_mux_audio_txbclk,
241 	msm_mux_audio_txfsync,
242 	msm_mux_audio_txmclk,
243 	msm_mux_audio_txmclkin,
244 	msm_mux_blsp0_i2c,
245 	msm_mux_blsp0_spi,
246 	msm_mux_blsp0_uart,
247 	msm_mux_blsp1_i2c,
248 	msm_mux_blsp1_spi,
249 	msm_mux_blsp1_uart,
250 	msm_mux_blsp2_i2c,
251 	msm_mux_blsp2_spi,
252 	msm_mux_blsp2_uart,
253 	msm_mux_blsp3_i2c,
254 	msm_mux_blsp3_spi,
255 	msm_mux_blsp3_uart,
256 	msm_mux_blsp4_i2c,
257 	msm_mux_blsp4_spi,
258 	msm_mux_blsp4_uart,
259 	msm_mux_blsp5_i2c,
260 	msm_mux_blsp5_uart,
261 	msm_mux_burn0,
262 	msm_mux_burn1,
263 	msm_mux_cri_trng,
264 	msm_mux_cri_trng0,
265 	msm_mux_cri_trng1,
266 	msm_mux_cxc0,
267 	msm_mux_cxc1,
268 	msm_mux_dbg_out,
269 	msm_mux_gcc_plltest,
270 	msm_mux_gcc_tlmm,
271 	msm_mux_gpio,
272 	msm_mux_lpass_aud,
273 	msm_mux_lpass_aud0,
274 	msm_mux_lpass_aud1,
275 	msm_mux_lpass_aud2,
276 	msm_mux_lpass_pcm,
277 	msm_mux_lpass_pdm,
278 	msm_mux_mac00,
279 	msm_mux_mac01,
280 	msm_mux_mac10,
281 	msm_mux_mac11,
282 	msm_mux_mac12,
283 	msm_mux_mac13,
284 	msm_mux_mac20,
285 	msm_mux_mac21,
286 	msm_mux_mdc,
287 	msm_mux_mdio,
288 	msm_mux_pcie0_clk,
289 	msm_mux_pcie0_rst,
290 	msm_mux_pcie0_wake,
291 	msm_mux_prng_rosc,
292 	msm_mux_pta1_0,
293 	msm_mux_pta1_1,
294 	msm_mux_pta1_2,
295 	msm_mux_pta2_0,
296 	msm_mux_pta2_1,
297 	msm_mux_pta2_2,
298 	msm_mux_pwm00,
299 	msm_mux_pwm01,
300 	msm_mux_pwm02,
301 	msm_mux_pwm03,
302 	msm_mux_pwm04,
303 	msm_mux_pwm10,
304 	msm_mux_pwm11,
305 	msm_mux_pwm12,
306 	msm_mux_pwm13,
307 	msm_mux_pwm14,
308 	msm_mux_pwm20,
309 	msm_mux_pwm21,
310 	msm_mux_pwm22,
311 	msm_mux_pwm23,
312 	msm_mux_pwm24,
313 	msm_mux_pwm30,
314 	msm_mux_pwm31,
315 	msm_mux_pwm32,
316 	msm_mux_pwm33,
317 	msm_mux_qdss_cti_trig_in_a0,
318 	msm_mux_qdss_cti_trig_in_a1,
319 	msm_mux_qdss_cti_trig_out_a0,
320 	msm_mux_qdss_cti_trig_out_a1,
321 	msm_mux_qdss_cti_trig_in_b0,
322 	msm_mux_qdss_cti_trig_in_b1,
323 	msm_mux_qdss_cti_trig_out_b0,
324 	msm_mux_qdss_cti_trig_out_b1,
325 	msm_mux_qdss_traceclk_a,
326 	msm_mux_qdss_tracectl_a,
327 	msm_mux_qdss_tracedata_a,
328 	msm_mux_qdss_traceclk_b,
329 	msm_mux_qdss_tracectl_b,
330 	msm_mux_qdss_tracedata_b,
331 	msm_mux_qpic_pad,
332 	msm_mux_rx0,
333 	msm_mux_rx1,
334 	msm_mux_rx_swrm,
335 	msm_mux_rx_swrm0,
336 	msm_mux_rx_swrm1,
337 	msm_mux_sd_card,
338 	msm_mux_sd_write,
339 	msm_mux_tsens_max,
340 	msm_mux_tx_swrm,
341 	msm_mux_tx_swrm0,
342 	msm_mux_tx_swrm1,
343 	msm_mux_tx_swrm2,
344 	msm_mux_wci20,
345 	msm_mux_wci21,
346 	msm_mux_wci22,
347 	msm_mux_wci23,
348 	msm_mux_wsa_swrm,
349 	msm_mux__,
350 };
351 
352 static const char * const blsp3_uart_groups[] = {
353 	"gpio73", "gpio74", "gpio75", "gpio76",
354 };
355 
356 static const char * const blsp3_i2c_groups[] = {
357 	"gpio73", "gpio74",
358 };
359 
360 static const char * const blsp3_spi_groups[] = {
361 	"gpio73", "gpio74", "gpio75", "gpio76", "gpio77", "gpio78", "gpio79",
362 };
363 
364 static const char * const wci20_groups[] = {
365 	"gpio0", "gpio2",
366 };
367 
368 static const char * const qpic_pad_groups[] = {
369 	"gpio0", "gpio1", "gpio2", "gpio3", "gpio4", "gpio9", "gpio10",
370 	"gpio11", "gpio17", "gpio15", "gpio12", "gpio13", "gpio14", "gpio5",
371 	"gpio6", "gpio7", "gpio8",
372 };
373 
374 static const char * const burn0_groups[] = {
375 	"gpio0",
376 };
377 
378 static const char * const mac12_groups[] = {
379 	"gpio1", "gpio11",
380 };
381 
382 static const char * const qdss_tracectl_b_groups[] = {
383 	"gpio1",
384 };
385 
386 static const char * const burn1_groups[] = {
387 	"gpio1",
388 };
389 
390 static const char * const qdss_traceclk_b_groups[] = {
391 	"gpio0",
392 };
393 
394 static const char * const qdss_tracedata_b_groups[] = {
395 	"gpio2", "gpio3", "gpio4", "gpio5", "gpio6", "gpio7", "gpio8", "gpio9",
396 	"gpio10", "gpio11", "gpio12", "gpio13", "gpio14", "gpio15", "gpio16",
397 	"gpio17",
398 };
399 
400 static const char * const mac01_groups[] = {
401 	"gpio3", "gpio4",
402 };
403 
404 static const char * const mac21_groups[] = {
405 	"gpio5", "gpio6",
406 };
407 
408 static const char * const atest_char_groups[] = {
409 	"gpio9",
410 };
411 
412 static const char * const cxc0_groups[] = {
413 	"gpio9", "gpio16",
414 };
415 
416 static const char * const mac13_groups[] = {
417 	"gpio9", "gpio16",
418 };
419 
420 static const char * const dbg_out_groups[] = {
421 	"gpio9",
422 };
423 
424 static const char * const wci22_groups[] = {
425 	"gpio11", "gpio17",
426 };
427 
428 static const char * const pwm00_groups[] = {
429 	"gpio18",
430 };
431 
432 static const char * const atest_char0_groups[] = {
433 	"gpio18",
434 };
435 
436 static const char * const wci23_groups[] = {
437 	"gpio18", "gpio19",
438 };
439 
440 static const char * const mac11_groups[] = {
441 	"gpio18", "gpio19",
442 };
443 
444 static const char * const pwm10_groups[] = {
445 	"gpio19",
446 };
447 
448 static const char * const atest_char1_groups[] = {
449 	"gpio19",
450 };
451 
452 static const char * const pwm20_groups[] = {
453 	"gpio20",
454 };
455 
456 static const char * const atest_char2_groups[] = {
457 	"gpio20",
458 };
459 
460 static const char * const pwm30_groups[] = {
461 	"gpio21",
462 };
463 
464 static const char * const atest_char3_groups[] = {
465 	"gpio21",
466 };
467 
468 static const char * const audio_txmclk_groups[] = {
469 	"gpio22",
470 };
471 
472 static const char * const audio_txmclkin_groups[] = {
473 	"gpio22",
474 };
475 
476 static const char * const pwm02_groups[] = {
477 	"gpio22",
478 };
479 
480 static const char * const tx_swrm0_groups[] = {
481 	"gpio22",
482 };
483 
484 static const char * const qdss_cti_trig_out_b0_groups[] = {
485 	"gpio22",
486 };
487 
488 static const char * const audio_txbclk_groups[] = {
489 	"gpio23",
490 };
491 
492 static const char * const pwm12_groups[] = {
493 	"gpio23",
494 };
495 
496 static const char * const wsa_swrm_groups[] = {
497 	"gpio23", "gpio24",
498 };
499 
500 static const char * const tx_swrm1_groups[] = {
501 	"gpio23",
502 };
503 
504 static const char * const qdss_cti_trig_in_b0_groups[] = {
505 	"gpio23",
506 };
507 
508 static const char * const audio_txfsync_groups[] = {
509 	"gpio24",
510 };
511 
512 static const char * const pwm22_groups[] = {
513 	"gpio24",
514 };
515 
516 static const char * const tx_swrm2_groups[] = {
517 	"gpio24",
518 };
519 
520 static const char * const qdss_cti_trig_out_b1_groups[] = {
521 	"gpio24",
522 };
523 
524 static const char * const audio0_groups[] = {
525 	"gpio25", "gpio32",
526 };
527 
528 static const char * const pwm32_groups[] = {
529 	"gpio25",
530 };
531 
532 static const char * const tx_swrm_groups[] = {
533 	"gpio25",
534 };
535 
536 static const char * const qdss_cti_trig_in_b1_groups[] = {
537 	"gpio25",
538 };
539 
540 static const char * const audio1_groups[] = {
541 	"gpio26", "gpio33",
542 };
543 
544 static const char * const pwm04_groups[] = {
545 	"gpio26",
546 };
547 
548 static const char * const audio2_groups[] = {
549 	"gpio27",
550 };
551 
552 static const char * const pwm14_groups[] = {
553 	"gpio27",
554 };
555 
556 static const char * const audio3_groups[] = {
557 	"gpio28",
558 };
559 
560 static const char * const pwm24_groups[] = {
561 	"gpio28",
562 };
563 
564 static const char * const audio_rxmclk_groups[] = {
565 	"gpio29",
566 };
567 
568 static const char * const audio_rxmclkin_groups[] = {
569 	"gpio29",
570 };
571 
572 static const char * const pwm03_groups[] = {
573 	"gpio29",
574 };
575 
576 static const char * const lpass_pdm_groups[] = {
577 	"gpio29", "gpio30", "gpio31", "gpio32",
578 };
579 
580 static const char * const lpass_aud_groups[] = {
581 	"gpio29",
582 };
583 
584 static const char * const qdss_cti_trig_in_a1_groups[] = {
585 	"gpio29",
586 };
587 
588 static const char * const audio_rxbclk_groups[] = {
589 	"gpio30",
590 };
591 
592 static const char * const pwm13_groups[] = {
593 	"gpio30",
594 };
595 
596 static const char * const lpass_aud0_groups[] = {
597 	"gpio30",
598 };
599 
600 static const char * const rx_swrm_groups[] = {
601 	"gpio30",
602 };
603 
604 static const char * const qdss_cti_trig_out_a1_groups[] = {
605 	"gpio30",
606 };
607 
608 static const char * const audio_rxfsync_groups[] = {
609 	"gpio31",
610 };
611 
612 static const char * const pwm23_groups[] = {
613 	"gpio31",
614 };
615 
616 static const char * const lpass_aud1_groups[] = {
617 	"gpio31",
618 };
619 
620 static const char * const rx_swrm0_groups[] = {
621 	"gpio31",
622 };
623 
624 static const char * const qdss_cti_trig_in_a0_groups[] = {
625 	"gpio31",
626 };
627 
628 static const char * const pwm33_groups[] = {
629 	"gpio32",
630 };
631 
632 static const char * const lpass_aud2_groups[] = {
633 	"gpio32",
634 };
635 
636 static const char * const rx_swrm1_groups[] = {
637 	"gpio32",
638 };
639 
640 static const char * const qdss_cti_trig_out_a0_groups[] = {
641 	"gpio32",
642 };
643 
644 static const char * const lpass_pcm_groups[] = {
645 	"gpio34", "gpio35", "gpio36", "gpio37",
646 };
647 
648 static const char * const mac10_groups[] = {
649 	"gpio34", "gpio35",
650 };
651 
652 static const char * const mac00_groups[] = {
653 	"gpio34", "gpio35",
654 };
655 
656 static const char * const mac20_groups[] = {
657 	"gpio36", "gpio37",
658 };
659 
660 static const char * const blsp0_uart_groups[] = {
661 	"gpio38", "gpio39", "gpio40", "gpio41",
662 };
663 
664 static const char * const blsp0_i2c_groups[] = {
665 	"gpio38", "gpio39",
666 };
667 
668 static const char * const blsp0_spi_groups[] = {
669 	"gpio38", "gpio39", "gpio40", "gpio41",
670 };
671 
672 static const char * const blsp2_uart_groups[] = {
673 	"gpio42", "gpio43", "gpio44", "gpio45",
674 };
675 
676 static const char * const blsp2_i2c_groups[] = {
677 	"gpio42", "gpio43",
678 };
679 
680 static const char * const blsp2_spi_groups[] = {
681 	"gpio42", "gpio43", "gpio44", "gpio45",
682 };
683 
684 static const char * const blsp5_i2c_groups[] = {
685 	"gpio46", "gpio47",
686 };
687 
688 static const char * const blsp5_uart_groups[] = {
689 	"gpio48", "gpio49",
690 };
691 
692 static const char * const qdss_traceclk_a_groups[] = {
693 	"gpio48",
694 };
695 
696 static const char * const qdss_tracectl_a_groups[] = {
697 	"gpio49",
698 };
699 
700 static const char * const pwm01_groups[] = {
701 	"gpio50",
702 };
703 
704 static const char * const pta1_1_groups[] = {
705 	"gpio51",
706 };
707 
708 static const char * const pwm11_groups[] = {
709 	"gpio51",
710 };
711 
712 static const char * const rx1_groups[] = {
713 	"gpio51",
714 };
715 
716 static const char * const pta1_2_groups[] = {
717 	"gpio52",
718 };
719 
720 static const char * const pwm21_groups[] = {
721 	"gpio52",
722 };
723 
724 static const char * const pta1_0_groups[] = {
725 	"gpio53",
726 };
727 
728 static const char * const pwm31_groups[] = {
729 	"gpio53",
730 };
731 
732 static const char * const prng_rosc_groups[] = {
733 	"gpio53",
734 };
735 
736 static const char * const blsp4_uart_groups[] = {
737 	"gpio55", "gpio56", "gpio57", "gpio58",
738 };
739 
740 static const char * const blsp4_i2c_groups[] = {
741 	"gpio55", "gpio56",
742 };
743 
744 static const char * const blsp4_spi_groups[] = {
745 	"gpio55", "gpio56", "gpio57", "gpio58",
746 };
747 
748 static const char * const pcie0_clk_groups[] = {
749 	"gpio59",
750 };
751 
752 static const char * const cri_trng0_groups[] = {
753 	"gpio59",
754 };
755 
756 static const char * const pcie0_rst_groups[] = {
757 	"gpio60",
758 };
759 
760 static const char * const cri_trng1_groups[] = {
761 	"gpio60",
762 };
763 
764 static const char * const pcie0_wake_groups[] = {
765 	"gpio61",
766 };
767 
768 static const char * const cri_trng_groups[] = {
769 	"gpio61",
770 };
771 
772 static const char * const sd_card_groups[] = {
773 	"gpio62",
774 };
775 
776 static const char * const sd_write_groups[] = {
777 	"gpio63",
778 };
779 
780 static const char * const rx0_groups[] = {
781 	"gpio63",
782 };
783 
784 static const char * const tsens_max_groups[] = {
785 	"gpio63",
786 };
787 
788 static const char * const mdc_groups[] = {
789 	"gpio64",
790 };
791 
792 static const char * const qdss_tracedata_a_groups[] = {
793 	"gpio64", "gpio65", "gpio66", "gpio67", "gpio68", "gpio69", "gpio70",
794 	"gpio71", "gpio72", "gpio73", "gpio74", "gpio75", "gpio76", "gpio77",
795 	"gpio78", "gpio79",
796 };
797 
798 static const char * const mdio_groups[] = {
799 	"gpio65",
800 };
801 
802 static const char * const pta2_0_groups[] = {
803 	"gpio66",
804 };
805 
806 static const char * const wci21_groups[] = {
807 	"gpio66", "gpio68",
808 };
809 
810 static const char * const cxc1_groups[] = {
811 	"gpio66", "gpio68",
812 };
813 
814 static const char * const pta2_1_groups[] = {
815 	"gpio67",
816 };
817 
818 static const char * const pta2_2_groups[] = {
819 	"gpio68",
820 };
821 
822 static const char * const blsp1_uart_groups[] = {
823 	"gpio69", "gpio70", "gpio71", "gpio72",
824 };
825 
826 static const char * const blsp1_i2c_groups[] = {
827 	"gpio69", "gpio70",
828 };
829 
830 static const char * const blsp1_spi_groups[] = {
831 	"gpio69", "gpio70", "gpio71", "gpio72",
832 };
833 
834 static const char * const gcc_plltest_groups[] = {
835 	"gpio69", "gpio71",
836 };
837 
838 static const char * const gcc_tlmm_groups[] = {
839 	"gpio70",
840 };
841 
842 static const char * const gpio_groups[] = {
843 	"gpio0", "gpio1", "gpio2", "gpio3", "gpio4", "gpio5", "gpio6", "gpio7",
844 	"gpio8", "gpio9", "gpio10", "gpio11", "gpio12", "gpio13", "gpio14",
845 	"gpio15", "gpio16", "gpio17", "gpio18", "gpio19", "gpio20", "gpio21",
846 	"gpio22", "gpio23", "gpio24", "gpio25", "gpio26", "gpio27", "gpio28",
847 	"gpio29", "gpio30", "gpio31", "gpio32", "gpio33", "gpio34", "gpio35",
848 	"gpio36", "gpio37", "gpio38", "gpio39", "gpio40", "gpio41", "gpio42",
849 	"gpio43", "gpio44", "gpio45", "gpio46", "gpio47", "gpio48", "gpio49",
850 	"gpio50", "gpio51", "gpio52", "gpio53", "gpio54", "gpio55", "gpio56",
851 	"gpio57", "gpio58", "gpio59", "gpio60", "gpio61", "gpio62", "gpio63",
852 	"gpio64", "gpio65", "gpio66", "gpio67", "gpio68", "gpio69", "gpio70",
853 	"gpio71", "gpio72", "gpio73", "gpio74", "gpio75", "gpio76", "gpio77",
854 	"gpio78", "gpio79",
855 };
856 
857 static const struct msm_function ipq6018_functions[] = {
858 	FUNCTION(atest_char),
859 	FUNCTION(atest_char0),
860 	FUNCTION(atest_char1),
861 	FUNCTION(atest_char2),
862 	FUNCTION(atest_char3),
863 	FUNCTION(audio0),
864 	FUNCTION(audio1),
865 	FUNCTION(audio2),
866 	FUNCTION(audio3),
867 	FUNCTION(audio_rxbclk),
868 	FUNCTION(audio_rxfsync),
869 	FUNCTION(audio_rxmclk),
870 	FUNCTION(audio_rxmclkin),
871 	FUNCTION(audio_txbclk),
872 	FUNCTION(audio_txfsync),
873 	FUNCTION(audio_txmclk),
874 	FUNCTION(audio_txmclkin),
875 	FUNCTION(blsp0_i2c),
876 	FUNCTION(blsp0_spi),
877 	FUNCTION(blsp0_uart),
878 	FUNCTION(blsp1_i2c),
879 	FUNCTION(blsp1_spi),
880 	FUNCTION(blsp1_uart),
881 	FUNCTION(blsp2_i2c),
882 	FUNCTION(blsp2_spi),
883 	FUNCTION(blsp2_uart),
884 	FUNCTION(blsp3_i2c),
885 	FUNCTION(blsp3_spi),
886 	FUNCTION(blsp3_uart),
887 	FUNCTION(blsp4_i2c),
888 	FUNCTION(blsp4_spi),
889 	FUNCTION(blsp4_uart),
890 	FUNCTION(blsp5_i2c),
891 	FUNCTION(blsp5_uart),
892 	FUNCTION(burn0),
893 	FUNCTION(burn1),
894 	FUNCTION(cri_trng),
895 	FUNCTION(cri_trng0),
896 	FUNCTION(cri_trng1),
897 	FUNCTION(cxc0),
898 	FUNCTION(cxc1),
899 	FUNCTION(dbg_out),
900 	FUNCTION(gcc_plltest),
901 	FUNCTION(gcc_tlmm),
902 	FUNCTION(gpio),
903 	FUNCTION(lpass_aud),
904 	FUNCTION(lpass_aud0),
905 	FUNCTION(lpass_aud1),
906 	FUNCTION(lpass_aud2),
907 	FUNCTION(lpass_pcm),
908 	FUNCTION(lpass_pdm),
909 	FUNCTION(mac00),
910 	FUNCTION(mac01),
911 	FUNCTION(mac10),
912 	FUNCTION(mac11),
913 	FUNCTION(mac12),
914 	FUNCTION(mac13),
915 	FUNCTION(mac20),
916 	FUNCTION(mac21),
917 	FUNCTION(mdc),
918 	FUNCTION(mdio),
919 	FUNCTION(pcie0_clk),
920 	FUNCTION(pcie0_rst),
921 	FUNCTION(pcie0_wake),
922 	FUNCTION(prng_rosc),
923 	FUNCTION(pta1_0),
924 	FUNCTION(pta1_1),
925 	FUNCTION(pta1_2),
926 	FUNCTION(pta2_0),
927 	FUNCTION(pta2_1),
928 	FUNCTION(pta2_2),
929 	FUNCTION(pwm00),
930 	FUNCTION(pwm01),
931 	FUNCTION(pwm02),
932 	FUNCTION(pwm03),
933 	FUNCTION(pwm04),
934 	FUNCTION(pwm10),
935 	FUNCTION(pwm11),
936 	FUNCTION(pwm12),
937 	FUNCTION(pwm13),
938 	FUNCTION(pwm14),
939 	FUNCTION(pwm20),
940 	FUNCTION(pwm21),
941 	FUNCTION(pwm22),
942 	FUNCTION(pwm23),
943 	FUNCTION(pwm24),
944 	FUNCTION(pwm30),
945 	FUNCTION(pwm31),
946 	FUNCTION(pwm32),
947 	FUNCTION(pwm33),
948 	FUNCTION(qdss_cti_trig_in_a0),
949 	FUNCTION(qdss_cti_trig_in_a1),
950 	FUNCTION(qdss_cti_trig_out_a0),
951 	FUNCTION(qdss_cti_trig_out_a1),
952 	FUNCTION(qdss_cti_trig_in_b0),
953 	FUNCTION(qdss_cti_trig_in_b1),
954 	FUNCTION(qdss_cti_trig_out_b0),
955 	FUNCTION(qdss_cti_trig_out_b1),
956 	FUNCTION(qdss_traceclk_a),
957 	FUNCTION(qdss_tracectl_a),
958 	FUNCTION(qdss_tracedata_a),
959 	FUNCTION(qdss_traceclk_b),
960 	FUNCTION(qdss_tracectl_b),
961 	FUNCTION(qdss_tracedata_b),
962 	FUNCTION(qpic_pad),
963 	FUNCTION(rx0),
964 	FUNCTION(rx1),
965 	FUNCTION(rx_swrm),
966 	FUNCTION(rx_swrm0),
967 	FUNCTION(rx_swrm1),
968 	FUNCTION(sd_card),
969 	FUNCTION(sd_write),
970 	FUNCTION(tsens_max),
971 	FUNCTION(tx_swrm),
972 	FUNCTION(tx_swrm0),
973 	FUNCTION(tx_swrm1),
974 	FUNCTION(tx_swrm2),
975 	FUNCTION(wci20),
976 	FUNCTION(wci21),
977 	FUNCTION(wci22),
978 	FUNCTION(wci23),
979 	FUNCTION(wsa_swrm),
980 };
981 
982 static const struct msm_pingroup ipq6018_groups[] = {
983 	PINGROUP(0, qpic_pad, wci20, qdss_traceclk_b, _, burn0, _, _, _, _),
984 	PINGROUP(1, qpic_pad, mac12, qdss_tracectl_b, _, burn1, _, _, _, _),
985 	PINGROUP(2, qpic_pad, wci20, qdss_tracedata_b, _, _, _, _, _, _),
986 	PINGROUP(3, qpic_pad, mac01, qdss_tracedata_b, _, _, _, _, _, _),
987 	PINGROUP(4, qpic_pad, mac01, qdss_tracedata_b, _, _, _, _, _, _),
988 	PINGROUP(5, qpic_pad, mac21, qdss_tracedata_b, _, _, _, _, _, _),
989 	PINGROUP(6, qpic_pad, mac21, qdss_tracedata_b, _, _, _, _, _, _),
990 	PINGROUP(7, qpic_pad, qdss_tracedata_b, _, _, _, _, _, _, _),
991 	PINGROUP(8, qpic_pad, qdss_tracedata_b, _, _, _, _, _, _, _),
992 	PINGROUP(9, qpic_pad, atest_char, cxc0, mac13, dbg_out, qdss_tracedata_b, _, _, _),
993 	PINGROUP(10, qpic_pad, qdss_tracedata_b, _, _, _, _, _, _, _),
994 	PINGROUP(11, qpic_pad, wci22, mac12, qdss_tracedata_b, _, _, _, _, _),
995 	PINGROUP(12, qpic_pad, qdss_tracedata_b, _, _, _, _, _, _, _),
996 	PINGROUP(13, qpic_pad, qdss_tracedata_b, _, _, _, _, _, _, _),
997 	PINGROUP(14, qpic_pad, qdss_tracedata_b, _, _, _, _, _, _, _),
998 	PINGROUP(15, qpic_pad, qdss_tracedata_b, _, _, _, _, _, _, _),
999 	PINGROUP(16, qpic_pad, cxc0, mac13, qdss_tracedata_b, _, _, _, _, _),
1000 	PINGROUP(17, qpic_pad, qdss_tracedata_b, wci22, _, _, _, _, _, _),
1001 	PINGROUP(18, pwm00, atest_char0, wci23, mac11, _, _, _, _, _),
1002 	PINGROUP(19, pwm10, atest_char1, wci23, mac11, _, _, _, _, _),
1003 	PINGROUP(20, pwm20, atest_char2, _, _, _, _, _, _, _),
1004 	PINGROUP(21, pwm30, atest_char3, _, _, _, _, _, _, _),
1005 	PINGROUP(22, audio_txmclk, audio_txmclkin, pwm02, tx_swrm0, _, qdss_cti_trig_out_b0, _, _, _),
1006 	PINGROUP(23, audio_txbclk, pwm12, wsa_swrm, tx_swrm1, _, qdss_cti_trig_in_b0, _, _, _),
1007 	PINGROUP(24, audio_txfsync, pwm22, wsa_swrm, tx_swrm2, _, qdss_cti_trig_out_b1, _, _, _),
1008 	PINGROUP(25, audio0, pwm32, tx_swrm, _, qdss_cti_trig_in_b1, _, _, _, _),
1009 	PINGROUP(26, audio1, pwm04, _, _, _, _, _, _, _),
1010 	PINGROUP(27, audio2, pwm14, _, _, _, _, _, _, _),
1011 	PINGROUP(28, audio3, pwm24, _, _, _, _, _, _, _),
1012 	PINGROUP(29, audio_rxmclk, audio_rxmclkin, pwm03, lpass_pdm, lpass_aud, qdss_cti_trig_in_a1, _, _, _),
1013 	PINGROUP(30, audio_rxbclk, pwm13, lpass_pdm, lpass_aud0, rx_swrm, _, qdss_cti_trig_out_a1, _, _),
1014 	PINGROUP(31, audio_rxfsync, pwm23, lpass_pdm, lpass_aud1, rx_swrm0, _, qdss_cti_trig_in_a0, _, _),
1015 	PINGROUP(32, audio0, pwm33, lpass_pdm, lpass_aud2, rx_swrm1, _, qdss_cti_trig_out_a0, _, _),
1016 	PINGROUP(33, audio1, _, _, _, _, _, _, _, _),
1017 	PINGROUP(34, lpass_pcm, mac10, mac00, _, _, _, _, _, _),
1018 	PINGROUP(35, lpass_pcm, mac10, mac00, _, _, _, _, _, _),
1019 	PINGROUP(36, lpass_pcm, mac20, _, _, _, _, _, _, _),
1020 	PINGROUP(37, lpass_pcm, mac20, _, _, _, _, _, _, _),
1021 	PINGROUP(38, blsp0_uart, blsp0_i2c, blsp0_spi, _, _, _, _, _, _),
1022 	PINGROUP(39, blsp0_uart, blsp0_i2c, blsp0_spi, _, _, _, _, _, _),
1023 	PINGROUP(40, blsp0_uart, blsp0_spi, _, _, _, _, _, _, _),
1024 	PINGROUP(41, blsp0_uart, blsp0_spi, _, _, _, _, _, _, _),
1025 	PINGROUP(42, blsp2_uart, blsp2_i2c, blsp2_spi, _, _, _, _, _, _),
1026 	PINGROUP(43, blsp2_uart, blsp2_i2c, blsp2_spi, _, _, _, _, _, _),
1027 	PINGROUP(44, blsp2_uart, blsp2_spi, _, _, _, _, _, _, _),
1028 	PINGROUP(45, blsp2_uart, blsp2_spi, _, _, _, _, _, _, _),
1029 	PINGROUP(46, blsp5_i2c, _, _, _, _, _, _, _, _),
1030 	PINGROUP(47, blsp5_i2c, _, _, _, _, _, _, _, _),
1031 	PINGROUP(48, blsp5_uart, _, qdss_traceclk_a, _, _, _, _, _, _),
1032 	PINGROUP(49, blsp5_uart, _, qdss_tracectl_a, _, _, _, _, _, _),
1033 	PINGROUP(50, pwm01, _, _, _, _, _, _, _, _),
1034 	PINGROUP(51, pta1_1, pwm11, _, rx1, _, _, _, _, _),
1035 	PINGROUP(52, pta1_2, pwm21, _, _, _, _, _, _, _),
1036 	PINGROUP(53, pta1_0, pwm31, prng_rosc, _, _, _, _, _, _),
1037 	PINGROUP(54, _, _, _, _, _, _, _, _, _),
1038 	PINGROUP(55, blsp4_uart, blsp4_i2c, blsp4_spi, _, _, _, _, _, _),
1039 	PINGROUP(56, blsp4_uart, blsp4_i2c, blsp4_spi, _, _, _, _, _, _),
1040 	PINGROUP(57, blsp4_uart, blsp4_spi, _, _, _, _, _, _, _),
1041 	PINGROUP(58, blsp4_uart, blsp4_spi, _, _, _, _, _, _, _),
1042 	PINGROUP(59, pcie0_clk, _, _, cri_trng0, _, _, _, _, _),
1043 	PINGROUP(60, pcie0_rst, _, _, cri_trng1, _, _, _, _, _),
1044 	PINGROUP(61, pcie0_wake, _, _, cri_trng, _, _, _, _, _),
1045 	PINGROUP(62, sd_card, _, _, _, _, _, _, _, _),
1046 	PINGROUP(63, sd_write, rx0, _, tsens_max, _, _, _, _, _),
1047 	PINGROUP(64, mdc, _, qdss_tracedata_a, _, _, _, _, _, _),
1048 	PINGROUP(65, mdio, _, qdss_tracedata_a, _, _, _, _, _, _),
1049 	PINGROUP(66, pta2_0, wci21, cxc1, qdss_tracedata_a, _, _, _, _, _),
1050 	PINGROUP(67, pta2_1, qdss_tracedata_a, _, _, _, _, _, _, _),
1051 	PINGROUP(68, pta2_2, wci21, cxc1, qdss_tracedata_a, _, _, _, _, _),
1052 	PINGROUP(69, blsp1_uart, blsp1_i2c, blsp1_spi, gcc_plltest, qdss_tracedata_a, _, _, _, _),
1053 	PINGROUP(70, blsp1_uart, blsp1_i2c, blsp1_spi, gcc_tlmm, qdss_tracedata_a, _, _, _, _),
1054 	PINGROUP(71, blsp1_uart, blsp1_spi, gcc_plltest, qdss_tracedata_a, _, _, _, _, _),
1055 	PINGROUP(72, blsp1_uart, blsp1_spi, qdss_tracedata_a, _, _, _, _, _, _),
1056 	PINGROUP(73, blsp3_uart, blsp3_i2c, blsp3_spi, _, qdss_tracedata_a, _, _, _, _),
1057 	PINGROUP(74, blsp3_uart, blsp3_i2c, blsp3_spi, _, qdss_tracedata_a, _, _, _, _),
1058 	PINGROUP(75, blsp3_uart, blsp3_spi, _, qdss_tracedata_a, _, _, _, _, _),
1059 	PINGROUP(76, blsp3_uart, blsp3_spi, _, qdss_tracedata_a, _, _, _, _, _),
1060 	PINGROUP(77, blsp3_spi, _, qdss_tracedata_a, _, _, _, _, _, _),
1061 	PINGROUP(78, blsp3_spi, _, qdss_tracedata_a, _, _, _, _, _, _),
1062 	PINGROUP(79, blsp3_spi, _, qdss_tracedata_a, _, _, _, _, _, _),
1063 };
1064 
1065 static const struct msm_pinctrl_soc_data ipq6018_pinctrl = {
1066 	.pins = ipq6018_pins,
1067 	.npins = ARRAY_SIZE(ipq6018_pins),
1068 	.functions = ipq6018_functions,
1069 	.nfunctions = ARRAY_SIZE(ipq6018_functions),
1070 	.groups = ipq6018_groups,
1071 	.ngroups = ARRAY_SIZE(ipq6018_groups),
1072 	.ngpios = 80,
1073 };
1074 
1075 static int ipq6018_pinctrl_probe(struct platform_device *pdev)
1076 {
1077 	return msm_pinctrl_probe(pdev, &ipq6018_pinctrl);
1078 }
1079 
1080 static const struct of_device_id ipq6018_pinctrl_of_match[] = {
1081 	{ .compatible = "qcom,ipq6018-pinctrl", },
1082 	{ },
1083 };
1084 
1085 static struct platform_driver ipq6018_pinctrl_driver = {
1086 	.driver = {
1087 		.name = "ipq6018-pinctrl",
1088 		.of_match_table = ipq6018_pinctrl_of_match,
1089 	},
1090 	.probe = ipq6018_pinctrl_probe,
1091 	.remove = msm_pinctrl_remove,
1092 };
1093 
1094 static int __init ipq6018_pinctrl_init(void)
1095 {
1096 	return platform_driver_register(&ipq6018_pinctrl_driver);
1097 }
1098 arch_initcall(ipq6018_pinctrl_init);
1099 
1100 static void __exit ipq6018_pinctrl_exit(void)
1101 {
1102 	platform_driver_unregister(&ipq6018_pinctrl_driver);
1103 }
1104 module_exit(ipq6018_pinctrl_exit);
1105 
1106 MODULE_DESCRIPTION("QTI ipq6018 pinctrl driver");
1107 MODULE_LICENSE("GPL v2");
1108 MODULE_DEVICE_TABLE(of, ipq6018_pinctrl_of_match);
1109