xref: /OK3568_Linux_fs/u-boot/drivers/pinctrl/rockchip/pinctrl-rk3308.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0+
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * (C) Copyright 2020 Rockchip Electronics Co., Ltd
4*4882a593Smuzhiyun  */
5*4882a593Smuzhiyun 
6*4882a593Smuzhiyun #include <common.h>
7*4882a593Smuzhiyun #include <dm.h>
8*4882a593Smuzhiyun #include <dm/pinctrl.h>
9*4882a593Smuzhiyun #include <regmap.h>
10*4882a593Smuzhiyun #include <syscon.h>
11*4882a593Smuzhiyun #include <asm/arch/cpu.h>
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun #include "pinctrl-rockchip.h"
14*4882a593Smuzhiyun 
15*4882a593Smuzhiyun static struct rockchip_mux_route_data rk3308_mux_route_data[] = {
16*4882a593Smuzhiyun 	{
17*4882a593Smuzhiyun 		/* rtc_clk */
18*4882a593Smuzhiyun 		.bank_num = 0,
19*4882a593Smuzhiyun 		.pin = 19,
20*4882a593Smuzhiyun 		.func = 1,
21*4882a593Smuzhiyun 		.route_offset = 0x314,
22*4882a593Smuzhiyun 		.route_val = BIT(16 + 0) | BIT(0),
23*4882a593Smuzhiyun 	}, {
24*4882a593Smuzhiyun 		/* uart2_rxm0 */
25*4882a593Smuzhiyun 		.bank_num = 1,
26*4882a593Smuzhiyun 		.pin = 22,
27*4882a593Smuzhiyun 		.func = 2,
28*4882a593Smuzhiyun 		.route_offset = 0x314,
29*4882a593Smuzhiyun 		.route_val = BIT(16 + 2) | BIT(16 + 3),
30*4882a593Smuzhiyun 	}, {
31*4882a593Smuzhiyun 		/* uart2_rxm1 */
32*4882a593Smuzhiyun 		.bank_num = 4,
33*4882a593Smuzhiyun 		.pin = 26,
34*4882a593Smuzhiyun 		.func = 2,
35*4882a593Smuzhiyun 		.route_offset = 0x314,
36*4882a593Smuzhiyun 		.route_val = BIT(16 + 2) | BIT(16 + 3) | BIT(2),
37*4882a593Smuzhiyun 	}, {
38*4882a593Smuzhiyun 		/* i2c3_sdam0 */
39*4882a593Smuzhiyun 		.bank_num = 0,
40*4882a593Smuzhiyun 		.pin = 23,
41*4882a593Smuzhiyun 		.func = 2,
42*4882a593Smuzhiyun 		.route_offset = 0x314,
43*4882a593Smuzhiyun 		.route_val = BIT(16 + 4),
44*4882a593Smuzhiyun 	}, {
45*4882a593Smuzhiyun 		/* i2c3_sdam1 */
46*4882a593Smuzhiyun 		.bank_num = 3,
47*4882a593Smuzhiyun 		.pin = 12,
48*4882a593Smuzhiyun 		.func = 2,
49*4882a593Smuzhiyun 		.route_offset = 0x314,
50*4882a593Smuzhiyun 		.route_val = BIT(16 + 4) | BIT(4),
51*4882a593Smuzhiyun 	}, {
52*4882a593Smuzhiyun 		/* i2s-8ch-1-sclktxm0 */
53*4882a593Smuzhiyun 		.bank_num = 1,
54*4882a593Smuzhiyun 		.pin = 3,
55*4882a593Smuzhiyun 		.func = 2,
56*4882a593Smuzhiyun 		.route_offset = 0x308,
57*4882a593Smuzhiyun 		.route_val = BIT(16 + 3),
58*4882a593Smuzhiyun 	}, {
59*4882a593Smuzhiyun 		/* i2s-8ch-1-sclkrxm0 */
60*4882a593Smuzhiyun 		.bank_num = 1,
61*4882a593Smuzhiyun 		.pin = 4,
62*4882a593Smuzhiyun 		.func = 2,
63*4882a593Smuzhiyun 		.route_offset = 0x308,
64*4882a593Smuzhiyun 		.route_val = BIT(16 + 3),
65*4882a593Smuzhiyun 	}, {
66*4882a593Smuzhiyun 		/* i2s-8ch-1-sclktxm1 */
67*4882a593Smuzhiyun 		.bank_num = 1,
68*4882a593Smuzhiyun 		.pin = 13,
69*4882a593Smuzhiyun 		.func = 2,
70*4882a593Smuzhiyun 		.route_offset = 0x308,
71*4882a593Smuzhiyun 		.route_val = BIT(16 + 3) | BIT(3),
72*4882a593Smuzhiyun 	}, {
73*4882a593Smuzhiyun 		/* i2s-8ch-1-sclkrxm1 */
74*4882a593Smuzhiyun 		.bank_num = 1,
75*4882a593Smuzhiyun 		.pin = 14,
76*4882a593Smuzhiyun 		.func = 2,
77*4882a593Smuzhiyun 		.route_offset = 0x308,
78*4882a593Smuzhiyun 		.route_val = BIT(16 + 3) | BIT(3),
79*4882a593Smuzhiyun 	}, {
80*4882a593Smuzhiyun 		/* pdm-clkm0 */
81*4882a593Smuzhiyun 		.bank_num = 1,
82*4882a593Smuzhiyun 		.pin = 4,
83*4882a593Smuzhiyun 		.func = 3,
84*4882a593Smuzhiyun 		.route_offset = 0x308,
85*4882a593Smuzhiyun 		.route_val = BIT(16 + 12) | BIT(16 + 13),
86*4882a593Smuzhiyun 	}, {
87*4882a593Smuzhiyun 		/* pdm-clkm1 */
88*4882a593Smuzhiyun 		.bank_num = 1,
89*4882a593Smuzhiyun 		.pin = 14,
90*4882a593Smuzhiyun 		.func = 4,
91*4882a593Smuzhiyun 		.route_offset = 0x308,
92*4882a593Smuzhiyun 		.route_val = BIT(16 + 12) | BIT(16 + 13) | BIT(12),
93*4882a593Smuzhiyun 	}, {
94*4882a593Smuzhiyun 		/* pdm-clkm2 */
95*4882a593Smuzhiyun 		.bank_num = 2,
96*4882a593Smuzhiyun 		.pin = 6,
97*4882a593Smuzhiyun 		.func = 2,
98*4882a593Smuzhiyun 		.route_offset = 0x308,
99*4882a593Smuzhiyun 		.route_val = BIT(16 + 12) | BIT(16 + 13) | BIT(13),
100*4882a593Smuzhiyun 	}, {
101*4882a593Smuzhiyun 		/* pdm-clkm-m2 */
102*4882a593Smuzhiyun 		.bank_num = 2,
103*4882a593Smuzhiyun 		.pin = 4,
104*4882a593Smuzhiyun 		.func = 3,
105*4882a593Smuzhiyun 		.route_offset = 0x600,
106*4882a593Smuzhiyun 		.route_val = BIT(16 + 2) | BIT(2),
107*4882a593Smuzhiyun 	},
108*4882a593Smuzhiyun };
109*4882a593Smuzhiyun 
110*4882a593Smuzhiyun static struct rockchip_mux_route_data rk3308b_mux_route_data[] = {
111*4882a593Smuzhiyun 	{
112*4882a593Smuzhiyun 		/* rtc_clk */
113*4882a593Smuzhiyun 		.bank_num = 0,
114*4882a593Smuzhiyun 		.pin = 19,
115*4882a593Smuzhiyun 		.func = 1,
116*4882a593Smuzhiyun 		.route_offset = 0x314,
117*4882a593Smuzhiyun 		.route_val = BIT(16 + 0) | BIT(0),
118*4882a593Smuzhiyun 	}, {
119*4882a593Smuzhiyun 		/* uart2_rxm0 */
120*4882a593Smuzhiyun 		.bank_num = 1,
121*4882a593Smuzhiyun 		.pin = 22,
122*4882a593Smuzhiyun 		.func = 2,
123*4882a593Smuzhiyun 		.route_offset = 0x314,
124*4882a593Smuzhiyun 		.route_val = BIT(16 + 2) | BIT(16 + 3),
125*4882a593Smuzhiyun 	}, {
126*4882a593Smuzhiyun 		/* uart2_rxm1 */
127*4882a593Smuzhiyun 		.bank_num = 4,
128*4882a593Smuzhiyun 		.pin = 26,
129*4882a593Smuzhiyun 		.func = 2,
130*4882a593Smuzhiyun 		.route_offset = 0x314,
131*4882a593Smuzhiyun 		.route_val = BIT(16 + 2) | BIT(16 + 3) | BIT(2),
132*4882a593Smuzhiyun 	}, {
133*4882a593Smuzhiyun 		/* i2c3_sdam0 */
134*4882a593Smuzhiyun 		.bank_num = 0,
135*4882a593Smuzhiyun 		.pin = 15,
136*4882a593Smuzhiyun 		.func = 2,
137*4882a593Smuzhiyun 		.route_offset = 0x608,
138*4882a593Smuzhiyun 		.route_val = BIT(16 + 8) | BIT(16 + 9),
139*4882a593Smuzhiyun 	}, {
140*4882a593Smuzhiyun 		/* i2c3_sdam1 */
141*4882a593Smuzhiyun 		.bank_num = 3,
142*4882a593Smuzhiyun 		.pin = 12,
143*4882a593Smuzhiyun 		.func = 2,
144*4882a593Smuzhiyun 		.route_offset = 0x608,
145*4882a593Smuzhiyun 		.route_val = BIT(16 + 8) | BIT(16 + 9) | BIT(8),
146*4882a593Smuzhiyun 	}, {
147*4882a593Smuzhiyun 		/* i2c3_sdam2 */
148*4882a593Smuzhiyun 		.bank_num = 2,
149*4882a593Smuzhiyun 		.pin = 0,
150*4882a593Smuzhiyun 		.func = 3,
151*4882a593Smuzhiyun 		.route_offset = 0x608,
152*4882a593Smuzhiyun 		.route_val = BIT(16 + 8) | BIT(16 + 9) | BIT(9),
153*4882a593Smuzhiyun 	}, {
154*4882a593Smuzhiyun 		/* i2s-8ch-1-sclktxm0 */
155*4882a593Smuzhiyun 		.bank_num = 1,
156*4882a593Smuzhiyun 		.pin = 3,
157*4882a593Smuzhiyun 		.func = 2,
158*4882a593Smuzhiyun 		.route_offset = 0x308,
159*4882a593Smuzhiyun 		.route_val = BIT(16 + 3),
160*4882a593Smuzhiyun 	}, {
161*4882a593Smuzhiyun 		/* i2s-8ch-1-sclkrxm0 */
162*4882a593Smuzhiyun 		.bank_num = 1,
163*4882a593Smuzhiyun 		.pin = 4,
164*4882a593Smuzhiyun 		.func = 2,
165*4882a593Smuzhiyun 		.route_offset = 0x308,
166*4882a593Smuzhiyun 		.route_val = BIT(16 + 3),
167*4882a593Smuzhiyun 	}, {
168*4882a593Smuzhiyun 		/* i2s-8ch-1-sclktxm1 */
169*4882a593Smuzhiyun 		.bank_num = 1,
170*4882a593Smuzhiyun 		.pin = 13,
171*4882a593Smuzhiyun 		.func = 2,
172*4882a593Smuzhiyun 		.route_offset = 0x308,
173*4882a593Smuzhiyun 		.route_val = BIT(16 + 3) | BIT(3),
174*4882a593Smuzhiyun 	}, {
175*4882a593Smuzhiyun 		/* i2s-8ch-1-sclkrxm1 */
176*4882a593Smuzhiyun 		.bank_num = 1,
177*4882a593Smuzhiyun 		.pin = 14,
178*4882a593Smuzhiyun 		.func = 2,
179*4882a593Smuzhiyun 		.route_offset = 0x308,
180*4882a593Smuzhiyun 		.route_val = BIT(16 + 3) | BIT(3),
181*4882a593Smuzhiyun 	}, {
182*4882a593Smuzhiyun 		/* pdm-clkm0 */
183*4882a593Smuzhiyun 		.bank_num = 1,
184*4882a593Smuzhiyun 		.pin = 4,
185*4882a593Smuzhiyun 		.func = 3,
186*4882a593Smuzhiyun 		.route_offset = 0x308,
187*4882a593Smuzhiyun 		.route_val =  BIT(16 + 12) | BIT(16 + 13),
188*4882a593Smuzhiyun 	}, {
189*4882a593Smuzhiyun 		/* pdm-clkm1 */
190*4882a593Smuzhiyun 		.bank_num = 1,
191*4882a593Smuzhiyun 		.pin = 14,
192*4882a593Smuzhiyun 		.func = 4,
193*4882a593Smuzhiyun 		.route_offset = 0x308,
194*4882a593Smuzhiyun 		.route_val = BIT(16 + 12) | BIT(16 + 13) | BIT(12),
195*4882a593Smuzhiyun 	}, {
196*4882a593Smuzhiyun 		/* pdm-clkm2 */
197*4882a593Smuzhiyun 		.bank_num = 2,
198*4882a593Smuzhiyun 		.pin = 6,
199*4882a593Smuzhiyun 		.func = 2,
200*4882a593Smuzhiyun 		.route_offset = 0x308,
201*4882a593Smuzhiyun 		.route_val = BIT(16 + 12) | BIT(16 + 13) | BIT(13),
202*4882a593Smuzhiyun 	}, {
203*4882a593Smuzhiyun 		/* pdm-clkm-m2 */
204*4882a593Smuzhiyun 		.bank_num = 2,
205*4882a593Smuzhiyun 		.pin = 4,
206*4882a593Smuzhiyun 		.func = 3,
207*4882a593Smuzhiyun 		.route_offset = 0x600,
208*4882a593Smuzhiyun 		.route_val = BIT(16 + 2) | BIT(2),
209*4882a593Smuzhiyun 	}, {
210*4882a593Smuzhiyun 		/* spi1_miso */
211*4882a593Smuzhiyun 		.bank_num = 3,
212*4882a593Smuzhiyun 		.pin = 10,
213*4882a593Smuzhiyun 		.func = 3,
214*4882a593Smuzhiyun 		.route_offset = 0x314,
215*4882a593Smuzhiyun 		.route_val = BIT(16 + 9),
216*4882a593Smuzhiyun 	}, {
217*4882a593Smuzhiyun 		/* spi1_miso_m1 */
218*4882a593Smuzhiyun 		.bank_num = 2,
219*4882a593Smuzhiyun 		.pin = 4,
220*4882a593Smuzhiyun 		.func = 2,
221*4882a593Smuzhiyun 		.route_offset = 0x314,
222*4882a593Smuzhiyun 		.route_val = BIT(16 + 9) | BIT(9),
223*4882a593Smuzhiyun 	}, {
224*4882a593Smuzhiyun 		/* owire_m0 */
225*4882a593Smuzhiyun 		.bank_num = 0,
226*4882a593Smuzhiyun 		.pin = 11,
227*4882a593Smuzhiyun 		.func = 3,
228*4882a593Smuzhiyun 		.route_offset = 0x314,
229*4882a593Smuzhiyun 		.route_val = BIT(16 + 10) | BIT(16 + 11),
230*4882a593Smuzhiyun 	}, {
231*4882a593Smuzhiyun 		/* owire_m1 */
232*4882a593Smuzhiyun 		.bank_num = 1,
233*4882a593Smuzhiyun 		.pin = 22,
234*4882a593Smuzhiyun 		.func = 7,
235*4882a593Smuzhiyun 		.route_offset = 0x314,
236*4882a593Smuzhiyun 		.route_val = BIT(16 + 10) | BIT(16 + 11) | BIT(10),
237*4882a593Smuzhiyun 	}, {
238*4882a593Smuzhiyun 		/* owire_m2 */
239*4882a593Smuzhiyun 		.bank_num = 2,
240*4882a593Smuzhiyun 		.pin = 2,
241*4882a593Smuzhiyun 		.func = 5,
242*4882a593Smuzhiyun 		.route_offset = 0x314,
243*4882a593Smuzhiyun 		.route_val = BIT(16 + 10) | BIT(16 + 11) | BIT(11),
244*4882a593Smuzhiyun 	}, {
245*4882a593Smuzhiyun 		/* can_rxd_m0 */
246*4882a593Smuzhiyun 		.bank_num = 0,
247*4882a593Smuzhiyun 		.pin = 11,
248*4882a593Smuzhiyun 		.func = 2,
249*4882a593Smuzhiyun 		.route_offset = 0x314,
250*4882a593Smuzhiyun 		.route_val = BIT(16 + 12) | BIT(16 + 13),
251*4882a593Smuzhiyun 	}, {
252*4882a593Smuzhiyun 		/* can_rxd_m1 */
253*4882a593Smuzhiyun 		.bank_num = 1,
254*4882a593Smuzhiyun 		.pin = 22,
255*4882a593Smuzhiyun 		.func = 5,
256*4882a593Smuzhiyun 		.route_offset = 0x314,
257*4882a593Smuzhiyun 		.route_val = BIT(16 + 12) | BIT(16 + 13) | BIT(12),
258*4882a593Smuzhiyun 	}, {
259*4882a593Smuzhiyun 		/* can_rxd_m2 */
260*4882a593Smuzhiyun 		.bank_num = 2,
261*4882a593Smuzhiyun 		.pin = 2,
262*4882a593Smuzhiyun 		.func = 4,
263*4882a593Smuzhiyun 		.route_offset = 0x314,
264*4882a593Smuzhiyun 		.route_val = BIT(16 + 12) | BIT(16 + 13) | BIT(13),
265*4882a593Smuzhiyun 	}, {
266*4882a593Smuzhiyun 		/* mac_rxd0_m0 */
267*4882a593Smuzhiyun 		.bank_num = 1,
268*4882a593Smuzhiyun 		.pin = 20,
269*4882a593Smuzhiyun 		.func = 3,
270*4882a593Smuzhiyun 		.route_offset = 0x314,
271*4882a593Smuzhiyun 		.route_val = BIT(16 + 14),
272*4882a593Smuzhiyun 	}, {
273*4882a593Smuzhiyun 		/* mac_rxd0_m1 */
274*4882a593Smuzhiyun 		.bank_num = 4,
275*4882a593Smuzhiyun 		.pin = 2,
276*4882a593Smuzhiyun 		.func = 2,
277*4882a593Smuzhiyun 		.route_offset = 0x314,
278*4882a593Smuzhiyun 		.route_val = BIT(16 + 14) | BIT(14),
279*4882a593Smuzhiyun 	}, {
280*4882a593Smuzhiyun 		/* uart3_rx */
281*4882a593Smuzhiyun 		.bank_num = 3,
282*4882a593Smuzhiyun 		.pin = 12,
283*4882a593Smuzhiyun 		.func = 4,
284*4882a593Smuzhiyun 		.route_offset = 0x314,
285*4882a593Smuzhiyun 		.route_val = BIT(16 + 15),
286*4882a593Smuzhiyun 	}, {
287*4882a593Smuzhiyun 		/* uart3_rx_m1 */
288*4882a593Smuzhiyun 		.bank_num = 0,
289*4882a593Smuzhiyun 		.pin = 17,
290*4882a593Smuzhiyun 		.func = 3,
291*4882a593Smuzhiyun 		.route_offset = 0x314,
292*4882a593Smuzhiyun 		.route_val = BIT(16 + 15) | BIT(15),
293*4882a593Smuzhiyun 	},
294*4882a593Smuzhiyun };
295*4882a593Smuzhiyun static struct rockchip_mux_recalced_data rk3308_mux_recalced_data[] = {
296*4882a593Smuzhiyun 	{
297*4882a593Smuzhiyun 		.num = 1,
298*4882a593Smuzhiyun 		.pin = 14,
299*4882a593Smuzhiyun 		.reg = 0x28,
300*4882a593Smuzhiyun 		.bit = 12,
301*4882a593Smuzhiyun 		.mask = 0x7
302*4882a593Smuzhiyun 	}, {
303*4882a593Smuzhiyun 		.num = 1,
304*4882a593Smuzhiyun 		.pin = 15,
305*4882a593Smuzhiyun 		.reg = 0x2c,
306*4882a593Smuzhiyun 		.bit = 0,
307*4882a593Smuzhiyun 		.mask = 0x3
308*4882a593Smuzhiyun 	}, {
309*4882a593Smuzhiyun 		.num = 1,
310*4882a593Smuzhiyun 		.pin = 18,
311*4882a593Smuzhiyun 		.reg = 0x30,
312*4882a593Smuzhiyun 		.bit = 4,
313*4882a593Smuzhiyun 		.mask = 0x7
314*4882a593Smuzhiyun 	}, {
315*4882a593Smuzhiyun 		.num = 1,
316*4882a593Smuzhiyun 		.pin = 19,
317*4882a593Smuzhiyun 		.reg = 0x30,
318*4882a593Smuzhiyun 		.bit = 8,
319*4882a593Smuzhiyun 		.mask = 0x7
320*4882a593Smuzhiyun 	}, {
321*4882a593Smuzhiyun 		.num = 1,
322*4882a593Smuzhiyun 		.pin = 20,
323*4882a593Smuzhiyun 		.reg = 0x30,
324*4882a593Smuzhiyun 		.bit = 12,
325*4882a593Smuzhiyun 		.mask = 0x7
326*4882a593Smuzhiyun 	}, {
327*4882a593Smuzhiyun 		.num = 1,
328*4882a593Smuzhiyun 		.pin = 21,
329*4882a593Smuzhiyun 		.reg = 0x34,
330*4882a593Smuzhiyun 		.bit = 0,
331*4882a593Smuzhiyun 		.mask = 0x7
332*4882a593Smuzhiyun 	}, {
333*4882a593Smuzhiyun 		.num = 1,
334*4882a593Smuzhiyun 		.pin = 22,
335*4882a593Smuzhiyun 		.reg = 0x34,
336*4882a593Smuzhiyun 		.bit = 4,
337*4882a593Smuzhiyun 		.mask = 0x7
338*4882a593Smuzhiyun 	}, {
339*4882a593Smuzhiyun 		.num = 1,
340*4882a593Smuzhiyun 		.pin = 23,
341*4882a593Smuzhiyun 		.reg = 0x34,
342*4882a593Smuzhiyun 		.bit = 8,
343*4882a593Smuzhiyun 		.mask = 0x7
344*4882a593Smuzhiyun 	}, {
345*4882a593Smuzhiyun 		.num = 3,
346*4882a593Smuzhiyun 		.pin = 12,
347*4882a593Smuzhiyun 		.reg = 0x68,
348*4882a593Smuzhiyun 		.bit = 8,
349*4882a593Smuzhiyun 		.mask = 0x7
350*4882a593Smuzhiyun 	}, {
351*4882a593Smuzhiyun 		.num = 3,
352*4882a593Smuzhiyun 		.pin = 13,
353*4882a593Smuzhiyun 		.reg = 0x68,
354*4882a593Smuzhiyun 		.bit = 12,
355*4882a593Smuzhiyun 		.mask = 0x7
356*4882a593Smuzhiyun 	},
357*4882a593Smuzhiyun };
358*4882a593Smuzhiyun 
359*4882a593Smuzhiyun static struct rockchip_mux_recalced_data rk3308b_mux_recalced_data[] = {
360*4882a593Smuzhiyun 	{
361*4882a593Smuzhiyun 		.num = 1,
362*4882a593Smuzhiyun 		.pin = 14,
363*4882a593Smuzhiyun 		.reg = 0x28,
364*4882a593Smuzhiyun 		.bit = 12,
365*4882a593Smuzhiyun 		.mask = 0xf
366*4882a593Smuzhiyun 	}, {
367*4882a593Smuzhiyun 		.num = 1,
368*4882a593Smuzhiyun 		.pin = 15,
369*4882a593Smuzhiyun 		.reg = 0x2c,
370*4882a593Smuzhiyun 		.bit = 0,
371*4882a593Smuzhiyun 		.mask = 0x3
372*4882a593Smuzhiyun 	}, {
373*4882a593Smuzhiyun 		.num = 1,
374*4882a593Smuzhiyun 		.pin = 18,
375*4882a593Smuzhiyun 		.reg = 0x30,
376*4882a593Smuzhiyun 		.bit = 4,
377*4882a593Smuzhiyun 		.mask = 0xf
378*4882a593Smuzhiyun 	}, {
379*4882a593Smuzhiyun 		.num = 1,
380*4882a593Smuzhiyun 		.pin = 19,
381*4882a593Smuzhiyun 		.reg = 0x30,
382*4882a593Smuzhiyun 		.bit = 8,
383*4882a593Smuzhiyun 		.mask = 0xf
384*4882a593Smuzhiyun 	}, {
385*4882a593Smuzhiyun 		.num = 1,
386*4882a593Smuzhiyun 		.pin = 20,
387*4882a593Smuzhiyun 		.reg = 0x30,
388*4882a593Smuzhiyun 		.bit = 12,
389*4882a593Smuzhiyun 		.mask = 0xf
390*4882a593Smuzhiyun 	}, {
391*4882a593Smuzhiyun 		.num = 1,
392*4882a593Smuzhiyun 		.pin = 21,
393*4882a593Smuzhiyun 		.reg = 0x34,
394*4882a593Smuzhiyun 		.bit = 0,
395*4882a593Smuzhiyun 		.mask = 0xf
396*4882a593Smuzhiyun 	}, {
397*4882a593Smuzhiyun 		.num = 1,
398*4882a593Smuzhiyun 		.pin = 22,
399*4882a593Smuzhiyun 		.reg = 0x34,
400*4882a593Smuzhiyun 		.bit = 4,
401*4882a593Smuzhiyun 		.mask = 0xf
402*4882a593Smuzhiyun 	}, {
403*4882a593Smuzhiyun 		.num = 1,
404*4882a593Smuzhiyun 		.pin = 23,
405*4882a593Smuzhiyun 		.reg = 0x34,
406*4882a593Smuzhiyun 		.bit = 8,
407*4882a593Smuzhiyun 		.mask = 0xf
408*4882a593Smuzhiyun 	}, {
409*4882a593Smuzhiyun 		.num = 3,
410*4882a593Smuzhiyun 		.pin = 12,
411*4882a593Smuzhiyun 		.reg = 0x68,
412*4882a593Smuzhiyun 		.bit = 8,
413*4882a593Smuzhiyun 		.mask = 0xf
414*4882a593Smuzhiyun 	}, {
415*4882a593Smuzhiyun 		.num = 3,
416*4882a593Smuzhiyun 		.pin = 13,
417*4882a593Smuzhiyun 		.reg = 0x68,
418*4882a593Smuzhiyun 		.bit = 12,
419*4882a593Smuzhiyun 		.mask = 0xf
420*4882a593Smuzhiyun 	}, {
421*4882a593Smuzhiyun 		.num = 2,
422*4882a593Smuzhiyun 		.pin = 2,
423*4882a593Smuzhiyun 		.reg = 0x608,
424*4882a593Smuzhiyun 		.bit = 0,
425*4882a593Smuzhiyun 		.mask = 0x7
426*4882a593Smuzhiyun 	}, {
427*4882a593Smuzhiyun 		.num = 2,
428*4882a593Smuzhiyun 		.pin = 3,
429*4882a593Smuzhiyun 		.reg = 0x608,
430*4882a593Smuzhiyun 		.bit = 4,
431*4882a593Smuzhiyun 		.mask = 0x7
432*4882a593Smuzhiyun 	}, {
433*4882a593Smuzhiyun 		.num = 2,
434*4882a593Smuzhiyun 		.pin = 16,
435*4882a593Smuzhiyun 		.reg = 0x610,
436*4882a593Smuzhiyun 		.bit = 8,
437*4882a593Smuzhiyun 		.mask = 0x7
438*4882a593Smuzhiyun 	}, {
439*4882a593Smuzhiyun 		.num = 3,
440*4882a593Smuzhiyun 		.pin = 10,
441*4882a593Smuzhiyun 		.reg = 0x610,
442*4882a593Smuzhiyun 		.bit = 0,
443*4882a593Smuzhiyun 		.mask = 0x7
444*4882a593Smuzhiyun 	}, {
445*4882a593Smuzhiyun 		.num = 3,
446*4882a593Smuzhiyun 		.pin = 11,
447*4882a593Smuzhiyun 		.reg = 0x610,
448*4882a593Smuzhiyun 		.bit = 4,
449*4882a593Smuzhiyun 		.mask = 0x7
450*4882a593Smuzhiyun 	},
451*4882a593Smuzhiyun };
452*4882a593Smuzhiyun 
rk3308_set_mux(struct rockchip_pin_bank * bank,int pin,int mux)453*4882a593Smuzhiyun static int rk3308_set_mux(struct rockchip_pin_bank *bank, int pin, int mux)
454*4882a593Smuzhiyun {
455*4882a593Smuzhiyun 	struct rockchip_pinctrl_priv *priv = bank->priv;
456*4882a593Smuzhiyun 	int iomux_num = (pin / 8);
457*4882a593Smuzhiyun 	struct regmap *regmap;
458*4882a593Smuzhiyun 	int reg, ret, mask, mux_type;
459*4882a593Smuzhiyun 	u8 bit;
460*4882a593Smuzhiyun 	u32 data;
461*4882a593Smuzhiyun 
462*4882a593Smuzhiyun 	debug("setting mux of GPIO%d-%d to %d\n", bank->bank_num, pin, mux);
463*4882a593Smuzhiyun 
464*4882a593Smuzhiyun 	if (bank->iomux[iomux_num].type & IOMUX_SOURCE_PMU)
465*4882a593Smuzhiyun 		regmap = priv->regmap_pmu;
466*4882a593Smuzhiyun 	else
467*4882a593Smuzhiyun 		regmap = priv->regmap_base;
468*4882a593Smuzhiyun 
469*4882a593Smuzhiyun 	/* get basic quadrupel of mux registers and the correct reg inside */
470*4882a593Smuzhiyun 	mux_type = bank->iomux[iomux_num].type;
471*4882a593Smuzhiyun 	reg = bank->iomux[iomux_num].offset;
472*4882a593Smuzhiyun 	if (mux_type & IOMUX_WIDTH_4BIT) {
473*4882a593Smuzhiyun 		if ((pin % 8) >= 4)
474*4882a593Smuzhiyun 			reg += 0x4;
475*4882a593Smuzhiyun 		bit = (pin % 4) * 4;
476*4882a593Smuzhiyun 		mask = 0xf;
477*4882a593Smuzhiyun 	} else {
478*4882a593Smuzhiyun 		bit = (pin % 8) * 2;
479*4882a593Smuzhiyun 		mask = 0x3;
480*4882a593Smuzhiyun 	}
481*4882a593Smuzhiyun 
482*4882a593Smuzhiyun 	if (bank->recalced_mask & BIT(pin))
483*4882a593Smuzhiyun 		rockchip_get_recalced_mux(bank, pin, &reg, &bit, &mask);
484*4882a593Smuzhiyun 
485*4882a593Smuzhiyun 	data = (mask << (bit + 16));
486*4882a593Smuzhiyun 	data |= (mux & mask) << bit;
487*4882a593Smuzhiyun 	ret = regmap_write(regmap, reg, data);
488*4882a593Smuzhiyun 
489*4882a593Smuzhiyun 	return ret;
490*4882a593Smuzhiyun }
491*4882a593Smuzhiyun 
492*4882a593Smuzhiyun #define RK3308_PULL_OFFSET		0xa0
493*4882a593Smuzhiyun #define RK3308_PULL_BITS_PER_PIN	2
494*4882a593Smuzhiyun #define RK3308_PULL_PINS_PER_REG	8
495*4882a593Smuzhiyun #define RK3308_PULL_BANK_STRIDE		16
496*4882a593Smuzhiyun 
rk3308_calc_pull_reg_and_bit(struct rockchip_pin_bank * bank,int pin_num,struct regmap ** regmap,int * reg,u8 * bit)497*4882a593Smuzhiyun static void rk3308_calc_pull_reg_and_bit(struct rockchip_pin_bank *bank,
498*4882a593Smuzhiyun 					 int pin_num, struct regmap **regmap,
499*4882a593Smuzhiyun 					 int *reg, u8 *bit)
500*4882a593Smuzhiyun {
501*4882a593Smuzhiyun 	struct rockchip_pinctrl_priv *priv = bank->priv;
502*4882a593Smuzhiyun 
503*4882a593Smuzhiyun 	*regmap = priv->regmap_base;
504*4882a593Smuzhiyun 	*reg = RK3308_PULL_OFFSET;
505*4882a593Smuzhiyun 	*reg += bank->bank_num * RK3308_PULL_BANK_STRIDE;
506*4882a593Smuzhiyun 	*reg += ((pin_num / RK3308_PULL_PINS_PER_REG) * 4);
507*4882a593Smuzhiyun 
508*4882a593Smuzhiyun 	*bit = (pin_num % RK3308_PULL_PINS_PER_REG);
509*4882a593Smuzhiyun 	*bit *= RK3308_PULL_BITS_PER_PIN;
510*4882a593Smuzhiyun }
511*4882a593Smuzhiyun 
512*4882a593Smuzhiyun #define RK3308_DRV_GRF_OFFSET		0x100
513*4882a593Smuzhiyun #define RK3308_DRV_BITS_PER_PIN		2
514*4882a593Smuzhiyun #define RK3308_DRV_PINS_PER_REG		8
515*4882a593Smuzhiyun #define RK3308_DRV_BANK_STRIDE		16
516*4882a593Smuzhiyun 
rk3308_calc_drv_reg_and_bit(struct rockchip_pin_bank * bank,int pin_num,struct regmap ** regmap,int * reg,u8 * bit)517*4882a593Smuzhiyun static void rk3308_calc_drv_reg_and_bit(struct rockchip_pin_bank *bank,
518*4882a593Smuzhiyun 					int pin_num, struct regmap **regmap,
519*4882a593Smuzhiyun 					int *reg, u8 *bit)
520*4882a593Smuzhiyun {
521*4882a593Smuzhiyun 	struct rockchip_pinctrl_priv *priv = bank->priv;
522*4882a593Smuzhiyun 
523*4882a593Smuzhiyun 	*regmap = priv->regmap_base;
524*4882a593Smuzhiyun 	*reg = RK3308_DRV_GRF_OFFSET;
525*4882a593Smuzhiyun 	*reg += bank->bank_num * RK3308_DRV_BANK_STRIDE;
526*4882a593Smuzhiyun 	*reg += ((pin_num / RK3308_DRV_PINS_PER_REG) * 4);
527*4882a593Smuzhiyun 
528*4882a593Smuzhiyun 	*bit = (pin_num % RK3308_DRV_PINS_PER_REG);
529*4882a593Smuzhiyun 	*bit *= RK3308_DRV_BITS_PER_PIN;
530*4882a593Smuzhiyun }
531*4882a593Smuzhiyun 
532*4882a593Smuzhiyun #define RK3308_SCHMITT_PINS_PER_REG	8
533*4882a593Smuzhiyun #define RK3308_SCHMITT_BANK_STRIDE	16
534*4882a593Smuzhiyun #define RK3308_SCHMITT_GRF_OFFSET	0x1a0
535*4882a593Smuzhiyun 
rk3308_calc_schmitt_reg_and_bit(struct rockchip_pin_bank * bank,int pin_num,struct regmap ** regmap,int * reg,u8 * bit)536*4882a593Smuzhiyun static int rk3308_calc_schmitt_reg_and_bit(struct rockchip_pin_bank *bank,
537*4882a593Smuzhiyun 					   int pin_num,
538*4882a593Smuzhiyun 					   struct regmap **regmap,
539*4882a593Smuzhiyun 					   int *reg, u8 *bit)
540*4882a593Smuzhiyun {
541*4882a593Smuzhiyun 	struct rockchip_pinctrl_priv *priv = bank->priv;
542*4882a593Smuzhiyun 
543*4882a593Smuzhiyun 	*regmap = priv->regmap_base;
544*4882a593Smuzhiyun 	*reg = RK3308_SCHMITT_GRF_OFFSET;
545*4882a593Smuzhiyun 
546*4882a593Smuzhiyun 	*reg += bank->bank_num * RK3308_SCHMITT_BANK_STRIDE;
547*4882a593Smuzhiyun 	*reg += ((pin_num / RK3308_SCHMITT_PINS_PER_REG) * 4);
548*4882a593Smuzhiyun 	*bit = pin_num % RK3308_SCHMITT_PINS_PER_REG;
549*4882a593Smuzhiyun 
550*4882a593Smuzhiyun 	return 0;
551*4882a593Smuzhiyun }
552*4882a593Smuzhiyun 
rk3308_set_pull(struct rockchip_pin_bank * bank,int pin_num,int pull)553*4882a593Smuzhiyun static int rk3308_set_pull(struct rockchip_pin_bank *bank,
554*4882a593Smuzhiyun 			   int pin_num, int pull)
555*4882a593Smuzhiyun {
556*4882a593Smuzhiyun 	struct regmap *regmap;
557*4882a593Smuzhiyun 	int reg, ret;
558*4882a593Smuzhiyun 	u8 bit, type;
559*4882a593Smuzhiyun 	u32 data;
560*4882a593Smuzhiyun 
561*4882a593Smuzhiyun 	if (pull == PIN_CONFIG_BIAS_PULL_PIN_DEFAULT)
562*4882a593Smuzhiyun 		return -ENOTSUPP;
563*4882a593Smuzhiyun 
564*4882a593Smuzhiyun 	rk3308_calc_pull_reg_and_bit(bank, pin_num, &regmap, &reg, &bit);
565*4882a593Smuzhiyun 	type = bank->pull_type[pin_num / 8];
566*4882a593Smuzhiyun 	ret = rockchip_translate_pull_value(type, pull);
567*4882a593Smuzhiyun 	if (ret < 0) {
568*4882a593Smuzhiyun 		debug("unsupported pull setting %d\n", pull);
569*4882a593Smuzhiyun 		return ret;
570*4882a593Smuzhiyun 	}
571*4882a593Smuzhiyun 
572*4882a593Smuzhiyun 	/* enable the write to the equivalent lower bits */
573*4882a593Smuzhiyun 	data = ((1 << ROCKCHIP_PULL_BITS_PER_PIN) - 1) << (bit + 16);
574*4882a593Smuzhiyun 
575*4882a593Smuzhiyun 	data |= (ret << bit);
576*4882a593Smuzhiyun 	ret = regmap_write(regmap, reg, data);
577*4882a593Smuzhiyun 
578*4882a593Smuzhiyun 	return ret;
579*4882a593Smuzhiyun }
580*4882a593Smuzhiyun 
rk3308_set_drive(struct rockchip_pin_bank * bank,int pin_num,int strength)581*4882a593Smuzhiyun static int rk3308_set_drive(struct rockchip_pin_bank *bank,
582*4882a593Smuzhiyun 			    int pin_num, int strength)
583*4882a593Smuzhiyun {
584*4882a593Smuzhiyun 	struct regmap *regmap;
585*4882a593Smuzhiyun 	int reg;
586*4882a593Smuzhiyun 	u32 data;
587*4882a593Smuzhiyun 	u8 bit;
588*4882a593Smuzhiyun 
589*4882a593Smuzhiyun 	rk3308_calc_drv_reg_and_bit(bank, pin_num, &regmap, &reg, &bit);
590*4882a593Smuzhiyun 
591*4882a593Smuzhiyun 	/* enable the write to the equivalent lower bits */
592*4882a593Smuzhiyun 	data = ((1 << ROCKCHIP_DRV_BITS_PER_PIN) - 1) << (bit + 16);
593*4882a593Smuzhiyun 	data |= (strength << bit);
594*4882a593Smuzhiyun 
595*4882a593Smuzhiyun 	return regmap_write(regmap, reg, data);
596*4882a593Smuzhiyun }
597*4882a593Smuzhiyun 
rk3308_set_schmitt(struct rockchip_pin_bank * bank,int pin_num,int enable)598*4882a593Smuzhiyun static int rk3308_set_schmitt(struct rockchip_pin_bank *bank,
599*4882a593Smuzhiyun 			      int pin_num, int enable)
600*4882a593Smuzhiyun {
601*4882a593Smuzhiyun 	struct regmap *regmap;
602*4882a593Smuzhiyun 	int reg;
603*4882a593Smuzhiyun 	u8 bit;
604*4882a593Smuzhiyun 	u32 data;
605*4882a593Smuzhiyun 
606*4882a593Smuzhiyun 	rk3308_calc_schmitt_reg_and_bit(bank, pin_num, &regmap, &reg, &bit);
607*4882a593Smuzhiyun 	/* enable the write to the equivalent lower bits */
608*4882a593Smuzhiyun 	data = BIT(bit + 16) | (enable << bit);
609*4882a593Smuzhiyun 
610*4882a593Smuzhiyun 	return regmap_write(regmap, reg, data);
611*4882a593Smuzhiyun }
612*4882a593Smuzhiyun 
613*4882a593Smuzhiyun static struct rockchip_pin_bank rk3308_pin_banks[] = {
614*4882a593Smuzhiyun 	PIN_BANK_IOMUX_FLAGS(0, 32, "gpio0", IOMUX_8WIDTH_2BIT,
615*4882a593Smuzhiyun 					     IOMUX_8WIDTH_2BIT,
616*4882a593Smuzhiyun 					     IOMUX_8WIDTH_2BIT,
617*4882a593Smuzhiyun 					     IOMUX_8WIDTH_2BIT),
618*4882a593Smuzhiyun 	PIN_BANK_IOMUX_FLAGS(1, 32, "gpio1", IOMUX_8WIDTH_2BIT,
619*4882a593Smuzhiyun 					     IOMUX_8WIDTH_2BIT,
620*4882a593Smuzhiyun 					     IOMUX_8WIDTH_2BIT,
621*4882a593Smuzhiyun 					     IOMUX_8WIDTH_2BIT),
622*4882a593Smuzhiyun 	PIN_BANK_IOMUX_FLAGS(2, 32, "gpio2", IOMUX_8WIDTH_2BIT,
623*4882a593Smuzhiyun 					     IOMUX_8WIDTH_2BIT,
624*4882a593Smuzhiyun 					     IOMUX_8WIDTH_2BIT,
625*4882a593Smuzhiyun 					     IOMUX_8WIDTH_2BIT),
626*4882a593Smuzhiyun 	PIN_BANK_IOMUX_FLAGS(3, 32, "gpio3", IOMUX_8WIDTH_2BIT,
627*4882a593Smuzhiyun 					     IOMUX_8WIDTH_2BIT,
628*4882a593Smuzhiyun 					     IOMUX_8WIDTH_2BIT,
629*4882a593Smuzhiyun 					     IOMUX_8WIDTH_2BIT),
630*4882a593Smuzhiyun 	PIN_BANK_IOMUX_FLAGS(4, 32, "gpio4", IOMUX_8WIDTH_2BIT,
631*4882a593Smuzhiyun 					     IOMUX_8WIDTH_2BIT,
632*4882a593Smuzhiyun 					     IOMUX_8WIDTH_2BIT,
633*4882a593Smuzhiyun 					     IOMUX_8WIDTH_2BIT),
634*4882a593Smuzhiyun };
635*4882a593Smuzhiyun 
636*4882a593Smuzhiyun static struct rockchip_pin_ctrl rk3308_pin_ctrl = {
637*4882a593Smuzhiyun 	.pin_banks		= rk3308_pin_banks,
638*4882a593Smuzhiyun 	.nr_banks		= ARRAY_SIZE(rk3308_pin_banks),
639*4882a593Smuzhiyun 	.nr_pins		= 160,
640*4882a593Smuzhiyun 	.grf_mux_offset		= 0x0,
641*4882a593Smuzhiyun 	.iomux_recalced		= rk3308_mux_recalced_data,
642*4882a593Smuzhiyun 	.niomux_recalced	= ARRAY_SIZE(rk3308_mux_recalced_data),
643*4882a593Smuzhiyun 	.iomux_routes		= rk3308_mux_route_data,
644*4882a593Smuzhiyun 	.niomux_routes		= ARRAY_SIZE(rk3308_mux_route_data),
645*4882a593Smuzhiyun 	.set_mux		= rk3308_set_mux,
646*4882a593Smuzhiyun 	.set_pull		= rk3308_set_pull,
647*4882a593Smuzhiyun 	.set_drive		= rk3308_set_drive,
648*4882a593Smuzhiyun 	.set_schmitt		= rk3308_set_schmitt,
649*4882a593Smuzhiyun };
650*4882a593Smuzhiyun 
651*4882a593Smuzhiyun static const struct rockchip_pin_ctrl rk3308b_pin_ctrl = {
652*4882a593Smuzhiyun 	.pin_banks		= rk3308_pin_banks,
653*4882a593Smuzhiyun 	.nr_banks		= ARRAY_SIZE(rk3308_pin_banks),
654*4882a593Smuzhiyun 	.nr_pins		= 160,
655*4882a593Smuzhiyun 	.grf_mux_offset		= 0x0,
656*4882a593Smuzhiyun 	.iomux_recalced		= rk3308b_mux_recalced_data,
657*4882a593Smuzhiyun 	.niomux_recalced	= ARRAY_SIZE(rk3308b_mux_recalced_data),
658*4882a593Smuzhiyun 	.iomux_routes		= rk3308b_mux_route_data,
659*4882a593Smuzhiyun 	.niomux_routes		= ARRAY_SIZE(rk3308b_mux_route_data),
660*4882a593Smuzhiyun 	.set_mux		= rk3308_set_mux,
661*4882a593Smuzhiyun 	.set_pull		= rk3308_set_pull,
662*4882a593Smuzhiyun 	.set_drive		= rk3308_set_drive,
663*4882a593Smuzhiyun 	.set_schmitt		= rk3308_set_schmitt,
664*4882a593Smuzhiyun };
665*4882a593Smuzhiyun 
666*4882a593Smuzhiyun static const struct udevice_id rk3308_pinctrl_ids[] = {
667*4882a593Smuzhiyun 	{
668*4882a593Smuzhiyun 		.compatible = "rockchip,rk3308-pinctrl",
669*4882a593Smuzhiyun 		.data = (ulong)&rk3308_pin_ctrl
670*4882a593Smuzhiyun 	},
671*4882a593Smuzhiyun 	{ }
672*4882a593Smuzhiyun };
673*4882a593Smuzhiyun 
674*4882a593Smuzhiyun /* rk3308b SoC data initialize */
675*4882a593Smuzhiyun #define RK3308B_GRF_SOC_CON13			0x608
676*4882a593Smuzhiyun #define RK3308B_GRF_SOC_CON15			0x610
677*4882a593Smuzhiyun 
678*4882a593Smuzhiyun /* RK3308B_GRF_SOC_CON13 */
679*4882a593Smuzhiyun #define RK3308B_GRF_I2C3_IOFUNC_SRC_CTRL	(BIT(16 + 10) | BIT(10))
680*4882a593Smuzhiyun #define RK3308B_GRF_GPIO2A3_SEL_SRC_CTRL	(BIT(16 + 7)  | BIT(7))
681*4882a593Smuzhiyun #define RK3308B_GRF_GPIO2A2_SEL_SRC_CTRL	(BIT(16 + 3)  | BIT(3))
682*4882a593Smuzhiyun 
683*4882a593Smuzhiyun /* RK3308B_GRF_SOC_CON15 */
684*4882a593Smuzhiyun #define RK3308B_GRF_GPIO2C0_SEL_SRC_CTRL	(BIT(16 + 11) | BIT(11))
685*4882a593Smuzhiyun #define RK3308B_GRF_GPIO3B3_SEL_SRC_CTRL	(BIT(16 + 7)  | BIT(7))
686*4882a593Smuzhiyun #define RK3308B_GRF_GPIO3B2_SEL_SRC_CTRL	(BIT(16 + 3)  | BIT(3))
687*4882a593Smuzhiyun 
rk3308b_soc_data_init(struct udevice * dev)688*4882a593Smuzhiyun static int rk3308b_soc_data_init(struct udevice *dev)
689*4882a593Smuzhiyun {
690*4882a593Smuzhiyun 	struct rockchip_pinctrl_priv *priv = dev_get_priv(dev);
691*4882a593Smuzhiyun 	int ret;
692*4882a593Smuzhiyun 
693*4882a593Smuzhiyun 	/*
694*4882a593Smuzhiyun 	 * Enable the special ctrl  of selected sources.
695*4882a593Smuzhiyun 	 */
696*4882a593Smuzhiyun 	ret = regmap_write(priv->regmap_base, RK3308B_GRF_SOC_CON13,
697*4882a593Smuzhiyun 			   RK3308B_GRF_I2C3_IOFUNC_SRC_CTRL |
698*4882a593Smuzhiyun 			   RK3308B_GRF_GPIO2A3_SEL_SRC_CTRL |
699*4882a593Smuzhiyun 			   RK3308B_GRF_GPIO2A2_SEL_SRC_CTRL);
700*4882a593Smuzhiyun 	if (ret)
701*4882a593Smuzhiyun 		return ret;
702*4882a593Smuzhiyun 
703*4882a593Smuzhiyun 	ret = regmap_write(priv->regmap_base, RK3308B_GRF_SOC_CON15,
704*4882a593Smuzhiyun 			   RK3308B_GRF_GPIO2C0_SEL_SRC_CTRL |
705*4882a593Smuzhiyun 			   RK3308B_GRF_GPIO3B3_SEL_SRC_CTRL |
706*4882a593Smuzhiyun 			   RK3308B_GRF_GPIO3B2_SEL_SRC_CTRL);
707*4882a593Smuzhiyun 	if (ret)
708*4882a593Smuzhiyun 		return ret;
709*4882a593Smuzhiyun 
710*4882a593Smuzhiyun 	return 0;
711*4882a593Smuzhiyun }
712*4882a593Smuzhiyun 
rk3308_pinctrl_probe(struct udevice * dev)713*4882a593Smuzhiyun static int rk3308_pinctrl_probe(struct udevice *dev)
714*4882a593Smuzhiyun {
715*4882a593Smuzhiyun 	int ret;
716*4882a593Smuzhiyun 
717*4882a593Smuzhiyun 	if (soc_is_rk3308b())
718*4882a593Smuzhiyun 		dev->driver_data = (ulong)&rk3308b_pin_ctrl;
719*4882a593Smuzhiyun 
720*4882a593Smuzhiyun 	ret = rockchip_pinctrl_probe(dev);
721*4882a593Smuzhiyun 	if (ret)
722*4882a593Smuzhiyun 		return ret;
723*4882a593Smuzhiyun 
724*4882a593Smuzhiyun 	if (soc_is_rk3308b())
725*4882a593Smuzhiyun 		ret = rk3308b_soc_data_init(dev);
726*4882a593Smuzhiyun 
727*4882a593Smuzhiyun 	return ret;
728*4882a593Smuzhiyun }
729*4882a593Smuzhiyun 
730*4882a593Smuzhiyun U_BOOT_DRIVER(pinctrl_rk3308) = {
731*4882a593Smuzhiyun 	.name		= "rockchip_rk3308_pinctrl",
732*4882a593Smuzhiyun 	.id		= UCLASS_PINCTRL,
733*4882a593Smuzhiyun 	.of_match	= rk3308_pinctrl_ids,
734*4882a593Smuzhiyun 	.priv_auto_alloc_size = sizeof(struct rockchip_pinctrl_priv),
735*4882a593Smuzhiyun 	.ops		= &rockchip_pinctrl_ops,
736*4882a593Smuzhiyun #if !CONFIG_IS_ENABLED(OF_PLATDATA)
737*4882a593Smuzhiyun 	.bind		= dm_scan_fdt_dev,
738*4882a593Smuzhiyun #endif
739*4882a593Smuzhiyun 	.probe		= rk3308_pinctrl_probe,
740*4882a593Smuzhiyun };
741