1*725d1c89SSricharan Ramabadhran // SPDX-License-Identifier: GPL-2.0-only
2*725d1c89SSricharan Ramabadhran /*
3*725d1c89SSricharan Ramabadhran  * Copyright (c) 2019-2021, 2023 The Linux Foundation. All rights reserved.
4*725d1c89SSricharan Ramabadhran  */
5*725d1c89SSricharan Ramabadhran 
6*725d1c89SSricharan Ramabadhran #include <linux/module.h>
7*725d1c89SSricharan Ramabadhran #include <linux/mod_devicetable.h>
8*725d1c89SSricharan Ramabadhran #include <linux/platform_device.h>
9*725d1c89SSricharan Ramabadhran 
10*725d1c89SSricharan Ramabadhran #include "pinctrl-msm.h"
11*725d1c89SSricharan Ramabadhran 
12*725d1c89SSricharan Ramabadhran #define REG_SIZE 0x1000
13*725d1c89SSricharan Ramabadhran #define PINGROUP(id, f1, f2, f3, f4, f5, f6, f7, f8, f9)	\
14*725d1c89SSricharan Ramabadhran 	{					        \
15*725d1c89SSricharan Ramabadhran 		.grp = PINCTRL_PINGROUP("gpio" #id,	\
16*725d1c89SSricharan Ramabadhran 			gpio##id##_pins,		\
17*725d1c89SSricharan Ramabadhran 			ARRAY_SIZE(gpio##id##_pins)),	\
18*725d1c89SSricharan Ramabadhran 		.funcs = (int[]){			\
19*725d1c89SSricharan Ramabadhran 			msm_mux_gpio, /* gpio mode */	\
20*725d1c89SSricharan Ramabadhran 			msm_mux_##f1,			\
21*725d1c89SSricharan Ramabadhran 			msm_mux_##f2,			\
22*725d1c89SSricharan Ramabadhran 			msm_mux_##f3,			\
23*725d1c89SSricharan Ramabadhran 			msm_mux_##f4,			\
24*725d1c89SSricharan Ramabadhran 			msm_mux_##f5,			\
25*725d1c89SSricharan Ramabadhran 			msm_mux_##f6,			\
26*725d1c89SSricharan Ramabadhran 			msm_mux_##f7,			\
27*725d1c89SSricharan Ramabadhran 			msm_mux_##f8,			\
28*725d1c89SSricharan Ramabadhran 			msm_mux_##f9			\
29*725d1c89SSricharan Ramabadhran 		},				        \
30*725d1c89SSricharan Ramabadhran 		.nfuncs = 10,				\
31*725d1c89SSricharan Ramabadhran 		.ctl_reg = REG_SIZE * id,		\
32*725d1c89SSricharan Ramabadhran 		.io_reg = 0x4 + REG_SIZE * id,		\
33*725d1c89SSricharan Ramabadhran 		.intr_cfg_reg = 0x8 + REG_SIZE * id,	\
34*725d1c89SSricharan Ramabadhran 		.intr_status_reg = 0xc + REG_SIZE * id,	\
35*725d1c89SSricharan Ramabadhran 		.intr_target_reg = 0x8 + REG_SIZE * id,	\
36*725d1c89SSricharan Ramabadhran 		.mux_bit = 2,			\
37*725d1c89SSricharan Ramabadhran 		.pull_bit = 0,			\
38*725d1c89SSricharan Ramabadhran 		.drv_bit = 6,			\
39*725d1c89SSricharan Ramabadhran 		.oe_bit = 9,			\
40*725d1c89SSricharan Ramabadhran 		.in_bit = 0,			\
41*725d1c89SSricharan Ramabadhran 		.out_bit = 1,			\
42*725d1c89SSricharan Ramabadhran 		.intr_enable_bit = 0,		\
43*725d1c89SSricharan Ramabadhran 		.intr_status_bit = 0,		\
44*725d1c89SSricharan Ramabadhran 		.intr_target_bit = 5,		\
45*725d1c89SSricharan Ramabadhran 		.intr_target_kpss_val = 3,	\
46*725d1c89SSricharan Ramabadhran 		.intr_raw_status_bit = 4,	\
47*725d1c89SSricharan Ramabadhran 		.intr_polarity_bit = 1,		\
48*725d1c89SSricharan Ramabadhran 		.intr_detection_bit = 2,	\
49*725d1c89SSricharan Ramabadhran 		.intr_detection_width = 2,	\
50*725d1c89SSricharan Ramabadhran 	}
51*725d1c89SSricharan Ramabadhran 
52*725d1c89SSricharan Ramabadhran static const struct pinctrl_pin_desc ipq5018_pins[] = {
53*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(0, "GPIO_0"),
54*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(1, "GPIO_1"),
55*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(2, "GPIO_2"),
56*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(3, "GPIO_3"),
57*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(4, "GPIO_4"),
58*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(5, "GPIO_5"),
59*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(6, "GPIO_6"),
60*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(7, "GPIO_7"),
61*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(8, "GPIO_8"),
62*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(9, "GPIO_9"),
63*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(10, "GPIO_10"),
64*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(11, "GPIO_11"),
65*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(12, "GPIO_12"),
66*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(13, "GPIO_13"),
67*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(14, "GPIO_14"),
68*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(15, "GPIO_15"),
69*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(16, "GPIO_16"),
70*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(17, "GPIO_17"),
71*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(18, "GPIO_18"),
72*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(19, "GPIO_19"),
73*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(20, "GPIO_20"),
74*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(21, "GPIO_21"),
75*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(22, "GPIO_22"),
76*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(23, "GPIO_23"),
77*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(24, "GPIO_24"),
78*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(25, "GPIO_25"),
79*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(26, "GPIO_26"),
80*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(27, "GPIO_27"),
81*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(28, "GPIO_28"),
82*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(29, "GPIO_29"),
83*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(30, "GPIO_30"),
84*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(31, "GPIO_31"),
85*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(32, "GPIO_32"),
86*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(33, "GPIO_33"),
87*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(34, "GPIO_34"),
88*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(35, "GPIO_35"),
89*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(36, "GPIO_36"),
90*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(37, "GPIO_37"),
91*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(38, "GPIO_38"),
92*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(39, "GPIO_39"),
93*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(40, "GPIO_40"),
94*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(41, "GPIO_41"),
95*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(42, "GPIO_42"),
96*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(43, "GPIO_43"),
97*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(44, "GPIO_44"),
98*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(45, "GPIO_45"),
99*725d1c89SSricharan Ramabadhran 	PINCTRL_PIN(46, "GPIO_46"),
100*725d1c89SSricharan Ramabadhran };
101*725d1c89SSricharan Ramabadhran 
102*725d1c89SSricharan Ramabadhran #define DECLARE_MSM_GPIO_PINS(pin) \
103*725d1c89SSricharan Ramabadhran 	static const unsigned int gpio##pin##_pins[] = { pin }
104*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(0);
105*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(1);
106*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(2);
107*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(3);
108*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(4);
109*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(5);
110*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(6);
111*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(7);
112*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(8);
113*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(9);
114*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(10);
115*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(11);
116*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(12);
117*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(13);
118*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(14);
119*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(15);
120*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(16);
121*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(17);
122*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(18);
123*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(19);
124*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(20);
125*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(21);
126*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(22);
127*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(23);
128*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(24);
129*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(25);
130*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(26);
131*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(27);
132*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(28);
133*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(29);
134*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(30);
135*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(31);
136*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(32);
137*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(33);
138*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(34);
139*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(35);
140*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(36);
141*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(37);
142*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(38);
143*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(39);
144*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(40);
145*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(41);
146*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(42);
147*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(43);
148*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(44);
149*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(45);
150*725d1c89SSricharan Ramabadhran DECLARE_MSM_GPIO_PINS(46);
151*725d1c89SSricharan Ramabadhran 
152*725d1c89SSricharan Ramabadhran enum ipq5018_functions {
153*725d1c89SSricharan Ramabadhran 	msm_mux_atest_char,
154*725d1c89SSricharan Ramabadhran 	msm_mux_audio_pdm0,
155*725d1c89SSricharan Ramabadhran 	msm_mux_audio_pdm1,
156*725d1c89SSricharan Ramabadhran 	msm_mux_audio_rxbclk,
157*725d1c89SSricharan Ramabadhran 	msm_mux_audio_rxd,
158*725d1c89SSricharan Ramabadhran 	msm_mux_audio_rxfsync,
159*725d1c89SSricharan Ramabadhran 	msm_mux_audio_rxmclk,
160*725d1c89SSricharan Ramabadhran 	msm_mux_audio_txbclk,
161*725d1c89SSricharan Ramabadhran 	msm_mux_audio_txd,
162*725d1c89SSricharan Ramabadhran 	msm_mux_audio_txfsync,
163*725d1c89SSricharan Ramabadhran 	msm_mux_audio_txmclk,
164*725d1c89SSricharan Ramabadhran 	msm_mux_blsp0_i2c,
165*725d1c89SSricharan Ramabadhran 	msm_mux_blsp0_spi,
166*725d1c89SSricharan Ramabadhran 	msm_mux_blsp0_uart0,
167*725d1c89SSricharan Ramabadhran 	msm_mux_blsp0_uart1,
168*725d1c89SSricharan Ramabadhran 	msm_mux_blsp1_i2c0,
169*725d1c89SSricharan Ramabadhran 	msm_mux_blsp1_i2c1,
170*725d1c89SSricharan Ramabadhran 	msm_mux_blsp1_spi0,
171*725d1c89SSricharan Ramabadhran 	msm_mux_blsp1_spi1,
172*725d1c89SSricharan Ramabadhran 	msm_mux_blsp1_uart0,
173*725d1c89SSricharan Ramabadhran 	msm_mux_blsp1_uart1,
174*725d1c89SSricharan Ramabadhran 	msm_mux_blsp1_uart2,
175*725d1c89SSricharan Ramabadhran 	msm_mux_blsp2_i2c0,
176*725d1c89SSricharan Ramabadhran 	msm_mux_blsp2_i2c1,
177*725d1c89SSricharan Ramabadhran 	msm_mux_blsp2_spi,
178*725d1c89SSricharan Ramabadhran 	msm_mux_blsp2_spi0,
179*725d1c89SSricharan Ramabadhran 	msm_mux_blsp2_spi1,
180*725d1c89SSricharan Ramabadhran 	msm_mux_btss,
181*725d1c89SSricharan Ramabadhran 	msm_mux_burn0,
182*725d1c89SSricharan Ramabadhran 	msm_mux_burn1,
183*725d1c89SSricharan Ramabadhran 	msm_mux_cri_trng,
184*725d1c89SSricharan Ramabadhran 	msm_mux_cri_trng0,
185*725d1c89SSricharan Ramabadhran 	msm_mux_cri_trng1,
186*725d1c89SSricharan Ramabadhran 	msm_mux_cxc_clk,
187*725d1c89SSricharan Ramabadhran 	msm_mux_cxc_data,
188*725d1c89SSricharan Ramabadhran 	msm_mux_dbg_out,
189*725d1c89SSricharan Ramabadhran 	msm_mux_eud_gpio,
190*725d1c89SSricharan Ramabadhran 	msm_mux_gcc_plltest,
191*725d1c89SSricharan Ramabadhran 	msm_mux_gcc_tlmm,
192*725d1c89SSricharan Ramabadhran 	msm_mux_gpio,
193*725d1c89SSricharan Ramabadhran 	msm_mux_led0,
194*725d1c89SSricharan Ramabadhran 	msm_mux_led2,
195*725d1c89SSricharan Ramabadhran 	msm_mux_mac0,
196*725d1c89SSricharan Ramabadhran 	msm_mux_mac1,
197*725d1c89SSricharan Ramabadhran 	msm_mux_mdc,
198*725d1c89SSricharan Ramabadhran 	msm_mux_mdio,
199*725d1c89SSricharan Ramabadhran 	msm_mux_pcie0_clk,
200*725d1c89SSricharan Ramabadhran 	msm_mux_pcie0_wake,
201*725d1c89SSricharan Ramabadhran 	msm_mux_pcie1_clk,
202*725d1c89SSricharan Ramabadhran 	msm_mux_pcie1_wake,
203*725d1c89SSricharan Ramabadhran 	msm_mux_pll_test,
204*725d1c89SSricharan Ramabadhran 	msm_mux_prng_rosc,
205*725d1c89SSricharan Ramabadhran 	msm_mux_pwm0,
206*725d1c89SSricharan Ramabadhran 	msm_mux_pwm1,
207*725d1c89SSricharan Ramabadhran 	msm_mux_pwm2,
208*725d1c89SSricharan Ramabadhran 	msm_mux_pwm3,
209*725d1c89SSricharan Ramabadhran 	msm_mux_qdss_cti_trig_in_a0,
210*725d1c89SSricharan Ramabadhran 	msm_mux_qdss_cti_trig_in_a1,
211*725d1c89SSricharan Ramabadhran 	msm_mux_qdss_cti_trig_in_b0,
212*725d1c89SSricharan Ramabadhran 	msm_mux_qdss_cti_trig_in_b1,
213*725d1c89SSricharan Ramabadhran 	msm_mux_qdss_cti_trig_out_a0,
214*725d1c89SSricharan Ramabadhran 	msm_mux_qdss_cti_trig_out_a1,
215*725d1c89SSricharan Ramabadhran 	msm_mux_qdss_cti_trig_out_b0,
216*725d1c89SSricharan Ramabadhran 	msm_mux_qdss_cti_trig_out_b1,
217*725d1c89SSricharan Ramabadhran 	msm_mux_qdss_traceclk_a,
218*725d1c89SSricharan Ramabadhran 	msm_mux_qdss_traceclk_b,
219*725d1c89SSricharan Ramabadhran 	msm_mux_qdss_tracectl_a,
220*725d1c89SSricharan Ramabadhran 	msm_mux_qdss_tracectl_b,
221*725d1c89SSricharan Ramabadhran 	msm_mux_qdss_tracedata_a,
222*725d1c89SSricharan Ramabadhran 	msm_mux_qdss_tracedata_b,
223*725d1c89SSricharan Ramabadhran 	msm_mux_qspi_clk,
224*725d1c89SSricharan Ramabadhran 	msm_mux_qspi_cs,
225*725d1c89SSricharan Ramabadhran 	msm_mux_qspi_data,
226*725d1c89SSricharan Ramabadhran 	msm_mux_reset_out,
227*725d1c89SSricharan Ramabadhran 	msm_mux_sdc1_clk,
228*725d1c89SSricharan Ramabadhran 	msm_mux_sdc1_cmd,
229*725d1c89SSricharan Ramabadhran 	msm_mux_sdc1_data,
230*725d1c89SSricharan Ramabadhran 	msm_mux_wci_txd,
231*725d1c89SSricharan Ramabadhran 	msm_mux_wci_rxd,
232*725d1c89SSricharan Ramabadhran 	msm_mux_wsa_swrm,
233*725d1c89SSricharan Ramabadhran 	msm_mux_wsi_clk3,
234*725d1c89SSricharan Ramabadhran 	msm_mux_wsi_data3,
235*725d1c89SSricharan Ramabadhran 	msm_mux_wsis_reset,
236*725d1c89SSricharan Ramabadhran 	msm_mux_xfem,
237*725d1c89SSricharan Ramabadhran 	msm_mux__,
238*725d1c89SSricharan Ramabadhran };
239*725d1c89SSricharan Ramabadhran 
240*725d1c89SSricharan Ramabadhran static const char * const atest_char_groups[] = {
241*725d1c89SSricharan Ramabadhran 	"gpio0", "gpio1", "gpio2", "gpio3", "gpio37",
242*725d1c89SSricharan Ramabadhran };
243*725d1c89SSricharan Ramabadhran 
244*725d1c89SSricharan Ramabadhran static const char * const wci_txd_groups[] = {
245*725d1c89SSricharan Ramabadhran 	"gpio0", "gpio1", "gpio2", "gpio3",
246*725d1c89SSricharan Ramabadhran 	"gpio42", "gpio43", "gpio44", "gpio45",
247*725d1c89SSricharan Ramabadhran };
248*725d1c89SSricharan Ramabadhran 
249*725d1c89SSricharan Ramabadhran static const char * const wci_rxd_groups[] = {
250*725d1c89SSricharan Ramabadhran 	"gpio0", "gpio1", "gpio2", "gpio3",
251*725d1c89SSricharan Ramabadhran 	"gpio42", "gpio43", "gpio44", "gpio45",
252*725d1c89SSricharan Ramabadhran };
253*725d1c89SSricharan Ramabadhran 
254*725d1c89SSricharan Ramabadhran static const char * const xfem_groups[] = {
255*725d1c89SSricharan Ramabadhran 	"gpio0", "gpio1", "gpio2", "gpio3",
256*725d1c89SSricharan Ramabadhran 	"gpio42", "gpio43", "gpio44", "gpio45",
257*725d1c89SSricharan Ramabadhran };
258*725d1c89SSricharan Ramabadhran 
259*725d1c89SSricharan Ramabadhran static const char * const qdss_cti_trig_out_a0_groups[] = {
260*725d1c89SSricharan Ramabadhran 	"gpio0",
261*725d1c89SSricharan Ramabadhran };
262*725d1c89SSricharan Ramabadhran 
263*725d1c89SSricharan Ramabadhran static const char * const qdss_cti_trig_in_a0_groups[] = {
264*725d1c89SSricharan Ramabadhran 	"gpio1",
265*725d1c89SSricharan Ramabadhran };
266*725d1c89SSricharan Ramabadhran 
267*725d1c89SSricharan Ramabadhran static const char * const qdss_cti_trig_out_a1_groups[] = {
268*725d1c89SSricharan Ramabadhran 	"gpio2",
269*725d1c89SSricharan Ramabadhran };
270*725d1c89SSricharan Ramabadhran 
271*725d1c89SSricharan Ramabadhran static const char * const qdss_cti_trig_in_a1_groups[] = {
272*725d1c89SSricharan Ramabadhran 	"gpio3",
273*725d1c89SSricharan Ramabadhran };
274*725d1c89SSricharan Ramabadhran 
275*725d1c89SSricharan Ramabadhran static const char * const sdc1_data_groups[] = {
276*725d1c89SSricharan Ramabadhran 	"gpio4", "gpio5", "gpio6", "gpio7",
277*725d1c89SSricharan Ramabadhran };
278*725d1c89SSricharan Ramabadhran 
279*725d1c89SSricharan Ramabadhran static const char * const qspi_data_groups[] = {
280*725d1c89SSricharan Ramabadhran 	"gpio4",
281*725d1c89SSricharan Ramabadhran 	"gpio5",
282*725d1c89SSricharan Ramabadhran 	"gpio6",
283*725d1c89SSricharan Ramabadhran 	"gpio7",
284*725d1c89SSricharan Ramabadhran };
285*725d1c89SSricharan Ramabadhran 
286*725d1c89SSricharan Ramabadhran static const char * const blsp1_spi1_groups[] = {
287*725d1c89SSricharan Ramabadhran 	"gpio4", "gpio5", "gpio6", "gpio7",
288*725d1c89SSricharan Ramabadhran };
289*725d1c89SSricharan Ramabadhran 
290*725d1c89SSricharan Ramabadhran static const char * const btss_groups[] = {
291*725d1c89SSricharan Ramabadhran 	"gpio4", "gpio5", "gpio6", "gpio7", "gpio8", "gpio17", "gpio18",
292*725d1c89SSricharan Ramabadhran 	"gpio19", "gpio23", "gpio24", "gpio25", "gpio26", "gpio27", "gpio28",
293*725d1c89SSricharan Ramabadhran };
294*725d1c89SSricharan Ramabadhran 
295*725d1c89SSricharan Ramabadhran static const char * const dbg_out_groups[] = {
296*725d1c89SSricharan Ramabadhran 	"gpio4",
297*725d1c89SSricharan Ramabadhran };
298*725d1c89SSricharan Ramabadhran 
299*725d1c89SSricharan Ramabadhran static const char * const qdss_traceclk_a_groups[] = {
300*725d1c89SSricharan Ramabadhran 	"gpio4",
301*725d1c89SSricharan Ramabadhran };
302*725d1c89SSricharan Ramabadhran 
303*725d1c89SSricharan Ramabadhran static const char * const burn0_groups[] = {
304*725d1c89SSricharan Ramabadhran 	"gpio4",
305*725d1c89SSricharan Ramabadhran };
306*725d1c89SSricharan Ramabadhran 
307*725d1c89SSricharan Ramabadhran static const char * const cxc_clk_groups[] = {
308*725d1c89SSricharan Ramabadhran 	"gpio5",
309*725d1c89SSricharan Ramabadhran };
310*725d1c89SSricharan Ramabadhran 
311*725d1c89SSricharan Ramabadhran static const char * const blsp1_i2c1_groups[] = {
312*725d1c89SSricharan Ramabadhran 	"gpio5", "gpio6",
313*725d1c89SSricharan Ramabadhran };
314*725d1c89SSricharan Ramabadhran 
315*725d1c89SSricharan Ramabadhran static const char * const qdss_tracectl_a_groups[] = {
316*725d1c89SSricharan Ramabadhran 	"gpio5",
317*725d1c89SSricharan Ramabadhran };
318*725d1c89SSricharan Ramabadhran 
319*725d1c89SSricharan Ramabadhran static const char * const burn1_groups[] = {
320*725d1c89SSricharan Ramabadhran 	"gpio5",
321*725d1c89SSricharan Ramabadhran };
322*725d1c89SSricharan Ramabadhran 
323*725d1c89SSricharan Ramabadhran static const char * const cxc_data_groups[] = {
324*725d1c89SSricharan Ramabadhran 	"gpio6",
325*725d1c89SSricharan Ramabadhran };
326*725d1c89SSricharan Ramabadhran 
327*725d1c89SSricharan Ramabadhran static const char * const qdss_tracedata_a_groups[] = {
328*725d1c89SSricharan Ramabadhran 	"gpio6", "gpio7", "gpio8", "gpio9", "gpio10", "gpio11", "gpio12",
329*725d1c89SSricharan Ramabadhran 	"gpio13", "gpio14", "gpio15", "gpio16", "gpio17", "gpio18", "gpio19",
330*725d1c89SSricharan Ramabadhran 	"gpio20", "gpio21",
331*725d1c89SSricharan Ramabadhran };
332*725d1c89SSricharan Ramabadhran 
333*725d1c89SSricharan Ramabadhran static const char * const mac0_groups[] = {
334*725d1c89SSricharan Ramabadhran 	"gpio7",
335*725d1c89SSricharan Ramabadhran };
336*725d1c89SSricharan Ramabadhran 
337*725d1c89SSricharan Ramabadhran static const char * const sdc1_cmd_groups[] = {
338*725d1c89SSricharan Ramabadhran 	"gpio8",
339*725d1c89SSricharan Ramabadhran };
340*725d1c89SSricharan Ramabadhran 
341*725d1c89SSricharan Ramabadhran static const char * const qspi_cs_groups[] = {
342*725d1c89SSricharan Ramabadhran 	"gpio8",
343*725d1c89SSricharan Ramabadhran };
344*725d1c89SSricharan Ramabadhran 
345*725d1c89SSricharan Ramabadhran static const char * const mac1_groups[] = {
346*725d1c89SSricharan Ramabadhran 	"gpio8",
347*725d1c89SSricharan Ramabadhran };
348*725d1c89SSricharan Ramabadhran 
349*725d1c89SSricharan Ramabadhran static const char * const sdc1_clk_groups[] = {
350*725d1c89SSricharan Ramabadhran 	"gpio9",
351*725d1c89SSricharan Ramabadhran };
352*725d1c89SSricharan Ramabadhran 
353*725d1c89SSricharan Ramabadhran static const char * const qspi_clk_groups[] = {
354*725d1c89SSricharan Ramabadhran 	"gpio9",
355*725d1c89SSricharan Ramabadhran };
356*725d1c89SSricharan Ramabadhran 
357*725d1c89SSricharan Ramabadhran static const char * const blsp0_spi_groups[] = {
358*725d1c89SSricharan Ramabadhran 	"gpio10", "gpio11", "gpio12", "gpio13",
359*725d1c89SSricharan Ramabadhran };
360*725d1c89SSricharan Ramabadhran 
361*725d1c89SSricharan Ramabadhran static const char * const blsp1_uart0_groups[] = {
362*725d1c89SSricharan Ramabadhran 	"gpio10", "gpio11", "gpio12", "gpio13",
363*725d1c89SSricharan Ramabadhran };
364*725d1c89SSricharan Ramabadhran 
365*725d1c89SSricharan Ramabadhran static const char * const gcc_plltest_groups[] = {
366*725d1c89SSricharan Ramabadhran 	"gpio10", "gpio12",
367*725d1c89SSricharan Ramabadhran };
368*725d1c89SSricharan Ramabadhran 
369*725d1c89SSricharan Ramabadhran static const char * const gcc_tlmm_groups[] = {
370*725d1c89SSricharan Ramabadhran 	"gpio11",
371*725d1c89SSricharan Ramabadhran };
372*725d1c89SSricharan Ramabadhran 
373*725d1c89SSricharan Ramabadhran static const char * const blsp0_i2c_groups[] = {
374*725d1c89SSricharan Ramabadhran 	"gpio12", "gpio13",
375*725d1c89SSricharan Ramabadhran };
376*725d1c89SSricharan Ramabadhran 
377*725d1c89SSricharan Ramabadhran static const char * const pcie0_clk_groups[] = {
378*725d1c89SSricharan Ramabadhran 	"gpio14",
379*725d1c89SSricharan Ramabadhran };
380*725d1c89SSricharan Ramabadhran 
381*725d1c89SSricharan Ramabadhran static const char * const cri_trng0_groups[] = {
382*725d1c89SSricharan Ramabadhran 	"gpio14",
383*725d1c89SSricharan Ramabadhran };
384*725d1c89SSricharan Ramabadhran 
385*725d1c89SSricharan Ramabadhran static const char * const cri_trng1_groups[] = {
386*725d1c89SSricharan Ramabadhran 	"gpio15",
387*725d1c89SSricharan Ramabadhran };
388*725d1c89SSricharan Ramabadhran 
389*725d1c89SSricharan Ramabadhran static const char * const pcie0_wake_groups[] = {
390*725d1c89SSricharan Ramabadhran 	"gpio16",
391*725d1c89SSricharan Ramabadhran };
392*725d1c89SSricharan Ramabadhran 
393*725d1c89SSricharan Ramabadhran static const char * const cri_trng_groups[] = {
394*725d1c89SSricharan Ramabadhran 	"gpio16",
395*725d1c89SSricharan Ramabadhran };
396*725d1c89SSricharan Ramabadhran 
397*725d1c89SSricharan Ramabadhran static const char * const pcie1_clk_groups[] = {
398*725d1c89SSricharan Ramabadhran 	"gpio17",
399*725d1c89SSricharan Ramabadhran };
400*725d1c89SSricharan Ramabadhran 
401*725d1c89SSricharan Ramabadhran static const char * const prng_rosc_groups[] = {
402*725d1c89SSricharan Ramabadhran 	"gpio17",
403*725d1c89SSricharan Ramabadhran };
404*725d1c89SSricharan Ramabadhran 
405*725d1c89SSricharan Ramabadhran static const char * const blsp1_spi0_groups[] = {
406*725d1c89SSricharan Ramabadhran 	"gpio18", "gpio19", "gpio20", "gpio21",
407*725d1c89SSricharan Ramabadhran };
408*725d1c89SSricharan Ramabadhran 
409*725d1c89SSricharan Ramabadhran static const char * const pcie1_wake_groups[] = {
410*725d1c89SSricharan Ramabadhran 	"gpio19",
411*725d1c89SSricharan Ramabadhran };
412*725d1c89SSricharan Ramabadhran 
413*725d1c89SSricharan Ramabadhran static const char * const blsp1_i2c0_groups[] = {
414*725d1c89SSricharan Ramabadhran 	"gpio19", "gpio20",
415*725d1c89SSricharan Ramabadhran };
416*725d1c89SSricharan Ramabadhran 
417*725d1c89SSricharan Ramabadhran static const char * const blsp0_uart0_groups[] = {
418*725d1c89SSricharan Ramabadhran 	"gpio20", "gpio21",
419*725d1c89SSricharan Ramabadhran };
420*725d1c89SSricharan Ramabadhran 
421*725d1c89SSricharan Ramabadhran static const char * const pll_test_groups[] = {
422*725d1c89SSricharan Ramabadhran 	"gpio22",
423*725d1c89SSricharan Ramabadhran };
424*725d1c89SSricharan Ramabadhran 
425*725d1c89SSricharan Ramabadhran static const char * const eud_gpio_groups[] = {
426*725d1c89SSricharan Ramabadhran 	"gpio22", "gpio31", "gpio32", "gpio33", "gpio34", "gpio35",
427*725d1c89SSricharan Ramabadhran };
428*725d1c89SSricharan Ramabadhran 
429*725d1c89SSricharan Ramabadhran static const char * const audio_rxmclk_groups[] = {
430*725d1c89SSricharan Ramabadhran 	"gpio23", "gpio23",
431*725d1c89SSricharan Ramabadhran };
432*725d1c89SSricharan Ramabadhran 
433*725d1c89SSricharan Ramabadhran static const char * const audio_pdm0_groups[] = {
434*725d1c89SSricharan Ramabadhran 	"gpio23", "gpio24",
435*725d1c89SSricharan Ramabadhran };
436*725d1c89SSricharan Ramabadhran 
437*725d1c89SSricharan Ramabadhran static const char * const blsp2_spi1_groups[] = {
438*725d1c89SSricharan Ramabadhran 	"gpio23", "gpio24", "gpio25", "gpio26",
439*725d1c89SSricharan Ramabadhran };
440*725d1c89SSricharan Ramabadhran 
441*725d1c89SSricharan Ramabadhran static const char * const blsp1_uart2_groups[] = {
442*725d1c89SSricharan Ramabadhran 	"gpio23", "gpio24", "gpio25", "gpio26",
443*725d1c89SSricharan Ramabadhran };
444*725d1c89SSricharan Ramabadhran 
445*725d1c89SSricharan Ramabadhran static const char * const qdss_tracedata_b_groups[] = {
446*725d1c89SSricharan Ramabadhran 	"gpio23", "gpio24", "gpio25", "gpio26", "gpio27", "gpio28", "gpio29",
447*725d1c89SSricharan Ramabadhran 	"gpio30", "gpio31", "gpio32", "gpio33", "gpio34", "gpio35", "gpio36",
448*725d1c89SSricharan Ramabadhran 	"gpio37", "gpio38",
449*725d1c89SSricharan Ramabadhran };
450*725d1c89SSricharan Ramabadhran 
451*725d1c89SSricharan Ramabadhran static const char * const audio_rxbclk_groups[] = {
452*725d1c89SSricharan Ramabadhran 	"gpio24",
453*725d1c89SSricharan Ramabadhran };
454*725d1c89SSricharan Ramabadhran 
455*725d1c89SSricharan Ramabadhran static const char * const audio_rxfsync_groups[] = {
456*725d1c89SSricharan Ramabadhran 	"gpio25",
457*725d1c89SSricharan Ramabadhran };
458*725d1c89SSricharan Ramabadhran 
459*725d1c89SSricharan Ramabadhran static const char * const audio_pdm1_groups[] = {
460*725d1c89SSricharan Ramabadhran 	"gpio25", "gpio26",
461*725d1c89SSricharan Ramabadhran };
462*725d1c89SSricharan Ramabadhran 
463*725d1c89SSricharan Ramabadhran static const char * const blsp2_i2c1_groups[] = {
464*725d1c89SSricharan Ramabadhran 	"gpio25", "gpio26",
465*725d1c89SSricharan Ramabadhran };
466*725d1c89SSricharan Ramabadhran 
467*725d1c89SSricharan Ramabadhran static const char * const audio_rxd_groups[] = {
468*725d1c89SSricharan Ramabadhran 	"gpio26",
469*725d1c89SSricharan Ramabadhran };
470*725d1c89SSricharan Ramabadhran 
471*725d1c89SSricharan Ramabadhran static const char * const audio_txmclk_groups[] = {
472*725d1c89SSricharan Ramabadhran 	"gpio27", "gpio27",
473*725d1c89SSricharan Ramabadhran };
474*725d1c89SSricharan Ramabadhran 
475*725d1c89SSricharan Ramabadhran static const char * const wsa_swrm_groups[] = {
476*725d1c89SSricharan Ramabadhran 	"gpio27", "gpio28",
477*725d1c89SSricharan Ramabadhran };
478*725d1c89SSricharan Ramabadhran 
479*725d1c89SSricharan Ramabadhran static const char * const blsp2_spi_groups[] = {
480*725d1c89SSricharan Ramabadhran 	"gpio27",
481*725d1c89SSricharan Ramabadhran };
482*725d1c89SSricharan Ramabadhran 
483*725d1c89SSricharan Ramabadhran static const char * const audio_txbclk_groups[] = {
484*725d1c89SSricharan Ramabadhran 	"gpio28",
485*725d1c89SSricharan Ramabadhran };
486*725d1c89SSricharan Ramabadhran 
487*725d1c89SSricharan Ramabadhran static const char * const blsp0_uart1_groups[] = {
488*725d1c89SSricharan Ramabadhran 	"gpio28", "gpio29",
489*725d1c89SSricharan Ramabadhran };
490*725d1c89SSricharan Ramabadhran 
491*725d1c89SSricharan Ramabadhran static const char * const audio_txfsync_groups[] = {
492*725d1c89SSricharan Ramabadhran 	"gpio29",
493*725d1c89SSricharan Ramabadhran };
494*725d1c89SSricharan Ramabadhran 
495*725d1c89SSricharan Ramabadhran static const char * const audio_txd_groups[] = {
496*725d1c89SSricharan Ramabadhran 	"gpio30",
497*725d1c89SSricharan Ramabadhran };
498*725d1c89SSricharan Ramabadhran 
499*725d1c89SSricharan Ramabadhran static const char * const wsis_reset_groups[] = {
500*725d1c89SSricharan Ramabadhran 	"gpio30",
501*725d1c89SSricharan Ramabadhran };
502*725d1c89SSricharan Ramabadhran 
503*725d1c89SSricharan Ramabadhran static const char * const blsp2_spi0_groups[] = {
504*725d1c89SSricharan Ramabadhran 	"gpio31", "gpio32", "gpio33", "gpio34",
505*725d1c89SSricharan Ramabadhran };
506*725d1c89SSricharan Ramabadhran 
507*725d1c89SSricharan Ramabadhran static const char * const blsp1_uart1_groups[] = {
508*725d1c89SSricharan Ramabadhran 	"gpio31", "gpio32", "gpio33", "gpio34",
509*725d1c89SSricharan Ramabadhran };
510*725d1c89SSricharan Ramabadhran 
511*725d1c89SSricharan Ramabadhran static const char * const blsp2_i2c0_groups[] = {
512*725d1c89SSricharan Ramabadhran 	"gpio33", "gpio34",
513*725d1c89SSricharan Ramabadhran };
514*725d1c89SSricharan Ramabadhran 
515*725d1c89SSricharan Ramabadhran static const char * const mdc_groups[] = {
516*725d1c89SSricharan Ramabadhran 	"gpio36",
517*725d1c89SSricharan Ramabadhran };
518*725d1c89SSricharan Ramabadhran 
519*725d1c89SSricharan Ramabadhran static const char * const wsi_clk3_groups[] = {
520*725d1c89SSricharan Ramabadhran 	"gpio36",
521*725d1c89SSricharan Ramabadhran };
522*725d1c89SSricharan Ramabadhran 
523*725d1c89SSricharan Ramabadhran static const char * const mdio_groups[] = {
524*725d1c89SSricharan Ramabadhran 	"gpio37",
525*725d1c89SSricharan Ramabadhran };
526*725d1c89SSricharan Ramabadhran 
527*725d1c89SSricharan Ramabadhran static const char * const wsi_data3_groups[] = {
528*725d1c89SSricharan Ramabadhran 	"gpio37",
529*725d1c89SSricharan Ramabadhran };
530*725d1c89SSricharan Ramabadhran 
531*725d1c89SSricharan Ramabadhran static const char * const qdss_traceclk_b_groups[] = {
532*725d1c89SSricharan Ramabadhran 	"gpio39",
533*725d1c89SSricharan Ramabadhran };
534*725d1c89SSricharan Ramabadhran 
535*725d1c89SSricharan Ramabadhran static const char * const reset_out_groups[] = {
536*725d1c89SSricharan Ramabadhran 	"gpio40",
537*725d1c89SSricharan Ramabadhran };
538*725d1c89SSricharan Ramabadhran 
539*725d1c89SSricharan Ramabadhran static const char * const qdss_tracectl_b_groups[] = {
540*725d1c89SSricharan Ramabadhran 	"gpio40",
541*725d1c89SSricharan Ramabadhran };
542*725d1c89SSricharan Ramabadhran 
543*725d1c89SSricharan Ramabadhran static const char * const pwm0_groups[] = {
544*725d1c89SSricharan Ramabadhran 	"gpio42",
545*725d1c89SSricharan Ramabadhran };
546*725d1c89SSricharan Ramabadhran 
547*725d1c89SSricharan Ramabadhran static const char * const qdss_cti_trig_out_b0_groups[] = {
548*725d1c89SSricharan Ramabadhran 	"gpio42",
549*725d1c89SSricharan Ramabadhran };
550*725d1c89SSricharan Ramabadhran 
551*725d1c89SSricharan Ramabadhran static const char * const pwm1_groups[] = {
552*725d1c89SSricharan Ramabadhran 	"gpio43",
553*725d1c89SSricharan Ramabadhran };
554*725d1c89SSricharan Ramabadhran 
555*725d1c89SSricharan Ramabadhran static const char * const qdss_cti_trig_in_b0_groups[] = {
556*725d1c89SSricharan Ramabadhran 	"gpio43",
557*725d1c89SSricharan Ramabadhran };
558*725d1c89SSricharan Ramabadhran 
559*725d1c89SSricharan Ramabadhran static const char * const pwm2_groups[] = {
560*725d1c89SSricharan Ramabadhran 	"gpio44",
561*725d1c89SSricharan Ramabadhran };
562*725d1c89SSricharan Ramabadhran 
563*725d1c89SSricharan Ramabadhran static const char * const qdss_cti_trig_out_b1_groups[] = {
564*725d1c89SSricharan Ramabadhran 	"gpio44",
565*725d1c89SSricharan Ramabadhran };
566*725d1c89SSricharan Ramabadhran 
567*725d1c89SSricharan Ramabadhran static const char * const pwm3_groups[] = {
568*725d1c89SSricharan Ramabadhran 	"gpio45",
569*725d1c89SSricharan Ramabadhran };
570*725d1c89SSricharan Ramabadhran 
571*725d1c89SSricharan Ramabadhran static const char * const qdss_cti_trig_in_b1_groups[] = {
572*725d1c89SSricharan Ramabadhran 	"gpio45",
573*725d1c89SSricharan Ramabadhran };
574*725d1c89SSricharan Ramabadhran 
575*725d1c89SSricharan Ramabadhran static const char * const led0_groups[] = {
576*725d1c89SSricharan Ramabadhran 	"gpio46", "gpio30", "gpio10",
577*725d1c89SSricharan Ramabadhran };
578*725d1c89SSricharan Ramabadhran 
579*725d1c89SSricharan Ramabadhran static const char * const led2_groups[] = {
580*725d1c89SSricharan Ramabadhran 	"gpio30",
581*725d1c89SSricharan Ramabadhran };
582*725d1c89SSricharan Ramabadhran 
583*725d1c89SSricharan Ramabadhran static const char * const gpio_groups[] = {
584*725d1c89SSricharan Ramabadhran 	"gpio0", "gpio1", "gpio2", "gpio3", "gpio4", "gpio5", "gpio6", "gpio7",
585*725d1c89SSricharan Ramabadhran 	"gpio8", "gpio9", "gpio10", "gpio11", "gpio12", "gpio13", "gpio14",
586*725d1c89SSricharan Ramabadhran 	"gpio15", "gpio16", "gpio17", "gpio18", "gpio19", "gpio20", "gpio21",
587*725d1c89SSricharan Ramabadhran 	"gpio22", "gpio23", "gpio24", "gpio25", "gpio26", "gpio27", "gpio28",
588*725d1c89SSricharan Ramabadhran 	"gpio29", "gpio30", "gpio31", "gpio32", "gpio33", "gpio34", "gpio35",
589*725d1c89SSricharan Ramabadhran 	"gpio36", "gpio37", "gpio38", "gpio39", "gpio40", "gpio41", "gpio42",
590*725d1c89SSricharan Ramabadhran 	"gpio43", "gpio44", "gpio45", "gpio46",
591*725d1c89SSricharan Ramabadhran };
592*725d1c89SSricharan Ramabadhran 
593*725d1c89SSricharan Ramabadhran static const struct pinfunction ipq5018_functions[] = {
594*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(atest_char),
595*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(audio_pdm0),
596*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(audio_pdm1),
597*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(audio_rxbclk),
598*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(audio_rxd),
599*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(audio_rxfsync),
600*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(audio_rxmclk),
601*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(audio_txbclk),
602*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(audio_txd),
603*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(audio_txfsync),
604*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(audio_txmclk),
605*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(blsp0_i2c),
606*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(blsp0_spi),
607*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(blsp0_uart0),
608*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(blsp0_uart1),
609*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(blsp1_i2c0),
610*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(blsp1_i2c1),
611*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(blsp1_spi0),
612*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(blsp1_spi1),
613*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(blsp1_uart0),
614*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(blsp1_uart1),
615*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(blsp1_uart2),
616*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(blsp2_i2c0),
617*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(blsp2_i2c1),
618*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(blsp2_spi),
619*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(blsp2_spi0),
620*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(blsp2_spi1),
621*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(btss),
622*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(burn0),
623*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(burn1),
624*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(cri_trng),
625*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(cri_trng0),
626*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(cri_trng1),
627*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(cxc_clk),
628*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(cxc_data),
629*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(dbg_out),
630*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(eud_gpio),
631*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(gcc_plltest),
632*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(gcc_tlmm),
633*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(gpio),
634*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(led0),
635*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(led2),
636*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(mac0),
637*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(mac1),
638*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(mdc),
639*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(mdio),
640*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(pcie0_clk),
641*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(pcie0_wake),
642*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(pcie1_clk),
643*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(pcie1_wake),
644*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(pll_test),
645*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(prng_rosc),
646*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(pwm0),
647*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(pwm1),
648*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(pwm2),
649*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(pwm3),
650*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(qdss_cti_trig_in_a0),
651*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(qdss_cti_trig_in_a1),
652*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(qdss_cti_trig_in_b0),
653*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(qdss_cti_trig_in_b1),
654*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(qdss_cti_trig_out_a0),
655*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(qdss_cti_trig_out_a1),
656*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(qdss_cti_trig_out_b0),
657*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(qdss_cti_trig_out_b1),
658*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(qdss_traceclk_a),
659*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(qdss_traceclk_b),
660*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(qdss_tracectl_a),
661*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(qdss_tracectl_b),
662*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(qdss_tracedata_a),
663*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(qdss_tracedata_b),
664*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(qspi_clk),
665*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(qspi_cs),
666*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(qspi_data),
667*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(reset_out),
668*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(sdc1_clk),
669*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(sdc1_cmd),
670*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(sdc1_data),
671*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(wci_txd),
672*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(wci_rxd),
673*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(wsa_swrm),
674*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(wsi_clk3),
675*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(wsi_data3),
676*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(wsis_reset),
677*725d1c89SSricharan Ramabadhran 	MSM_PIN_FUNCTION(xfem),
678*725d1c89SSricharan Ramabadhran };
679*725d1c89SSricharan Ramabadhran 
680*725d1c89SSricharan Ramabadhran static const struct msm_pingroup ipq5018_groups[] = {
681*725d1c89SSricharan Ramabadhran 	PINGROUP(0, atest_char, _, qdss_cti_trig_out_a0, wci_txd, wci_rxd, xfem, _, _, _),
682*725d1c89SSricharan Ramabadhran 	PINGROUP(1, atest_char, _, qdss_cti_trig_in_a0, wci_txd, wci_rxd, xfem, _, _, _),
683*725d1c89SSricharan Ramabadhran 	PINGROUP(2, atest_char, _, qdss_cti_trig_out_a1, wci_txd, wci_rxd, xfem, _, _, _),
684*725d1c89SSricharan Ramabadhran 	PINGROUP(3, atest_char, _, qdss_cti_trig_in_a1, wci_txd, wci_rxd, xfem, _, _, _),
685*725d1c89SSricharan Ramabadhran 	PINGROUP(4, sdc1_data, qspi_data, blsp1_spi1, btss, dbg_out, qdss_traceclk_a, _, burn0, _),
686*725d1c89SSricharan Ramabadhran 	PINGROUP(5, sdc1_data, qspi_data, cxc_clk, blsp1_spi1, blsp1_i2c1, btss, _, qdss_tracectl_a, _),
687*725d1c89SSricharan Ramabadhran 	PINGROUP(6, sdc1_data, qspi_data, cxc_data, blsp1_spi1, blsp1_i2c1, btss, _, qdss_tracedata_a, _),
688*725d1c89SSricharan Ramabadhran 	PINGROUP(7, sdc1_data, qspi_data, mac0, blsp1_spi1, btss, _, qdss_tracedata_a, _, _),
689*725d1c89SSricharan Ramabadhran 	PINGROUP(8, sdc1_cmd, qspi_cs, mac1, btss, _, qdss_tracedata_a, _, _, _),
690*725d1c89SSricharan Ramabadhran 	PINGROUP(9, sdc1_clk, qspi_clk, _, qdss_tracedata_a, _, _, _, _, _),
691*725d1c89SSricharan Ramabadhran 	PINGROUP(10, blsp0_spi, blsp1_uart0, led0, gcc_plltest, qdss_tracedata_a, _, _, _, _),
692*725d1c89SSricharan Ramabadhran 	PINGROUP(11, blsp0_spi, blsp1_uart0, _, gcc_tlmm, qdss_tracedata_a, _, _, _, _),
693*725d1c89SSricharan Ramabadhran 	PINGROUP(12, blsp0_spi, blsp0_i2c, blsp1_uart0, _, gcc_plltest, qdss_tracedata_a, _, _, _),
694*725d1c89SSricharan Ramabadhran 	PINGROUP(13, blsp0_spi, blsp0_i2c, blsp1_uart0, _, qdss_tracedata_a, _, _, _, _),
695*725d1c89SSricharan Ramabadhran 	PINGROUP(14, pcie0_clk, _, _, cri_trng0, qdss_tracedata_a, _, _, _, _),
696*725d1c89SSricharan Ramabadhran 	PINGROUP(15, _, _, cri_trng1, qdss_tracedata_a, _, _, _, _, _),
697*725d1c89SSricharan Ramabadhran 	PINGROUP(16, pcie0_wake, _, _, cri_trng, qdss_tracedata_a, _, _, _, _),
698*725d1c89SSricharan Ramabadhran 	PINGROUP(17, pcie1_clk, btss, _, prng_rosc, qdss_tracedata_a, _, _, _, _),
699*725d1c89SSricharan Ramabadhran 	PINGROUP(18, blsp1_spi0, btss, _, qdss_tracedata_a, _, _, _, _, _),
700*725d1c89SSricharan Ramabadhran 	PINGROUP(19, pcie1_wake, blsp1_spi0, blsp1_i2c0, btss, _, qdss_tracedata_a, _, _, _),
701*725d1c89SSricharan Ramabadhran 	PINGROUP(20, blsp0_uart0, blsp1_spi0, blsp1_i2c0, _, qdss_tracedata_a, _, _, _, _),
702*725d1c89SSricharan Ramabadhran 	PINGROUP(21, blsp0_uart0, blsp1_spi0, _, qdss_tracedata_a, _, _, _, _, _),
703*725d1c89SSricharan Ramabadhran 	PINGROUP(22, _, pll_test, eud_gpio, _, _, _, _, _, _),
704*725d1c89SSricharan Ramabadhran 	PINGROUP(23, audio_rxmclk, audio_pdm0, audio_rxmclk, blsp2_spi1, blsp1_uart2, btss, _, qdss_tracedata_b, _),
705*725d1c89SSricharan Ramabadhran 	PINGROUP(24, audio_rxbclk, audio_pdm0, blsp2_spi1, blsp1_uart2, btss, _, qdss_tracedata_b, _, _),
706*725d1c89SSricharan Ramabadhran 	PINGROUP(25, audio_rxfsync, audio_pdm1, blsp2_i2c1, blsp2_spi1, blsp1_uart2, btss, _, qdss_tracedata_b, _),
707*725d1c89SSricharan Ramabadhran 	PINGROUP(26, audio_rxd, audio_pdm1, blsp2_i2c1, blsp2_spi1, blsp1_uart2, btss, _, qdss_tracedata_b, _),
708*725d1c89SSricharan Ramabadhran 	PINGROUP(27, audio_txmclk, wsa_swrm, audio_txmclk, blsp2_spi, btss, _, qdss_tracedata_b, _, _),
709*725d1c89SSricharan Ramabadhran 	PINGROUP(28, audio_txbclk, wsa_swrm, blsp0_uart1, btss, qdss_tracedata_b, _, _, _, _),
710*725d1c89SSricharan Ramabadhran 	PINGROUP(29, audio_txfsync, _, blsp0_uart1, _, qdss_tracedata_b, _, _, _, _),
711*725d1c89SSricharan Ramabadhran 	PINGROUP(30, audio_txd, led2, led0, _, _, _, _, _, _),
712*725d1c89SSricharan Ramabadhran 	PINGROUP(31, blsp2_spi0, blsp1_uart1, _, qdss_tracedata_b, eud_gpio, _, _, _, _),
713*725d1c89SSricharan Ramabadhran 	PINGROUP(32, blsp2_spi0, blsp1_uart1, _, qdss_tracedata_b, eud_gpio, _, _, _, _),
714*725d1c89SSricharan Ramabadhran 	PINGROUP(33, blsp2_i2c0, blsp2_spi0, blsp1_uart1, _, qdss_tracedata_b, eud_gpio, _, _, _),
715*725d1c89SSricharan Ramabadhran 	PINGROUP(34, blsp2_i2c0, blsp2_spi0, blsp1_uart1, _, qdss_tracedata_b, eud_gpio, _, _, _),
716*725d1c89SSricharan Ramabadhran 	PINGROUP(35, _, qdss_tracedata_b, eud_gpio, _, _, _, _, _, _),
717*725d1c89SSricharan Ramabadhran 	PINGROUP(36, mdc, qdss_tracedata_b, _, wsi_clk3, _, _, _, _, _),
718*725d1c89SSricharan Ramabadhran 	PINGROUP(37, mdio, atest_char, qdss_tracedata_b, _, wsi_data3, _, _, _, _),
719*725d1c89SSricharan Ramabadhran 	PINGROUP(38, qdss_tracedata_b, _, _, _, _, _, _, _, _),
720*725d1c89SSricharan Ramabadhran 	PINGROUP(39, qdss_traceclk_b, _, _, _, _, _, _, _, _),
721*725d1c89SSricharan Ramabadhran 	PINGROUP(40, reset_out, qdss_tracectl_b, _, _, _, _, _, _, _),
722*725d1c89SSricharan Ramabadhran 	PINGROUP(41, _, _, _, _, _, _, _, _, _),
723*725d1c89SSricharan Ramabadhran 	PINGROUP(42, pwm0, qdss_cti_trig_out_b0, wci_txd, wci_rxd, xfem, _, _, _, _),
724*725d1c89SSricharan Ramabadhran 	PINGROUP(43, pwm1, qdss_cti_trig_in_b0, wci_txd, wci_rxd, xfem, _, _, _, _),
725*725d1c89SSricharan Ramabadhran 	PINGROUP(44, pwm2, qdss_cti_trig_out_b1, wci_txd, wci_rxd, xfem, _, _, _, _),
726*725d1c89SSricharan Ramabadhran 	PINGROUP(45, pwm3, qdss_cti_trig_in_b1, wci_txd, wci_rxd, xfem, _, _, _, _),
727*725d1c89SSricharan Ramabadhran 	PINGROUP(46, led0, _, _, _, _, _, _, _, _),
728*725d1c89SSricharan Ramabadhran };
729*725d1c89SSricharan Ramabadhran 
730*725d1c89SSricharan Ramabadhran static const struct msm_pinctrl_soc_data ipq5018_pinctrl = {
731*725d1c89SSricharan Ramabadhran 	.pins = ipq5018_pins,
732*725d1c89SSricharan Ramabadhran 	.npins = ARRAY_SIZE(ipq5018_pins),
733*725d1c89SSricharan Ramabadhran 	.functions = ipq5018_functions,
734*725d1c89SSricharan Ramabadhran 	.nfunctions = ARRAY_SIZE(ipq5018_functions),
735*725d1c89SSricharan Ramabadhran 	.groups = ipq5018_groups,
736*725d1c89SSricharan Ramabadhran 	.ngroups = ARRAY_SIZE(ipq5018_groups),
737*725d1c89SSricharan Ramabadhran 	.ngpios = 47,
738*725d1c89SSricharan Ramabadhran };
739*725d1c89SSricharan Ramabadhran 
ipq5018_pinctrl_probe(struct platform_device * pdev)740*725d1c89SSricharan Ramabadhran static int ipq5018_pinctrl_probe(struct platform_device *pdev)
741*725d1c89SSricharan Ramabadhran {
742*725d1c89SSricharan Ramabadhran 	return msm_pinctrl_probe(pdev, &ipq5018_pinctrl);
743*725d1c89SSricharan Ramabadhran }
744*725d1c89SSricharan Ramabadhran 
745*725d1c89SSricharan Ramabadhran static const struct of_device_id ipq5018_pinctrl_of_match[] = {
746*725d1c89SSricharan Ramabadhran 	{ .compatible = "qcom,ipq5018-tlmm", },
747*725d1c89SSricharan Ramabadhran 	{ }
748*725d1c89SSricharan Ramabadhran };
749*725d1c89SSricharan Ramabadhran MODULE_DEVICE_TABLE(of, ipq5018_pinctrl_of_match);
750*725d1c89SSricharan Ramabadhran 
751*725d1c89SSricharan Ramabadhran static struct platform_driver ipq5018_pinctrl_driver = {
752*725d1c89SSricharan Ramabadhran 	.driver = {
753*725d1c89SSricharan Ramabadhran 		.name = "ipq5018-tlmm",
754*725d1c89SSricharan Ramabadhran 		.of_match_table = ipq5018_pinctrl_of_match,
755*725d1c89SSricharan Ramabadhran 	},
756*725d1c89SSricharan Ramabadhran 	.probe = ipq5018_pinctrl_probe,
757*725d1c89SSricharan Ramabadhran 	.remove = msm_pinctrl_remove,
758*725d1c89SSricharan Ramabadhran };
759*725d1c89SSricharan Ramabadhran 
ipq5018_pinctrl_init(void)760*725d1c89SSricharan Ramabadhran static int __init ipq5018_pinctrl_init(void)
761*725d1c89SSricharan Ramabadhran {
762*725d1c89SSricharan Ramabadhran 	return platform_driver_register(&ipq5018_pinctrl_driver);
763*725d1c89SSricharan Ramabadhran }
764*725d1c89SSricharan Ramabadhran arch_initcall(ipq5018_pinctrl_init);
765*725d1c89SSricharan Ramabadhran 
ipq5018_pinctrl_exit(void)766*725d1c89SSricharan Ramabadhran static void __exit ipq5018_pinctrl_exit(void)
767*725d1c89SSricharan Ramabadhran {
768*725d1c89SSricharan Ramabadhran 	platform_driver_unregister(&ipq5018_pinctrl_driver);
769*725d1c89SSricharan Ramabadhran }
770*725d1c89SSricharan Ramabadhran module_exit(ipq5018_pinctrl_exit);
771*725d1c89SSricharan Ramabadhran 
772*725d1c89SSricharan Ramabadhran MODULE_DESCRIPTION("Qualcomm Technologies Inc ipq5018 pinctrl driver");
773*725d1c89SSricharan Ramabadhran MODULE_LICENSE("GPL");
774