1// SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2/*
3 * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
4 */
5
6#include <linux/module.h>
7#include <linux/of.h>
8#include <linux/platform_device.h>
9
10#include "pinctrl-msm.h"
11
12#define REG_SIZE 0x1000
13#define PINGROUP(id, f1, f2, f3, f4, f5, f6, f7, f8, f9) \
14 { \
15 .grp = PINCTRL_PINGROUP("gpio" #id, \
16 gpio##id##_pins, \
17 ARRAY_SIZE(gpio##id##_pins)), \
18 .funcs = (int[]){ \
19 msm_mux_gpio, /* gpio mode */ \
20 msm_mux_##f1, \
21 msm_mux_##f2, \
22 msm_mux_##f3, \
23 msm_mux_##f4, \
24 msm_mux_##f5, \
25 msm_mux_##f6, \
26 msm_mux_##f7, \
27 msm_mux_##f8, \
28 msm_mux_##f9 \
29 }, \
30 .nfuncs = 10, \
31 .ctl_reg = REG_SIZE * id, \
32 .io_reg = 0x4 + REG_SIZE * id, \
33 .intr_cfg_reg = 0x8 + REG_SIZE * id, \
34 .intr_status_reg = 0xc + REG_SIZE * id, \
35 .intr_target_reg = 0x8 + REG_SIZE * id, \
36 .mux_bit = 2, \
37 .pull_bit = 0, \
38 .drv_bit = 6, \
39 .oe_bit = 9, \
40 .in_bit = 0, \
41 .out_bit = 1, \
42 .intr_enable_bit = 0, \
43 .intr_status_bit = 0, \
44 .intr_target_bit = 5, \
45 .intr_target_kpss_val = 3, \
46 .intr_raw_status_bit = 4, \
47 .intr_polarity_bit = 1, \
48 .intr_detection_bit = 2, \
49 .intr_detection_width = 2, \
50 }
51
52static const struct pinctrl_pin_desc ipq5332_pins[] = {
53 PINCTRL_PIN(0, "GPIO_0"),
54 PINCTRL_PIN(1, "GPIO_1"),
55 PINCTRL_PIN(2, "GPIO_2"),
56 PINCTRL_PIN(3, "GPIO_3"),
57 PINCTRL_PIN(4, "GPIO_4"),
58 PINCTRL_PIN(5, "GPIO_5"),
59 PINCTRL_PIN(6, "GPIO_6"),
60 PINCTRL_PIN(7, "GPIO_7"),
61 PINCTRL_PIN(8, "GPIO_8"),
62 PINCTRL_PIN(9, "GPIO_9"),
63 PINCTRL_PIN(10, "GPIO_10"),
64 PINCTRL_PIN(11, "GPIO_11"),
65 PINCTRL_PIN(12, "GPIO_12"),
66 PINCTRL_PIN(13, "GPIO_13"),
67 PINCTRL_PIN(14, "GPIO_14"),
68 PINCTRL_PIN(15, "GPIO_15"),
69 PINCTRL_PIN(16, "GPIO_16"),
70 PINCTRL_PIN(17, "GPIO_17"),
71 PINCTRL_PIN(18, "GPIO_18"),
72 PINCTRL_PIN(19, "GPIO_19"),
73 PINCTRL_PIN(20, "GPIO_20"),
74 PINCTRL_PIN(21, "GPIO_21"),
75 PINCTRL_PIN(22, "GPIO_22"),
76 PINCTRL_PIN(23, "GPIO_23"),
77 PINCTRL_PIN(24, "GPIO_24"),
78 PINCTRL_PIN(25, "GPIO_25"),
79 PINCTRL_PIN(26, "GPIO_26"),
80 PINCTRL_PIN(27, "GPIO_27"),
81 PINCTRL_PIN(28, "GPIO_28"),
82 PINCTRL_PIN(29, "GPIO_29"),
83 PINCTRL_PIN(30, "GPIO_30"),
84 PINCTRL_PIN(31, "GPIO_31"),
85 PINCTRL_PIN(32, "GPIO_32"),
86 PINCTRL_PIN(33, "GPIO_33"),
87 PINCTRL_PIN(34, "GPIO_34"),
88 PINCTRL_PIN(35, "GPIO_35"),
89 PINCTRL_PIN(36, "GPIO_36"),
90 PINCTRL_PIN(37, "GPIO_37"),
91 PINCTRL_PIN(38, "GPIO_38"),
92 PINCTRL_PIN(39, "GPIO_39"),
93 PINCTRL_PIN(40, "GPIO_40"),
94 PINCTRL_PIN(41, "GPIO_41"),
95 PINCTRL_PIN(42, "GPIO_42"),
96 PINCTRL_PIN(43, "GPIO_43"),
97 PINCTRL_PIN(44, "GPIO_44"),
98 PINCTRL_PIN(45, "GPIO_45"),
99 PINCTRL_PIN(46, "GPIO_46"),
100 PINCTRL_PIN(47, "GPIO_47"),
101 PINCTRL_PIN(48, "GPIO_48"),
102 PINCTRL_PIN(49, "GPIO_49"),
103 PINCTRL_PIN(50, "GPIO_50"),
104 PINCTRL_PIN(51, "GPIO_51"),
105 PINCTRL_PIN(52, "GPIO_52"),
106};
107
108#define DECLARE_MSM_GPIO_PINS(pin) \
109 static const unsigned int gpio##pin##_pins[] = { pin }
110DECLARE_MSM_GPIO_PINS(0);
111DECLARE_MSM_GPIO_PINS(1);
112DECLARE_MSM_GPIO_PINS(2);
113DECLARE_MSM_GPIO_PINS(3);
114DECLARE_MSM_GPIO_PINS(4);
115DECLARE_MSM_GPIO_PINS(5);
116DECLARE_MSM_GPIO_PINS(6);
117DECLARE_MSM_GPIO_PINS(7);
118DECLARE_MSM_GPIO_PINS(8);
119DECLARE_MSM_GPIO_PINS(9);
120DECLARE_MSM_GPIO_PINS(10);
121DECLARE_MSM_GPIO_PINS(11);
122DECLARE_MSM_GPIO_PINS(12);
123DECLARE_MSM_GPIO_PINS(13);
124DECLARE_MSM_GPIO_PINS(14);
125DECLARE_MSM_GPIO_PINS(15);
126DECLARE_MSM_GPIO_PINS(16);
127DECLARE_MSM_GPIO_PINS(17);
128DECLARE_MSM_GPIO_PINS(18);
129DECLARE_MSM_GPIO_PINS(19);
130DECLARE_MSM_GPIO_PINS(20);
131DECLARE_MSM_GPIO_PINS(21);
132DECLARE_MSM_GPIO_PINS(22);
133DECLARE_MSM_GPIO_PINS(23);
134DECLARE_MSM_GPIO_PINS(24);
135DECLARE_MSM_GPIO_PINS(25);
136DECLARE_MSM_GPIO_PINS(26);
137DECLARE_MSM_GPIO_PINS(27);
138DECLARE_MSM_GPIO_PINS(28);
139DECLARE_MSM_GPIO_PINS(29);
140DECLARE_MSM_GPIO_PINS(30);
141DECLARE_MSM_GPIO_PINS(31);
142DECLARE_MSM_GPIO_PINS(32);
143DECLARE_MSM_GPIO_PINS(33);
144DECLARE_MSM_GPIO_PINS(34);
145DECLARE_MSM_GPIO_PINS(35);
146DECLARE_MSM_GPIO_PINS(36);
147DECLARE_MSM_GPIO_PINS(37);
148DECLARE_MSM_GPIO_PINS(38);
149DECLARE_MSM_GPIO_PINS(39);
150DECLARE_MSM_GPIO_PINS(40);
151DECLARE_MSM_GPIO_PINS(41);
152DECLARE_MSM_GPIO_PINS(42);
153DECLARE_MSM_GPIO_PINS(43);
154DECLARE_MSM_GPIO_PINS(44);
155DECLARE_MSM_GPIO_PINS(45);
156DECLARE_MSM_GPIO_PINS(46);
157DECLARE_MSM_GPIO_PINS(47);
158DECLARE_MSM_GPIO_PINS(48);
159DECLARE_MSM_GPIO_PINS(49);
160DECLARE_MSM_GPIO_PINS(50);
161DECLARE_MSM_GPIO_PINS(51);
162DECLARE_MSM_GPIO_PINS(52);
163
164enum ipq5332_functions {
165 msm_mux_atest_char,
166 msm_mux_atest_char0,
167 msm_mux_atest_char1,
168 msm_mux_atest_char2,
169 msm_mux_atest_char3,
170 msm_mux_atest_tic,
171 msm_mux_audio_pri,
172 msm_mux_audio_pri0,
173 msm_mux_audio_pri1,
174 msm_mux_audio_sec,
175 msm_mux_audio_sec0,
176 msm_mux_audio_sec1,
177 msm_mux_blsp0_i2c,
178 msm_mux_blsp0_spi,
179 msm_mux_blsp0_uart0,
180 msm_mux_blsp0_uart1,
181 msm_mux_blsp1_i2c0,
182 msm_mux_blsp1_i2c1,
183 msm_mux_blsp1_spi0,
184 msm_mux_blsp1_spi1,
185 msm_mux_blsp1_uart0,
186 msm_mux_blsp1_uart1,
187 msm_mux_blsp1_uart2,
188 msm_mux_blsp2_i2c0,
189 msm_mux_blsp2_i2c1,
190 msm_mux_blsp2_spi,
191 msm_mux_blsp2_spi0,
192 msm_mux_blsp2_spi1,
193 msm_mux_core_voltage,
194 msm_mux_cri_trng0,
195 msm_mux_cri_trng1,
196 msm_mux_cri_trng2,
197 msm_mux_cri_trng3,
198 msm_mux_cxc_clk,
199 msm_mux_cxc_data,
200 msm_mux_dbg_out,
201 msm_mux_gcc_plltest,
202 msm_mux_gcc_tlmm,
203 msm_mux_gpio,
204 msm_mux_lock_det,
205 msm_mux_mac0,
206 msm_mux_mac1,
207 msm_mux_mdc0,
208 msm_mux_mdc1,
209 msm_mux_mdio0,
210 msm_mux_mdio1,
211 msm_mux_pc,
212 msm_mux_pcie0_clk,
213 msm_mux_pcie0_wake,
214 msm_mux_pcie1_clk,
215 msm_mux_pcie1_wake,
216 msm_mux_pcie2_clk,
217 msm_mux_pcie2_wake,
218 msm_mux_pll_test,
219 msm_mux_prng_rosc0,
220 msm_mux_prng_rosc1,
221 msm_mux_prng_rosc2,
222 msm_mux_prng_rosc3,
223 msm_mux_pta,
224 msm_mux_pwm0,
225 msm_mux_pwm1,
226 msm_mux_pwm2,
227 msm_mux_pwm3,
228 msm_mux_qdss_cti_trig_in_a0,
229 msm_mux_qdss_cti_trig_in_a1,
230 msm_mux_qdss_cti_trig_in_b0,
231 msm_mux_qdss_cti_trig_in_b1,
232 msm_mux_qdss_cti_trig_out_a0,
233 msm_mux_qdss_cti_trig_out_a1,
234 msm_mux_qdss_cti_trig_out_b0,
235 msm_mux_qdss_cti_trig_out_b1,
236 msm_mux_qdss_traceclk_a,
237 msm_mux_qdss_traceclk_b,
238 msm_mux_qdss_tracectl_a,
239 msm_mux_qdss_tracectl_b,
240 msm_mux_qdss_tracedata_a,
241 msm_mux_qdss_tracedata_b,
242 msm_mux_qspi_data,
243 msm_mux_qspi_clk,
244 msm_mux_qspi_cs,
245 msm_mux_resout,
246 msm_mux_rx0,
247 msm_mux_rx1,
248 msm_mux_sdc_data,
249 msm_mux_sdc_clk,
250 msm_mux_sdc_cmd,
251 msm_mux_tsens_max,
252 msm_mux_wci_txd,
253 msm_mux_wci_rxd,
254 msm_mux_wsi_clk,
255 msm_mux_wsi_clk3,
256 msm_mux_wsi_data,
257 msm_mux_wsi_data3,
258 msm_mux_wsis_reset,
259 msm_mux_xfem,
260 msm_mux__,
261};
262
263static const char * const gpio_groups[] = {
264 "gpio0", "gpio1", "gpio2", "gpio3", "gpio4", "gpio5", "gpio6", "gpio7",
265 "gpio8", "gpio9", "gpio10", "gpio11", "gpio12", "gpio13", "gpio14",
266 "gpio15", "gpio16", "gpio17", "gpio18", "gpio19", "gpio20", "gpio21",
267 "gpio22", "gpio23", "gpio24", "gpio25", "gpio26", "gpio27", "gpio28",
268 "gpio29", "gpio30", "gpio31", "gpio32", "gpio33", "gpio34", "gpio35",
269 "gpio36", "gpio37", "gpio38", "gpio39", "gpio40", "gpio41", "gpio42",
270 "gpio43", "gpio44", "gpio45", "gpio46", "gpio47", "gpio48", "gpio49",
271 "gpio50", "gpio51", "gpio52",
272};
273
274static const char * const atest_char_groups[] = {
275 "gpio46",
276};
277
278static const char * const atest_char0_groups[] = {
279 "gpio0",
280};
281
282static const char * const atest_char1_groups[] = {
283 "gpio1",
284};
285
286static const char * const atest_char2_groups[] = {
287 "gpio2",
288};
289
290static const char * const atest_char3_groups[] = {
291 "gpio3",
292};
293
294static const char * const atest_tic_groups[] = {
295 "gpio9",
296};
297
298static const char * const audio_pri_groups[] = {
299 "gpio29", "gpio30", "gpio31", "gpio32",
300};
301
302static const char * const audio_pri0_groups[] = {
303 "gpio34", "gpio34",
304};
305
306static const char * const audio_pri1_groups[] = {
307 "gpio43", "gpio43",
308};
309
310static const char * const audio_sec_groups[] = {
311 "gpio33", "gpio34", "gpio35", "gpio36",
312};
313
314static const char * const audio_sec0_groups[] = {
315 "gpio30", "gpio30",
316};
317
318static const char * const audio_sec1_groups[] = {
319 "gpio45", "gpio45",
320};
321
322static const char * const blsp0_i2c_groups[] = {
323 "gpio16", "gpio17",
324};
325
326static const char * const blsp0_spi_groups[] = {
327 "gpio14", "gpio15", "gpio16", "gpio17",
328};
329
330static const char * const blsp0_uart0_groups[] = {
331 "gpio18", "gpio19",
332};
333
334static const char * const blsp0_uart1_groups[] = {
335 "gpio27", "gpio28",
336};
337
338static const char * const blsp1_i2c0_groups[] = {
339 "gpio29", "gpio30",
340};
341
342static const char * const blsp1_i2c1_groups[] = {
343 "gpio40", "gpio41",
344};
345
346static const char * const blsp1_spi0_groups[] = {
347 "gpio29", "gpio30", "gpio31", "gpio32",
348};
349
350static const char * const blsp1_spi1_groups[] = {
351 "gpio25", "gpio26", "gpio27", "gpio28",
352};
353
354static const char * const blsp1_uart0_groups[] = {
355 "gpio14", "gpio15", "gpio16", "gpio17",
356};
357
358static const char * const blsp1_uart1_groups[] = {
359 "gpio25", "gpio26", "gpio27", "gpio28",
360};
361
362static const char * const blsp1_uart2_groups[] = {
363 "gpio33", "gpio34", "gpio35", "gpio36",
364};
365
366static const char * const blsp2_i2c0_groups[] = {
367 "gpio43", "gpio45",
368};
369
370static const char * const blsp2_i2c1_groups[] = {
371 "gpio33", "gpio34",
372};
373
374static const char * const blsp2_spi_groups[] = {
375 "gpio37",
376};
377
378static const char * const blsp2_spi0_groups[] = {
379 "gpio33", "gpio34", "gpio35", "gpio36",
380};
381
382static const char * const blsp2_spi1_groups[] = {
383 "gpio40", "gpio41", "gpio42", "gpio52",
384};
385
386static const char * const core_voltage_groups[] = {
387 "gpio21", "gpio23",
388};
389
390static const char * const cri_trng0_groups[] = {
391 "gpio17",
392};
393
394static const char * const cri_trng1_groups[] = {
395 "gpio18",
396};
397
398static const char * const cri_trng2_groups[] = {
399 "gpio19",
400};
401
402static const char * const cri_trng3_groups[] = {
403 "gpio20",
404};
405
406static const char * const cxc_clk_groups[] = {
407 "gpio49",
408};
409
410static const char * const cxc_data_groups[] = {
411 "gpio50",
412};
413
414static const char * const dbg_out_groups[] = {
415 "gpio48",
416};
417
418static const char * const gcc_plltest_groups[] = {
419 "gpio43", "gpio45",
420};
421
422static const char * const gcc_tlmm_groups[] = {
423 "gpio44",
424};
425
426static const char * const lock_det_groups[] = {
427 "gpio51",
428};
429
430static const char * const mac0_groups[] = {
431 "gpio18",
432};
433
434static const char * const mac1_groups[] = {
435 "gpio19",
436};
437
438static const char * const mdc0_groups[] = {
439 "gpio25",
440};
441
442static const char * const mdc1_groups[] = {
443 "gpio27",
444};
445
446static const char * const mdio0_groups[] = {
447 "gpio26",
448};
449
450static const char * const mdio1_groups[] = {
451 "gpio28",
452};
453
454static const char * const pc_groups[] = {
455 "gpio35",
456};
457
458static const char * const pcie0_clk_groups[] = {
459 "gpio37",
460};
461
462static const char * const pcie0_wake_groups[] = {
463 "gpio39",
464};
465
466static const char * const pcie1_clk_groups[] = {
467 "gpio46",
468};
469
470static const char * const pcie1_wake_groups[] = {
471 "gpio48",
472};
473
474static const char * const pcie2_clk_groups[] = {
475 "gpio43",
476};
477
478static const char * const pcie2_wake_groups[] = {
479 "gpio45",
480};
481
482static const char * const pll_test_groups[] = {
483 "gpio49",
484};
485
486static const char * const prng_rosc0_groups[] = {
487 "gpio22",
488};
489
490static const char * const prng_rosc1_groups[] = {
491 "gpio24",
492};
493
494static const char * const prng_rosc2_groups[] = {
495 "gpio25",
496};
497
498static const char * const prng_rosc3_groups[] = {
499 "gpio26",
500};
501
502static const char * const pta_groups[] = {
503 "gpio49", "gpio50", "gpio51",
504};
505
506static const char * const pwm0_groups[] = {
507 "gpio43", "gpio44", "gpio45", "gpio46",
508};
509
510static const char * const pwm1_groups[] = {
511 "gpio29", "gpio30", "gpio31", "gpio32",
512};
513
514static const char * const pwm2_groups[] = {
515 "gpio25", "gpio26", "gpio27", "gpio28",
516};
517
518static const char * const pwm3_groups[] = {
519 "gpio8", "gpio9", "gpio10", "gpio11",
520};
521
522static const char * const qdss_cti_trig_in_a0_groups[] = {
523 "gpio5",
524};
525
526static const char * const qdss_cti_trig_in_a1_groups[] = {
527 "gpio7",
528};
529
530static const char * const qdss_cti_trig_in_b0_groups[] = {
531 "gpio47",
532};
533
534static const char * const qdss_cti_trig_in_b1_groups[] = {
535 "gpio49",
536};
537
538static const char * const qdss_cti_trig_out_a0_groups[] = {
539 "gpio4",
540};
541
542static const char * const qdss_cti_trig_out_a1_groups[] = {
543 "gpio6",
544};
545
546static const char * const qdss_cti_trig_out_b0_groups[] = {
547 "gpio46",
548};
549
550static const char * const qdss_cti_trig_out_b1_groups[] = {
551 "gpio48",
552};
553
554static const char * const qdss_traceclk_a_groups[] = {
555 "gpio8",
556};
557
558static const char * const qdss_traceclk_b_groups[] = {
559 "gpio45",
560};
561
562static const char * const qdss_tracectl_a_groups[] = {
563 "gpio9",
564};
565
566static const char * const qdss_tracectl_b_groups[] = {
567 "gpio44",
568};
569
570static const char * const qdss_tracedata_a_groups[] = {
571 "gpio10", "gpio11", "gpio12", "gpio13", "gpio14", "gpio15", "gpio16",
572 "gpio17", "gpio18", "gpio19", "gpio20", "gpio22", "gpio24", "gpio25",
573 "gpio26", "gpio27",
574};
575
576static const char * const qdss_tracedata_b_groups[] = {
577 "gpio29", "gpio30", "gpio31", "gpio32", "gpio33", "gpio34", "gpio35",
578 "gpio36", "gpio37", "gpio38", "gpio39", "gpio40", "gpio41", "gpio42",
579 "gpio43", "gpio52",
580};
581
582static const char * const qspi_clk_groups[] = {
583 "gpio13",
584};
585
586static const char * const qspi_cs_groups[] = {
587 "gpio12",
588};
589
590static const char * const qspi_data_groups[] = {
591 "gpio8", "gpio9", "gpio10", "gpio11",
592};
593
594static const char * const resout_groups[] = {
595 "gpio20",
596};
597
598static const char * const rx0_groups[] = {
599 "gpio48",
600};
601
602static const char * const rx1_groups[] = {
603 "gpio45",
604};
605
606static const char * const sdc_clk_groups[] = {
607 "gpio13",
608};
609
610static const char * const sdc_cmd_groups[] = {
611 "gpio12",
612};
613
614static const char * const sdc_data_groups[] = {
615 "gpio8", "gpio9", "gpio10", "gpio11",
616};
617
618static const char * const tsens_max_groups[] = {
619 "gpio28",
620};
621
622static const char * const wci_txd_groups[] = {
623 "gpio0", "gpio1", "gpio2", "gpio3", "gpio4", "gpio5", "gpio6", "gpio7",
624 "gpio36", "gpio43", "gpio45",
625};
626
627static const char * const wci_rxd_groups[] = {
628 "gpio0", "gpio1", "gpio2", "gpio3", "gpio4", "gpio5", "gpio6", "gpio7",
629 "gpio35", "gpio36", "gpio43", "gpio45",
630};
631
632static const char * const wsi_clk_groups[] = {
633 "gpio40", "gpio42",
634};
635
636static const char * const wsi_clk3_groups[] = {
637 "gpio43",
638};
639
640static const char * const wsi_data_groups[] = {
641 "gpio41", "gpio52",
642};
643
644static const char * const wsi_data3_groups[] = {
645 "gpio44",
646};
647
648static const char * const wsis_reset_groups[] = {
649 "gpio41",
650};
651
652static const char * const xfem_groups[] = {
653 "gpio0", "gpio1", "gpio2", "gpio3", "gpio4", "gpio5", "gpio6", "gpio7",
654};
655
656static const struct pinfunction ipq5332_functions[] = {
657 MSM_PIN_FUNCTION(atest_char),
658 MSM_PIN_FUNCTION(atest_char0),
659 MSM_PIN_FUNCTION(atest_char1),
660 MSM_PIN_FUNCTION(atest_char2),
661 MSM_PIN_FUNCTION(atest_char3),
662 MSM_PIN_FUNCTION(atest_tic),
663 MSM_PIN_FUNCTION(audio_pri),
664 MSM_PIN_FUNCTION(audio_pri0),
665 MSM_PIN_FUNCTION(audio_pri1),
666 MSM_PIN_FUNCTION(audio_sec),
667 MSM_PIN_FUNCTION(audio_sec0),
668 MSM_PIN_FUNCTION(audio_sec1),
669 MSM_PIN_FUNCTION(blsp0_i2c),
670 MSM_PIN_FUNCTION(blsp0_spi),
671 MSM_PIN_FUNCTION(blsp0_uart0),
672 MSM_PIN_FUNCTION(blsp0_uart1),
673 MSM_PIN_FUNCTION(blsp1_i2c0),
674 MSM_PIN_FUNCTION(blsp1_i2c1),
675 MSM_PIN_FUNCTION(blsp1_spi0),
676 MSM_PIN_FUNCTION(blsp1_spi1),
677 MSM_PIN_FUNCTION(blsp1_uart0),
678 MSM_PIN_FUNCTION(blsp1_uart1),
679 MSM_PIN_FUNCTION(blsp1_uart2),
680 MSM_PIN_FUNCTION(blsp2_i2c0),
681 MSM_PIN_FUNCTION(blsp2_i2c1),
682 MSM_PIN_FUNCTION(blsp2_spi),
683 MSM_PIN_FUNCTION(blsp2_spi0),
684 MSM_PIN_FUNCTION(blsp2_spi1),
685 MSM_PIN_FUNCTION(core_voltage),
686 MSM_PIN_FUNCTION(cri_trng0),
687 MSM_PIN_FUNCTION(cri_trng1),
688 MSM_PIN_FUNCTION(cri_trng2),
689 MSM_PIN_FUNCTION(cri_trng3),
690 MSM_PIN_FUNCTION(cxc_clk),
691 MSM_PIN_FUNCTION(cxc_data),
692 MSM_PIN_FUNCTION(dbg_out),
693 MSM_PIN_FUNCTION(gcc_plltest),
694 MSM_PIN_FUNCTION(gcc_tlmm),
695 MSM_PIN_FUNCTION(gpio),
696 MSM_PIN_FUNCTION(lock_det),
697 MSM_PIN_FUNCTION(mac0),
698 MSM_PIN_FUNCTION(mac1),
699 MSM_PIN_FUNCTION(mdc0),
700 MSM_PIN_FUNCTION(mdc1),
701 MSM_PIN_FUNCTION(mdio0),
702 MSM_PIN_FUNCTION(mdio1),
703 MSM_PIN_FUNCTION(pc),
704 MSM_PIN_FUNCTION(pcie0_clk),
705 MSM_PIN_FUNCTION(pcie0_wake),
706 MSM_PIN_FUNCTION(pcie1_clk),
707 MSM_PIN_FUNCTION(pcie1_wake),
708 MSM_PIN_FUNCTION(pcie2_clk),
709 MSM_PIN_FUNCTION(pcie2_wake),
710 MSM_PIN_FUNCTION(pll_test),
711 MSM_PIN_FUNCTION(prng_rosc0),
712 MSM_PIN_FUNCTION(prng_rosc1),
713 MSM_PIN_FUNCTION(prng_rosc2),
714 MSM_PIN_FUNCTION(prng_rosc3),
715 MSM_PIN_FUNCTION(pta),
716 MSM_PIN_FUNCTION(pwm0),
717 MSM_PIN_FUNCTION(pwm1),
718 MSM_PIN_FUNCTION(pwm2),
719 MSM_PIN_FUNCTION(pwm3),
720 MSM_PIN_FUNCTION(qdss_cti_trig_in_a0),
721 MSM_PIN_FUNCTION(qdss_cti_trig_in_a1),
722 MSM_PIN_FUNCTION(qdss_cti_trig_in_b0),
723 MSM_PIN_FUNCTION(qdss_cti_trig_in_b1),
724 MSM_PIN_FUNCTION(qdss_cti_trig_out_a0),
725 MSM_PIN_FUNCTION(qdss_cti_trig_out_a1),
726 MSM_PIN_FUNCTION(qdss_cti_trig_out_b0),
727 MSM_PIN_FUNCTION(qdss_cti_trig_out_b1),
728 MSM_PIN_FUNCTION(qdss_traceclk_a),
729 MSM_PIN_FUNCTION(qdss_traceclk_b),
730 MSM_PIN_FUNCTION(qdss_tracectl_a),
731 MSM_PIN_FUNCTION(qdss_tracectl_b),
732 MSM_PIN_FUNCTION(qdss_tracedata_a),
733 MSM_PIN_FUNCTION(qdss_tracedata_b),
734 MSM_PIN_FUNCTION(qspi_data),
735 MSM_PIN_FUNCTION(qspi_clk),
736 MSM_PIN_FUNCTION(qspi_cs),
737 MSM_PIN_FUNCTION(resout),
738 MSM_PIN_FUNCTION(rx0),
739 MSM_PIN_FUNCTION(rx1),
740 MSM_PIN_FUNCTION(sdc_data),
741 MSM_PIN_FUNCTION(sdc_clk),
742 MSM_PIN_FUNCTION(sdc_cmd),
743 MSM_PIN_FUNCTION(tsens_max),
744 MSM_PIN_FUNCTION(wci_txd),
745 MSM_PIN_FUNCTION(wci_rxd),
746 MSM_PIN_FUNCTION(wsi_clk),
747 MSM_PIN_FUNCTION(wsi_clk3),
748 MSM_PIN_FUNCTION(wsi_data),
749 MSM_PIN_FUNCTION(wsi_data3),
750 MSM_PIN_FUNCTION(wsis_reset),
751 MSM_PIN_FUNCTION(xfem),
752};
753
754static const struct msm_pingroup ipq5332_groups[] = {
755 PINGROUP(0, atest_char0, wci_txd, wci_rxd, xfem, _, _, _, _, _),
756 PINGROUP(1, atest_char1, wci_txd, wci_rxd, xfem, _, _, _, _, _),
757 PINGROUP(2, atest_char2, wci_txd, wci_rxd, xfem, _, _, _, _, _),
758 PINGROUP(3, atest_char3, wci_txd, wci_rxd, xfem, _, _, _, _, _),
759 PINGROUP(4, qdss_cti_trig_out_a0, wci_txd, wci_rxd, xfem, _, _, _, _, _),
760 PINGROUP(5, qdss_cti_trig_in_a0, wci_txd, wci_rxd, xfem, _, _, _, _, _),
761 PINGROUP(6, qdss_cti_trig_out_a1, wci_txd, wci_rxd, xfem, _, _, _, _, _),
762 PINGROUP(7, qdss_cti_trig_in_a1, wci_txd, wci_rxd, xfem, _, _, _, _, _),
763 PINGROUP(8, sdc_data, qspi_data, pwm3, qdss_traceclk_a, _, _, _, _, _),
764 PINGROUP(9, sdc_data, qspi_data, pwm3, qdss_tracectl_a, _, atest_tic, _, _, _),
765 PINGROUP(10, sdc_data, qspi_data, pwm3, qdss_tracedata_a, _, _, _, _, _),
766 PINGROUP(11, sdc_data, qspi_data, pwm3, qdss_tracedata_a, _, _, _, _, _),
767 PINGROUP(12, sdc_cmd, qspi_cs, qdss_tracedata_a, _, _, _, _, _, _),
768 PINGROUP(13, sdc_clk, qspi_clk, qdss_tracedata_a, _, _, _, _, _, _),
769 PINGROUP(14, blsp0_spi, blsp1_uart0, qdss_tracedata_a, _, _, _, _, _, _),
770 PINGROUP(15, blsp0_spi, blsp1_uart0, qdss_tracedata_a, _, _, _, _, _, _),
771 PINGROUP(16, blsp0_spi, blsp0_i2c, blsp1_uart0, _, qdss_tracedata_a, _, _, _, _),
772 PINGROUP(17, blsp0_spi, blsp0_i2c, blsp1_uart0, _, cri_trng0, qdss_tracedata_a, _, _, _),
773 PINGROUP(18, blsp0_uart0, mac0, _, cri_trng1, qdss_tracedata_a, _, _, _, _),
774 PINGROUP(19, blsp0_uart0, mac1, _, cri_trng2, qdss_tracedata_a, _, _, _, _),
775 PINGROUP(20, resout, _, cri_trng3, qdss_tracedata_a, _, _, _, _, _),
776 PINGROUP(21, core_voltage, _, _, _, _, _, _, _, _),
777 PINGROUP(22, _, prng_rosc0, qdss_tracedata_a, _, _, _, _, _, _),
778 PINGROUP(23, core_voltage, _, _, _, _, _, _, _, _),
779 PINGROUP(24, _, prng_rosc1, qdss_tracedata_a, _, _, _, _, _, _),
780 PINGROUP(25, mdc0, blsp1_uart1, blsp1_spi1, pwm2, _, _, prng_rosc2, qdss_tracedata_a, _),
781 PINGROUP(26, mdio0, blsp1_uart1, blsp1_spi1, pwm2, _, _, prng_rosc3, qdss_tracedata_a, _),
782 PINGROUP(27, mdc1, blsp0_uart1, blsp1_uart1, blsp1_spi1, pwm2, _, _, qdss_tracedata_a, _),
783 PINGROUP(28, mdio1, blsp0_uart1, blsp1_uart1, blsp1_spi1, pwm2, _, tsens_max, _, _),
784 PINGROUP(29, audio_pri, blsp1_spi0, blsp1_i2c0, pwm1, _, qdss_tracedata_b, _, _, _),
785 PINGROUP(30, audio_pri, blsp1_spi0, blsp1_i2c0, pwm1, audio_sec0, audio_sec0, _, qdss_tracedata_b, _),
786 PINGROUP(31, audio_pri, blsp1_spi0, pwm1, _, qdss_tracedata_b, _, _, _, _),
787 PINGROUP(32, audio_pri, blsp1_spi0, pwm1, _, qdss_tracedata_b, _, _, _, _),
788 PINGROUP(33, audio_sec, blsp1_uart2, blsp2_i2c1, blsp2_spi0, _, qdss_tracedata_b, _, _, _),
789 PINGROUP(34, audio_sec, blsp1_uart2, blsp2_i2c1, blsp2_spi0, audio_pri0, audio_pri0, _, qdss_tracedata_b, _),
790 PINGROUP(35, audio_sec, blsp1_uart2, pc, wci_rxd, blsp2_spi0, _, qdss_tracedata_b, _, _),
791 PINGROUP(36, audio_sec, blsp1_uart2, wci_txd, wci_rxd, blsp2_spi0, _, qdss_tracedata_b, _, _),
792 PINGROUP(37, pcie0_clk, blsp2_spi, _, qdss_tracedata_b, _, _, _, _, _),
793 PINGROUP(38, _, qdss_tracedata_b, _, _, _, _, _, _, _),
794 PINGROUP(39, pcie0_wake, _, qdss_tracedata_b, _, _, _, _, _, _),
795 PINGROUP(40, wsi_clk, blsp1_i2c1, blsp2_spi1, _, _, qdss_tracedata_b, _, _, _),
796 PINGROUP(41, wsi_data, blsp1_i2c1, blsp2_spi1, _, _, qdss_tracedata_b, _, wsis_reset, _),
797 PINGROUP(42, wsi_clk, blsp2_spi1, _, qdss_tracedata_b, _, _, _, _, _),
798 PINGROUP(43, pcie2_clk, wci_txd, wci_rxd, blsp2_i2c0, pwm0, audio_pri1, audio_pri1, _, gcc_plltest),
799 PINGROUP(44, pwm0, _, gcc_tlmm, qdss_tracectl_b, _, wsi_data3, _, _, _),
800 PINGROUP(45, pcie2_wake, wci_txd, wci_rxd, blsp2_i2c0, rx1, pwm0, audio_sec1, audio_sec1, _),
801 PINGROUP(46, pcie1_clk, atest_char, pwm0, _, qdss_cti_trig_out_b0, _, _, _, _),
802 PINGROUP(47, _, qdss_cti_trig_in_b0, _, _, _, _, _, _, _),
803 PINGROUP(48, pcie1_wake, rx0, dbg_out, qdss_cti_trig_out_b1, _, _, _, _, _),
804 PINGROUP(49, pta, cxc_clk, pll_test, _, qdss_cti_trig_in_b1, _, _, _, _),
805 PINGROUP(50, pta, cxc_data, _, _, _, _, _, _, _),
806 PINGROUP(51, pta, lock_det, _, _, _, _, _, _, _),
807 PINGROUP(52, wsi_data, blsp2_spi1, _, qdss_tracedata_b, _, _, _, _, _),
808};
809
810static const struct msm_pinctrl_soc_data ipq5332_pinctrl = {
811 .pins = ipq5332_pins,
812 .npins = ARRAY_SIZE(ipq5332_pins),
813 .functions = ipq5332_functions,
814 .nfunctions = ARRAY_SIZE(ipq5332_functions),
815 .groups = ipq5332_groups,
816 .ngroups = ARRAY_SIZE(ipq5332_groups),
817 .ngpios = 53,
818};
819
820static int ipq5332_pinctrl_probe(struct platform_device *pdev)
821{
822 return msm_pinctrl_probe(pdev, soc_data: &ipq5332_pinctrl);
823}
824
825static const struct of_device_id ipq5332_pinctrl_of_match[] = {
826 { .compatible = "qcom,ipq5332-tlmm", },
827 { },
828};
829MODULE_DEVICE_TABLE(of, ipq5332_pinctrl_of_match);
830
831static struct platform_driver ipq5332_pinctrl_driver = {
832 .driver = {
833 .name = "ipq5332-tlmm",
834 .of_match_table = ipq5332_pinctrl_of_match,
835 },
836 .probe = ipq5332_pinctrl_probe,
837 .remove_new = msm_pinctrl_remove,
838};
839
840static int __init ipq5332_pinctrl_init(void)
841{
842 return platform_driver_register(&ipq5332_pinctrl_driver);
843}
844arch_initcall(ipq5332_pinctrl_init);
845
846static void __exit ipq5332_pinctrl_exit(void)
847{
848 platform_driver_unregister(&ipq5332_pinctrl_driver);
849}
850module_exit(ipq5332_pinctrl_exit);
851
852MODULE_DESCRIPTION("QTI IPQ5332 TLMM driver");
853MODULE_LICENSE("GPL");
854

source code of linux/drivers/pinctrl/qcom/pinctrl-ipq5332.c