1 // SPDX-License-Identifier: GPL-2.0+
3 // Exynos ARMv8 specific support for Samsung pinctrl/gpiolib driver
6 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
7 // http://www.samsung.com
8 // Copyright (c) 2012 Linaro Ltd
9 // http://www.linaro.org
10 // Copyright (c) 2017 Krzysztof Kozlowski <krzk@kernel.org>
12 // This file contains the Samsung Exynos specific information required by the
13 // the Samsung pinctrl/gpiolib driver. It also includes the implementation of
14 // external gpio and wakeup interrupt support.
16 #include <linux/slab.h>
17 #include <linux/soc/samsung/exynos-regs-pmu.h>
19 #include "pinctrl-samsung.h"
20 #include "pinctrl-exynos.h"
22 static const struct samsung_pin_bank_type bank_type_off
= {
23 .fld_width
= { 4, 1, 2, 2, 2, 2, },
24 .reg_offset
= { 0x00, 0x04, 0x08, 0x0c, 0x10, 0x14, },
27 static const struct samsung_pin_bank_type bank_type_alive
= {
28 .fld_width
= { 4, 1, 2, 2, },
29 .reg_offset
= { 0x00, 0x04, 0x08, 0x0c, },
32 /* Exynos5433 has the 4bit widths for PINCFG_TYPE_DRV bitfields. */
33 static const struct samsung_pin_bank_type exynos5433_bank_type_off
= {
34 .fld_width
= { 4, 1, 2, 4, 2, 2, },
35 .reg_offset
= { 0x00, 0x04, 0x08, 0x0c, 0x10, 0x14, },
38 static const struct samsung_pin_bank_type exynos5433_bank_type_alive
= {
39 .fld_width
= { 4, 1, 2, 4, },
40 .reg_offset
= { 0x00, 0x04, 0x08, 0x0c, },
44 * Bank type for non-alive type. Bit fields:
45 * CON: 4, DAT: 1, PUD: 4, DRV: 4, CONPDN: 2, PUDPDN: 4
47 static const struct samsung_pin_bank_type exynos850_bank_type_off
= {
48 .fld_width
= { 4, 1, 4, 4, 2, 4, },
49 .reg_offset
= { 0x00, 0x04, 0x08, 0x0c, 0x10, 0x14, },
53 * Bank type for alive type. Bit fields:
54 * CON: 4, DAT: 1, PUD: 4, DRV: 4
56 static const struct samsung_pin_bank_type exynos850_bank_type_alive
= {
57 .fld_width
= { 4, 1, 4, 4, },
58 .reg_offset
= { 0x00, 0x04, 0x08, 0x0c, },
62 * Bank type for non-alive type. Bit fields:
63 * CON: 4, DAT: 1, PUD: 2, DRV: 3, CONPDN: 2, PUDPDN: 2
65 static const struct samsung_pin_bank_type exynos8895_bank_type_off
= {
66 .fld_width
= { 4, 1, 2, 3, 2, 2, },
67 .reg_offset
= { 0x00, 0x04, 0x08, 0x0c, 0x10, 0x14, },
70 /* Pad retention control code for accessing PMU regmap */
71 static atomic_t exynos_shared_retention_refcnt
;
73 /* pin banks of exynos5433 pin-controller - ALIVE */
74 static const struct samsung_pin_bank_data exynos5433_pin_banks0
[] __initconst
= {
75 /* Must start with EINTG banks, ordered by EINT group number. */
76 EXYNOS5433_PIN_BANK_EINTW(8, 0x000, "gpa0", 0x00),
77 EXYNOS5433_PIN_BANK_EINTW(8, 0x020, "gpa1", 0x04),
78 EXYNOS5433_PIN_BANK_EINTW(8, 0x040, "gpa2", 0x08),
79 EXYNOS5433_PIN_BANK_EINTW(8, 0x060, "gpa3", 0x0c),
80 EXYNOS5433_PIN_BANK_EINTW_EXT(8, 0x020, "gpf1", 0x1004, 1),
81 EXYNOS5433_PIN_BANK_EINTW_EXT(4, 0x040, "gpf2", 0x1008, 1),
82 EXYNOS5433_PIN_BANK_EINTW_EXT(4, 0x060, "gpf3", 0x100c, 1),
83 EXYNOS5433_PIN_BANK_EINTW_EXT(8, 0x080, "gpf4", 0x1010, 1),
84 EXYNOS5433_PIN_BANK_EINTW_EXT(8, 0x0a0, "gpf5", 0x1014, 1),
87 /* pin banks of exynos5433 pin-controller - AUD */
88 static const struct samsung_pin_bank_data exynos5433_pin_banks1
[] __initconst
= {
89 /* Must start with EINTG banks, ordered by EINT group number. */
90 EXYNOS5433_PIN_BANK_EINTG(7, 0x000, "gpz0", 0x00),
91 EXYNOS5433_PIN_BANK_EINTG(4, 0x020, "gpz1", 0x04),
94 /* pin banks of exynos5433 pin-controller - CPIF */
95 static const struct samsung_pin_bank_data exynos5433_pin_banks2
[] __initconst
= {
96 /* Must start with EINTG banks, ordered by EINT group number. */
97 EXYNOS5433_PIN_BANK_EINTG(2, 0x000, "gpv6", 0x00),
100 /* pin banks of exynos5433 pin-controller - eSE */
101 static const struct samsung_pin_bank_data exynos5433_pin_banks3
[] __initconst
= {
102 /* Must start with EINTG banks, ordered by EINT group number. */
103 EXYNOS5433_PIN_BANK_EINTG(3, 0x000, "gpj2", 0x00),
106 /* pin banks of exynos5433 pin-controller - FINGER */
107 static const struct samsung_pin_bank_data exynos5433_pin_banks4
[] __initconst
= {
108 /* Must start with EINTG banks, ordered by EINT group number. */
109 EXYNOS5433_PIN_BANK_EINTG(4, 0x000, "gpd5", 0x00),
112 /* pin banks of exynos5433 pin-controller - FSYS */
113 static const struct samsung_pin_bank_data exynos5433_pin_banks5
[] __initconst
= {
114 /* Must start with EINTG banks, ordered by EINT group number. */
115 EXYNOS5433_PIN_BANK_EINTG(6, 0x000, "gph1", 0x00),
116 EXYNOS5433_PIN_BANK_EINTG(7, 0x020, "gpr4", 0x04),
117 EXYNOS5433_PIN_BANK_EINTG(5, 0x040, "gpr0", 0x08),
118 EXYNOS5433_PIN_BANK_EINTG(8, 0x060, "gpr1", 0x0c),
119 EXYNOS5433_PIN_BANK_EINTG(2, 0x080, "gpr2", 0x10),
120 EXYNOS5433_PIN_BANK_EINTG(8, 0x0a0, "gpr3", 0x14),
123 /* pin banks of exynos5433 pin-controller - IMEM */
124 static const struct samsung_pin_bank_data exynos5433_pin_banks6
[] __initconst
= {
125 /* Must start with EINTG banks, ordered by EINT group number. */
126 EXYNOS5433_PIN_BANK_EINTG(8, 0x000, "gpf0", 0x00),
129 /* pin banks of exynos5433 pin-controller - NFC */
130 static const struct samsung_pin_bank_data exynos5433_pin_banks7
[] __initconst
= {
131 /* Must start with EINTG banks, ordered by EINT group number. */
132 EXYNOS5433_PIN_BANK_EINTG(3, 0x000, "gpj0", 0x00),
135 /* pin banks of exynos5433 pin-controller - PERIC */
136 static const struct samsung_pin_bank_data exynos5433_pin_banks8
[] __initconst
= {
137 /* Must start with EINTG banks, ordered by EINT group number. */
138 EXYNOS5433_PIN_BANK_EINTG(6, 0x000, "gpv7", 0x00),
139 EXYNOS5433_PIN_BANK_EINTG(5, 0x020, "gpb0", 0x04),
140 EXYNOS5433_PIN_BANK_EINTG(8, 0x040, "gpc0", 0x08),
141 EXYNOS5433_PIN_BANK_EINTG(2, 0x060, "gpc1", 0x0c),
142 EXYNOS5433_PIN_BANK_EINTG(6, 0x080, "gpc2", 0x10),
143 EXYNOS5433_PIN_BANK_EINTG(8, 0x0a0, "gpc3", 0x14),
144 EXYNOS5433_PIN_BANK_EINTG(2, 0x0c0, "gpg0", 0x18),
145 EXYNOS5433_PIN_BANK_EINTG(4, 0x0e0, "gpd0", 0x1c),
146 EXYNOS5433_PIN_BANK_EINTG(6, 0x100, "gpd1", 0x20),
147 EXYNOS5433_PIN_BANK_EINTG(8, 0x120, "gpd2", 0x24),
148 EXYNOS5433_PIN_BANK_EINTG(5, 0x140, "gpd4", 0x28),
149 EXYNOS5433_PIN_BANK_EINTG(2, 0x160, "gpd8", 0x2c),
150 EXYNOS5433_PIN_BANK_EINTG(7, 0x180, "gpd6", 0x30),
151 EXYNOS5433_PIN_BANK_EINTG(3, 0x1a0, "gpd7", 0x34),
152 EXYNOS5433_PIN_BANK_EINTG(5, 0x1c0, "gpg1", 0x38),
153 EXYNOS5433_PIN_BANK_EINTG(2, 0x1e0, "gpg2", 0x3c),
154 EXYNOS5433_PIN_BANK_EINTG(8, 0x200, "gpg3", 0x40),
157 /* pin banks of exynos5433 pin-controller - TOUCH */
158 static const struct samsung_pin_bank_data exynos5433_pin_banks9
[] __initconst
= {
159 /* Must start with EINTG banks, ordered by EINT group number. */
160 EXYNOS5433_PIN_BANK_EINTG(3, 0x000, "gpj1", 0x00),
163 /* PMU pin retention groups registers for Exynos5433 (without audio & fsys) */
164 static const u32 exynos5433_retention_regs
[] = {
165 EXYNOS5433_PAD_RETENTION_TOP_OPTION
,
166 EXYNOS5433_PAD_RETENTION_UART_OPTION
,
167 EXYNOS5433_PAD_RETENTION_EBIA_OPTION
,
168 EXYNOS5433_PAD_RETENTION_EBIB_OPTION
,
169 EXYNOS5433_PAD_RETENTION_SPI_OPTION
,
170 EXYNOS5433_PAD_RETENTION_MIF_OPTION
,
171 EXYNOS5433_PAD_RETENTION_USBXTI_OPTION
,
172 EXYNOS5433_PAD_RETENTION_BOOTLDO_OPTION
,
173 EXYNOS5433_PAD_RETENTION_UFS_OPTION
,
174 EXYNOS5433_PAD_RETENTION_FSYSGENIO_OPTION
,
177 static const struct samsung_retention_data exynos5433_retention_data __initconst
= {
178 .regs
= exynos5433_retention_regs
,
179 .nr_regs
= ARRAY_SIZE(exynos5433_retention_regs
),
180 .value
= EXYNOS_WAKEUP_FROM_LOWPWR
,
181 .refcnt
= &exynos_shared_retention_refcnt
,
182 .init
= exynos_retention_init
,
185 /* PMU retention control for audio pins can be tied to audio pin bank */
186 static const u32 exynos5433_audio_retention_regs
[] = {
187 EXYNOS5433_PAD_RETENTION_AUD_OPTION
,
190 static const struct samsung_retention_data exynos5433_audio_retention_data __initconst
= {
191 .regs
= exynos5433_audio_retention_regs
,
192 .nr_regs
= ARRAY_SIZE(exynos5433_audio_retention_regs
),
193 .value
= EXYNOS_WAKEUP_FROM_LOWPWR
,
194 .init
= exynos_retention_init
,
197 /* PMU retention control for mmc pins can be tied to fsys pin bank */
198 static const u32 exynos5433_fsys_retention_regs
[] = {
199 EXYNOS5433_PAD_RETENTION_MMC0_OPTION
,
200 EXYNOS5433_PAD_RETENTION_MMC1_OPTION
,
201 EXYNOS5433_PAD_RETENTION_MMC2_OPTION
,
204 static const struct samsung_retention_data exynos5433_fsys_retention_data __initconst
= {
205 .regs
= exynos5433_fsys_retention_regs
,
206 .nr_regs
= ARRAY_SIZE(exynos5433_fsys_retention_regs
),
207 .value
= EXYNOS_WAKEUP_FROM_LOWPWR
,
208 .init
= exynos_retention_init
,
212 * Samsung pinctrl driver data for Exynos5433 SoC. Exynos5433 SoC includes
213 * ten gpio/pin-mux/pinconfig controllers.
215 static const struct samsung_pin_ctrl exynos5433_pin_ctrl
[] __initconst
= {
217 /* pin-controller instance 0 data */
218 .pin_banks
= exynos5433_pin_banks0
,
219 .nr_banks
= ARRAY_SIZE(exynos5433_pin_banks0
),
220 .eint_wkup_init
= exynos_eint_wkup_init
,
221 .suspend
= exynos_pinctrl_suspend
,
222 .resume
= exynos_pinctrl_resume
,
223 .nr_ext_resources
= 1,
224 .retention_data
= &exynos5433_retention_data
,
226 /* pin-controller instance 1 data */
227 .pin_banks
= exynos5433_pin_banks1
,
228 .nr_banks
= ARRAY_SIZE(exynos5433_pin_banks1
),
229 .eint_gpio_init
= exynos_eint_gpio_init
,
230 .suspend
= exynos_pinctrl_suspend
,
231 .resume
= exynos_pinctrl_resume
,
232 .retention_data
= &exynos5433_audio_retention_data
,
234 /* pin-controller instance 2 data */
235 .pin_banks
= exynos5433_pin_banks2
,
236 .nr_banks
= ARRAY_SIZE(exynos5433_pin_banks2
),
237 .eint_gpio_init
= exynos_eint_gpio_init
,
238 .suspend
= exynos_pinctrl_suspend
,
239 .resume
= exynos_pinctrl_resume
,
240 .retention_data
= &exynos5433_retention_data
,
242 /* pin-controller instance 3 data */
243 .pin_banks
= exynos5433_pin_banks3
,
244 .nr_banks
= ARRAY_SIZE(exynos5433_pin_banks3
),
245 .eint_gpio_init
= exynos_eint_gpio_init
,
246 .suspend
= exynos_pinctrl_suspend
,
247 .resume
= exynos_pinctrl_resume
,
248 .retention_data
= &exynos5433_retention_data
,
250 /* pin-controller instance 4 data */
251 .pin_banks
= exynos5433_pin_banks4
,
252 .nr_banks
= ARRAY_SIZE(exynos5433_pin_banks4
),
253 .eint_gpio_init
= exynos_eint_gpio_init
,
254 .suspend
= exynos_pinctrl_suspend
,
255 .resume
= exynos_pinctrl_resume
,
256 .retention_data
= &exynos5433_retention_data
,
258 /* pin-controller instance 5 data */
259 .pin_banks
= exynos5433_pin_banks5
,
260 .nr_banks
= ARRAY_SIZE(exynos5433_pin_banks5
),
261 .eint_gpio_init
= exynos_eint_gpio_init
,
262 .suspend
= exynos_pinctrl_suspend
,
263 .resume
= exynos_pinctrl_resume
,
264 .retention_data
= &exynos5433_fsys_retention_data
,
266 /* pin-controller instance 6 data */
267 .pin_banks
= exynos5433_pin_banks6
,
268 .nr_banks
= ARRAY_SIZE(exynos5433_pin_banks6
),
269 .eint_gpio_init
= exynos_eint_gpio_init
,
270 .suspend
= exynos_pinctrl_suspend
,
271 .resume
= exynos_pinctrl_resume
,
272 .retention_data
= &exynos5433_retention_data
,
274 /* pin-controller instance 7 data */
275 .pin_banks
= exynos5433_pin_banks7
,
276 .nr_banks
= ARRAY_SIZE(exynos5433_pin_banks7
),
277 .eint_gpio_init
= exynos_eint_gpio_init
,
278 .suspend
= exynos_pinctrl_suspend
,
279 .resume
= exynos_pinctrl_resume
,
280 .retention_data
= &exynos5433_retention_data
,
282 /* pin-controller instance 8 data */
283 .pin_banks
= exynos5433_pin_banks8
,
284 .nr_banks
= ARRAY_SIZE(exynos5433_pin_banks8
),
285 .eint_gpio_init
= exynos_eint_gpio_init
,
286 .suspend
= exynos_pinctrl_suspend
,
287 .resume
= exynos_pinctrl_resume
,
288 .retention_data
= &exynos5433_retention_data
,
290 /* pin-controller instance 9 data */
291 .pin_banks
= exynos5433_pin_banks9
,
292 .nr_banks
= ARRAY_SIZE(exynos5433_pin_banks9
),
293 .eint_gpio_init
= exynos_eint_gpio_init
,
294 .suspend
= exynos_pinctrl_suspend
,
295 .resume
= exynos_pinctrl_resume
,
296 .retention_data
= &exynos5433_retention_data
,
300 const struct samsung_pinctrl_of_match_data exynos5433_of_data __initconst
= {
301 .ctrl
= exynos5433_pin_ctrl
,
302 .num_ctrl
= ARRAY_SIZE(exynos5433_pin_ctrl
),
305 /* pin banks of exynos7 pin-controller - ALIVE */
306 static const struct samsung_pin_bank_data exynos7_pin_banks0
[] __initconst
= {
307 /* Must start with EINTG banks, ordered by EINT group number. */
308 EXYNOS_PIN_BANK_EINTW(8, 0x000, "gpa0", 0x00),
309 EXYNOS_PIN_BANK_EINTW(8, 0x020, "gpa1", 0x04),
310 EXYNOS_PIN_BANK_EINTW(8, 0x040, "gpa2", 0x08),
311 EXYNOS_PIN_BANK_EINTW(8, 0x060, "gpa3", 0x0c),
314 /* pin banks of exynos7 pin-controller - BUS0 */
315 static const struct samsung_pin_bank_data exynos7_pin_banks1
[] __initconst
= {
316 /* Must start with EINTG banks, ordered by EINT group number. */
317 EXYNOS_PIN_BANK_EINTG(5, 0x000, "gpb0", 0x00),
318 EXYNOS_PIN_BANK_EINTG(8, 0x020, "gpc0", 0x04),
319 EXYNOS_PIN_BANK_EINTG(2, 0x040, "gpc1", 0x08),
320 EXYNOS_PIN_BANK_EINTG(6, 0x060, "gpc2", 0x0c),
321 EXYNOS_PIN_BANK_EINTG(8, 0x080, "gpc3", 0x10),
322 EXYNOS_PIN_BANK_EINTG(4, 0x0a0, "gpd0", 0x14),
323 EXYNOS_PIN_BANK_EINTG(6, 0x0c0, "gpd1", 0x18),
324 EXYNOS_PIN_BANK_EINTG(8, 0x0e0, "gpd2", 0x1c),
325 EXYNOS_PIN_BANK_EINTG(5, 0x100, "gpd4", 0x20),
326 EXYNOS_PIN_BANK_EINTG(4, 0x120, "gpd5", 0x24),
327 EXYNOS_PIN_BANK_EINTG(6, 0x140, "gpd6", 0x28),
328 EXYNOS_PIN_BANK_EINTG(3, 0x160, "gpd7", 0x2c),
329 EXYNOS_PIN_BANK_EINTG(2, 0x180, "gpd8", 0x30),
330 EXYNOS_PIN_BANK_EINTG(2, 0x1a0, "gpg0", 0x34),
331 EXYNOS_PIN_BANK_EINTG(4, 0x1c0, "gpg3", 0x38),
334 /* pin banks of exynos7 pin-controller - NFC */
335 static const struct samsung_pin_bank_data exynos7_pin_banks2
[] __initconst
= {
336 /* Must start with EINTG banks, ordered by EINT group number. */
337 EXYNOS_PIN_BANK_EINTG(3, 0x000, "gpj0", 0x00),
340 /* pin banks of exynos7 pin-controller - TOUCH */
341 static const struct samsung_pin_bank_data exynos7_pin_banks3
[] __initconst
= {
342 /* Must start with EINTG banks, ordered by EINT group number. */
343 EXYNOS_PIN_BANK_EINTG(3, 0x000, "gpj1", 0x00),
346 /* pin banks of exynos7 pin-controller - FF */
347 static const struct samsung_pin_bank_data exynos7_pin_banks4
[] __initconst
= {
348 /* Must start with EINTG banks, ordered by EINT group number. */
349 EXYNOS_PIN_BANK_EINTG(4, 0x000, "gpg4", 0x00),
352 /* pin banks of exynos7 pin-controller - ESE */
353 static const struct samsung_pin_bank_data exynos7_pin_banks5
[] __initconst
= {
354 /* Must start with EINTG banks, ordered by EINT group number. */
355 EXYNOS_PIN_BANK_EINTG(5, 0x000, "gpv7", 0x00),
358 /* pin banks of exynos7 pin-controller - FSYS0 */
359 static const struct samsung_pin_bank_data exynos7_pin_banks6
[] __initconst
= {
360 /* Must start with EINTG banks, ordered by EINT group number. */
361 EXYNOS_PIN_BANK_EINTG(7, 0x000, "gpr4", 0x00),
364 /* pin banks of exynos7 pin-controller - FSYS1 */
365 static const struct samsung_pin_bank_data exynos7_pin_banks7
[] __initconst
= {
366 /* Must start with EINTG banks, ordered by EINT group number. */
367 EXYNOS_PIN_BANK_EINTG(4, 0x000, "gpr0", 0x00),
368 EXYNOS_PIN_BANK_EINTG(8, 0x020, "gpr1", 0x04),
369 EXYNOS_PIN_BANK_EINTG(5, 0x040, "gpr2", 0x08),
370 EXYNOS_PIN_BANK_EINTG(8, 0x060, "gpr3", 0x0c),
373 /* pin banks of exynos7 pin-controller - BUS1 */
374 static const struct samsung_pin_bank_data exynos7_pin_banks8
[] __initconst
= {
375 /* Must start with EINTG banks, ordered by EINT group number. */
376 EXYNOS_PIN_BANK_EINTG(8, 0x020, "gpf0", 0x00),
377 EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpf1", 0x04),
378 EXYNOS_PIN_BANK_EINTG(4, 0x060, "gpf2", 0x08),
379 EXYNOS_PIN_BANK_EINTG(5, 0x080, "gpf3", 0x0c),
380 EXYNOS_PIN_BANK_EINTG(8, 0x0a0, "gpf4", 0x10),
381 EXYNOS_PIN_BANK_EINTG(8, 0x0c0, "gpf5", 0x14),
382 EXYNOS_PIN_BANK_EINTG(5, 0x0e0, "gpg1", 0x18),
383 EXYNOS_PIN_BANK_EINTG(5, 0x100, "gpg2", 0x1c),
384 EXYNOS_PIN_BANK_EINTG(6, 0x120, "gph1", 0x20),
385 EXYNOS_PIN_BANK_EINTG(3, 0x140, "gpv6", 0x24),
388 static const struct samsung_pin_bank_data exynos7_pin_banks9
[] __initconst
= {
389 /* Must start with EINTG banks, ordered by EINT group number. */
390 EXYNOS_PIN_BANK_EINTG(7, 0x000, "gpz0", 0x00),
391 EXYNOS_PIN_BANK_EINTG(4, 0x020, "gpz1", 0x04),
394 static const struct samsung_pin_ctrl exynos7_pin_ctrl
[] __initconst
= {
396 /* pin-controller instance 0 Alive data */
397 .pin_banks
= exynos7_pin_banks0
,
398 .nr_banks
= ARRAY_SIZE(exynos7_pin_banks0
),
399 .eint_wkup_init
= exynos_eint_wkup_init
,
401 /* pin-controller instance 1 BUS0 data */
402 .pin_banks
= exynos7_pin_banks1
,
403 .nr_banks
= ARRAY_SIZE(exynos7_pin_banks1
),
404 .eint_gpio_init
= exynos_eint_gpio_init
,
406 /* pin-controller instance 2 NFC data */
407 .pin_banks
= exynos7_pin_banks2
,
408 .nr_banks
= ARRAY_SIZE(exynos7_pin_banks2
),
409 .eint_gpio_init
= exynos_eint_gpio_init
,
411 /* pin-controller instance 3 TOUCH data */
412 .pin_banks
= exynos7_pin_banks3
,
413 .nr_banks
= ARRAY_SIZE(exynos7_pin_banks3
),
414 .eint_gpio_init
= exynos_eint_gpio_init
,
416 /* pin-controller instance 4 FF data */
417 .pin_banks
= exynos7_pin_banks4
,
418 .nr_banks
= ARRAY_SIZE(exynos7_pin_banks4
),
419 .eint_gpio_init
= exynos_eint_gpio_init
,
421 /* pin-controller instance 5 ESE data */
422 .pin_banks
= exynos7_pin_banks5
,
423 .nr_banks
= ARRAY_SIZE(exynos7_pin_banks5
),
424 .eint_gpio_init
= exynos_eint_gpio_init
,
426 /* pin-controller instance 6 FSYS0 data */
427 .pin_banks
= exynos7_pin_banks6
,
428 .nr_banks
= ARRAY_SIZE(exynos7_pin_banks6
),
429 .eint_gpio_init
= exynos_eint_gpio_init
,
431 /* pin-controller instance 7 FSYS1 data */
432 .pin_banks
= exynos7_pin_banks7
,
433 .nr_banks
= ARRAY_SIZE(exynos7_pin_banks7
),
434 .eint_gpio_init
= exynos_eint_gpio_init
,
436 /* pin-controller instance 8 BUS1 data */
437 .pin_banks
= exynos7_pin_banks8
,
438 .nr_banks
= ARRAY_SIZE(exynos7_pin_banks8
),
439 .eint_gpio_init
= exynos_eint_gpio_init
,
441 /* pin-controller instance 9 AUD data */
442 .pin_banks
= exynos7_pin_banks9
,
443 .nr_banks
= ARRAY_SIZE(exynos7_pin_banks9
),
444 .eint_gpio_init
= exynos_eint_gpio_init
,
448 const struct samsung_pinctrl_of_match_data exynos7_of_data __initconst
= {
449 .ctrl
= exynos7_pin_ctrl
,
450 .num_ctrl
= ARRAY_SIZE(exynos7_pin_ctrl
),
453 /* pin banks of exynos7885 pin-controller 0 (ALIVE) */
454 static const struct samsung_pin_bank_data exynos7885_pin_banks0
[] __initconst
= {
455 EXYNOS_PIN_BANK_EINTN(3, 0x000, "etc0"),
456 EXYNOS_PIN_BANK_EINTN(3, 0x020, "etc1"),
457 EXYNOS850_PIN_BANK_EINTW(8, 0x040, "gpa0", 0x00),
458 EXYNOS850_PIN_BANK_EINTW(8, 0x060, "gpa1", 0x04),
459 EXYNOS850_PIN_BANK_EINTW(8, 0x080, "gpa2", 0x08),
460 EXYNOS850_PIN_BANK_EINTW(5, 0x0a0, "gpq0", 0x0c),
463 /* pin banks of exynos7885 pin-controller 1 (DISPAUD) */
464 static const struct samsung_pin_bank_data exynos7885_pin_banks1
[] __initconst
= {
465 EXYNOS850_PIN_BANK_EINTG(5, 0x000, "gpb0", 0x00),
466 EXYNOS850_PIN_BANK_EINTG(4, 0x020, "gpb1", 0x04),
467 EXYNOS850_PIN_BANK_EINTG(5, 0x040, "gpb2", 0x08),
470 /* pin banks of exynos7885 pin-controller 2 (FSYS) */
471 static const struct samsung_pin_bank_data exynos7885_pin_banks2
[] __initconst
= {
472 EXYNOS850_PIN_BANK_EINTG(4, 0x000, "gpf0", 0x00),
473 EXYNOS850_PIN_BANK_EINTG(8, 0x020, "gpf2", 0x04),
474 EXYNOS850_PIN_BANK_EINTG(6, 0x040, "gpf3", 0x08),
475 EXYNOS850_PIN_BANK_EINTG(6, 0x060, "gpf4", 0x0c),
478 /* pin banks of exynos7885 pin-controller 3 (TOP) */
479 static const struct samsung_pin_bank_data exynos7885_pin_banks3
[] __initconst
= {
480 EXYNOS850_PIN_BANK_EINTG(4, 0x000, "gpp0", 0x00),
481 EXYNOS850_PIN_BANK_EINTG(3, 0x020, "gpg0", 0x04),
482 EXYNOS850_PIN_BANK_EINTG(4, 0x040, "gpp1", 0x08),
483 EXYNOS850_PIN_BANK_EINTG(4, 0x060, "gpp2", 0x0c),
484 EXYNOS850_PIN_BANK_EINTG(3, 0x080, "gpp3", 0x10),
485 EXYNOS850_PIN_BANK_EINTG(6, 0x0a0, "gpp4", 0x14),
486 EXYNOS850_PIN_BANK_EINTG(4, 0x0c0, "gpp5", 0x18),
487 EXYNOS850_PIN_BANK_EINTG(5, 0x0e0, "gpp6", 0x1c),
488 EXYNOS850_PIN_BANK_EINTG(2, 0x100, "gpp7", 0x20),
489 EXYNOS850_PIN_BANK_EINTG(2, 0x120, "gpp8", 0x24),
490 EXYNOS850_PIN_BANK_EINTG(8, 0x140, "gpg1", 0x28),
491 EXYNOS850_PIN_BANK_EINTG(8, 0x160, "gpg2", 0x2c),
492 EXYNOS850_PIN_BANK_EINTG(8, 0x180, "gpg3", 0x30),
493 EXYNOS850_PIN_BANK_EINTG(2, 0x1a0, "gpg4", 0x34),
494 EXYNOS850_PIN_BANK_EINTG(4, 0x1c0, "gpc0", 0x38),
495 EXYNOS850_PIN_BANK_EINTG(8, 0x1e0, "gpc1", 0x3c),
496 EXYNOS850_PIN_BANK_EINTG(8, 0x200, "gpc2", 0x40),
499 static const struct samsung_pin_ctrl exynos7885_pin_ctrl
[] __initconst
= {
501 /* pin-controller instance 0 Alive data */
502 .pin_banks
= exynos7885_pin_banks0
,
503 .nr_banks
= ARRAY_SIZE(exynos7885_pin_banks0
),
504 .eint_gpio_init
= exynos_eint_gpio_init
,
505 .eint_wkup_init
= exynos_eint_wkup_init
,
506 .suspend
= exynos_pinctrl_suspend
,
507 .resume
= exynos_pinctrl_resume
,
509 /* pin-controller instance 1 DISPAUD data */
510 .pin_banks
= exynos7885_pin_banks1
,
511 .nr_banks
= ARRAY_SIZE(exynos7885_pin_banks1
),
513 /* pin-controller instance 2 FSYS data */
514 .pin_banks
= exynos7885_pin_banks2
,
515 .nr_banks
= ARRAY_SIZE(exynos7885_pin_banks2
),
516 .eint_gpio_init
= exynos_eint_gpio_init
,
517 .suspend
= exynos_pinctrl_suspend
,
518 .resume
= exynos_pinctrl_resume
,
520 /* pin-controller instance 3 TOP data */
521 .pin_banks
= exynos7885_pin_banks3
,
522 .nr_banks
= ARRAY_SIZE(exynos7885_pin_banks3
),
523 .eint_gpio_init
= exynos_eint_gpio_init
,
524 .suspend
= exynos_pinctrl_suspend
,
525 .resume
= exynos_pinctrl_resume
,
529 const struct samsung_pinctrl_of_match_data exynos7885_of_data __initconst
= {
530 .ctrl
= exynos7885_pin_ctrl
,
531 .num_ctrl
= ARRAY_SIZE(exynos7885_pin_ctrl
),
534 /* pin banks of exynos850 pin-controller 0 (ALIVE) */
535 static const struct samsung_pin_bank_data exynos850_pin_banks0
[] __initconst
= {
536 /* Must start with EINTG banks, ordered by EINT group number. */
537 EXYNOS850_PIN_BANK_EINTW(8, 0x000, "gpa0", 0x00),
538 EXYNOS850_PIN_BANK_EINTW(8, 0x020, "gpa1", 0x04),
539 EXYNOS850_PIN_BANK_EINTW(8, 0x040, "gpa2", 0x08),
540 EXYNOS850_PIN_BANK_EINTW(8, 0x060, "gpa3", 0x0c),
541 EXYNOS850_PIN_BANK_EINTW(4, 0x080, "gpa4", 0x10),
542 EXYNOS850_PIN_BANK_EINTN(3, 0x0a0, "gpq0"),
545 /* pin banks of exynos850 pin-controller 1 (CMGP) */
546 static const struct samsung_pin_bank_data exynos850_pin_banks1
[] __initconst
= {
547 /* Must start with EINTG banks, ordered by EINT group number. */
548 EXYNOS850_PIN_BANK_EINTW(1, 0x000, "gpm0", 0x00),
549 EXYNOS850_PIN_BANK_EINTW(1, 0x020, "gpm1", 0x04),
550 EXYNOS850_PIN_BANK_EINTW(1, 0x040, "gpm2", 0x08),
551 EXYNOS850_PIN_BANK_EINTW(1, 0x060, "gpm3", 0x0c),
552 EXYNOS850_PIN_BANK_EINTW(1, 0x080, "gpm4", 0x10),
553 EXYNOS850_PIN_BANK_EINTW(1, 0x0a0, "gpm5", 0x14),
554 EXYNOS850_PIN_BANK_EINTW(1, 0x0c0, "gpm6", 0x18),
555 EXYNOS850_PIN_BANK_EINTW(1, 0x0e0, "gpm7", 0x1c),
558 /* pin banks of exynos850 pin-controller 2 (AUD) */
559 static const struct samsung_pin_bank_data exynos850_pin_banks2
[] __initconst
= {
560 /* Must start with EINTG banks, ordered by EINT group number. */
561 EXYNOS850_PIN_BANK_EINTG(5, 0x000, "gpb0", 0x00),
562 EXYNOS850_PIN_BANK_EINTG(5, 0x020, "gpb1", 0x04),
565 /* pin banks of exynos850 pin-controller 3 (HSI) */
566 static const struct samsung_pin_bank_data exynos850_pin_banks3
[] __initconst
= {
567 /* Must start with EINTG banks, ordered by EINT group number. */
568 EXYNOS850_PIN_BANK_EINTG(6, 0x000, "gpf2", 0x00),
571 /* pin banks of exynos850 pin-controller 4 (CORE) */
572 static const struct samsung_pin_bank_data exynos850_pin_banks4
[] __initconst
= {
573 /* Must start with EINTG banks, ordered by EINT group number. */
574 EXYNOS850_PIN_BANK_EINTG(4, 0x000, "gpf0", 0x00),
575 EXYNOS850_PIN_BANK_EINTG(8, 0x020, "gpf1", 0x04),
578 /* pin banks of exynos850 pin-controller 5 (PERI) */
579 static const struct samsung_pin_bank_data exynos850_pin_banks5
[] __initconst
= {
580 /* Must start with EINTG banks, ordered by EINT group number. */
581 EXYNOS850_PIN_BANK_EINTG(2, 0x000, "gpg0", 0x00),
582 EXYNOS850_PIN_BANK_EINTG(6, 0x020, "gpp0", 0x04),
583 EXYNOS850_PIN_BANK_EINTG(4, 0x040, "gpp1", 0x08),
584 EXYNOS850_PIN_BANK_EINTG(4, 0x060, "gpp2", 0x0c),
585 EXYNOS850_PIN_BANK_EINTG(8, 0x080, "gpg1", 0x10),
586 EXYNOS850_PIN_BANK_EINTG(8, 0x0a0, "gpg2", 0x14),
587 EXYNOS850_PIN_BANK_EINTG(1, 0x0c0, "gpg3", 0x18),
588 EXYNOS850_PIN_BANK_EINTG(3, 0x0e0, "gpc0", 0x1c),
589 EXYNOS850_PIN_BANK_EINTG(6, 0x100, "gpc1", 0x20),
592 static const struct samsung_pin_ctrl exynos850_pin_ctrl
[] __initconst
= {
594 /* pin-controller instance 0 ALIVE data */
595 .pin_banks
= exynos850_pin_banks0
,
596 .nr_banks
= ARRAY_SIZE(exynos850_pin_banks0
),
597 .eint_wkup_init
= exynos_eint_wkup_init
,
599 /* pin-controller instance 1 CMGP data */
600 .pin_banks
= exynos850_pin_banks1
,
601 .nr_banks
= ARRAY_SIZE(exynos850_pin_banks1
),
602 .eint_wkup_init
= exynos_eint_wkup_init
,
604 /* pin-controller instance 2 AUD data */
605 .pin_banks
= exynos850_pin_banks2
,
606 .nr_banks
= ARRAY_SIZE(exynos850_pin_banks2
),
608 /* pin-controller instance 3 HSI data */
609 .pin_banks
= exynos850_pin_banks3
,
610 .nr_banks
= ARRAY_SIZE(exynos850_pin_banks3
),
611 .eint_gpio_init
= exynos_eint_gpio_init
,
613 /* pin-controller instance 4 CORE data */
614 .pin_banks
= exynos850_pin_banks4
,
615 .nr_banks
= ARRAY_SIZE(exynos850_pin_banks4
),
616 .eint_gpio_init
= exynos_eint_gpio_init
,
618 /* pin-controller instance 5 PERI data */
619 .pin_banks
= exynos850_pin_banks5
,
620 .nr_banks
= ARRAY_SIZE(exynos850_pin_banks5
),
621 .eint_gpio_init
= exynos_eint_gpio_init
,
625 const struct samsung_pinctrl_of_match_data exynos850_of_data __initconst
= {
626 .ctrl
= exynos850_pin_ctrl
,
627 .num_ctrl
= ARRAY_SIZE(exynos850_pin_ctrl
),
630 /* pin banks of exynos990 pin-controller 0 (ALIVE) */
631 static struct samsung_pin_bank_data exynos990_pin_banks0
[] = {
632 /* Must start with EINTG banks, ordered by EINT group number. */
633 EXYNOS850_PIN_BANK_EINTW(8, 0x000, "gpa0", 0x00),
634 EXYNOS850_PIN_BANK_EINTW(8, 0x020, "gpa1", 0x04),
635 EXYNOS850_PIN_BANK_EINTW(8, 0x040, "gpa2", 0x08),
636 EXYNOS850_PIN_BANK_EINTW(8, 0x060, "gpa3", 0x0c),
637 EXYNOS850_PIN_BANK_EINTW(2, 0x080, "gpa4", 0x10),
638 EXYNOS850_PIN_BANK_EINTN(7, 0x0A0, "gpq0"),
641 /* pin banks of exynos990 pin-controller 1 (CMGP) */
642 static struct samsung_pin_bank_data exynos990_pin_banks1
[] = {
643 /* Must start with EINTG banks, ordered by EINT group number. */
644 EXYNOS850_PIN_BANK_EINTN(1, 0x000, "gpm0"),
645 EXYNOS850_PIN_BANK_EINTN(1, 0x020, "gpm1"),
646 EXYNOS850_PIN_BANK_EINTN(1, 0x040, "gpm2"),
647 EXYNOS850_PIN_BANK_EINTN(1, 0x060, "gpm3"),
648 EXYNOS850_PIN_BANK_EINTW(1, 0x080, "gpm4", 0x00),
649 EXYNOS850_PIN_BANK_EINTW(1, 0x0A0, "gpm5", 0x04),
650 EXYNOS850_PIN_BANK_EINTW(1, 0x0C0, "gpm6", 0x08),
651 EXYNOS850_PIN_BANK_EINTW(1, 0x0E0, "gpm7", 0x0c),
652 EXYNOS850_PIN_BANK_EINTW(1, 0x100, "gpm8", 0x10),
653 EXYNOS850_PIN_BANK_EINTW(1, 0x120, "gpm9", 0x14),
654 EXYNOS850_PIN_BANK_EINTW(1, 0x140, "gpm10", 0x18),
655 EXYNOS850_PIN_BANK_EINTW(1, 0x160, "gpm11", 0x1c),
656 EXYNOS850_PIN_BANK_EINTW(1, 0x180, "gpm12", 0x20),
657 EXYNOS850_PIN_BANK_EINTW(1, 0x1A0, "gpm13", 0x24),
658 EXYNOS850_PIN_BANK_EINTW(1, 0x1C0, "gpm14", 0x28),
659 EXYNOS850_PIN_BANK_EINTW(1, 0x1E0, "gpm15", 0x2c),
660 EXYNOS850_PIN_BANK_EINTW(1, 0x200, "gpm16", 0x30),
661 EXYNOS850_PIN_BANK_EINTW(1, 0x220, "gpm17", 0x34),
662 EXYNOS850_PIN_BANK_EINTW(1, 0x240, "gpm18", 0x38),
663 EXYNOS850_PIN_BANK_EINTW(1, 0x260, "gpm19", 0x3c),
664 EXYNOS850_PIN_BANK_EINTW(1, 0x280, "gpm20", 0x40),
665 EXYNOS850_PIN_BANK_EINTW(1, 0x2A0, "gpm21", 0x44),
666 EXYNOS850_PIN_BANK_EINTW(1, 0x2C0, "gpm22", 0x48),
667 EXYNOS850_PIN_BANK_EINTW(1, 0x2E0, "gpm23", 0x4c),
668 EXYNOS850_PIN_BANK_EINTW(1, 0x300, "gpm24", 0x50),
669 EXYNOS850_PIN_BANK_EINTW(1, 0x320, "gpm25", 0x54),
670 EXYNOS850_PIN_BANK_EINTW(1, 0x340, "gpm26", 0x58),
671 EXYNOS850_PIN_BANK_EINTW(1, 0x360, "gpm27", 0x5c),
672 EXYNOS850_PIN_BANK_EINTW(1, 0x380, "gpm28", 0x60),
673 EXYNOS850_PIN_BANK_EINTW(1, 0x3A0, "gpm29", 0x64),
674 EXYNOS850_PIN_BANK_EINTW(1, 0x3C0, "gpm30", 0x68),
675 EXYNOS850_PIN_BANK_EINTW(1, 0x3E0, "gpm31", 0x6c),
676 EXYNOS850_PIN_BANK_EINTW(1, 0x400, "gpm32", 0x70),
677 EXYNOS850_PIN_BANK_EINTW(1, 0x420, "gpm33", 0x74),
681 /* pin banks of exynos990 pin-controller 2 (HSI1) */
682 static struct samsung_pin_bank_data exynos990_pin_banks2
[] = {
683 /* Must start with EINTG banks, ordered by EINT group number. */
684 EXYNOS850_PIN_BANK_EINTG(4, 0x000, "gpf0", 0x00),
685 EXYNOS850_PIN_BANK_EINTG(6, 0x020, "gpf1", 0x04),
686 EXYNOS850_PIN_BANK_EINTG(3, 0x040, "gpf2", 0x08),
689 /* pin banks of exynos990 pin-controller 3 (HSI2) */
690 static struct samsung_pin_bank_data exynos990_pin_banks3
[] = {
691 /* Must start with EINTG banks, ordered by EINT group number. */
692 EXYNOS850_PIN_BANK_EINTG(2, 0x000, "gpf3", 0x00),
695 /* pin banks of exynos990 pin-controller 4 (PERIC0) */
696 static struct samsung_pin_bank_data exynos990_pin_banks4
[] = {
697 /* Must start with EINTG banks, ordered by EINT group number. */
698 EXYNOS850_PIN_BANK_EINTG(8, 0x000, "gpp0", 0x00),
699 EXYNOS850_PIN_BANK_EINTG(8, 0x020, "gpp1", 0x04),
700 EXYNOS850_PIN_BANK_EINTG(8, 0x040, "gpp2", 0x08),
701 EXYNOS850_PIN_BANK_EINTG(8, 0x060, "gpp3", 0x0C),
702 EXYNOS850_PIN_BANK_EINTG(8, 0x080, "gpp4", 0x10),
703 EXYNOS850_PIN_BANK_EINTG(2, 0x0A0, "gpg0", 0x14),
706 /* pin banks of exynos990 pin-controller 5 (PERIC1) */
707 static struct samsung_pin_bank_data exynos990_pin_banks5
[] = {
708 /* Must start with EINTG banks, ordered by EINT group number. */
709 EXYNOS850_PIN_BANK_EINTG(8, 0x000, "gpp5", 0x00),
710 EXYNOS850_PIN_BANK_EINTG(8, 0x020, "gpp6", 0x04),
711 EXYNOS850_PIN_BANK_EINTG(8, 0x040, "gpp7", 0x08),
712 EXYNOS850_PIN_BANK_EINTG(8, 0x060, "gpp8", 0x0C),
713 EXYNOS850_PIN_BANK_EINTG(8, 0x080, "gpp9", 0x10),
714 EXYNOS850_PIN_BANK_EINTG(6, 0x0A0, "gpc0", 0x14),
715 EXYNOS850_PIN_BANK_EINTG(4, 0x0C0, "gpg1", 0x18),
716 EXYNOS850_PIN_BANK_EINTG(8, 0x0E0, "gpb0", 0x1C),
717 EXYNOS850_PIN_BANK_EINTG(8, 0x100, "gpb1", 0x20),
718 EXYNOS850_PIN_BANK_EINTG(8, 0x120, "gpb2", 0x24),
721 /* pin banks of exynos990 pin-controller 6 (VTS) */
722 static struct samsung_pin_bank_data exynos990_pin_banks6
[] = {
723 /* Must start with EINTG banks, ordered by EINT group number. */
724 EXYNOS850_PIN_BANK_EINTG(7, 0x000, "gpv0", 0x00),
727 static const struct samsung_pin_ctrl exynos990_pin_ctrl
[] __initconst
= {
729 /* pin-controller instance 0 ALIVE data */
730 .pin_banks
= exynos990_pin_banks0
,
731 .nr_banks
= ARRAY_SIZE(exynos990_pin_banks0
),
732 .eint_wkup_init
= exynos_eint_wkup_init
,
734 /* pin-controller instance 1 CMGP data */
735 .pin_banks
= exynos990_pin_banks1
,
736 .nr_banks
= ARRAY_SIZE(exynos990_pin_banks1
),
737 .eint_wkup_init
= exynos_eint_wkup_init
,
739 /* pin-controller instance 2 HSI1 data */
740 .pin_banks
= exynos990_pin_banks2
,
741 .nr_banks
= ARRAY_SIZE(exynos990_pin_banks2
),
742 .eint_gpio_init
= exynos_eint_gpio_init
,
744 /* pin-controller instance 3 HSI2 data */
745 .pin_banks
= exynos990_pin_banks3
,
746 .nr_banks
= ARRAY_SIZE(exynos990_pin_banks3
),
747 .eint_gpio_init
= exynos_eint_gpio_init
,
749 /* pin-controller instance 4 PERIC0 data */
750 .pin_banks
= exynos990_pin_banks4
,
751 .nr_banks
= ARRAY_SIZE(exynos990_pin_banks4
),
752 .eint_gpio_init
= exynos_eint_gpio_init
,
754 /* pin-controller instance 5 PERIC1 data */
755 .pin_banks
= exynos990_pin_banks5
,
756 .nr_banks
= ARRAY_SIZE(exynos990_pin_banks5
),
757 .eint_gpio_init
= exynos_eint_gpio_init
,
759 /* pin-controller instance 6 VTS data */
760 .pin_banks
= exynos990_pin_banks6
,
761 .nr_banks
= ARRAY_SIZE(exynos990_pin_banks6
),
765 const struct samsung_pinctrl_of_match_data exynos990_of_data __initconst
= {
766 .ctrl
= exynos990_pin_ctrl
,
767 .num_ctrl
= ARRAY_SIZE(exynos990_pin_ctrl
),
770 /* pin banks of exynos9810 pin-controller 0 (ALIVE) */
771 static const struct samsung_pin_bank_data exynos9810_pin_banks0
[] __initconst
= {
772 EXYNOS850_PIN_BANK_EINTN(6, 0x000, "etc1"),
773 EXYNOS850_PIN_BANK_EINTW(8, 0x020, "gpa0", 0x00),
774 EXYNOS850_PIN_BANK_EINTW(8, 0x040, "gpa1", 0x04),
775 EXYNOS850_PIN_BANK_EINTW(8, 0x060, "gpa2", 0x08),
776 EXYNOS850_PIN_BANK_EINTW(8, 0x080, "gpa3", 0x0c),
777 EXYNOS850_PIN_BANK_EINTN(6, 0x0A0, "gpq0"),
778 EXYNOS850_PIN_BANK_EINTW(2, 0x0C0, "gpa4", 0x10),
781 /* pin banks of exynos9810 pin-controller 1 (AUD) */
782 static const struct samsung_pin_bank_data exynos9810_pin_banks1
[] __initconst
= {
783 EXYNOS850_PIN_BANK_EINTG(5, 0x000, "gpb0", 0x00),
784 EXYNOS850_PIN_BANK_EINTG(8, 0x020, "gpb1", 0x04),
785 EXYNOS850_PIN_BANK_EINTG(4, 0x040, "gpb2", 0x08),
788 /* pin banks of exynos9810 pin-controller 2 (CHUB) */
789 static const struct samsung_pin_bank_data exynos9810_pin_banks2
[] __initconst
= {
790 EXYNOS850_PIN_BANK_EINTG(8, 0x000, "gph0", 0x00),
791 EXYNOS850_PIN_BANK_EINTG(5, 0x020, "gph1", 0x04),
794 /* pin banks of exynos9810 pin-controller 3 (CMGP) */
795 static const struct samsung_pin_bank_data exynos9810_pin_banks3
[] __initconst
= {
796 EXYNOS850_PIN_BANK_EINTW(1, 0x000, "gpm0", 0x00),
797 EXYNOS850_PIN_BANK_EINTW(1, 0x020, "gpm1", 0x04),
798 EXYNOS850_PIN_BANK_EINTW(1, 0x040, "gpm2", 0x08),
799 EXYNOS850_PIN_BANK_EINTW(1, 0x060, "gpm3", 0x0C),
800 EXYNOS850_PIN_BANK_EINTW(1, 0x080, "gpm4", 0x10),
801 EXYNOS850_PIN_BANK_EINTW(1, 0x0A0, "gpm5", 0x14),
802 EXYNOS850_PIN_BANK_EINTW(1, 0x0C0, "gpm6", 0x18),
803 EXYNOS850_PIN_BANK_EINTW(1, 0x0E0, "gpm7", 0x1C),
804 EXYNOS850_PIN_BANK_EINTW(1, 0x100, "gpm10", 0x20),
805 EXYNOS850_PIN_BANK_EINTW(1, 0x120, "gpm11", 0x24),
806 EXYNOS850_PIN_BANK_EINTW(1, 0x140, "gpm12", 0x28),
807 EXYNOS850_PIN_BANK_EINTW(1, 0x160, "gpm13", 0x2C),
808 EXYNOS850_PIN_BANK_EINTW(1, 0x180, "gpm14", 0x30),
809 EXYNOS850_PIN_BANK_EINTW(1, 0x1A0, "gpm15", 0x34),
810 EXYNOS850_PIN_BANK_EINTW(1, 0x1C0, "gpm16", 0x38),
811 EXYNOS850_PIN_BANK_EINTW(1, 0x1E0, "gpm17", 0x3C),
812 EXYNOS850_PIN_BANK_EINTW(1, 0x200, "gpm40", 0x40),
813 EXYNOS850_PIN_BANK_EINTW(1, 0x220, "gpm41", 0x44),
814 EXYNOS850_PIN_BANK_EINTW(1, 0x240, "gpm42", 0x48),
815 EXYNOS850_PIN_BANK_EINTW(1, 0x260, "gpm43", 0x4C),
818 /* pin banks of exynos9810 pin-controller 4 (FSYS0) */
819 static const struct samsung_pin_bank_data exynos9810_pin_banks4
[] __initconst
= {
820 EXYNOS850_PIN_BANK_EINTG(2, 0x000, "gpf0", 0x00),
823 /* pin banks of exynos9810 pin-controller 5 (FSYS1) */
824 static const struct samsung_pin_bank_data exynos9810_pin_banks5
[] __initconst
= {
825 EXYNOS850_PIN_BANK_EINTG(7, 0x000, "gpf1", 0x00),
826 EXYNOS850_PIN_BANK_EINTG(6, 0x020, "gpf2", 0x04),
829 /* pin banks of exynos9810 pin-controller 6 (PERIC0) */
830 static const struct samsung_pin_bank_data exynos9810_pin_banks6
[] __initconst
= {
831 EXYNOS850_PIN_BANK_EINTG(8, 0x000, "gpp0", 0x00),
832 EXYNOS850_PIN_BANK_EINTG(8, 0x020, "gpp1", 0x04),
833 EXYNOS850_PIN_BANK_EINTG(8, 0x040, "gpp2", 0x08),
834 EXYNOS850_PIN_BANK_EINTG(4, 0x060, "gpp3", 0x0C),
835 EXYNOS850_PIN_BANK_EINTG(8, 0x080, "gpg0", 0x10),
836 EXYNOS850_PIN_BANK_EINTG(8, 0x0A0, "gpg1", 0x14),
837 EXYNOS850_PIN_BANK_EINTG(8, 0x0C0, "gpg2", 0x18),
840 /* pin banks of exynos9810 pin-controller 7 (PERIC1) */
841 static const struct samsung_pin_bank_data exynos9810_pin_banks7
[] __initconst
= {
842 EXYNOS850_PIN_BANK_EINTG(8, 0x000, "gpp4", 0x00),
843 EXYNOS850_PIN_BANK_EINTG(8, 0x020, "gpp5", 0x04),
844 EXYNOS850_PIN_BANK_EINTG(4, 0x040, "gpp6", 0x08),
845 EXYNOS850_PIN_BANK_EINTG(8, 0x060, "gpc0", 0x0C),
846 EXYNOS850_PIN_BANK_EINTG(8, 0x080, "gpc1", 0x10),
847 EXYNOS850_PIN_BANK_EINTG(4, 0x0A0, "gpd0", 0x14),
848 EXYNOS850_PIN_BANK_EINTG(7, 0x0C0, "gpg3", 0x18),
851 /* pin banks of exynos9810 pin-controller 8 (VTS) */
852 static const struct samsung_pin_bank_data exynos9810_pin_banks8
[] __initconst
= {
853 EXYNOS850_PIN_BANK_EINTG(3, 0x000, "gpt0", 0x00),
856 static const struct samsung_pin_ctrl exynos9810_pin_ctrl
[] __initconst
= {
858 /* pin-controller instance 0 ALIVE data */
859 .pin_banks
= exynos9810_pin_banks0
,
860 .nr_banks
= ARRAY_SIZE(exynos9810_pin_banks0
),
861 .eint_wkup_init
= exynos_eint_wkup_init
,
862 .eint_gpio_init
= exynos_eint_gpio_init
,
863 .suspend
= exynos_pinctrl_suspend
,
864 .resume
= exynos_pinctrl_resume
,
866 /* pin-controller instance 1 AUD data */
867 .pin_banks
= exynos9810_pin_banks1
,
868 .nr_banks
= ARRAY_SIZE(exynos9810_pin_banks1
),
870 /* pin-controller instance 2 CHUB data */
871 .pin_banks
= exynos9810_pin_banks2
,
872 .nr_banks
= ARRAY_SIZE(exynos9810_pin_banks2
),
873 .eint_gpio_init
= exynos_eint_gpio_init
,
874 .suspend
= exynos_pinctrl_suspend
,
875 .resume
= exynos_pinctrl_resume
,
877 /* pin-controller instance 3 CMGP data */
878 .pin_banks
= exynos9810_pin_banks3
,
879 .nr_banks
= ARRAY_SIZE(exynos9810_pin_banks3
),
880 .eint_wkup_init
= exynos_eint_wkup_init
,
881 .eint_gpio_init
= exynos_eint_gpio_init
,
882 .suspend
= exynos_pinctrl_suspend
,
883 .resume
= exynos_pinctrl_resume
,
885 /* pin-controller instance 4 FSYS0 data */
886 .pin_banks
= exynos9810_pin_banks4
,
887 .nr_banks
= ARRAY_SIZE(exynos9810_pin_banks4
),
888 .eint_gpio_init
= exynos_eint_gpio_init
,
889 .suspend
= exynos_pinctrl_suspend
,
890 .resume
= exynos_pinctrl_resume
,
892 /* pin-controller instance 5 FSYS1 data */
893 .pin_banks
= exynos9810_pin_banks5
,
894 .nr_banks
= ARRAY_SIZE(exynos9810_pin_banks5
),
895 .eint_gpio_init
= exynos_eint_gpio_init
,
896 .suspend
= exynos_pinctrl_suspend
,
897 .resume
= exynos_pinctrl_resume
,
899 /* pin-controller instance 6 PERIC0 data */
900 .pin_banks
= exynos9810_pin_banks6
,
901 .nr_banks
= ARRAY_SIZE(exynos9810_pin_banks6
),
902 .eint_gpio_init
= exynos_eint_gpio_init
,
903 .suspend
= exynos_pinctrl_suspend
,
904 .resume
= exynos_pinctrl_resume
,
906 /* pin-controller instance 7 PERIC1 data */
907 .pin_banks
= exynos9810_pin_banks7
,
908 .nr_banks
= ARRAY_SIZE(exynos9810_pin_banks7
),
909 .eint_gpio_init
= exynos_eint_gpio_init
,
910 .suspend
= exynos_pinctrl_suspend
,
911 .resume
= exynos_pinctrl_resume
,
913 /* pin-controller instance 8 VTS data */
914 .pin_banks
= exynos9810_pin_banks8
,
915 .nr_banks
= ARRAY_SIZE(exynos9810_pin_banks8
),
919 const struct samsung_pinctrl_of_match_data exynos9810_of_data __initconst
= {
920 .ctrl
= exynos9810_pin_ctrl
,
921 .num_ctrl
= ARRAY_SIZE(exynos9810_pin_ctrl
),
924 /* pin banks of exynosautov9 pin-controller 0 (ALIVE) */
925 static const struct samsung_pin_bank_data exynosautov9_pin_banks0
[] __initconst
= {
926 EXYNOS850_PIN_BANK_EINTW(8, 0x000, "gpa0", 0x00),
927 EXYNOS850_PIN_BANK_EINTW(2, 0x020, "gpa1", 0x04),
928 EXYNOS850_PIN_BANK_EINTN(2, 0x040, "gpq0"),
931 /* pin banks of exynosautov9 pin-controller 1 (AUD) */
932 static const struct samsung_pin_bank_data exynosautov9_pin_banks1
[] __initconst
= {
933 EXYNOS850_PIN_BANK_EINTG(5, 0x000, "gpb0", 0x00),
934 EXYNOS850_PIN_BANK_EINTG(8, 0x020, "gpb1", 0x04),
935 EXYNOS850_PIN_BANK_EINTG(8, 0x040, "gpb2", 0x08),
936 EXYNOS850_PIN_BANK_EINTG(8, 0x060, "gpb3", 0x0C),
939 /* pin banks of exynosautov9 pin-controller 2 (FSYS0) */
940 static const struct samsung_pin_bank_data exynosautov9_pin_banks2
[] __initconst
= {
941 EXYNOS850_PIN_BANK_EINTG(6, 0x000, "gpf0", 0x00),
942 EXYNOS850_PIN_BANK_EINTG(6, 0x020, "gpf1", 0x04),
945 /* pin banks of exynosautov9 pin-controller 3 (FSYS1) */
946 static const struct samsung_pin_bank_data exynosautov9_pin_banks3
[] __initconst
= {
947 EXYNOS850_PIN_BANK_EINTG(6, 0x000, "gpf8", 0x00),
950 /* pin banks of exynosautov9 pin-controller 4 (FSYS2) */
951 static const struct samsung_pin_bank_data exynosautov9_pin_banks4
[] __initconst
= {
952 EXYNOS850_PIN_BANK_EINTG(4, 0x000, "gpf2", 0x00),
953 EXYNOS850_PIN_BANK_EINTG(8, 0x020, "gpf3", 0x04),
954 EXYNOS850_PIN_BANK_EINTG(7, 0x040, "gpf4", 0x08),
955 EXYNOS850_PIN_BANK_EINTG(8, 0x060, "gpf5", 0x0C),
956 EXYNOS850_PIN_BANK_EINTG(7, 0x080, "gpf6", 0x10),
959 /* pin banks of exynosautov9 pin-controller 5 (PERIC0) */
960 static const struct samsung_pin_bank_data exynosautov9_pin_banks5
[] __initconst
= {
961 EXYNOS850_PIN_BANK_EINTG(8, 0x000, "gpp0", 0x00),
962 EXYNOS850_PIN_BANK_EINTG(8, 0x020, "gpp1", 0x04),
963 EXYNOS850_PIN_BANK_EINTG(8, 0x040, "gpp2", 0x08),
964 EXYNOS850_PIN_BANK_EINTG(5, 0x060, "gpg0", 0x0C),
967 /* pin banks of exynosautov9 pin-controller 6 (PERIC1) */
968 static const struct samsung_pin_bank_data exynosautov9_pin_banks6
[] __initconst
= {
969 EXYNOS850_PIN_BANK_EINTG(8, 0x000, "gpp3", 0x00),
970 EXYNOS850_PIN_BANK_EINTG(8, 0x020, "gpp4", 0x04),
971 EXYNOS850_PIN_BANK_EINTG(8, 0x040, "gpp5", 0x08),
972 EXYNOS850_PIN_BANK_EINTG(8, 0x060, "gpg1", 0x0C),
973 EXYNOS850_PIN_BANK_EINTG(8, 0x080, "gpg2", 0x10),
974 EXYNOS850_PIN_BANK_EINTG(4, 0x0A0, "gpg3", 0x14),
977 static const struct samsung_pin_ctrl exynosautov9_pin_ctrl
[] __initconst
= {
979 /* pin-controller instance 0 ALIVE data */
980 .pin_banks
= exynosautov9_pin_banks0
,
981 .nr_banks
= ARRAY_SIZE(exynosautov9_pin_banks0
),
982 .eint_wkup_init
= exynos_eint_wkup_init
,
983 .suspend
= exynos_pinctrl_suspend
,
984 .resume
= exynos_pinctrl_resume
,
986 /* pin-controller instance 1 AUD data */
987 .pin_banks
= exynosautov9_pin_banks1
,
988 .nr_banks
= ARRAY_SIZE(exynosautov9_pin_banks1
),
990 /* pin-controller instance 2 FSYS0 data */
991 .pin_banks
= exynosautov9_pin_banks2
,
992 .nr_banks
= ARRAY_SIZE(exynosautov9_pin_banks2
),
993 .eint_gpio_init
= exynos_eint_gpio_init
,
994 .suspend
= exynos_pinctrl_suspend
,
995 .resume
= exynos_pinctrl_resume
,
997 /* pin-controller instance 3 FSYS1 data */
998 .pin_banks
= exynosautov9_pin_banks3
,
999 .nr_banks
= ARRAY_SIZE(exynosautov9_pin_banks3
),
1000 .eint_gpio_init
= exynos_eint_gpio_init
,
1001 .suspend
= exynos_pinctrl_suspend
,
1002 .resume
= exynos_pinctrl_resume
,
1004 /* pin-controller instance 4 FSYS2 data */
1005 .pin_banks
= exynosautov9_pin_banks4
,
1006 .nr_banks
= ARRAY_SIZE(exynosautov9_pin_banks4
),
1007 .eint_gpio_init
= exynos_eint_gpio_init
,
1008 .suspend
= exynos_pinctrl_suspend
,
1009 .resume
= exynos_pinctrl_resume
,
1011 /* pin-controller instance 5 PERIC0 data */
1012 .pin_banks
= exynosautov9_pin_banks5
,
1013 .nr_banks
= ARRAY_SIZE(exynosautov9_pin_banks5
),
1014 .eint_gpio_init
= exynos_eint_gpio_init
,
1015 .suspend
= exynos_pinctrl_suspend
,
1016 .resume
= exynos_pinctrl_resume
,
1018 /* pin-controller instance 6 PERIC1 data */
1019 .pin_banks
= exynosautov9_pin_banks6
,
1020 .nr_banks
= ARRAY_SIZE(exynosautov9_pin_banks6
),
1021 .eint_gpio_init
= exynos_eint_gpio_init
,
1022 .suspend
= exynos_pinctrl_suspend
,
1023 .resume
= exynos_pinctrl_resume
,
1027 const struct samsung_pinctrl_of_match_data exynosautov9_of_data __initconst
= {
1028 .ctrl
= exynosautov9_pin_ctrl
,
1029 .num_ctrl
= ARRAY_SIZE(exynosautov9_pin_ctrl
),
1032 /* pin banks of exynosautov920 pin-controller 0 (ALIVE) */
1033 static const struct samsung_pin_bank_data exynosautov920_pin_banks0
[] = {
1034 EXYNOSV920_PIN_BANK_EINTW(8, 0x0000, "gpa0", 0x18, 0x24, 0x28),
1035 EXYNOSV920_PIN_BANK_EINTW(2, 0x1000, "gpa1", 0x18, 0x20, 0x24),
1036 EXYNOS850_PIN_BANK_EINTN(2, 0x2000, "gpq0"),
1039 /* pin banks of exynosautov920 pin-controller 1 (AUD) */
1040 static const struct samsung_pin_bank_data exynosautov920_pin_banks1
[] = {
1041 EXYNOSV920_PIN_BANK_EINTG(7, 0x0000, "gpb0", 0x18, 0x24, 0x28),
1042 EXYNOSV920_PIN_BANK_EINTG(6, 0x1000, "gpb1", 0x18, 0x24, 0x28),
1043 EXYNOSV920_PIN_BANK_EINTG(8, 0x2000, "gpb2", 0x18, 0x24, 0x28),
1044 EXYNOSV920_PIN_BANK_EINTG(8, 0x3000, "gpb3", 0x18, 0x24, 0x28),
1045 EXYNOSV920_PIN_BANK_EINTG(8, 0x4000, "gpb4", 0x18, 0x24, 0x28),
1046 EXYNOSV920_PIN_BANK_EINTG(5, 0x5000, "gpb5", 0x18, 0x24, 0x28),
1047 EXYNOSV920_PIN_BANK_EINTG(5, 0x6000, "gpb6", 0x18, 0x24, 0x28),
1050 /* pin banks of exynosautov920 pin-controller 2 (HSI0) */
1051 static const struct samsung_pin_bank_data exynosautov920_pin_banks2
[] = {
1052 EXYNOSV920_PIN_BANK_EINTG(6, 0x0000, "gph0", 0x18, 0x24, 0x28),
1053 EXYNOSV920_PIN_BANK_EINTG(2, 0x1000, "gph1", 0x18, 0x20, 0x24),
1056 /* pin banks of exynosautov920 pin-controller 3 (HSI1) */
1057 static const struct samsung_pin_bank_data exynosautov920_pin_banks3
[] = {
1058 EXYNOSV920_PIN_BANK_EINTG(7, 0x000, "gph8", 0x18, 0x24, 0x28),
1061 /* pin banks of exynosautov920 pin-controller 4 (HSI2) */
1062 static const struct samsung_pin_bank_data exynosautov920_pin_banks4
[] = {
1063 EXYNOSV920_PIN_BANK_EINTG(8, 0x0000, "gph3", 0x18, 0x24, 0x28),
1064 EXYNOSV920_PIN_BANK_EINTG(7, 0x1000, "gph4", 0x18, 0x24, 0x28),
1065 EXYNOSV920_PIN_BANK_EINTG(8, 0x2000, "gph5", 0x18, 0x24, 0x28),
1066 EXYNOSV920_PIN_BANK_EINTG(7, 0x3000, "gph6", 0x18, 0x24, 0x28),
1069 /* pin banks of exynosautov920 pin-controller 5 (HSI2UFS) */
1070 static const struct samsung_pin_bank_data exynosautov920_pin_banks5
[] = {
1071 EXYNOSV920_PIN_BANK_EINTG(4, 0x000, "gph2", 0x18, 0x20, 0x24),
1074 /* pin banks of exynosautov920 pin-controller 6 (PERIC0) */
1075 static const struct samsung_pin_bank_data exynosautov920_pin_banks6
[] = {
1076 EXYNOSV920_PIN_BANK_EINTG(8, 0x0000, "gpp0", 0x18, 0x24, 0x28),
1077 EXYNOSV920_PIN_BANK_EINTG(8, 0x1000, "gpp1", 0x18, 0x24, 0x28),
1078 EXYNOSV920_PIN_BANK_EINTG(8, 0x2000, "gpp2", 0x18, 0x24, 0x28),
1079 EXYNOSV920_PIN_BANK_EINTG(5, 0x3000, "gpg0", 0x18, 0x24, 0x28),
1080 EXYNOSV920_PIN_BANK_EINTG(8, 0x4000, "gpp3", 0x18, 0x24, 0x28),
1081 EXYNOSV920_PIN_BANK_EINTG(4, 0x5000, "gpp4", 0x18, 0x20, 0x24),
1082 EXYNOSV920_PIN_BANK_EINTG(4, 0x6000, "gpg2", 0x18, 0x20, 0x24),
1083 EXYNOSV920_PIN_BANK_EINTG(4, 0x7000, "gpg5", 0x18, 0x20, 0x24),
1084 EXYNOSV920_PIN_BANK_EINTG(3, 0x8000, "gpg3", 0x18, 0x20, 0x24),
1085 EXYNOSV920_PIN_BANK_EINTG(5, 0x9000, "gpg4", 0x18, 0x24, 0x28),
1088 /* pin banks of exynosautov920 pin-controller 7 (PERIC1) */
1089 static const struct samsung_pin_bank_data exynosautov920_pin_banks7
[] = {
1090 EXYNOSV920_PIN_BANK_EINTG(8, 0x0000, "gpp5", 0x18, 0x24, 0x28),
1091 EXYNOSV920_PIN_BANK_EINTG(5, 0x1000, "gpp6", 0x18, 0x24, 0x28),
1092 EXYNOSV920_PIN_BANK_EINTG(4, 0x2000, "gpp10", 0x18, 0x20, 0x24),
1093 EXYNOSV920_PIN_BANK_EINTG(8, 0x3000, "gpp7", 0x18, 0x24, 0x28),
1094 EXYNOSV920_PIN_BANK_EINTG(4, 0x4000, "gpp8", 0x18, 0x20, 0x24),
1095 EXYNOSV920_PIN_BANK_EINTG(4, 0x5000, "gpp11", 0x18, 0x20, 0x24),
1096 EXYNOSV920_PIN_BANK_EINTG(4, 0x6000, "gpp9", 0x18, 0x20, 0x24),
1097 EXYNOSV920_PIN_BANK_EINTG(4, 0x7000, "gpp12", 0x18, 0x20, 0x24),
1098 EXYNOSV920_PIN_BANK_EINTG(8, 0x8000, "gpg1", 0x18, 0x24, 0x28),
1101 static const struct samsung_retention_data exynosautov920_retention_data __initconst
= {
1105 .refcnt
= &exynos_shared_retention_refcnt
,
1106 .init
= exynos_retention_init
,
1109 static const struct samsung_pin_ctrl exynosautov920_pin_ctrl
[] = {
1111 /* pin-controller instance 0 ALIVE data */
1112 .pin_banks
= exynosautov920_pin_banks0
,
1113 .nr_banks
= ARRAY_SIZE(exynosautov920_pin_banks0
),
1114 .eint_wkup_init
= exynos_eint_wkup_init
,
1115 .suspend
= exynos_pinctrl_suspend
,
1116 .resume
= exynos_pinctrl_resume
,
1117 .retention_data
= &exynosautov920_retention_data
,
1119 /* pin-controller instance 1 AUD data */
1120 .pin_banks
= exynosautov920_pin_banks1
,
1121 .nr_banks
= ARRAY_SIZE(exynosautov920_pin_banks1
),
1123 /* pin-controller instance 2 HSI0 data */
1124 .pin_banks
= exynosautov920_pin_banks2
,
1125 .nr_banks
= ARRAY_SIZE(exynosautov920_pin_banks2
),
1126 .eint_gpio_init
= exynos_eint_gpio_init
,
1127 .suspend
= exynos_pinctrl_suspend
,
1128 .resume
= exynos_pinctrl_resume
,
1130 /* pin-controller instance 3 HSI1 data */
1131 .pin_banks
= exynosautov920_pin_banks3
,
1132 .nr_banks
= ARRAY_SIZE(exynosautov920_pin_banks3
),
1133 .eint_gpio_init
= exynos_eint_gpio_init
,
1134 .suspend
= exynos_pinctrl_suspend
,
1135 .resume
= exynos_pinctrl_resume
,
1137 /* pin-controller instance 4 HSI2 data */
1138 .pin_banks
= exynosautov920_pin_banks4
,
1139 .nr_banks
= ARRAY_SIZE(exynosautov920_pin_banks4
),
1140 .eint_gpio_init
= exynos_eint_gpio_init
,
1141 .suspend
= exynos_pinctrl_suspend
,
1142 .resume
= exynos_pinctrl_resume
,
1144 /* pin-controller instance 5 HSI2UFS data */
1145 .pin_banks
= exynosautov920_pin_banks5
,
1146 .nr_banks
= ARRAY_SIZE(exynosautov920_pin_banks5
),
1147 .eint_gpio_init
= exynos_eint_gpio_init
,
1148 .suspend
= exynos_pinctrl_suspend
,
1149 .resume
= exynos_pinctrl_resume
,
1151 /* pin-controller instance 6 PERIC0 data */
1152 .pin_banks
= exynosautov920_pin_banks6
,
1153 .nr_banks
= ARRAY_SIZE(exynosautov920_pin_banks6
),
1154 .eint_gpio_init
= exynos_eint_gpio_init
,
1155 .suspend
= exynos_pinctrl_suspend
,
1156 .resume
= exynos_pinctrl_resume
,
1158 /* pin-controller instance 7 PERIC1 data */
1159 .pin_banks
= exynosautov920_pin_banks7
,
1160 .nr_banks
= ARRAY_SIZE(exynosautov920_pin_banks7
),
1161 .eint_gpio_init
= exynos_eint_gpio_init
,
1162 .suspend
= exynos_pinctrl_suspend
,
1163 .resume
= exynos_pinctrl_resume
,
1167 const struct samsung_pinctrl_of_match_data exynosautov920_of_data __initconst
= {
1168 .ctrl
= exynosautov920_pin_ctrl
,
1169 .num_ctrl
= ARRAY_SIZE(exynosautov920_pin_ctrl
),
1172 /* pin banks of exynos8895 pin-controller 0 (ALIVE) */
1173 static const struct samsung_pin_bank_data exynos8895_pin_banks0
[] __initconst
= {
1174 EXYNOS_PIN_BANK_EINTW(8, 0x020, "gpa0", 0x00),
1175 EXYNOS_PIN_BANK_EINTW(8, 0x040, "gpa1", 0x04),
1176 EXYNOS_PIN_BANK_EINTW(8, 0x060, "gpa2", 0x08),
1177 EXYNOS_PIN_BANK_EINTW(8, 0x080, "gpa3", 0x0c),
1178 EXYNOS_PIN_BANK_EINTW(7, 0x0a0, "gpa4", 0x24),
1181 /* pin banks of exynos8895 pin-controller 1 (ABOX) */
1182 static const struct samsung_pin_bank_data exynos8895_pin_banks1
[] __initconst
= {
1183 EXYNOS_PIN_BANK_EINTG(8, 0x000, "gph0", 0x00),
1184 EXYNOS_PIN_BANK_EINTG(7, 0x020, "gph1", 0x04),
1185 EXYNOS_PIN_BANK_EINTG(4, 0x040, "gph3", 0x08),
1188 /* pin banks of exynos8895 pin-controller 2 (VTS) */
1189 static const struct samsung_pin_bank_data exynos8895_pin_banks2
[] __initconst
= {
1190 EXYNOS_PIN_BANK_EINTG(3, 0x000, "gph2", 0x00),
1193 /* pin banks of exynos8895 pin-controller 3 (FSYS0) */
1194 static const struct samsung_pin_bank_data exynos8895_pin_banks3
[] __initconst
= {
1195 EXYNOS8895_PIN_BANK_EINTG(3, 0x000, "gpi0", 0x00),
1196 EXYNOS8895_PIN_BANK_EINTG(8, 0x020, "gpi1", 0x04),
1199 /* pin banks of exynos8895 pin-controller 4 (FSYS1) */
1200 static const struct samsung_pin_bank_data exynos8895_pin_banks4
[] __initconst
= {
1201 EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpj1", 0x00),
1202 EXYNOS_PIN_BANK_EINTG(7, 0x020, "gpj0", 0x04),
1205 /* pin banks of exynos8895 pin-controller 5 (BUSC) */
1206 static const struct samsung_pin_bank_data exynos8895_pin_banks5
[] __initconst
= {
1207 EXYNOS_PIN_BANK_EINTG(2, 0x000, "gpb2", 0x00),
1210 /* pin banks of exynos8895 pin-controller 6 (PERIC0) */
1211 static const struct samsung_pin_bank_data exynos8895_pin_banks6
[] __initconst
= {
1212 EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpd0", 0x00),
1213 EXYNOS_PIN_BANK_EINTG(8, 0x020, "gpd1", 0x04),
1214 EXYNOS_PIN_BANK_EINTG(4, 0x040, "gpd2", 0x08),
1215 EXYNOS_PIN_BANK_EINTG(5, 0x060, "gpd3", 0x0C),
1216 EXYNOS_PIN_BANK_EINTG(4, 0x080, "gpb1", 0x10),
1217 EXYNOS_PIN_BANK_EINTG(8, 0x0a0, "gpe7", 0x14),
1218 EXYNOS_PIN_BANK_EINTG(8, 0x0c0, "gpf1", 0x18),
1221 /* pin banks of exynos8895 pin-controller 7 (PERIC1) */
1222 static const struct samsung_pin_bank_data exynos8895_pin_banks7
[] __initconst
= {
1223 EXYNOS_PIN_BANK_EINTG(3, 0x000, "gpb0", 0x00),
1224 EXYNOS_PIN_BANK_EINTG(5, 0x020, "gpc0", 0x04),
1225 EXYNOS_PIN_BANK_EINTG(5, 0x040, "gpc1", 0x08),
1226 EXYNOS_PIN_BANK_EINTG(8, 0x060, "gpc2", 0x0C),
1227 EXYNOS_PIN_BANK_EINTG(8, 0x080, "gpc3", 0x10),
1228 EXYNOS_PIN_BANK_EINTG(4, 0x0a0, "gpk0", 0x14),
1229 EXYNOS_PIN_BANK_EINTG(8, 0x0c0, "gpe5", 0x18),
1230 EXYNOS_PIN_BANK_EINTG(8, 0x0e0, "gpe6", 0x1C),
1231 EXYNOS_PIN_BANK_EINTG(8, 0x100, "gpe2", 0x20),
1232 EXYNOS_PIN_BANK_EINTG(8, 0x120, "gpe3", 0x24),
1233 EXYNOS_PIN_BANK_EINTG(8, 0x140, "gpe4", 0x28),
1234 EXYNOS_PIN_BANK_EINTG(4, 0x160, "gpf0", 0x2C),
1235 EXYNOS_PIN_BANK_EINTG(8, 0x180, "gpe1", 0x30),
1236 EXYNOS_PIN_BANK_EINTG(2, 0x1a0, "gpg0", 0x34),
1239 static const struct samsung_pin_ctrl exynos8895_pin_ctrl
[] __initconst
= {
1241 /* pin-controller instance 0 ALIVE data */
1242 .pin_banks
= exynos8895_pin_banks0
,
1243 .nr_banks
= ARRAY_SIZE(exynos8895_pin_banks0
),
1244 .eint_gpio_init
= exynos_eint_gpio_init
,
1245 .eint_wkup_init
= exynos_eint_wkup_init
,
1246 .suspend
= exynos_pinctrl_suspend
,
1247 .resume
= exynos_pinctrl_resume
,
1249 /* pin-controller instance 1 ABOX data */
1250 .pin_banks
= exynos8895_pin_banks1
,
1251 .nr_banks
= ARRAY_SIZE(exynos8895_pin_banks1
),
1253 /* pin-controller instance 2 VTS data */
1254 .pin_banks
= exynos8895_pin_banks2
,
1255 .nr_banks
= ARRAY_SIZE(exynos8895_pin_banks2
),
1256 .eint_gpio_init
= exynos_eint_gpio_init
,
1258 /* pin-controller instance 3 FSYS0 data */
1259 .pin_banks
= exynos8895_pin_banks3
,
1260 .nr_banks
= ARRAY_SIZE(exynos8895_pin_banks3
),
1261 .eint_gpio_init
= exynos_eint_gpio_init
,
1262 .suspend
= exynos_pinctrl_suspend
,
1263 .resume
= exynos_pinctrl_resume
,
1265 /* pin-controller instance 4 FSYS1 data */
1266 .pin_banks
= exynos8895_pin_banks4
,
1267 .nr_banks
= ARRAY_SIZE(exynos8895_pin_banks4
),
1268 .eint_gpio_init
= exynos_eint_gpio_init
,
1269 .suspend
= exynos_pinctrl_suspend
,
1270 .resume
= exynos_pinctrl_resume
,
1272 /* pin-controller instance 5 BUSC data */
1273 .pin_banks
= exynos8895_pin_banks5
,
1274 .nr_banks
= ARRAY_SIZE(exynos8895_pin_banks5
),
1275 .eint_gpio_init
= exynos_eint_gpio_init
,
1276 .suspend
= exynos_pinctrl_suspend
,
1277 .resume
= exynos_pinctrl_resume
,
1279 /* pin-controller instance 6 PERIC0 data */
1280 .pin_banks
= exynos8895_pin_banks6
,
1281 .nr_banks
= ARRAY_SIZE(exynos8895_pin_banks6
),
1282 .eint_gpio_init
= exynos_eint_gpio_init
,
1283 .suspend
= exynos_pinctrl_suspend
,
1284 .resume
= exynos_pinctrl_resume
,
1286 /* pin-controller instance 7 PERIC1 data */
1287 .pin_banks
= exynos8895_pin_banks7
,
1288 .nr_banks
= ARRAY_SIZE(exynos8895_pin_banks7
),
1289 .eint_gpio_init
= exynos_eint_gpio_init
,
1290 .suspend
= exynos_pinctrl_suspend
,
1291 .resume
= exynos_pinctrl_resume
,
1295 const struct samsung_pinctrl_of_match_data exynos8895_of_data __initconst
= {
1296 .ctrl
= exynos8895_pin_ctrl
,
1297 .num_ctrl
= ARRAY_SIZE(exynos8895_pin_ctrl
),
1301 * Pinctrl driver data for Tesla FSD SoC. FSD SoC includes three
1302 * gpio/pin-mux/pinconfig controllers.
1305 /* pin banks of FSD pin-controller 0 (FSYS) */
1306 static const struct samsung_pin_bank_data fsd_pin_banks0
[] __initconst
= {
1307 EXYNOS850_PIN_BANK_EINTG(7, 0x00, "gpf0", 0x00),
1308 EXYNOS850_PIN_BANK_EINTG(8, 0x20, "gpf1", 0x04),
1309 EXYNOS850_PIN_BANK_EINTG(3, 0x40, "gpf6", 0x08),
1310 EXYNOS850_PIN_BANK_EINTG(2, 0x60, "gpf4", 0x0c),
1311 EXYNOS850_PIN_BANK_EINTG(6, 0x80, "gpf5", 0x10),
1314 /* pin banks of FSD pin-controller 1 (PERIC) */
1315 static const struct samsung_pin_bank_data fsd_pin_banks1
[] __initconst
= {
1316 EXYNOS850_PIN_BANK_EINTG(4, 0x000, "gpc8", 0x00),
1317 EXYNOS850_PIN_BANK_EINTG(7, 0x020, "gpf2", 0x04),
1318 EXYNOS850_PIN_BANK_EINTG(8, 0x040, "gpf3", 0x08),
1319 EXYNOS850_PIN_BANK_EINTG(8, 0x060, "gpd0", 0x0c),
1320 EXYNOS850_PIN_BANK_EINTG(8, 0x080, "gpb0", 0x10),
1321 EXYNOS850_PIN_BANK_EINTG(8, 0x0a0, "gpb1", 0x14),
1322 EXYNOS850_PIN_BANK_EINTG(8, 0x0c0, "gpb4", 0x18),
1323 EXYNOS850_PIN_BANK_EINTG(4, 0x0e0, "gpb5", 0x1c),
1324 EXYNOS850_PIN_BANK_EINTG(8, 0x100, "gpb6", 0x20),
1325 EXYNOS850_PIN_BANK_EINTG(8, 0x120, "gpb7", 0x24),
1326 EXYNOS850_PIN_BANK_EINTG(5, 0x140, "gpd1", 0x28),
1327 EXYNOS850_PIN_BANK_EINTG(5, 0x160, "gpd2", 0x2c),
1328 EXYNOS850_PIN_BANK_EINTG(7, 0x180, "gpd3", 0x30),
1329 EXYNOS850_PIN_BANK_EINTG(8, 0x1a0, "gpg0", 0x34),
1330 EXYNOS850_PIN_BANK_EINTG(8, 0x1c0, "gpg1", 0x38),
1331 EXYNOS850_PIN_BANK_EINTG(8, 0x1e0, "gpg2", 0x3c),
1332 EXYNOS850_PIN_BANK_EINTG(8, 0x200, "gpg3", 0x40),
1333 EXYNOS850_PIN_BANK_EINTG(8, 0x220, "gpg4", 0x44),
1334 EXYNOS850_PIN_BANK_EINTG(8, 0x240, "gpg5", 0x48),
1335 EXYNOS850_PIN_BANK_EINTG(8, 0x260, "gpg6", 0x4c),
1336 EXYNOS850_PIN_BANK_EINTG(8, 0x280, "gpg7", 0x50),
1339 /* pin banks of FSD pin-controller 2 (PMU) */
1340 static const struct samsung_pin_bank_data fsd_pin_banks2
[] __initconst
= {
1341 EXYNOS850_PIN_BANK_EINTN(3, 0x00, "gpq0"),
1344 static const struct samsung_pin_ctrl fsd_pin_ctrl
[] __initconst
= {
1346 /* pin-controller instance 0 FSYS0 data */
1347 .pin_banks
= fsd_pin_banks0
,
1348 .nr_banks
= ARRAY_SIZE(fsd_pin_banks0
),
1349 .eint_gpio_init
= exynos_eint_gpio_init
,
1350 .suspend
= exynos_pinctrl_suspend
,
1351 .resume
= exynos_pinctrl_resume
,
1353 /* pin-controller instance 1 PERIC data */
1354 .pin_banks
= fsd_pin_banks1
,
1355 .nr_banks
= ARRAY_SIZE(fsd_pin_banks1
),
1356 .eint_gpio_init
= exynos_eint_gpio_init
,
1357 .suspend
= exynos_pinctrl_suspend
,
1358 .resume
= exynos_pinctrl_resume
,
1360 /* pin-controller instance 2 PMU data */
1361 .pin_banks
= fsd_pin_banks2
,
1362 .nr_banks
= ARRAY_SIZE(fsd_pin_banks2
),
1366 const struct samsung_pinctrl_of_match_data fsd_of_data __initconst
= {
1367 .ctrl
= fsd_pin_ctrl
,
1368 .num_ctrl
= ARRAY_SIZE(fsd_pin_ctrl
),
1371 /* pin banks of gs101 pin-controller (ALIVE) */
1372 static const struct samsung_pin_bank_data gs101_pin_alive
[] = {
1373 EXYNOS850_PIN_BANK_EINTW(8, 0x0, "gpa0", 0x00),
1374 EXYNOS850_PIN_BANK_EINTW(7, 0x20, "gpa1", 0x04),
1375 EXYNOS850_PIN_BANK_EINTW(5, 0x40, "gpa2", 0x08),
1376 EXYNOS850_PIN_BANK_EINTW(4, 0x60, "gpa3", 0x0c),
1377 EXYNOS850_PIN_BANK_EINTW(4, 0x80, "gpa4", 0x10),
1378 EXYNOS850_PIN_BANK_EINTW(7, 0xa0, "gpa5", 0x14),
1379 EXYNOS850_PIN_BANK_EINTW(8, 0xc0, "gpa9", 0x18),
1380 EXYNOS850_PIN_BANK_EINTW(2, 0xe0, "gpa10", 0x1c),
1383 /* pin banks of gs101 pin-controller (FAR_ALIVE) */
1384 static const struct samsung_pin_bank_data gs101_pin_far_alive
[] = {
1385 EXYNOS850_PIN_BANK_EINTW(8, 0x0, "gpa6", 0x00),
1386 EXYNOS850_PIN_BANK_EINTW(4, 0x20, "gpa7", 0x04),
1387 EXYNOS850_PIN_BANK_EINTW(8, 0x40, "gpa8", 0x08),
1388 EXYNOS850_PIN_BANK_EINTW(2, 0x60, "gpa11", 0x0c),
1391 /* pin banks of gs101 pin-controller (GSACORE) */
1392 static const struct samsung_pin_bank_data gs101_pin_gsacore
[] = {
1393 EXYNOS850_PIN_BANK_EINTG(2, 0x0, "gps0", 0x00),
1394 EXYNOS850_PIN_BANK_EINTG(8, 0x20, "gps1", 0x04),
1395 EXYNOS850_PIN_BANK_EINTG(3, 0x40, "gps2", 0x08),
1398 /* pin banks of gs101 pin-controller (GSACTRL) */
1399 static const struct samsung_pin_bank_data gs101_pin_gsactrl
[] = {
1400 EXYNOS850_PIN_BANK_EINTW(6, 0x0, "gps3", 0x00),
1403 /* pin banks of gs101 pin-controller (PERIC0) */
1404 static const struct samsung_pin_bank_data gs101_pin_peric0
[] = {
1405 EXYNOS850_PIN_BANK_EINTG(5, 0x0, "gpp0", 0x00),
1406 EXYNOS850_PIN_BANK_EINTG(4, 0x20, "gpp1", 0x04),
1407 EXYNOS850_PIN_BANK_EINTG(4, 0x40, "gpp2", 0x08),
1408 EXYNOS850_PIN_BANK_EINTG(2, 0x60, "gpp3", 0x0c),
1409 EXYNOS850_PIN_BANK_EINTG(4, 0x80, "gpp4", 0x10),
1410 EXYNOS850_PIN_BANK_EINTG(2, 0xa0, "gpp5", 0x14),
1411 EXYNOS850_PIN_BANK_EINTG(4, 0xc0, "gpp6", 0x18),
1412 EXYNOS850_PIN_BANK_EINTG(2, 0xe0, "gpp7", 0x1c),
1413 EXYNOS850_PIN_BANK_EINTG(4, 0x100, "gpp8", 0x20),
1414 EXYNOS850_PIN_BANK_EINTG(2, 0x120, "gpp9", 0x24),
1415 EXYNOS850_PIN_BANK_EINTG(4, 0x140, "gpp10", 0x28),
1416 EXYNOS850_PIN_BANK_EINTG(2, 0x160, "gpp11", 0x2c),
1417 EXYNOS850_PIN_BANK_EINTG(4, 0x180, "gpp12", 0x30),
1418 EXYNOS850_PIN_BANK_EINTG(2, 0x1a0, "gpp13", 0x34),
1419 EXYNOS850_PIN_BANK_EINTG(4, 0x1c0, "gpp14", 0x38),
1420 EXYNOS850_PIN_BANK_EINTG(2, 0x1e0, "gpp15", 0x3c),
1421 EXYNOS850_PIN_BANK_EINTG(4, 0x200, "gpp16", 0x40),
1422 EXYNOS850_PIN_BANK_EINTG(2, 0x220, "gpp17", 0x44),
1423 EXYNOS850_PIN_BANK_EINTG(4, 0x240, "gpp18", 0x48),
1424 EXYNOS850_PIN_BANK_EINTG(4, 0x260, "gpp19", 0x4c),
1427 /* pin banks of gs101 pin-controller (PERIC1) */
1428 static const struct samsung_pin_bank_data gs101_pin_peric1
[] = {
1429 EXYNOS850_PIN_BANK_EINTG(8, 0x0, "gpp20", 0x00),
1430 EXYNOS850_PIN_BANK_EINTG(4, 0x20, "gpp21", 0x04),
1431 EXYNOS850_PIN_BANK_EINTG(2, 0x40, "gpp22", 0x08),
1432 EXYNOS850_PIN_BANK_EINTG(8, 0x60, "gpp23", 0x0c),
1433 EXYNOS850_PIN_BANK_EINTG(4, 0x80, "gpp24", 0x10),
1434 EXYNOS850_PIN_BANK_EINTG(4, 0xa0, "gpp25", 0x14),
1435 EXYNOS850_PIN_BANK_EINTG(5, 0xc0, "gpp26", 0x18),
1436 EXYNOS850_PIN_BANK_EINTG(4, 0xe0, "gpp27", 0x1c),
1439 /* pin banks of gs101 pin-controller (HSI1) */
1440 static const struct samsung_pin_bank_data gs101_pin_hsi1
[] = {
1441 EXYNOS850_PIN_BANK_EINTG(6, 0x0, "gph0", 0x00),
1442 EXYNOS850_PIN_BANK_EINTG(7, 0x20, "gph1", 0x04),
1445 /* pin banks of gs101 pin-controller (HSI2) */
1446 static const struct samsung_pin_bank_data gs101_pin_hsi2
[] = {
1447 EXYNOS850_PIN_BANK_EINTG(6, 0x0, "gph2", 0x00),
1448 EXYNOS850_PIN_BANK_EINTG(2, 0x20, "gph3", 0x04),
1449 EXYNOS850_PIN_BANK_EINTG(6, 0x40, "gph4", 0x08),
1452 static const struct samsung_pin_ctrl gs101_pin_ctrl
[] __initconst
= {
1454 /* pin banks of gs101 pin-controller (ALIVE) */
1455 .pin_banks
= gs101_pin_alive
,
1456 .nr_banks
= ARRAY_SIZE(gs101_pin_alive
),
1457 .eint_wkup_init
= exynos_eint_wkup_init
,
1458 .suspend
= exynos_pinctrl_suspend
,
1459 .resume
= exynos_pinctrl_resume
,
1461 /* pin banks of gs101 pin-controller (FAR_ALIVE) */
1462 .pin_banks
= gs101_pin_far_alive
,
1463 .nr_banks
= ARRAY_SIZE(gs101_pin_far_alive
),
1464 .eint_wkup_init
= exynos_eint_wkup_init
,
1465 .suspend
= exynos_pinctrl_suspend
,
1466 .resume
= exynos_pinctrl_resume
,
1468 /* pin banks of gs101 pin-controller (GSACORE) */
1469 .pin_banks
= gs101_pin_gsacore
,
1470 .nr_banks
= ARRAY_SIZE(gs101_pin_gsacore
),
1472 /* pin banks of gs101 pin-controller (GSACTRL) */
1473 .pin_banks
= gs101_pin_gsactrl
,
1474 .nr_banks
= ARRAY_SIZE(gs101_pin_gsactrl
),
1476 /* pin banks of gs101 pin-controller (PERIC0) */
1477 .pin_banks
= gs101_pin_peric0
,
1478 .nr_banks
= ARRAY_SIZE(gs101_pin_peric0
),
1479 .eint_gpio_init
= exynos_eint_gpio_init
,
1480 .suspend
= exynos_pinctrl_suspend
,
1481 .resume
= exynos_pinctrl_resume
,
1483 /* pin banks of gs101 pin-controller (PERIC1) */
1484 .pin_banks
= gs101_pin_peric1
,
1485 .nr_banks
= ARRAY_SIZE(gs101_pin_peric1
),
1486 .eint_gpio_init
= exynos_eint_gpio_init
,
1487 .suspend
= exynos_pinctrl_suspend
,
1488 .resume
= exynos_pinctrl_resume
,
1490 /* pin banks of gs101 pin-controller (HSI1) */
1491 .pin_banks
= gs101_pin_hsi1
,
1492 .nr_banks
= ARRAY_SIZE(gs101_pin_hsi1
),
1493 .eint_gpio_init
= exynos_eint_gpio_init
,
1494 .suspend
= exynos_pinctrl_suspend
,
1495 .resume
= exynos_pinctrl_resume
,
1497 /* pin banks of gs101 pin-controller (HSI2) */
1498 .pin_banks
= gs101_pin_hsi2
,
1499 .nr_banks
= ARRAY_SIZE(gs101_pin_hsi2
),
1500 .eint_gpio_init
= exynos_eint_gpio_init
,
1501 .suspend
= exynos_pinctrl_suspend
,
1502 .resume
= exynos_pinctrl_resume
,
1506 const struct samsung_pinctrl_of_match_data gs101_of_data __initconst
= {
1507 .ctrl
= gs101_pin_ctrl
,
1508 .num_ctrl
= ARRAY_SIZE(gs101_pin_ctrl
),