xref: /OK3568_Linux_fs/kernel/drivers/pinctrl/samsung/pinctrl-exynos-arm64.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0+
2*4882a593Smuzhiyun //
3*4882a593Smuzhiyun // Exynos ARMv8 specific support for Samsung pinctrl/gpiolib driver
4*4882a593Smuzhiyun // with eint support.
5*4882a593Smuzhiyun //
6*4882a593Smuzhiyun // Copyright (c) 2012 Samsung Electronics Co., Ltd.
7*4882a593Smuzhiyun //		http://www.samsung.com
8*4882a593Smuzhiyun // Copyright (c) 2012 Linaro Ltd
9*4882a593Smuzhiyun //		http://www.linaro.org
10*4882a593Smuzhiyun // Copyright (c) 2017 Krzysztof Kozlowski <krzk@kernel.org>
11*4882a593Smuzhiyun //
12*4882a593Smuzhiyun // This file contains the Samsung Exynos specific information required by the
13*4882a593Smuzhiyun // the Samsung pinctrl/gpiolib driver. It also includes the implementation of
14*4882a593Smuzhiyun // external gpio and wakeup interrupt support.
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun #include <linux/slab.h>
17*4882a593Smuzhiyun #include <linux/soc/samsung/exynos-regs-pmu.h>
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun #include "pinctrl-samsung.h"
20*4882a593Smuzhiyun #include "pinctrl-exynos.h"
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun static const struct samsung_pin_bank_type bank_type_off = {
23*4882a593Smuzhiyun 	.fld_width = { 4, 1, 2, 2, 2, 2, },
24*4882a593Smuzhiyun 	.reg_offset = { 0x00, 0x04, 0x08, 0x0c, 0x10, 0x14, },
25*4882a593Smuzhiyun };
26*4882a593Smuzhiyun 
27*4882a593Smuzhiyun static const struct samsung_pin_bank_type bank_type_alive = {
28*4882a593Smuzhiyun 	.fld_width = { 4, 1, 2, 2, },
29*4882a593Smuzhiyun 	.reg_offset = { 0x00, 0x04, 0x08, 0x0c, },
30*4882a593Smuzhiyun };
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun /* Exynos5433 has the 4bit widths for PINCFG_TYPE_DRV bitfields. */
33*4882a593Smuzhiyun static const struct samsung_pin_bank_type exynos5433_bank_type_off = {
34*4882a593Smuzhiyun 	.fld_width = { 4, 1, 2, 4, 2, 2, },
35*4882a593Smuzhiyun 	.reg_offset = { 0x00, 0x04, 0x08, 0x0c, 0x10, 0x14, },
36*4882a593Smuzhiyun };
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun static const struct samsung_pin_bank_type exynos5433_bank_type_alive = {
39*4882a593Smuzhiyun 	.fld_width = { 4, 1, 2, 4, },
40*4882a593Smuzhiyun 	.reg_offset = { 0x00, 0x04, 0x08, 0x0c, },
41*4882a593Smuzhiyun };
42*4882a593Smuzhiyun 
43*4882a593Smuzhiyun /* Pad retention control code for accessing PMU regmap */
44*4882a593Smuzhiyun static atomic_t exynos_shared_retention_refcnt;
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun /* pin banks of exynos5433 pin-controller - ALIVE */
47*4882a593Smuzhiyun static const struct samsung_pin_bank_data exynos5433_pin_banks0[] __initconst = {
48*4882a593Smuzhiyun 	/* Must start with EINTG banks, ordered by EINT group number. */
49*4882a593Smuzhiyun 	EXYNOS5433_PIN_BANK_EINTW(8, 0x000, "gpa0", 0x00),
50*4882a593Smuzhiyun 	EXYNOS5433_PIN_BANK_EINTW(8, 0x020, "gpa1", 0x04),
51*4882a593Smuzhiyun 	EXYNOS5433_PIN_BANK_EINTW(8, 0x040, "gpa2", 0x08),
52*4882a593Smuzhiyun 	EXYNOS5433_PIN_BANK_EINTW(8, 0x060, "gpa3", 0x0c),
53*4882a593Smuzhiyun 	EXYNOS5433_PIN_BANK_EINTW_EXT(8, 0x020, "gpf1", 0x1004, 1),
54*4882a593Smuzhiyun 	EXYNOS5433_PIN_BANK_EINTW_EXT(4, 0x040, "gpf2", 0x1008, 1),
55*4882a593Smuzhiyun 	EXYNOS5433_PIN_BANK_EINTW_EXT(4, 0x060, "gpf3", 0x100c, 1),
56*4882a593Smuzhiyun 	EXYNOS5433_PIN_BANK_EINTW_EXT(8, 0x080, "gpf4", 0x1010, 1),
57*4882a593Smuzhiyun 	EXYNOS5433_PIN_BANK_EINTW_EXT(8, 0x0a0, "gpf5", 0x1014, 1),
58*4882a593Smuzhiyun };
59*4882a593Smuzhiyun 
60*4882a593Smuzhiyun /* pin banks of exynos5433 pin-controller - AUD */
61*4882a593Smuzhiyun static const struct samsung_pin_bank_data exynos5433_pin_banks1[] __initconst = {
62*4882a593Smuzhiyun 	/* Must start with EINTG banks, ordered by EINT group number. */
63*4882a593Smuzhiyun 	EXYNOS5433_PIN_BANK_EINTG(7, 0x000, "gpz0", 0x00),
64*4882a593Smuzhiyun 	EXYNOS5433_PIN_BANK_EINTG(4, 0x020, "gpz1", 0x04),
65*4882a593Smuzhiyun };
66*4882a593Smuzhiyun 
67*4882a593Smuzhiyun /* pin banks of exynos5433 pin-controller - CPIF */
68*4882a593Smuzhiyun static const struct samsung_pin_bank_data exynos5433_pin_banks2[] __initconst = {
69*4882a593Smuzhiyun 	/* Must start with EINTG banks, ordered by EINT group number. */
70*4882a593Smuzhiyun 	EXYNOS5433_PIN_BANK_EINTG(2, 0x000, "gpv6", 0x00),
71*4882a593Smuzhiyun };
72*4882a593Smuzhiyun 
73*4882a593Smuzhiyun /* pin banks of exynos5433 pin-controller - eSE */
74*4882a593Smuzhiyun static const struct samsung_pin_bank_data exynos5433_pin_banks3[] __initconst = {
75*4882a593Smuzhiyun 	/* Must start with EINTG banks, ordered by EINT group number. */
76*4882a593Smuzhiyun 	EXYNOS5433_PIN_BANK_EINTG(3, 0x000, "gpj2", 0x00),
77*4882a593Smuzhiyun };
78*4882a593Smuzhiyun 
79*4882a593Smuzhiyun /* pin banks of exynos5433 pin-controller - FINGER */
80*4882a593Smuzhiyun static const struct samsung_pin_bank_data exynos5433_pin_banks4[] __initconst = {
81*4882a593Smuzhiyun 	/* Must start with EINTG banks, ordered by EINT group number. */
82*4882a593Smuzhiyun 	EXYNOS5433_PIN_BANK_EINTG(4, 0x000, "gpd5", 0x00),
83*4882a593Smuzhiyun };
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun /* pin banks of exynos5433 pin-controller - FSYS */
86*4882a593Smuzhiyun static const struct samsung_pin_bank_data exynos5433_pin_banks5[] __initconst = {
87*4882a593Smuzhiyun 	/* Must start with EINTG banks, ordered by EINT group number. */
88*4882a593Smuzhiyun 	EXYNOS5433_PIN_BANK_EINTG(6, 0x000, "gph1", 0x00),
89*4882a593Smuzhiyun 	EXYNOS5433_PIN_BANK_EINTG(7, 0x020, "gpr4", 0x04),
90*4882a593Smuzhiyun 	EXYNOS5433_PIN_BANK_EINTG(5, 0x040, "gpr0", 0x08),
91*4882a593Smuzhiyun 	EXYNOS5433_PIN_BANK_EINTG(8, 0x060, "gpr1", 0x0c),
92*4882a593Smuzhiyun 	EXYNOS5433_PIN_BANK_EINTG(2, 0x080, "gpr2", 0x10),
93*4882a593Smuzhiyun 	EXYNOS5433_PIN_BANK_EINTG(8, 0x0a0, "gpr3", 0x14),
94*4882a593Smuzhiyun };
95*4882a593Smuzhiyun 
96*4882a593Smuzhiyun /* pin banks of exynos5433 pin-controller - IMEM */
97*4882a593Smuzhiyun static const struct samsung_pin_bank_data exynos5433_pin_banks6[] __initconst = {
98*4882a593Smuzhiyun 	/* Must start with EINTG banks, ordered by EINT group number. */
99*4882a593Smuzhiyun 	EXYNOS5433_PIN_BANK_EINTG(8, 0x000, "gpf0", 0x00),
100*4882a593Smuzhiyun };
101*4882a593Smuzhiyun 
102*4882a593Smuzhiyun /* pin banks of exynos5433 pin-controller - NFC */
103*4882a593Smuzhiyun static const struct samsung_pin_bank_data exynos5433_pin_banks7[] __initconst = {
104*4882a593Smuzhiyun 	/* Must start with EINTG banks, ordered by EINT group number. */
105*4882a593Smuzhiyun 	EXYNOS5433_PIN_BANK_EINTG(3, 0x000, "gpj0", 0x00),
106*4882a593Smuzhiyun };
107*4882a593Smuzhiyun 
108*4882a593Smuzhiyun /* pin banks of exynos5433 pin-controller - PERIC */
109*4882a593Smuzhiyun static const struct samsung_pin_bank_data exynos5433_pin_banks8[] __initconst = {
110*4882a593Smuzhiyun 	/* Must start with EINTG banks, ordered by EINT group number. */
111*4882a593Smuzhiyun 	EXYNOS5433_PIN_BANK_EINTG(6, 0x000, "gpv7", 0x00),
112*4882a593Smuzhiyun 	EXYNOS5433_PIN_BANK_EINTG(5, 0x020, "gpb0", 0x04),
113*4882a593Smuzhiyun 	EXYNOS5433_PIN_BANK_EINTG(8, 0x040, "gpc0", 0x08),
114*4882a593Smuzhiyun 	EXYNOS5433_PIN_BANK_EINTG(2, 0x060, "gpc1", 0x0c),
115*4882a593Smuzhiyun 	EXYNOS5433_PIN_BANK_EINTG(6, 0x080, "gpc2", 0x10),
116*4882a593Smuzhiyun 	EXYNOS5433_PIN_BANK_EINTG(8, 0x0a0, "gpc3", 0x14),
117*4882a593Smuzhiyun 	EXYNOS5433_PIN_BANK_EINTG(2, 0x0c0, "gpg0", 0x18),
118*4882a593Smuzhiyun 	EXYNOS5433_PIN_BANK_EINTG(4, 0x0e0, "gpd0", 0x1c),
119*4882a593Smuzhiyun 	EXYNOS5433_PIN_BANK_EINTG(6, 0x100, "gpd1", 0x20),
120*4882a593Smuzhiyun 	EXYNOS5433_PIN_BANK_EINTG(8, 0x120, "gpd2", 0x24),
121*4882a593Smuzhiyun 	EXYNOS5433_PIN_BANK_EINTG(5, 0x140, "gpd4", 0x28),
122*4882a593Smuzhiyun 	EXYNOS5433_PIN_BANK_EINTG(2, 0x160, "gpd8", 0x2c),
123*4882a593Smuzhiyun 	EXYNOS5433_PIN_BANK_EINTG(7, 0x180, "gpd6", 0x30),
124*4882a593Smuzhiyun 	EXYNOS5433_PIN_BANK_EINTG(3, 0x1a0, "gpd7", 0x34),
125*4882a593Smuzhiyun 	EXYNOS5433_PIN_BANK_EINTG(5, 0x1c0, "gpg1", 0x38),
126*4882a593Smuzhiyun 	EXYNOS5433_PIN_BANK_EINTG(2, 0x1e0, "gpg2", 0x3c),
127*4882a593Smuzhiyun 	EXYNOS5433_PIN_BANK_EINTG(8, 0x200, "gpg3", 0x40),
128*4882a593Smuzhiyun };
129*4882a593Smuzhiyun 
130*4882a593Smuzhiyun /* pin banks of exynos5433 pin-controller - TOUCH */
131*4882a593Smuzhiyun static const struct samsung_pin_bank_data exynos5433_pin_banks9[] __initconst = {
132*4882a593Smuzhiyun 	/* Must start with EINTG banks, ordered by EINT group number. */
133*4882a593Smuzhiyun 	EXYNOS5433_PIN_BANK_EINTG(3, 0x000, "gpj1", 0x00),
134*4882a593Smuzhiyun };
135*4882a593Smuzhiyun 
136*4882a593Smuzhiyun /* PMU pin retention groups registers for Exynos5433 (without audio & fsys) */
137*4882a593Smuzhiyun static const u32 exynos5433_retention_regs[] = {
138*4882a593Smuzhiyun 	EXYNOS5433_PAD_RETENTION_TOP_OPTION,
139*4882a593Smuzhiyun 	EXYNOS5433_PAD_RETENTION_UART_OPTION,
140*4882a593Smuzhiyun 	EXYNOS5433_PAD_RETENTION_EBIA_OPTION,
141*4882a593Smuzhiyun 	EXYNOS5433_PAD_RETENTION_EBIB_OPTION,
142*4882a593Smuzhiyun 	EXYNOS5433_PAD_RETENTION_SPI_OPTION,
143*4882a593Smuzhiyun 	EXYNOS5433_PAD_RETENTION_MIF_OPTION,
144*4882a593Smuzhiyun 	EXYNOS5433_PAD_RETENTION_USBXTI_OPTION,
145*4882a593Smuzhiyun 	EXYNOS5433_PAD_RETENTION_BOOTLDO_OPTION,
146*4882a593Smuzhiyun 	EXYNOS5433_PAD_RETENTION_UFS_OPTION,
147*4882a593Smuzhiyun 	EXYNOS5433_PAD_RETENTION_FSYSGENIO_OPTION,
148*4882a593Smuzhiyun };
149*4882a593Smuzhiyun 
150*4882a593Smuzhiyun static const struct samsung_retention_data exynos5433_retention_data __initconst = {
151*4882a593Smuzhiyun 	.regs	 = exynos5433_retention_regs,
152*4882a593Smuzhiyun 	.nr_regs = ARRAY_SIZE(exynos5433_retention_regs),
153*4882a593Smuzhiyun 	.value	 = EXYNOS_WAKEUP_FROM_LOWPWR,
154*4882a593Smuzhiyun 	.refcnt	 = &exynos_shared_retention_refcnt,
155*4882a593Smuzhiyun 	.init	 = exynos_retention_init,
156*4882a593Smuzhiyun };
157*4882a593Smuzhiyun 
158*4882a593Smuzhiyun /* PMU retention control for audio pins can be tied to audio pin bank */
159*4882a593Smuzhiyun static const u32 exynos5433_audio_retention_regs[] = {
160*4882a593Smuzhiyun 	EXYNOS5433_PAD_RETENTION_AUD_OPTION,
161*4882a593Smuzhiyun };
162*4882a593Smuzhiyun 
163*4882a593Smuzhiyun static const struct samsung_retention_data exynos5433_audio_retention_data __initconst = {
164*4882a593Smuzhiyun 	.regs	 = exynos5433_audio_retention_regs,
165*4882a593Smuzhiyun 	.nr_regs = ARRAY_SIZE(exynos5433_audio_retention_regs),
166*4882a593Smuzhiyun 	.value	 = EXYNOS_WAKEUP_FROM_LOWPWR,
167*4882a593Smuzhiyun 	.init	 = exynos_retention_init,
168*4882a593Smuzhiyun };
169*4882a593Smuzhiyun 
170*4882a593Smuzhiyun /* PMU retention control for mmc pins can be tied to fsys pin bank */
171*4882a593Smuzhiyun static const u32 exynos5433_fsys_retention_regs[] = {
172*4882a593Smuzhiyun 	EXYNOS5433_PAD_RETENTION_MMC0_OPTION,
173*4882a593Smuzhiyun 	EXYNOS5433_PAD_RETENTION_MMC1_OPTION,
174*4882a593Smuzhiyun 	EXYNOS5433_PAD_RETENTION_MMC2_OPTION,
175*4882a593Smuzhiyun };
176*4882a593Smuzhiyun 
177*4882a593Smuzhiyun static const struct samsung_retention_data exynos5433_fsys_retention_data __initconst = {
178*4882a593Smuzhiyun 	.regs	 = exynos5433_fsys_retention_regs,
179*4882a593Smuzhiyun 	.nr_regs = ARRAY_SIZE(exynos5433_fsys_retention_regs),
180*4882a593Smuzhiyun 	.value	 = EXYNOS_WAKEUP_FROM_LOWPWR,
181*4882a593Smuzhiyun 	.init	 = exynos_retention_init,
182*4882a593Smuzhiyun };
183*4882a593Smuzhiyun 
184*4882a593Smuzhiyun /*
185*4882a593Smuzhiyun  * Samsung pinctrl driver data for Exynos5433 SoC. Exynos5433 SoC includes
186*4882a593Smuzhiyun  * ten gpio/pin-mux/pinconfig controllers.
187*4882a593Smuzhiyun  */
188*4882a593Smuzhiyun static const struct samsung_pin_ctrl exynos5433_pin_ctrl[] __initconst = {
189*4882a593Smuzhiyun 	{
190*4882a593Smuzhiyun 		/* pin-controller instance 0 data */
191*4882a593Smuzhiyun 		.pin_banks	= exynos5433_pin_banks0,
192*4882a593Smuzhiyun 		.nr_banks	= ARRAY_SIZE(exynos5433_pin_banks0),
193*4882a593Smuzhiyun 		.eint_wkup_init = exynos_eint_wkup_init,
194*4882a593Smuzhiyun 		.suspend	= exynos_pinctrl_suspend,
195*4882a593Smuzhiyun 		.resume		= exynos_pinctrl_resume,
196*4882a593Smuzhiyun 		.nr_ext_resources = 1,
197*4882a593Smuzhiyun 		.retention_data	= &exynos5433_retention_data,
198*4882a593Smuzhiyun 	}, {
199*4882a593Smuzhiyun 		/* pin-controller instance 1 data */
200*4882a593Smuzhiyun 		.pin_banks	= exynos5433_pin_banks1,
201*4882a593Smuzhiyun 		.nr_banks	= ARRAY_SIZE(exynos5433_pin_banks1),
202*4882a593Smuzhiyun 		.eint_gpio_init = exynos_eint_gpio_init,
203*4882a593Smuzhiyun 		.suspend	= exynos_pinctrl_suspend,
204*4882a593Smuzhiyun 		.resume		= exynos_pinctrl_resume,
205*4882a593Smuzhiyun 		.retention_data	= &exynos5433_audio_retention_data,
206*4882a593Smuzhiyun 	}, {
207*4882a593Smuzhiyun 		/* pin-controller instance 2 data */
208*4882a593Smuzhiyun 		.pin_banks	= exynos5433_pin_banks2,
209*4882a593Smuzhiyun 		.nr_banks	= ARRAY_SIZE(exynos5433_pin_banks2),
210*4882a593Smuzhiyun 		.eint_gpio_init = exynos_eint_gpio_init,
211*4882a593Smuzhiyun 		.suspend	= exynos_pinctrl_suspend,
212*4882a593Smuzhiyun 		.resume		= exynos_pinctrl_resume,
213*4882a593Smuzhiyun 		.retention_data	= &exynos5433_retention_data,
214*4882a593Smuzhiyun 	}, {
215*4882a593Smuzhiyun 		/* pin-controller instance 3 data */
216*4882a593Smuzhiyun 		.pin_banks	= exynos5433_pin_banks3,
217*4882a593Smuzhiyun 		.nr_banks	= ARRAY_SIZE(exynos5433_pin_banks3),
218*4882a593Smuzhiyun 		.eint_gpio_init = exynos_eint_gpio_init,
219*4882a593Smuzhiyun 		.suspend	= exynos_pinctrl_suspend,
220*4882a593Smuzhiyun 		.resume		= exynos_pinctrl_resume,
221*4882a593Smuzhiyun 		.retention_data	= &exynos5433_retention_data,
222*4882a593Smuzhiyun 	}, {
223*4882a593Smuzhiyun 		/* pin-controller instance 4 data */
224*4882a593Smuzhiyun 		.pin_banks	= exynos5433_pin_banks4,
225*4882a593Smuzhiyun 		.nr_banks	= ARRAY_SIZE(exynos5433_pin_banks4),
226*4882a593Smuzhiyun 		.eint_gpio_init = exynos_eint_gpio_init,
227*4882a593Smuzhiyun 		.suspend	= exynos_pinctrl_suspend,
228*4882a593Smuzhiyun 		.resume		= exynos_pinctrl_resume,
229*4882a593Smuzhiyun 		.retention_data	= &exynos5433_retention_data,
230*4882a593Smuzhiyun 	}, {
231*4882a593Smuzhiyun 		/* pin-controller instance 5 data */
232*4882a593Smuzhiyun 		.pin_banks	= exynos5433_pin_banks5,
233*4882a593Smuzhiyun 		.nr_banks	= ARRAY_SIZE(exynos5433_pin_banks5),
234*4882a593Smuzhiyun 		.eint_gpio_init = exynos_eint_gpio_init,
235*4882a593Smuzhiyun 		.suspend	= exynos_pinctrl_suspend,
236*4882a593Smuzhiyun 		.resume		= exynos_pinctrl_resume,
237*4882a593Smuzhiyun 		.retention_data	= &exynos5433_fsys_retention_data,
238*4882a593Smuzhiyun 	}, {
239*4882a593Smuzhiyun 		/* pin-controller instance 6 data */
240*4882a593Smuzhiyun 		.pin_banks	= exynos5433_pin_banks6,
241*4882a593Smuzhiyun 		.nr_banks	= ARRAY_SIZE(exynos5433_pin_banks6),
242*4882a593Smuzhiyun 		.eint_gpio_init = exynos_eint_gpio_init,
243*4882a593Smuzhiyun 		.suspend	= exynos_pinctrl_suspend,
244*4882a593Smuzhiyun 		.resume		= exynos_pinctrl_resume,
245*4882a593Smuzhiyun 		.retention_data	= &exynos5433_retention_data,
246*4882a593Smuzhiyun 	}, {
247*4882a593Smuzhiyun 		/* pin-controller instance 7 data */
248*4882a593Smuzhiyun 		.pin_banks	= exynos5433_pin_banks7,
249*4882a593Smuzhiyun 		.nr_banks	= ARRAY_SIZE(exynos5433_pin_banks7),
250*4882a593Smuzhiyun 		.eint_gpio_init = exynos_eint_gpio_init,
251*4882a593Smuzhiyun 		.suspend	= exynos_pinctrl_suspend,
252*4882a593Smuzhiyun 		.resume		= exynos_pinctrl_resume,
253*4882a593Smuzhiyun 		.retention_data	= &exynos5433_retention_data,
254*4882a593Smuzhiyun 	}, {
255*4882a593Smuzhiyun 		/* pin-controller instance 8 data */
256*4882a593Smuzhiyun 		.pin_banks	= exynos5433_pin_banks8,
257*4882a593Smuzhiyun 		.nr_banks	= ARRAY_SIZE(exynos5433_pin_banks8),
258*4882a593Smuzhiyun 		.eint_gpio_init = exynos_eint_gpio_init,
259*4882a593Smuzhiyun 		.suspend	= exynos_pinctrl_suspend,
260*4882a593Smuzhiyun 		.resume		= exynos_pinctrl_resume,
261*4882a593Smuzhiyun 		.retention_data	= &exynos5433_retention_data,
262*4882a593Smuzhiyun 	}, {
263*4882a593Smuzhiyun 		/* pin-controller instance 9 data */
264*4882a593Smuzhiyun 		.pin_banks	= exynos5433_pin_banks9,
265*4882a593Smuzhiyun 		.nr_banks	= ARRAY_SIZE(exynos5433_pin_banks9),
266*4882a593Smuzhiyun 		.eint_gpio_init = exynos_eint_gpio_init,
267*4882a593Smuzhiyun 		.suspend	= exynos_pinctrl_suspend,
268*4882a593Smuzhiyun 		.resume		= exynos_pinctrl_resume,
269*4882a593Smuzhiyun 		.retention_data	= &exynos5433_retention_data,
270*4882a593Smuzhiyun 	},
271*4882a593Smuzhiyun };
272*4882a593Smuzhiyun 
273*4882a593Smuzhiyun const struct samsung_pinctrl_of_match_data exynos5433_of_data __initconst = {
274*4882a593Smuzhiyun 	.ctrl		= exynos5433_pin_ctrl,
275*4882a593Smuzhiyun 	.num_ctrl	= ARRAY_SIZE(exynos5433_pin_ctrl),
276*4882a593Smuzhiyun };
277*4882a593Smuzhiyun 
278*4882a593Smuzhiyun /* pin banks of exynos7 pin-controller - ALIVE */
279*4882a593Smuzhiyun static const struct samsung_pin_bank_data exynos7_pin_banks0[] __initconst = {
280*4882a593Smuzhiyun 	/* Must start with EINTG banks, ordered by EINT group number. */
281*4882a593Smuzhiyun 	EXYNOS_PIN_BANK_EINTW(8, 0x000, "gpa0", 0x00),
282*4882a593Smuzhiyun 	EXYNOS_PIN_BANK_EINTW(8, 0x020, "gpa1", 0x04),
283*4882a593Smuzhiyun 	EXYNOS_PIN_BANK_EINTW(8, 0x040, "gpa2", 0x08),
284*4882a593Smuzhiyun 	EXYNOS_PIN_BANK_EINTW(8, 0x060, "gpa3", 0x0c),
285*4882a593Smuzhiyun };
286*4882a593Smuzhiyun 
287*4882a593Smuzhiyun /* pin banks of exynos7 pin-controller - BUS0 */
288*4882a593Smuzhiyun static const struct samsung_pin_bank_data exynos7_pin_banks1[] __initconst = {
289*4882a593Smuzhiyun 	/* Must start with EINTG banks, ordered by EINT group number. */
290*4882a593Smuzhiyun 	EXYNOS_PIN_BANK_EINTG(5, 0x000, "gpb0", 0x00),
291*4882a593Smuzhiyun 	EXYNOS_PIN_BANK_EINTG(8, 0x020, "gpc0", 0x04),
292*4882a593Smuzhiyun 	EXYNOS_PIN_BANK_EINTG(2, 0x040, "gpc1", 0x08),
293*4882a593Smuzhiyun 	EXYNOS_PIN_BANK_EINTG(6, 0x060, "gpc2", 0x0c),
294*4882a593Smuzhiyun 	EXYNOS_PIN_BANK_EINTG(8, 0x080, "gpc3", 0x10),
295*4882a593Smuzhiyun 	EXYNOS_PIN_BANK_EINTG(4, 0x0a0, "gpd0", 0x14),
296*4882a593Smuzhiyun 	EXYNOS_PIN_BANK_EINTG(6, 0x0c0, "gpd1", 0x18),
297*4882a593Smuzhiyun 	EXYNOS_PIN_BANK_EINTG(8, 0x0e0, "gpd2", 0x1c),
298*4882a593Smuzhiyun 	EXYNOS_PIN_BANK_EINTG(5, 0x100, "gpd4", 0x20),
299*4882a593Smuzhiyun 	EXYNOS_PIN_BANK_EINTG(4, 0x120, "gpd5", 0x24),
300*4882a593Smuzhiyun 	EXYNOS_PIN_BANK_EINTG(6, 0x140, "gpd6", 0x28),
301*4882a593Smuzhiyun 	EXYNOS_PIN_BANK_EINTG(3, 0x160, "gpd7", 0x2c),
302*4882a593Smuzhiyun 	EXYNOS_PIN_BANK_EINTG(2, 0x180, "gpd8", 0x30),
303*4882a593Smuzhiyun 	EXYNOS_PIN_BANK_EINTG(2, 0x1a0, "gpg0", 0x34),
304*4882a593Smuzhiyun 	EXYNOS_PIN_BANK_EINTG(4, 0x1c0, "gpg3", 0x38),
305*4882a593Smuzhiyun };
306*4882a593Smuzhiyun 
307*4882a593Smuzhiyun /* pin banks of exynos7 pin-controller - NFC */
308*4882a593Smuzhiyun static const struct samsung_pin_bank_data exynos7_pin_banks2[] __initconst = {
309*4882a593Smuzhiyun 	/* Must start with EINTG banks, ordered by EINT group number. */
310*4882a593Smuzhiyun 	EXYNOS_PIN_BANK_EINTG(3, 0x000, "gpj0", 0x00),
311*4882a593Smuzhiyun };
312*4882a593Smuzhiyun 
313*4882a593Smuzhiyun /* pin banks of exynos7 pin-controller - TOUCH */
314*4882a593Smuzhiyun static const struct samsung_pin_bank_data exynos7_pin_banks3[] __initconst = {
315*4882a593Smuzhiyun 	/* Must start with EINTG banks, ordered by EINT group number. */
316*4882a593Smuzhiyun 	EXYNOS_PIN_BANK_EINTG(3, 0x000, "gpj1", 0x00),
317*4882a593Smuzhiyun };
318*4882a593Smuzhiyun 
319*4882a593Smuzhiyun /* pin banks of exynos7 pin-controller - FF */
320*4882a593Smuzhiyun static const struct samsung_pin_bank_data exynos7_pin_banks4[] __initconst = {
321*4882a593Smuzhiyun 	/* Must start with EINTG banks, ordered by EINT group number. */
322*4882a593Smuzhiyun 	EXYNOS_PIN_BANK_EINTG(4, 0x000, "gpg4", 0x00),
323*4882a593Smuzhiyun };
324*4882a593Smuzhiyun 
325*4882a593Smuzhiyun /* pin banks of exynos7 pin-controller - ESE */
326*4882a593Smuzhiyun static const struct samsung_pin_bank_data exynos7_pin_banks5[] __initconst = {
327*4882a593Smuzhiyun 	/* Must start with EINTG banks, ordered by EINT group number. */
328*4882a593Smuzhiyun 	EXYNOS_PIN_BANK_EINTG(5, 0x000, "gpv7", 0x00),
329*4882a593Smuzhiyun };
330*4882a593Smuzhiyun 
331*4882a593Smuzhiyun /* pin banks of exynos7 pin-controller - FSYS0 */
332*4882a593Smuzhiyun static const struct samsung_pin_bank_data exynos7_pin_banks6[] __initconst = {
333*4882a593Smuzhiyun 	/* Must start with EINTG banks, ordered by EINT group number. */
334*4882a593Smuzhiyun 	EXYNOS_PIN_BANK_EINTG(7, 0x000, "gpr4", 0x00),
335*4882a593Smuzhiyun };
336*4882a593Smuzhiyun 
337*4882a593Smuzhiyun /* pin banks of exynos7 pin-controller - FSYS1 */
338*4882a593Smuzhiyun static const struct samsung_pin_bank_data exynos7_pin_banks7[] __initconst = {
339*4882a593Smuzhiyun 	/* Must start with EINTG banks, ordered by EINT group number. */
340*4882a593Smuzhiyun 	EXYNOS_PIN_BANK_EINTG(4, 0x000, "gpr0", 0x00),
341*4882a593Smuzhiyun 	EXYNOS_PIN_BANK_EINTG(8, 0x020, "gpr1", 0x04),
342*4882a593Smuzhiyun 	EXYNOS_PIN_BANK_EINTG(5, 0x040, "gpr2", 0x08),
343*4882a593Smuzhiyun 	EXYNOS_PIN_BANK_EINTG(8, 0x060, "gpr3", 0x0c),
344*4882a593Smuzhiyun };
345*4882a593Smuzhiyun 
346*4882a593Smuzhiyun /* pin banks of exynos7 pin-controller - BUS1 */
347*4882a593Smuzhiyun static const struct samsung_pin_bank_data exynos7_pin_banks8[] __initconst = {
348*4882a593Smuzhiyun 	/* Must start with EINTG banks, ordered by EINT group number. */
349*4882a593Smuzhiyun 	EXYNOS_PIN_BANK_EINTG(8, 0x020, "gpf0", 0x00),
350*4882a593Smuzhiyun 	EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpf1", 0x04),
351*4882a593Smuzhiyun 	EXYNOS_PIN_BANK_EINTG(4, 0x060, "gpf2", 0x08),
352*4882a593Smuzhiyun 	EXYNOS_PIN_BANK_EINTG(5, 0x080, "gpf3", 0x0c),
353*4882a593Smuzhiyun 	EXYNOS_PIN_BANK_EINTG(8, 0x0a0, "gpf4", 0x10),
354*4882a593Smuzhiyun 	EXYNOS_PIN_BANK_EINTG(8, 0x0c0, "gpf5", 0x14),
355*4882a593Smuzhiyun 	EXYNOS_PIN_BANK_EINTG(5, 0x0e0, "gpg1", 0x18),
356*4882a593Smuzhiyun 	EXYNOS_PIN_BANK_EINTG(5, 0x100, "gpg2", 0x1c),
357*4882a593Smuzhiyun 	EXYNOS_PIN_BANK_EINTG(6, 0x120, "gph1", 0x20),
358*4882a593Smuzhiyun 	EXYNOS_PIN_BANK_EINTG(3, 0x140, "gpv6", 0x24),
359*4882a593Smuzhiyun };
360*4882a593Smuzhiyun 
361*4882a593Smuzhiyun static const struct samsung_pin_bank_data exynos7_pin_banks9[] __initconst = {
362*4882a593Smuzhiyun 	/* Must start with EINTG banks, ordered by EINT group number. */
363*4882a593Smuzhiyun 	EXYNOS_PIN_BANK_EINTG(7, 0x000, "gpz0", 0x00),
364*4882a593Smuzhiyun 	EXYNOS_PIN_BANK_EINTG(4, 0x020, "gpz1", 0x04),
365*4882a593Smuzhiyun };
366*4882a593Smuzhiyun 
367*4882a593Smuzhiyun static const struct samsung_pin_ctrl exynos7_pin_ctrl[] __initconst = {
368*4882a593Smuzhiyun 	{
369*4882a593Smuzhiyun 		/* pin-controller instance 0 Alive data */
370*4882a593Smuzhiyun 		.pin_banks	= exynos7_pin_banks0,
371*4882a593Smuzhiyun 		.nr_banks	= ARRAY_SIZE(exynos7_pin_banks0),
372*4882a593Smuzhiyun 		.eint_wkup_init = exynos_eint_wkup_init,
373*4882a593Smuzhiyun 	}, {
374*4882a593Smuzhiyun 		/* pin-controller instance 1 BUS0 data */
375*4882a593Smuzhiyun 		.pin_banks	= exynos7_pin_banks1,
376*4882a593Smuzhiyun 		.nr_banks	= ARRAY_SIZE(exynos7_pin_banks1),
377*4882a593Smuzhiyun 		.eint_gpio_init = exynos_eint_gpio_init,
378*4882a593Smuzhiyun 	}, {
379*4882a593Smuzhiyun 		/* pin-controller instance 2 NFC data */
380*4882a593Smuzhiyun 		.pin_banks	= exynos7_pin_banks2,
381*4882a593Smuzhiyun 		.nr_banks	= ARRAY_SIZE(exynos7_pin_banks2),
382*4882a593Smuzhiyun 		.eint_gpio_init = exynos_eint_gpio_init,
383*4882a593Smuzhiyun 	}, {
384*4882a593Smuzhiyun 		/* pin-controller instance 3 TOUCH data */
385*4882a593Smuzhiyun 		.pin_banks	= exynos7_pin_banks3,
386*4882a593Smuzhiyun 		.nr_banks	= ARRAY_SIZE(exynos7_pin_banks3),
387*4882a593Smuzhiyun 		.eint_gpio_init = exynos_eint_gpio_init,
388*4882a593Smuzhiyun 	}, {
389*4882a593Smuzhiyun 		/* pin-controller instance 4 FF data */
390*4882a593Smuzhiyun 		.pin_banks	= exynos7_pin_banks4,
391*4882a593Smuzhiyun 		.nr_banks	= ARRAY_SIZE(exynos7_pin_banks4),
392*4882a593Smuzhiyun 		.eint_gpio_init = exynos_eint_gpio_init,
393*4882a593Smuzhiyun 	}, {
394*4882a593Smuzhiyun 		/* pin-controller instance 5 ESE data */
395*4882a593Smuzhiyun 		.pin_banks	= exynos7_pin_banks5,
396*4882a593Smuzhiyun 		.nr_banks	= ARRAY_SIZE(exynos7_pin_banks5),
397*4882a593Smuzhiyun 		.eint_gpio_init = exynos_eint_gpio_init,
398*4882a593Smuzhiyun 	}, {
399*4882a593Smuzhiyun 		/* pin-controller instance 6 FSYS0 data */
400*4882a593Smuzhiyun 		.pin_banks	= exynos7_pin_banks6,
401*4882a593Smuzhiyun 		.nr_banks	= ARRAY_SIZE(exynos7_pin_banks6),
402*4882a593Smuzhiyun 		.eint_gpio_init = exynos_eint_gpio_init,
403*4882a593Smuzhiyun 	}, {
404*4882a593Smuzhiyun 		/* pin-controller instance 7 FSYS1 data */
405*4882a593Smuzhiyun 		.pin_banks	= exynos7_pin_banks7,
406*4882a593Smuzhiyun 		.nr_banks	= ARRAY_SIZE(exynos7_pin_banks7),
407*4882a593Smuzhiyun 		.eint_gpio_init = exynos_eint_gpio_init,
408*4882a593Smuzhiyun 	}, {
409*4882a593Smuzhiyun 		/* pin-controller instance 8 BUS1 data */
410*4882a593Smuzhiyun 		.pin_banks	= exynos7_pin_banks8,
411*4882a593Smuzhiyun 		.nr_banks	= ARRAY_SIZE(exynos7_pin_banks8),
412*4882a593Smuzhiyun 		.eint_gpio_init = exynos_eint_gpio_init,
413*4882a593Smuzhiyun 	}, {
414*4882a593Smuzhiyun 		/* pin-controller instance 9 AUD data */
415*4882a593Smuzhiyun 		.pin_banks	= exynos7_pin_banks9,
416*4882a593Smuzhiyun 		.nr_banks	= ARRAY_SIZE(exynos7_pin_banks9),
417*4882a593Smuzhiyun 		.eint_gpio_init = exynos_eint_gpio_init,
418*4882a593Smuzhiyun 	},
419*4882a593Smuzhiyun };
420*4882a593Smuzhiyun 
421*4882a593Smuzhiyun const struct samsung_pinctrl_of_match_data exynos7_of_data __initconst = {
422*4882a593Smuzhiyun 	.ctrl		= exynos7_pin_ctrl,
423*4882a593Smuzhiyun 	.num_ctrl	= ARRAY_SIZE(exynos7_pin_ctrl),
424*4882a593Smuzhiyun };
425