xref: /openbmc/linux/drivers/pinctrl/qcom/pinctrl-ipq9574.c (revision c74eef68fd2d3a7821ecb57a607d597775df53ac)
1*c74eef68SDevi Priya // SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2*c74eef68SDevi Priya /*
3*c74eef68SDevi Priya  * Copyright (c) 2023 The Linux Foundation. All rights reserved.
4*c74eef68SDevi Priya  */
5*c74eef68SDevi Priya 
6*c74eef68SDevi Priya #include <linux/module.h>
7*c74eef68SDevi Priya #include <linux/of.h>
8*c74eef68SDevi Priya #include <linux/platform_device.h>
9*c74eef68SDevi Priya #include <linux/pinctrl/pinctrl.h>
10*c74eef68SDevi Priya 
11*c74eef68SDevi Priya #include "pinctrl-msm.h"
12*c74eef68SDevi Priya 
13*c74eef68SDevi Priya #define FUNCTION(fname)			                \
14*c74eef68SDevi Priya 	[msm_mux_##fname] = {		                \
15*c74eef68SDevi Priya 		.name = #fname,				\
16*c74eef68SDevi Priya 		.groups = fname##_groups,               \
17*c74eef68SDevi Priya 		.ngroups = ARRAY_SIZE(fname##_groups),	\
18*c74eef68SDevi Priya 	}
19*c74eef68SDevi Priya 
20*c74eef68SDevi Priya #define REG_SIZE 0x1000
21*c74eef68SDevi Priya #define PINGROUP(id, f1, f2, f3, f4, f5, f6, f7, f8, f9)	\
22*c74eef68SDevi Priya 	{					        \
23*c74eef68SDevi Priya 		.name = "gpio" #id,			\
24*c74eef68SDevi Priya 		.pins = gpio##id##_pins,		\
25*c74eef68SDevi Priya 		.npins = (unsigned int)ARRAY_SIZE(gpio##id##_pins),	\
26*c74eef68SDevi Priya 		.funcs = (int[]){			\
27*c74eef68SDevi Priya 			msm_mux_gpio, /* gpio mode */	\
28*c74eef68SDevi Priya 			msm_mux_##f1,			\
29*c74eef68SDevi Priya 			msm_mux_##f2,			\
30*c74eef68SDevi Priya 			msm_mux_##f3,			\
31*c74eef68SDevi Priya 			msm_mux_##f4,			\
32*c74eef68SDevi Priya 			msm_mux_##f5,			\
33*c74eef68SDevi Priya 			msm_mux_##f6,			\
34*c74eef68SDevi Priya 			msm_mux_##f7,			\
35*c74eef68SDevi Priya 			msm_mux_##f8,			\
36*c74eef68SDevi Priya 			msm_mux_##f9			\
37*c74eef68SDevi Priya 		},				        \
38*c74eef68SDevi Priya 		.nfuncs = 10,				\
39*c74eef68SDevi Priya 		.ctl_reg = REG_SIZE * id,			\
40*c74eef68SDevi Priya 		.io_reg = 0x4 + REG_SIZE * id,		\
41*c74eef68SDevi Priya 		.intr_cfg_reg = 0x8 + REG_SIZE * id,		\
42*c74eef68SDevi Priya 		.intr_status_reg = 0xc + REG_SIZE * id,	\
43*c74eef68SDevi Priya 		.intr_target_reg = 0x8 + REG_SIZE * id,	\
44*c74eef68SDevi Priya 		.mux_bit = 2,			\
45*c74eef68SDevi Priya 		.pull_bit = 0,			\
46*c74eef68SDevi Priya 		.drv_bit = 6,			\
47*c74eef68SDevi Priya 		.oe_bit = 9,			\
48*c74eef68SDevi Priya 		.in_bit = 0,			\
49*c74eef68SDevi Priya 		.out_bit = 1,			\
50*c74eef68SDevi Priya 		.intr_enable_bit = 0,		\
51*c74eef68SDevi Priya 		.intr_status_bit = 0,		\
52*c74eef68SDevi Priya 		.intr_target_bit = 5,		\
53*c74eef68SDevi Priya 		.intr_target_kpss_val = 3,	\
54*c74eef68SDevi Priya 		.intr_raw_status_bit = 4,	\
55*c74eef68SDevi Priya 		.intr_polarity_bit = 1,		\
56*c74eef68SDevi Priya 		.intr_detection_bit = 2,	\
57*c74eef68SDevi Priya 		.intr_detection_width = 2,	\
58*c74eef68SDevi Priya 	}
59*c74eef68SDevi Priya 
60*c74eef68SDevi Priya static const struct pinctrl_pin_desc ipq9574_pins[] = {
61*c74eef68SDevi Priya 	PINCTRL_PIN(0, "GPIO_0"),
62*c74eef68SDevi Priya 	PINCTRL_PIN(1, "GPIO_1"),
63*c74eef68SDevi Priya 	PINCTRL_PIN(2, "GPIO_2"),
64*c74eef68SDevi Priya 	PINCTRL_PIN(3, "GPIO_3"),
65*c74eef68SDevi Priya 	PINCTRL_PIN(4, "GPIO_4"),
66*c74eef68SDevi Priya 	PINCTRL_PIN(5, "GPIO_5"),
67*c74eef68SDevi Priya 	PINCTRL_PIN(6, "GPIO_6"),
68*c74eef68SDevi Priya 	PINCTRL_PIN(7, "GPIO_7"),
69*c74eef68SDevi Priya 	PINCTRL_PIN(8, "GPIO_8"),
70*c74eef68SDevi Priya 	PINCTRL_PIN(9, "GPIO_9"),
71*c74eef68SDevi Priya 	PINCTRL_PIN(10, "GPIO_10"),
72*c74eef68SDevi Priya 	PINCTRL_PIN(11, "GPIO_11"),
73*c74eef68SDevi Priya 	PINCTRL_PIN(12, "GPIO_12"),
74*c74eef68SDevi Priya 	PINCTRL_PIN(13, "GPIO_13"),
75*c74eef68SDevi Priya 	PINCTRL_PIN(14, "GPIO_14"),
76*c74eef68SDevi Priya 	PINCTRL_PIN(15, "GPIO_15"),
77*c74eef68SDevi Priya 	PINCTRL_PIN(16, "GPIO_16"),
78*c74eef68SDevi Priya 	PINCTRL_PIN(17, "GPIO_17"),
79*c74eef68SDevi Priya 	PINCTRL_PIN(18, "GPIO_18"),
80*c74eef68SDevi Priya 	PINCTRL_PIN(19, "GPIO_19"),
81*c74eef68SDevi Priya 	PINCTRL_PIN(20, "GPIO_20"),
82*c74eef68SDevi Priya 	PINCTRL_PIN(21, "GPIO_21"),
83*c74eef68SDevi Priya 	PINCTRL_PIN(22, "GPIO_22"),
84*c74eef68SDevi Priya 	PINCTRL_PIN(23, "GPIO_23"),
85*c74eef68SDevi Priya 	PINCTRL_PIN(24, "GPIO_24"),
86*c74eef68SDevi Priya 	PINCTRL_PIN(25, "GPIO_25"),
87*c74eef68SDevi Priya 	PINCTRL_PIN(26, "GPIO_26"),
88*c74eef68SDevi Priya 	PINCTRL_PIN(27, "GPIO_27"),
89*c74eef68SDevi Priya 	PINCTRL_PIN(28, "GPIO_28"),
90*c74eef68SDevi Priya 	PINCTRL_PIN(29, "GPIO_29"),
91*c74eef68SDevi Priya 	PINCTRL_PIN(30, "GPIO_30"),
92*c74eef68SDevi Priya 	PINCTRL_PIN(31, "GPIO_31"),
93*c74eef68SDevi Priya 	PINCTRL_PIN(32, "GPIO_32"),
94*c74eef68SDevi Priya 	PINCTRL_PIN(33, "GPIO_33"),
95*c74eef68SDevi Priya 	PINCTRL_PIN(34, "GPIO_34"),
96*c74eef68SDevi Priya 	PINCTRL_PIN(35, "GPIO_35"),
97*c74eef68SDevi Priya 	PINCTRL_PIN(36, "GPIO_36"),
98*c74eef68SDevi Priya 	PINCTRL_PIN(37, "GPIO_37"),
99*c74eef68SDevi Priya 	PINCTRL_PIN(38, "GPIO_38"),
100*c74eef68SDevi Priya 	PINCTRL_PIN(39, "GPIO_39"),
101*c74eef68SDevi Priya 	PINCTRL_PIN(40, "GPIO_40"),
102*c74eef68SDevi Priya 	PINCTRL_PIN(41, "GPIO_41"),
103*c74eef68SDevi Priya 	PINCTRL_PIN(42, "GPIO_42"),
104*c74eef68SDevi Priya 	PINCTRL_PIN(43, "GPIO_43"),
105*c74eef68SDevi Priya 	PINCTRL_PIN(44, "GPIO_44"),
106*c74eef68SDevi Priya 	PINCTRL_PIN(45, "GPIO_45"),
107*c74eef68SDevi Priya 	PINCTRL_PIN(46, "GPIO_46"),
108*c74eef68SDevi Priya 	PINCTRL_PIN(47, "GPIO_47"),
109*c74eef68SDevi Priya 	PINCTRL_PIN(48, "GPIO_48"),
110*c74eef68SDevi Priya 	PINCTRL_PIN(49, "GPIO_49"),
111*c74eef68SDevi Priya 	PINCTRL_PIN(50, "GPIO_50"),
112*c74eef68SDevi Priya 	PINCTRL_PIN(51, "GPIO_51"),
113*c74eef68SDevi Priya 	PINCTRL_PIN(52, "GPIO_52"),
114*c74eef68SDevi Priya 	PINCTRL_PIN(53, "GPIO_53"),
115*c74eef68SDevi Priya 	PINCTRL_PIN(54, "GPIO_54"),
116*c74eef68SDevi Priya 	PINCTRL_PIN(55, "GPIO_55"),
117*c74eef68SDevi Priya 	PINCTRL_PIN(56, "GPIO_56"),
118*c74eef68SDevi Priya 	PINCTRL_PIN(57, "GPIO_57"),
119*c74eef68SDevi Priya 	PINCTRL_PIN(58, "GPIO_58"),
120*c74eef68SDevi Priya 	PINCTRL_PIN(59, "GPIO_59"),
121*c74eef68SDevi Priya 	PINCTRL_PIN(60, "GPIO_60"),
122*c74eef68SDevi Priya 	PINCTRL_PIN(61, "GPIO_61"),
123*c74eef68SDevi Priya 	PINCTRL_PIN(62, "GPIO_62"),
124*c74eef68SDevi Priya 	PINCTRL_PIN(63, "GPIO_63"),
125*c74eef68SDevi Priya 	PINCTRL_PIN(64, "GPIO_64"),
126*c74eef68SDevi Priya };
127*c74eef68SDevi Priya 
128*c74eef68SDevi Priya #define DECLARE_MSM_GPIO_PINS(pin) \
129*c74eef68SDevi Priya 	static const unsigned int gpio##pin##_pins[] = { pin }
130*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(0);
131*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(1);
132*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(2);
133*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(3);
134*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(4);
135*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(5);
136*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(6);
137*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(7);
138*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(8);
139*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(9);
140*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(10);
141*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(11);
142*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(12);
143*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(13);
144*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(14);
145*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(15);
146*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(16);
147*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(17);
148*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(18);
149*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(19);
150*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(20);
151*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(21);
152*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(22);
153*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(23);
154*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(24);
155*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(25);
156*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(26);
157*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(27);
158*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(28);
159*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(29);
160*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(30);
161*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(31);
162*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(32);
163*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(33);
164*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(34);
165*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(35);
166*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(36);
167*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(37);
168*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(38);
169*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(39);
170*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(40);
171*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(41);
172*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(42);
173*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(43);
174*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(44);
175*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(45);
176*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(46);
177*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(47);
178*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(48);
179*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(49);
180*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(50);
181*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(51);
182*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(52);
183*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(53);
184*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(54);
185*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(55);
186*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(56);
187*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(57);
188*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(58);
189*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(59);
190*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(60);
191*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(61);
192*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(62);
193*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(63);
194*c74eef68SDevi Priya DECLARE_MSM_GPIO_PINS(64);
195*c74eef68SDevi Priya 
196*c74eef68SDevi Priya enum ipq9574_functions {
197*c74eef68SDevi Priya 	msm_mux_atest_char,
198*c74eef68SDevi Priya 	msm_mux_atest_char0,
199*c74eef68SDevi Priya 	msm_mux_atest_char1,
200*c74eef68SDevi Priya 	msm_mux_atest_char2,
201*c74eef68SDevi Priya 	msm_mux_atest_char3,
202*c74eef68SDevi Priya 	msm_mux_audio_pdm0,
203*c74eef68SDevi Priya 	msm_mux_audio_pdm1,
204*c74eef68SDevi Priya 	msm_mux_audio_pri,
205*c74eef68SDevi Priya 	msm_mux_audio_sec,
206*c74eef68SDevi Priya 	msm_mux_blsp0_spi,
207*c74eef68SDevi Priya 	msm_mux_blsp0_uart,
208*c74eef68SDevi Priya 	msm_mux_blsp1_i2c,
209*c74eef68SDevi Priya 	msm_mux_blsp1_spi,
210*c74eef68SDevi Priya 	msm_mux_blsp1_uart,
211*c74eef68SDevi Priya 	msm_mux_blsp2_i2c,
212*c74eef68SDevi Priya 	msm_mux_blsp2_spi,
213*c74eef68SDevi Priya 	msm_mux_blsp2_uart,
214*c74eef68SDevi Priya 	msm_mux_blsp3_i2c,
215*c74eef68SDevi Priya 	msm_mux_blsp3_spi,
216*c74eef68SDevi Priya 	msm_mux_blsp3_uart,
217*c74eef68SDevi Priya 	msm_mux_blsp4_i2c,
218*c74eef68SDevi Priya 	msm_mux_blsp4_spi,
219*c74eef68SDevi Priya 	msm_mux_blsp4_uart,
220*c74eef68SDevi Priya 	msm_mux_blsp5_i2c,
221*c74eef68SDevi Priya 	msm_mux_blsp5_uart,
222*c74eef68SDevi Priya 	msm_mux_cri_trng0,
223*c74eef68SDevi Priya 	msm_mux_cri_trng1,
224*c74eef68SDevi Priya 	msm_mux_cri_trng2,
225*c74eef68SDevi Priya 	msm_mux_cri_trng3,
226*c74eef68SDevi Priya 	msm_mux_cxc0,
227*c74eef68SDevi Priya 	msm_mux_cxc1,
228*c74eef68SDevi Priya 	msm_mux_dbg_out,
229*c74eef68SDevi Priya 	msm_mux_dwc_ddrphy,
230*c74eef68SDevi Priya 	msm_mux_gcc_plltest,
231*c74eef68SDevi Priya 	msm_mux_gcc_tlmm,
232*c74eef68SDevi Priya 	msm_mux_gpio,
233*c74eef68SDevi Priya 	msm_mux_mac,
234*c74eef68SDevi Priya 	msm_mux_mdc,
235*c74eef68SDevi Priya 	msm_mux_mdio,
236*c74eef68SDevi Priya 	msm_mux_pcie0_clk,
237*c74eef68SDevi Priya 	msm_mux_pcie0_wake,
238*c74eef68SDevi Priya 	msm_mux_pcie1_clk,
239*c74eef68SDevi Priya 	msm_mux_pcie1_wake,
240*c74eef68SDevi Priya 	msm_mux_pcie2_clk,
241*c74eef68SDevi Priya 	msm_mux_pcie2_wake,
242*c74eef68SDevi Priya 	msm_mux_pcie3_clk,
243*c74eef68SDevi Priya 	msm_mux_pcie3_wake,
244*c74eef68SDevi Priya 	msm_mux_prng_rosc0,
245*c74eef68SDevi Priya 	msm_mux_prng_rosc1,
246*c74eef68SDevi Priya 	msm_mux_prng_rosc2,
247*c74eef68SDevi Priya 	msm_mux_prng_rosc3,
248*c74eef68SDevi Priya 	msm_mux_pta,
249*c74eef68SDevi Priya 	msm_mux_pwm,
250*c74eef68SDevi Priya 	msm_mux_qdss_cti_trig_in_a0,
251*c74eef68SDevi Priya 	msm_mux_qdss_cti_trig_in_a1,
252*c74eef68SDevi Priya 	msm_mux_qdss_cti_trig_in_b0,
253*c74eef68SDevi Priya 	msm_mux_qdss_cti_trig_in_b1,
254*c74eef68SDevi Priya 	msm_mux_qdss_cti_trig_out_a0,
255*c74eef68SDevi Priya 	msm_mux_qdss_cti_trig_out_a1,
256*c74eef68SDevi Priya 	msm_mux_qdss_cti_trig_out_b0,
257*c74eef68SDevi Priya 	msm_mux_qdss_cti_trig_out_b1,
258*c74eef68SDevi Priya 	msm_mux_qdss_traceclk_a,
259*c74eef68SDevi Priya 	msm_mux_qdss_traceclk_b,
260*c74eef68SDevi Priya 	msm_mux_qdss_tracectl_a,
261*c74eef68SDevi Priya 	msm_mux_qdss_tracectl_b,
262*c74eef68SDevi Priya 	msm_mux_qdss_tracedata_a,
263*c74eef68SDevi Priya 	msm_mux_qdss_tracedata_b,
264*c74eef68SDevi Priya 	msm_mux_qspi_data,
265*c74eef68SDevi Priya 	msm_mux_qspi_clk,
266*c74eef68SDevi Priya 	msm_mux_qspi_cs,
267*c74eef68SDevi Priya 	msm_mux_rx0,
268*c74eef68SDevi Priya 	msm_mux_rx1,
269*c74eef68SDevi Priya 	msm_mux_sdc_data,
270*c74eef68SDevi Priya 	msm_mux_sdc_clk,
271*c74eef68SDevi Priya 	msm_mux_sdc_cmd,
272*c74eef68SDevi Priya 	msm_mux_sdc_rclk,
273*c74eef68SDevi Priya 	msm_mux_tsens_max,
274*c74eef68SDevi Priya 	msm_mux_wci20,
275*c74eef68SDevi Priya 	msm_mux_wci21,
276*c74eef68SDevi Priya 	msm_mux_wsa_swrm,
277*c74eef68SDevi Priya 	msm_mux__,
278*c74eef68SDevi Priya };
279*c74eef68SDevi Priya 
280*c74eef68SDevi Priya static const char * const gpio_groups[] = {
281*c74eef68SDevi Priya 	"gpio0", "gpio1", "gpio2", "gpio3", "gpio4", "gpio5", "gpio6", "gpio7",
282*c74eef68SDevi Priya 	"gpio8", "gpio9", "gpio10", "gpio11", "gpio12", "gpio13", "gpio14",
283*c74eef68SDevi Priya 	"gpio15", "gpio16", "gpio17", "gpio18", "gpio19", "gpio20", "gpio21",
284*c74eef68SDevi Priya 	"gpio22", "gpio23", "gpio24", "gpio25", "gpio26", "gpio27", "gpio28",
285*c74eef68SDevi Priya 	"gpio29", "gpio30", "gpio31", "gpio32", "gpio33", "gpio34", "gpio35",
286*c74eef68SDevi Priya 	"gpio36", "gpio37", "gpio38", "gpio39", "gpio40", "gpio41", "gpio42",
287*c74eef68SDevi Priya 	"gpio43", "gpio44", "gpio45", "gpio46", "gpio47", "gpio48", "gpio49",
288*c74eef68SDevi Priya 	"gpio50", "gpio51", "gpio52", "gpio53", "gpio54", "gpio55", "gpio56",
289*c74eef68SDevi Priya 	"gpio57", "gpio58", "gpio59", "gpio60", "gpio61", "gpio62", "gpio63",
290*c74eef68SDevi Priya 	"gpio64",
291*c74eef68SDevi Priya };
292*c74eef68SDevi Priya 
293*c74eef68SDevi Priya static const char * const sdc_data_groups[] = {
294*c74eef68SDevi Priya 	"gpio0",
295*c74eef68SDevi Priya 	"gpio1",
296*c74eef68SDevi Priya 	"gpio2",
297*c74eef68SDevi Priya 	"gpio3",
298*c74eef68SDevi Priya 	"gpio6",
299*c74eef68SDevi Priya 	"gpio7",
300*c74eef68SDevi Priya 	"gpio8",
301*c74eef68SDevi Priya 	"gpio9",
302*c74eef68SDevi Priya };
303*c74eef68SDevi Priya 
304*c74eef68SDevi Priya static const char * const qspi_data_groups[] = {
305*c74eef68SDevi Priya 	"gpio0",
306*c74eef68SDevi Priya 	"gpio1",
307*c74eef68SDevi Priya 	"gpio2",
308*c74eef68SDevi Priya 	"gpio3",
309*c74eef68SDevi Priya };
310*c74eef68SDevi Priya 
311*c74eef68SDevi Priya static const char * const qdss_traceclk_b_groups[] = {
312*c74eef68SDevi Priya 	"gpio0",
313*c74eef68SDevi Priya };
314*c74eef68SDevi Priya 
315*c74eef68SDevi Priya static const char * const qdss_tracectl_b_groups[] = {
316*c74eef68SDevi Priya 	"gpio1",
317*c74eef68SDevi Priya };
318*c74eef68SDevi Priya 
319*c74eef68SDevi Priya static const char * const qdss_tracedata_b_groups[] = {
320*c74eef68SDevi Priya 	"gpio2", "gpio3", "gpio4", "gpio5", "gpio6", "gpio7", "gpio8", "gpio9",
321*c74eef68SDevi Priya 	"gpio10", "gpio11", "gpio12", "gpio13", "gpio14", "gpio15", "gpio16",
322*c74eef68SDevi Priya 	"gpio17",
323*c74eef68SDevi Priya };
324*c74eef68SDevi Priya 
325*c74eef68SDevi Priya static const char * const sdc_cmd_groups[] = {
326*c74eef68SDevi Priya 	"gpio4",
327*c74eef68SDevi Priya };
328*c74eef68SDevi Priya 
329*c74eef68SDevi Priya static const char * const qspi_cs_groups[] = {
330*c74eef68SDevi Priya 	"gpio4",
331*c74eef68SDevi Priya };
332*c74eef68SDevi Priya 
333*c74eef68SDevi Priya static const char * const sdc_clk_groups[] = {
334*c74eef68SDevi Priya 	"gpio5",
335*c74eef68SDevi Priya };
336*c74eef68SDevi Priya 
337*c74eef68SDevi Priya static const char * const qspi_clk_groups[] = {
338*c74eef68SDevi Priya 	"gpio5",
339*c74eef68SDevi Priya };
340*c74eef68SDevi Priya 
341*c74eef68SDevi Priya static const char * const sdc_rclk_groups[] = {
342*c74eef68SDevi Priya 	"gpio10",
343*c74eef68SDevi Priya };
344*c74eef68SDevi Priya 
345*c74eef68SDevi Priya static const char * const blsp0_spi_groups[] = {
346*c74eef68SDevi Priya 	"gpio11", "gpio12", "gpio13", "gpio14",
347*c74eef68SDevi Priya };
348*c74eef68SDevi Priya 
349*c74eef68SDevi Priya static const char * const blsp0_uart_groups[] = {
350*c74eef68SDevi Priya 	"gpio11", "gpio12", "gpio13", "gpio14",
351*c74eef68SDevi Priya };
352*c74eef68SDevi Priya 
353*c74eef68SDevi Priya static const char * const blsp3_spi_groups[] = {
354*c74eef68SDevi Priya 	"gpio15", "gpio16", "gpio17", "gpio18", "gpio19", "gpio20", "gpio21",
355*c74eef68SDevi Priya };
356*c74eef68SDevi Priya 
357*c74eef68SDevi Priya static const char * const blsp3_i2c_groups[] = {
358*c74eef68SDevi Priya 	"gpio15", "gpio16",
359*c74eef68SDevi Priya };
360*c74eef68SDevi Priya 
361*c74eef68SDevi Priya static const char * const blsp3_uart_groups[] = {
362*c74eef68SDevi Priya 	"gpio15", "gpio16", "gpio17", "gpio18",
363*c74eef68SDevi Priya };
364*c74eef68SDevi Priya 
365*c74eef68SDevi Priya static const char * const dbg_out_groups[] = {
366*c74eef68SDevi Priya 	"gpio17",
367*c74eef68SDevi Priya };
368*c74eef68SDevi Priya 
369*c74eef68SDevi Priya static const char * const cri_trng0_groups[] = {
370*c74eef68SDevi Priya 	"gpio20", "gpio38",
371*c74eef68SDevi Priya };
372*c74eef68SDevi Priya 
373*c74eef68SDevi Priya static const char * const cri_trng1_groups[] = {
374*c74eef68SDevi Priya 	"gpio21", "gpio34",
375*c74eef68SDevi Priya };
376*c74eef68SDevi Priya 
377*c74eef68SDevi Priya static const char * const pcie0_clk_groups[] = {
378*c74eef68SDevi Priya 	"gpio22",
379*c74eef68SDevi Priya };
380*c74eef68SDevi Priya 
381*c74eef68SDevi Priya static const char * const pta_groups[] = {
382*c74eef68SDevi Priya 	"gpio22", "gpio23", "gpio24", "gpio54", "gpio55", "gpio56", "gpio61",
383*c74eef68SDevi Priya 	"gpio62", "gpio63",
384*c74eef68SDevi Priya };
385*c74eef68SDevi Priya 
386*c74eef68SDevi Priya static const char * const wci21_groups[] = {
387*c74eef68SDevi Priya 	"gpio23", "gpio24",
388*c74eef68SDevi Priya };
389*c74eef68SDevi Priya 
390*c74eef68SDevi Priya static const char * const cxc0_groups[] = {
391*c74eef68SDevi Priya 	"gpio23", "gpio24",
392*c74eef68SDevi Priya };
393*c74eef68SDevi Priya 
394*c74eef68SDevi Priya static const char * const pcie0_wake_groups[] = {
395*c74eef68SDevi Priya 	"gpio24",
396*c74eef68SDevi Priya };
397*c74eef68SDevi Priya 
398*c74eef68SDevi Priya static const char * const qdss_cti_trig_out_b0_groups[] = {
399*c74eef68SDevi Priya 	"gpio24",
400*c74eef68SDevi Priya };
401*c74eef68SDevi Priya 
402*c74eef68SDevi Priya static const char * const pcie1_clk_groups[] = {
403*c74eef68SDevi Priya 	"gpio25",
404*c74eef68SDevi Priya };
405*c74eef68SDevi Priya 
406*c74eef68SDevi Priya static const char * const qdss_cti_trig_in_b0_groups[] = {
407*c74eef68SDevi Priya 	"gpio25",
408*c74eef68SDevi Priya };
409*c74eef68SDevi Priya 
410*c74eef68SDevi Priya static const char * const atest_char0_groups[] = {
411*c74eef68SDevi Priya 	"gpio26",
412*c74eef68SDevi Priya };
413*c74eef68SDevi Priya 
414*c74eef68SDevi Priya static const char * const qdss_cti_trig_out_b1_groups[] = {
415*c74eef68SDevi Priya 	"gpio26",
416*c74eef68SDevi Priya };
417*c74eef68SDevi Priya 
418*c74eef68SDevi Priya static const char * const pcie1_wake_groups[] = {
419*c74eef68SDevi Priya 	"gpio27",
420*c74eef68SDevi Priya };
421*c74eef68SDevi Priya 
422*c74eef68SDevi Priya static const char * const atest_char1_groups[] = {
423*c74eef68SDevi Priya 	"gpio27",
424*c74eef68SDevi Priya };
425*c74eef68SDevi Priya 
426*c74eef68SDevi Priya static const char * const qdss_cti_trig_in_b1_groups[] = {
427*c74eef68SDevi Priya 	"gpio27",
428*c74eef68SDevi Priya };
429*c74eef68SDevi Priya 
430*c74eef68SDevi Priya static const char * const pcie2_clk_groups[] = {
431*c74eef68SDevi Priya 	"gpio28",
432*c74eef68SDevi Priya };
433*c74eef68SDevi Priya 
434*c74eef68SDevi Priya static const char * const atest_char2_groups[] = {
435*c74eef68SDevi Priya 	"gpio28",
436*c74eef68SDevi Priya };
437*c74eef68SDevi Priya 
438*c74eef68SDevi Priya static const char * const atest_char3_groups[] = {
439*c74eef68SDevi Priya 	"gpio29",
440*c74eef68SDevi Priya };
441*c74eef68SDevi Priya 
442*c74eef68SDevi Priya static const char * const pcie2_wake_groups[] = {
443*c74eef68SDevi Priya 	"gpio30",
444*c74eef68SDevi Priya };
445*c74eef68SDevi Priya 
446*c74eef68SDevi Priya static const char * const pwm_groups[] = {
447*c74eef68SDevi Priya 	"gpio30", "gpio31", "gpio32", "gpio33", "gpio44", "gpio45", "gpio46",
448*c74eef68SDevi Priya 	"gpio47", "gpio50", "gpio51", "gpio52", "gpio53", "gpio54", "gpio55",
449*c74eef68SDevi Priya 	"gpio56", "gpio57", "gpio58", "gpio59", "gpio60",
450*c74eef68SDevi Priya };
451*c74eef68SDevi Priya 
452*c74eef68SDevi Priya static const char * const atest_char_groups[] = {
453*c74eef68SDevi Priya 	"gpio30",
454*c74eef68SDevi Priya };
455*c74eef68SDevi Priya 
456*c74eef68SDevi Priya static const char * const pcie3_clk_groups[] = {
457*c74eef68SDevi Priya 	"gpio31",
458*c74eef68SDevi Priya };
459*c74eef68SDevi Priya 
460*c74eef68SDevi Priya static const char * const qdss_cti_trig_in_a1_groups[] = {
461*c74eef68SDevi Priya 	"gpio31",
462*c74eef68SDevi Priya };
463*c74eef68SDevi Priya 
464*c74eef68SDevi Priya static const char * const qdss_cti_trig_out_a1_groups[] = {
465*c74eef68SDevi Priya 	"gpio32",
466*c74eef68SDevi Priya };
467*c74eef68SDevi Priya 
468*c74eef68SDevi Priya static const char * const pcie3_wake_groups[] = {
469*c74eef68SDevi Priya 	"gpio33",
470*c74eef68SDevi Priya };
471*c74eef68SDevi Priya 
472*c74eef68SDevi Priya static const char * const qdss_cti_trig_in_a0_groups[] = {
473*c74eef68SDevi Priya 	"gpio33",
474*c74eef68SDevi Priya };
475*c74eef68SDevi Priya 
476*c74eef68SDevi Priya static const char * const blsp2_uart_groups[] = {
477*c74eef68SDevi Priya 	"gpio34", "gpio35",
478*c74eef68SDevi Priya };
479*c74eef68SDevi Priya 
480*c74eef68SDevi Priya static const char * const blsp2_i2c_groups[] = {
481*c74eef68SDevi Priya 	"gpio34", "gpio35",
482*c74eef68SDevi Priya };
483*c74eef68SDevi Priya 
484*c74eef68SDevi Priya static const char * const blsp2_spi_groups[] = {
485*c74eef68SDevi Priya 	"gpio34", "gpio35", "gpio36", "gpio37",
486*c74eef68SDevi Priya };
487*c74eef68SDevi Priya 
488*c74eef68SDevi Priya static const char * const blsp1_uart_groups[] = {
489*c74eef68SDevi Priya 	"gpio34", "gpio35", "gpio36", "gpio37",
490*c74eef68SDevi Priya };
491*c74eef68SDevi Priya 
492*c74eef68SDevi Priya static const char * const qdss_cti_trig_out_a0_groups[] = {
493*c74eef68SDevi Priya 	"gpio34",
494*c74eef68SDevi Priya };
495*c74eef68SDevi Priya 
496*c74eef68SDevi Priya static const char * const cri_trng2_groups[] = {
497*c74eef68SDevi Priya 	"gpio35",
498*c74eef68SDevi Priya };
499*c74eef68SDevi Priya 
500*c74eef68SDevi Priya static const char * const blsp1_i2c_groups[] = {
501*c74eef68SDevi Priya 	"gpio36", "gpio37",
502*c74eef68SDevi Priya };
503*c74eef68SDevi Priya 
504*c74eef68SDevi Priya static const char * const cri_trng3_groups[] = {
505*c74eef68SDevi Priya 	"gpio36",
506*c74eef68SDevi Priya };
507*c74eef68SDevi Priya 
508*c74eef68SDevi Priya static const char * const dwc_ddrphy_groups[] = {
509*c74eef68SDevi Priya 	"gpio37",
510*c74eef68SDevi Priya };
511*c74eef68SDevi Priya 
512*c74eef68SDevi Priya static const char * const mdc_groups[] = {
513*c74eef68SDevi Priya 	"gpio38",
514*c74eef68SDevi Priya };
515*c74eef68SDevi Priya 
516*c74eef68SDevi Priya static const char * const mdio_groups[] = {
517*c74eef68SDevi Priya 	"gpio39",
518*c74eef68SDevi Priya };
519*c74eef68SDevi Priya 
520*c74eef68SDevi Priya static const char * const audio_pri_groups[] = {
521*c74eef68SDevi Priya 	"gpio40", "gpio41", "gpio42", "gpio43", "gpio61", "gpio61",
522*c74eef68SDevi Priya };
523*c74eef68SDevi Priya 
524*c74eef68SDevi Priya static const char * const audio_pdm0_groups[] = {
525*c74eef68SDevi Priya 	"gpio40", "gpio41", "gpio42", "gpio43",
526*c74eef68SDevi Priya };
527*c74eef68SDevi Priya 
528*c74eef68SDevi Priya static const char * const qdss_traceclk_a_groups[] = {
529*c74eef68SDevi Priya 	"gpio43",
530*c74eef68SDevi Priya };
531*c74eef68SDevi Priya 
532*c74eef68SDevi Priya static const char * const audio_sec_groups[] = {
533*c74eef68SDevi Priya 	"gpio44", "gpio45", "gpio46", "gpio47", "gpio62", "gpio62",
534*c74eef68SDevi Priya };
535*c74eef68SDevi Priya 
536*c74eef68SDevi Priya static const char * const wsa_swrm_groups[] = {
537*c74eef68SDevi Priya 	"gpio44", "gpio45",
538*c74eef68SDevi Priya };
539*c74eef68SDevi Priya 
540*c74eef68SDevi Priya static const char * const qdss_tracectl_a_groups[] = {
541*c74eef68SDevi Priya 	"gpio44",
542*c74eef68SDevi Priya };
543*c74eef68SDevi Priya 
544*c74eef68SDevi Priya static const char * const qdss_tracedata_a_groups[] = {
545*c74eef68SDevi Priya 	"gpio45", "gpio46", "gpio47", "gpio48", "gpio49", "gpio50", "gpio51",
546*c74eef68SDevi Priya 	"gpio52", "gpio53", "gpio54", "gpio55", "gpio56", "gpio57", "gpio58",
547*c74eef68SDevi Priya 	"gpio59", "gpio60",
548*c74eef68SDevi Priya };
549*c74eef68SDevi Priya 
550*c74eef68SDevi Priya static const char * const rx1_groups[] = {
551*c74eef68SDevi Priya 	"gpio46",
552*c74eef68SDevi Priya };
553*c74eef68SDevi Priya 
554*c74eef68SDevi Priya static const char * const mac_groups[] = {
555*c74eef68SDevi Priya 	"gpio46", "gpio47", "gpio57", "gpio58",
556*c74eef68SDevi Priya };
557*c74eef68SDevi Priya 
558*c74eef68SDevi Priya static const char * const blsp5_i2c_groups[] = {
559*c74eef68SDevi Priya 	"gpio48", "gpio49",
560*c74eef68SDevi Priya };
561*c74eef68SDevi Priya 
562*c74eef68SDevi Priya static const char * const blsp5_uart_groups[] = {
563*c74eef68SDevi Priya 	"gpio48", "gpio49",
564*c74eef68SDevi Priya };
565*c74eef68SDevi Priya 
566*c74eef68SDevi Priya static const char * const blsp4_uart_groups[] = {
567*c74eef68SDevi Priya 	"gpio50", "gpio51", "gpio52", "gpio53",
568*c74eef68SDevi Priya };
569*c74eef68SDevi Priya 
570*c74eef68SDevi Priya static const char * const blsp4_i2c_groups[] = {
571*c74eef68SDevi Priya 	"gpio50", "gpio51",
572*c74eef68SDevi Priya };
573*c74eef68SDevi Priya 
574*c74eef68SDevi Priya static const char * const blsp4_spi_groups[] = {
575*c74eef68SDevi Priya 	"gpio50", "gpio51", "gpio52", "gpio53",
576*c74eef68SDevi Priya };
577*c74eef68SDevi Priya 
578*c74eef68SDevi Priya static const char * const wci20_groups[] = {
579*c74eef68SDevi Priya 	"gpio57", "gpio58",
580*c74eef68SDevi Priya };
581*c74eef68SDevi Priya 
582*c74eef68SDevi Priya static const char * const cxc1_groups[] = {
583*c74eef68SDevi Priya 	"gpio57", "gpio58",
584*c74eef68SDevi Priya };
585*c74eef68SDevi Priya 
586*c74eef68SDevi Priya static const char * const rx0_groups[] = {
587*c74eef68SDevi Priya 	"gpio59",
588*c74eef68SDevi Priya };
589*c74eef68SDevi Priya 
590*c74eef68SDevi Priya static const char * const prng_rosc0_groups[] = {
591*c74eef68SDevi Priya 	"gpio60",
592*c74eef68SDevi Priya };
593*c74eef68SDevi Priya 
594*c74eef68SDevi Priya static const char * const gcc_plltest_groups[] = {
595*c74eef68SDevi Priya 	"gpio60", "gpio62",
596*c74eef68SDevi Priya };
597*c74eef68SDevi Priya 
598*c74eef68SDevi Priya static const char * const blsp1_spi_groups[] = {
599*c74eef68SDevi Priya 	"gpio61", "gpio62", "gpio63", "gpio64",
600*c74eef68SDevi Priya };
601*c74eef68SDevi Priya 
602*c74eef68SDevi Priya static const char * const audio_pdm1_groups[] = {
603*c74eef68SDevi Priya 	"gpio61", "gpio62", "gpio63", "gpio64",
604*c74eef68SDevi Priya };
605*c74eef68SDevi Priya 
606*c74eef68SDevi Priya static const char * const prng_rosc1_groups[] = {
607*c74eef68SDevi Priya 	"gpio61",
608*c74eef68SDevi Priya };
609*c74eef68SDevi Priya 
610*c74eef68SDevi Priya static const char * const gcc_tlmm_groups[] = {
611*c74eef68SDevi Priya 	"gpio61",
612*c74eef68SDevi Priya };
613*c74eef68SDevi Priya 
614*c74eef68SDevi Priya static const char * const prng_rosc2_groups[] = {
615*c74eef68SDevi Priya 	"gpio62",
616*c74eef68SDevi Priya };
617*c74eef68SDevi Priya 
618*c74eef68SDevi Priya static const char * const prng_rosc3_groups[] = {
619*c74eef68SDevi Priya 	"gpio63",
620*c74eef68SDevi Priya };
621*c74eef68SDevi Priya 
622*c74eef68SDevi Priya static const char * const tsens_max_groups[] = {
623*c74eef68SDevi Priya 	"gpio64",
624*c74eef68SDevi Priya };
625*c74eef68SDevi Priya 
626*c74eef68SDevi Priya static const struct msm_function ipq9574_functions[] = {
627*c74eef68SDevi Priya 	FUNCTION(atest_char),
628*c74eef68SDevi Priya 	FUNCTION(atest_char0),
629*c74eef68SDevi Priya 	FUNCTION(atest_char1),
630*c74eef68SDevi Priya 	FUNCTION(atest_char2),
631*c74eef68SDevi Priya 	FUNCTION(atest_char3),
632*c74eef68SDevi Priya 	FUNCTION(audio_pdm0),
633*c74eef68SDevi Priya 	FUNCTION(audio_pdm1),
634*c74eef68SDevi Priya 	FUNCTION(audio_pri),
635*c74eef68SDevi Priya 	FUNCTION(audio_sec),
636*c74eef68SDevi Priya 	FUNCTION(blsp0_spi),
637*c74eef68SDevi Priya 	FUNCTION(blsp0_uart),
638*c74eef68SDevi Priya 	FUNCTION(blsp1_i2c),
639*c74eef68SDevi Priya 	FUNCTION(blsp1_spi),
640*c74eef68SDevi Priya 	FUNCTION(blsp1_uart),
641*c74eef68SDevi Priya 	FUNCTION(blsp2_i2c),
642*c74eef68SDevi Priya 	FUNCTION(blsp2_spi),
643*c74eef68SDevi Priya 	FUNCTION(blsp2_uart),
644*c74eef68SDevi Priya 	FUNCTION(blsp3_i2c),
645*c74eef68SDevi Priya 	FUNCTION(blsp3_spi),
646*c74eef68SDevi Priya 	FUNCTION(blsp3_uart),
647*c74eef68SDevi Priya 	FUNCTION(blsp4_i2c),
648*c74eef68SDevi Priya 	FUNCTION(blsp4_spi),
649*c74eef68SDevi Priya 	FUNCTION(blsp4_uart),
650*c74eef68SDevi Priya 	FUNCTION(blsp5_i2c),
651*c74eef68SDevi Priya 	FUNCTION(blsp5_uart),
652*c74eef68SDevi Priya 	FUNCTION(cri_trng0),
653*c74eef68SDevi Priya 	FUNCTION(cri_trng1),
654*c74eef68SDevi Priya 	FUNCTION(cri_trng2),
655*c74eef68SDevi Priya 	FUNCTION(cri_trng3),
656*c74eef68SDevi Priya 	FUNCTION(cxc0),
657*c74eef68SDevi Priya 	FUNCTION(cxc1),
658*c74eef68SDevi Priya 	FUNCTION(dbg_out),
659*c74eef68SDevi Priya 	FUNCTION(dwc_ddrphy),
660*c74eef68SDevi Priya 	FUNCTION(gcc_plltest),
661*c74eef68SDevi Priya 	FUNCTION(gcc_tlmm),
662*c74eef68SDevi Priya 	FUNCTION(gpio),
663*c74eef68SDevi Priya 	FUNCTION(mac),
664*c74eef68SDevi Priya 	FUNCTION(mdc),
665*c74eef68SDevi Priya 	FUNCTION(mdio),
666*c74eef68SDevi Priya 	FUNCTION(pcie0_clk),
667*c74eef68SDevi Priya 	FUNCTION(pcie0_wake),
668*c74eef68SDevi Priya 	FUNCTION(pcie1_clk),
669*c74eef68SDevi Priya 	FUNCTION(pcie1_wake),
670*c74eef68SDevi Priya 	FUNCTION(pcie2_clk),
671*c74eef68SDevi Priya 	FUNCTION(pcie2_wake),
672*c74eef68SDevi Priya 	FUNCTION(pcie3_clk),
673*c74eef68SDevi Priya 	FUNCTION(pcie3_wake),
674*c74eef68SDevi Priya 	FUNCTION(prng_rosc0),
675*c74eef68SDevi Priya 	FUNCTION(prng_rosc1),
676*c74eef68SDevi Priya 	FUNCTION(prng_rosc2),
677*c74eef68SDevi Priya 	FUNCTION(prng_rosc3),
678*c74eef68SDevi Priya 	FUNCTION(pta),
679*c74eef68SDevi Priya 	FUNCTION(pwm),
680*c74eef68SDevi Priya 	FUNCTION(qdss_cti_trig_in_a0),
681*c74eef68SDevi Priya 	FUNCTION(qdss_cti_trig_in_a1),
682*c74eef68SDevi Priya 	FUNCTION(qdss_cti_trig_in_b0),
683*c74eef68SDevi Priya 	FUNCTION(qdss_cti_trig_in_b1),
684*c74eef68SDevi Priya 	FUNCTION(qdss_cti_trig_out_a0),
685*c74eef68SDevi Priya 	FUNCTION(qdss_cti_trig_out_a1),
686*c74eef68SDevi Priya 	FUNCTION(qdss_cti_trig_out_b0),
687*c74eef68SDevi Priya 	FUNCTION(qdss_cti_trig_out_b1),
688*c74eef68SDevi Priya 	FUNCTION(qdss_traceclk_a),
689*c74eef68SDevi Priya 	FUNCTION(qdss_traceclk_b),
690*c74eef68SDevi Priya 	FUNCTION(qdss_tracectl_a),
691*c74eef68SDevi Priya 	FUNCTION(qdss_tracectl_b),
692*c74eef68SDevi Priya 	FUNCTION(qdss_tracedata_a),
693*c74eef68SDevi Priya 	FUNCTION(qdss_tracedata_b),
694*c74eef68SDevi Priya 	FUNCTION(qspi_data),
695*c74eef68SDevi Priya 	FUNCTION(qspi_clk),
696*c74eef68SDevi Priya 	FUNCTION(qspi_cs),
697*c74eef68SDevi Priya 	FUNCTION(rx0),
698*c74eef68SDevi Priya 	FUNCTION(rx1),
699*c74eef68SDevi Priya 	FUNCTION(sdc_data),
700*c74eef68SDevi Priya 	FUNCTION(sdc_clk),
701*c74eef68SDevi Priya 	FUNCTION(sdc_cmd),
702*c74eef68SDevi Priya 	FUNCTION(sdc_rclk),
703*c74eef68SDevi Priya 	FUNCTION(tsens_max),
704*c74eef68SDevi Priya 	FUNCTION(wci20),
705*c74eef68SDevi Priya 	FUNCTION(wci21),
706*c74eef68SDevi Priya 	FUNCTION(wsa_swrm),
707*c74eef68SDevi Priya };
708*c74eef68SDevi Priya 
709*c74eef68SDevi Priya static const struct msm_pingroup ipq9574_groups[] = {
710*c74eef68SDevi Priya 	PINGROUP(0, sdc_data, qspi_data, qdss_traceclk_b, _, _, _, _, _, _),
711*c74eef68SDevi Priya 	PINGROUP(1, sdc_data, qspi_data, qdss_tracectl_b, _, _, _, _, _, _),
712*c74eef68SDevi Priya 	PINGROUP(2, sdc_data, qspi_data, qdss_tracedata_b, _, _, _, _, _, _),
713*c74eef68SDevi Priya 	PINGROUP(3, sdc_data, qspi_data, qdss_tracedata_b, _, _, _, _, _, _),
714*c74eef68SDevi Priya 	PINGROUP(4, sdc_cmd, qspi_cs, qdss_tracedata_b, _, _, _, _, _, _),
715*c74eef68SDevi Priya 	PINGROUP(5, sdc_clk, qspi_clk, qdss_tracedata_b, _, _, _, _, _, _),
716*c74eef68SDevi Priya 	PINGROUP(6, sdc_data, qdss_tracedata_b, _, _, _, _, _, _, _),
717*c74eef68SDevi Priya 	PINGROUP(7, sdc_data, qdss_tracedata_b, _, _, _, _, _, _, _),
718*c74eef68SDevi Priya 	PINGROUP(8, sdc_data, qdss_tracedata_b, _, _, _, _, _, _, _),
719*c74eef68SDevi Priya 	PINGROUP(9, sdc_data, qdss_tracedata_b, _, _, _, _, _, _, _),
720*c74eef68SDevi Priya 	PINGROUP(10, sdc_rclk, qdss_tracedata_b, _, _, _, _, _, _, _),
721*c74eef68SDevi Priya 	PINGROUP(11, blsp0_spi, blsp0_uart, qdss_tracedata_b, _, _, _, _, _, _),
722*c74eef68SDevi Priya 	PINGROUP(12, blsp0_spi, blsp0_uart, qdss_tracedata_b, _, _, _, _, _, _),
723*c74eef68SDevi Priya 	PINGROUP(13, blsp0_spi, blsp0_uart, qdss_tracedata_b, _, _, _, _, _, _),
724*c74eef68SDevi Priya 	PINGROUP(14, blsp0_spi, blsp0_uart, qdss_tracedata_b, _, _, _, _, _, _),
725*c74eef68SDevi Priya 	PINGROUP(15, blsp3_spi, blsp3_i2c, blsp3_uart, qdss_tracedata_b, _, _, _, _, _),
726*c74eef68SDevi Priya 	PINGROUP(16, blsp3_spi, blsp3_i2c, blsp3_uart, qdss_tracedata_b, _, _, _, _, _),
727*c74eef68SDevi Priya 	PINGROUP(17, blsp3_spi, blsp3_uart, dbg_out, qdss_tracedata_b, _, _, _, _, _),
728*c74eef68SDevi Priya 	PINGROUP(18, blsp3_spi, blsp3_uart, _, _, _, _, _, _, _),
729*c74eef68SDevi Priya 	PINGROUP(19, blsp3_spi, _, _, _, _, _, _, _, _),
730*c74eef68SDevi Priya 	PINGROUP(20, blsp3_spi, _, cri_trng0, _, _, _, _, _, _),
731*c74eef68SDevi Priya 	PINGROUP(21, blsp3_spi, _, cri_trng1, _, _, _, _, _, _),
732*c74eef68SDevi Priya 	PINGROUP(22, pcie0_clk, _, pta, _, _, _, _, _, _),
733*c74eef68SDevi Priya 	PINGROUP(23, _, pta, wci21, cxc0, _, _, _, _, _),
734*c74eef68SDevi Priya 	PINGROUP(24, pcie0_wake, _, pta, wci21, cxc0, _, qdss_cti_trig_out_b0, _, _),
735*c74eef68SDevi Priya 	PINGROUP(25, pcie1_clk, _, _, qdss_cti_trig_in_b0, _, _, _, _, _),
736*c74eef68SDevi Priya 	PINGROUP(26, _, atest_char0, _, qdss_cti_trig_out_b1, _, _, _, _, _),
737*c74eef68SDevi Priya 	PINGROUP(27, pcie1_wake, _, atest_char1, qdss_cti_trig_in_b1, _, _, _, _, _),
738*c74eef68SDevi Priya 	PINGROUP(28, pcie2_clk, atest_char2, _, _, _, _, _, _, _),
739*c74eef68SDevi Priya 	PINGROUP(29, atest_char3, _, _, _, _, _, _, _, _),
740*c74eef68SDevi Priya 	PINGROUP(30, pcie2_wake, pwm, atest_char, _, _, _, _, _, _),
741*c74eef68SDevi Priya 	PINGROUP(31, pcie3_clk, pwm, _, qdss_cti_trig_in_a1, _, _, _, _, _),
742*c74eef68SDevi Priya 	PINGROUP(32, pwm, _, qdss_cti_trig_out_a1, _, _, _, _, _, _),
743*c74eef68SDevi Priya 	PINGROUP(33, pcie3_wake, pwm, _, qdss_cti_trig_in_a0, _, _, _, _, _),
744*c74eef68SDevi Priya 	PINGROUP(34, blsp2_uart, blsp2_i2c, blsp2_spi, blsp1_uart, _, cri_trng1, qdss_cti_trig_out_a0, _, _),
745*c74eef68SDevi Priya 	PINGROUP(35, blsp2_uart, blsp2_i2c, blsp2_spi, blsp1_uart, _, cri_trng2, _, _, _),
746*c74eef68SDevi Priya 	PINGROUP(36, blsp1_uart, blsp1_i2c, blsp2_spi, _, cri_trng3, _, _, _, _),
747*c74eef68SDevi Priya 	PINGROUP(37, blsp1_uart, blsp1_i2c, blsp2_spi, _, dwc_ddrphy, _, _, _, _),
748*c74eef68SDevi Priya 	PINGROUP(38, mdc, _, cri_trng0, _, _, _, _, _, _),
749*c74eef68SDevi Priya 	PINGROUP(39, mdio, _, _, _, _, _, _, _, _),
750*c74eef68SDevi Priya 	PINGROUP(40, audio_pri, audio_pdm0, _, _, _, _, _, _, _),
751*c74eef68SDevi Priya 	PINGROUP(41, audio_pri, audio_pdm0, _, _, _, _, _, _, _),
752*c74eef68SDevi Priya 	PINGROUP(42, audio_pri, audio_pdm0, _, _, _, _, _, _, _),
753*c74eef68SDevi Priya 	PINGROUP(43, audio_pri, audio_pdm0, _, qdss_traceclk_a, _, _, _, _, _),
754*c74eef68SDevi Priya 	PINGROUP(44, pwm, audio_sec, wsa_swrm, _, qdss_tracectl_a, _, _, _, _),
755*c74eef68SDevi Priya 	PINGROUP(45, pwm, audio_sec, wsa_swrm, _, qdss_tracedata_a, _, _, _, _),
756*c74eef68SDevi Priya 	PINGROUP(46, pwm, audio_sec, rx1, mac, _, qdss_tracedata_a, _, _, _),
757*c74eef68SDevi Priya 	PINGROUP(47, pwm, audio_sec, mac, _, qdss_tracedata_a, _, _, _, _),
758*c74eef68SDevi Priya 	PINGROUP(48, blsp5_i2c, blsp5_uart, _, qdss_tracedata_a, _, _, _, _, _),
759*c74eef68SDevi Priya 	PINGROUP(49, blsp5_i2c, blsp5_uart, _, qdss_tracedata_a, _, _, _, _, _),
760*c74eef68SDevi Priya 	PINGROUP(50, blsp4_uart, blsp4_i2c, blsp4_spi, pwm, qdss_tracedata_a, _, _, _, _),
761*c74eef68SDevi Priya 	PINGROUP(51, blsp4_uart, blsp4_i2c, blsp4_spi, pwm, qdss_tracedata_a, _, _, _, _),
762*c74eef68SDevi Priya 	PINGROUP(52, blsp4_uart, blsp4_spi, pwm, qdss_tracedata_a, _, _, _, _, _),
763*c74eef68SDevi Priya 	PINGROUP(53, blsp4_uart, blsp4_spi, pwm, qdss_tracedata_a, _, _, _, _, _),
764*c74eef68SDevi Priya 	PINGROUP(54, pta, pwm, qdss_tracedata_a, _, _, _, _, _, _),
765*c74eef68SDevi Priya 	PINGROUP(55, pta, pwm, qdss_tracedata_a, _, _, _, _, _, _),
766*c74eef68SDevi Priya 	PINGROUP(56, pta, pwm, qdss_tracedata_a, _, _, _, _, _, _),
767*c74eef68SDevi Priya 	PINGROUP(57, wci20, cxc1, mac, pwm, qdss_tracedata_a, _, _, _, _),
768*c74eef68SDevi Priya 	PINGROUP(58, wci20, cxc1, mac, pwm, qdss_tracedata_a, _, _, _, _),
769*c74eef68SDevi Priya 	PINGROUP(59, rx0, pwm, qdss_tracedata_a, _, _, _, _, _, _),
770*c74eef68SDevi Priya 	PINGROUP(60, pwm, prng_rosc0, qdss_tracedata_a, _, gcc_plltest, _, _, _, _),
771*c74eef68SDevi Priya 	PINGROUP(61, blsp1_spi, audio_pri, audio_pdm1, audio_pri, pta, prng_rosc1, gcc_tlmm, _, _),
772*c74eef68SDevi Priya 	PINGROUP(62, blsp1_spi, audio_sec, audio_pdm1, audio_sec, pta, prng_rosc2, gcc_plltest, _, _),
773*c74eef68SDevi Priya 	PINGROUP(63, blsp1_spi, audio_pdm1, pta, prng_rosc3, _, _, _, _, _),
774*c74eef68SDevi Priya 	PINGROUP(64, blsp1_spi, audio_pdm1, tsens_max, _, _, _, _, _, _),
775*c74eef68SDevi Priya };
776*c74eef68SDevi Priya 
777*c74eef68SDevi Priya /* Reserving GPIO59 for controlling the QFPROM LDO regulator */
778*c74eef68SDevi Priya static const int ipq9574_reserved_gpios[] = {
779*c74eef68SDevi Priya 	59, -1
780*c74eef68SDevi Priya };
781*c74eef68SDevi Priya 
782*c74eef68SDevi Priya static const struct msm_pinctrl_soc_data ipq9574_pinctrl = {
783*c74eef68SDevi Priya 	.pins = ipq9574_pins,
784*c74eef68SDevi Priya 	.npins = ARRAY_SIZE(ipq9574_pins),
785*c74eef68SDevi Priya 	.functions = ipq9574_functions,
786*c74eef68SDevi Priya 	.nfunctions = ARRAY_SIZE(ipq9574_functions),
787*c74eef68SDevi Priya 	.groups = ipq9574_groups,
788*c74eef68SDevi Priya 	.ngroups = ARRAY_SIZE(ipq9574_groups),
789*c74eef68SDevi Priya 	.reserved_gpios = ipq9574_reserved_gpios,
790*c74eef68SDevi Priya 	.ngpios = 65,
791*c74eef68SDevi Priya };
792*c74eef68SDevi Priya 
793*c74eef68SDevi Priya static int ipq9574_pinctrl_probe(struct platform_device *pdev)
794*c74eef68SDevi Priya {
795*c74eef68SDevi Priya 	return msm_pinctrl_probe(pdev, &ipq9574_pinctrl);
796*c74eef68SDevi Priya }
797*c74eef68SDevi Priya 
798*c74eef68SDevi Priya static const struct of_device_id ipq9574_pinctrl_of_match[] = {
799*c74eef68SDevi Priya 	{ .compatible = "qcom,ipq9574-tlmm", },
800*c74eef68SDevi Priya 	{ }
801*c74eef68SDevi Priya };
802*c74eef68SDevi Priya MODULE_DEVICE_TABLE(of, ipq9574_pinctrl_of_match);
803*c74eef68SDevi Priya 
804*c74eef68SDevi Priya static struct platform_driver ipq9574_pinctrl_driver = {
805*c74eef68SDevi Priya 	.driver = {
806*c74eef68SDevi Priya 		.name = "ipq9574-tlmm",
807*c74eef68SDevi Priya 		.of_match_table = ipq9574_pinctrl_of_match,
808*c74eef68SDevi Priya 	},
809*c74eef68SDevi Priya 	.probe = ipq9574_pinctrl_probe,
810*c74eef68SDevi Priya 	.remove = msm_pinctrl_remove,
811*c74eef68SDevi Priya };
812*c74eef68SDevi Priya 
813*c74eef68SDevi Priya static int __init ipq9574_pinctrl_init(void)
814*c74eef68SDevi Priya {
815*c74eef68SDevi Priya 	return platform_driver_register(&ipq9574_pinctrl_driver);
816*c74eef68SDevi Priya }
817*c74eef68SDevi Priya arch_initcall(ipq9574_pinctrl_init);
818*c74eef68SDevi Priya 
819*c74eef68SDevi Priya static void __exit ipq9574_pinctrl_exit(void)
820*c74eef68SDevi Priya {
821*c74eef68SDevi Priya 	platform_driver_unregister(&ipq9574_pinctrl_driver);
822*c74eef68SDevi Priya }
823*c74eef68SDevi Priya module_exit(ipq9574_pinctrl_exit);
824*c74eef68SDevi Priya 
825*c74eef68SDevi Priya MODULE_DESCRIPTION("QTI IPQ9574 TLMM driver");
826*c74eef68SDevi Priya MODULE_LICENSE("GPL");
827