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