1221173a3SKrzysztof Kozlowski // SPDX-License-Identifier: GPL-2.0+
2221173a3SKrzysztof Kozlowski //
3221173a3SKrzysztof Kozlowski // Exynos specific support for Samsung pinctrl/gpiolib driver with eint support.
4221173a3SKrzysztof Kozlowski //
5221173a3SKrzysztof Kozlowski // Copyright (c) 2012 Samsung Electronics Co., Ltd.
6221173a3SKrzysztof Kozlowski //		http://www.samsung.com
7221173a3SKrzysztof Kozlowski // Copyright (c) 2012 Linaro Ltd
8221173a3SKrzysztof Kozlowski //		http://www.linaro.org
9221173a3SKrzysztof Kozlowski //
10221173a3SKrzysztof Kozlowski // Author: Thomas Abraham <thomas.ab@samsung.com>
11221173a3SKrzysztof Kozlowski //
12221173a3SKrzysztof Kozlowski // This file contains the Samsung Exynos specific information required by the
13221173a3SKrzysztof Kozlowski // the Samsung pinctrl/gpiolib driver. It also includes the implementation of
14221173a3SKrzysztof Kozlowski // external gpio and wakeup interrupt support.
15cfa76ddfSKrzysztof Kozlowski 
16cfa76ddfSKrzysztof Kozlowski #include <linux/device.h>
17cfa76ddfSKrzysztof Kozlowski #include <linux/of_address.h>
18cfa76ddfSKrzysztof Kozlowski #include <linux/slab.h>
19cfa76ddfSKrzysztof Kozlowski #include <linux/err.h>
20cfa76ddfSKrzysztof Kozlowski #include <linux/soc/samsung/exynos-regs-pmu.h>
21cfa76ddfSKrzysztof Kozlowski 
22cfa76ddfSKrzysztof Kozlowski #include "pinctrl-samsung.h"
23cfa76ddfSKrzysztof Kozlowski #include "pinctrl-exynos.h"
24cfa76ddfSKrzysztof Kozlowski 
25cfa76ddfSKrzysztof Kozlowski static const struct samsung_pin_bank_type bank_type_off = {
26cfa76ddfSKrzysztof Kozlowski 	.fld_width = { 4, 1, 2, 2, 2, 2, },
27cfa76ddfSKrzysztof Kozlowski 	.reg_offset = { 0x00, 0x04, 0x08, 0x0c, 0x10, 0x14, },
28cfa76ddfSKrzysztof Kozlowski };
29cfa76ddfSKrzysztof Kozlowski 
30cfa76ddfSKrzysztof Kozlowski static const struct samsung_pin_bank_type bank_type_alive = {
31cfa76ddfSKrzysztof Kozlowski 	.fld_width = { 4, 1, 2, 2, },
32cfa76ddfSKrzysztof Kozlowski 	.reg_offset = { 0x00, 0x04, 0x08, 0x0c, },
33cfa76ddfSKrzysztof Kozlowski };
34cfa76ddfSKrzysztof Kozlowski 
35cfa76ddfSKrzysztof Kozlowski /* Retention control for S5PV210 are located at the end of clock controller */
36cfa76ddfSKrzysztof Kozlowski #define S5P_OTHERS 0xE000
37cfa76ddfSKrzysztof Kozlowski 
38cfa76ddfSKrzysztof Kozlowski #define S5P_OTHERS_RET_IO		(1 << 31)
39cfa76ddfSKrzysztof Kozlowski #define S5P_OTHERS_RET_CF		(1 << 30)
40cfa76ddfSKrzysztof Kozlowski #define S5P_OTHERS_RET_MMC		(1 << 29)
41cfa76ddfSKrzysztof Kozlowski #define S5P_OTHERS_RET_UART		(1 << 28)
42cfa76ddfSKrzysztof Kozlowski 
s5pv210_retention_disable(struct samsung_pinctrl_drv_data * drvdata)43cfa76ddfSKrzysztof Kozlowski static void s5pv210_retention_disable(struct samsung_pinctrl_drv_data *drvdata)
44cfa76ddfSKrzysztof Kozlowski {
45a453f369SKrzysztof Kozlowski 	void __iomem *clk_base = (void __iomem *)drvdata->retention_ctrl->priv;
46cfa76ddfSKrzysztof Kozlowski 	u32 tmp;
47cfa76ddfSKrzysztof Kozlowski 
48cfa76ddfSKrzysztof Kozlowski 	tmp = __raw_readl(clk_base + S5P_OTHERS);
49cfa76ddfSKrzysztof Kozlowski 	tmp |= (S5P_OTHERS_RET_IO | S5P_OTHERS_RET_CF | S5P_OTHERS_RET_MMC |
50cfa76ddfSKrzysztof Kozlowski 		S5P_OTHERS_RET_UART);
51cfa76ddfSKrzysztof Kozlowski 	__raw_writel(tmp, clk_base + S5P_OTHERS);
52cfa76ddfSKrzysztof Kozlowski }
53cfa76ddfSKrzysztof Kozlowski 
54cfa76ddfSKrzysztof Kozlowski static struct samsung_retention_ctrl *
s5pv210_retention_init(struct samsung_pinctrl_drv_data * drvdata,const struct samsung_retention_data * data)55cfa76ddfSKrzysztof Kozlowski s5pv210_retention_init(struct samsung_pinctrl_drv_data *drvdata,
56cfa76ddfSKrzysztof Kozlowski 		       const struct samsung_retention_data *data)
57cfa76ddfSKrzysztof Kozlowski {
58cfa76ddfSKrzysztof Kozlowski 	struct samsung_retention_ctrl *ctrl;
59cfa76ddfSKrzysztof Kozlowski 	struct device_node *np;
60a453f369SKrzysztof Kozlowski 	void __iomem *clk_base;
61cfa76ddfSKrzysztof Kozlowski 
62cfa76ddfSKrzysztof Kozlowski 	ctrl = devm_kzalloc(drvdata->dev, sizeof(*ctrl), GFP_KERNEL);
63cfa76ddfSKrzysztof Kozlowski 	if (!ctrl)
64cfa76ddfSKrzysztof Kozlowski 		return ERR_PTR(-ENOMEM);
65cfa76ddfSKrzysztof Kozlowski 
66cfa76ddfSKrzysztof Kozlowski 	np = of_find_compatible_node(NULL, NULL, "samsung,s5pv210-clock");
67cfa76ddfSKrzysztof Kozlowski 	if (!np) {
68cfa76ddfSKrzysztof Kozlowski 		pr_err("%s: failed to find clock controller DT node\n",
69cfa76ddfSKrzysztof Kozlowski 			__func__);
70cfa76ddfSKrzysztof Kozlowski 		return ERR_PTR(-ENODEV);
71cfa76ddfSKrzysztof Kozlowski 	}
72cfa76ddfSKrzysztof Kozlowski 
73cfa76ddfSKrzysztof Kozlowski 	clk_base = of_iomap(np, 0);
7444b9f86cSWen Yang 	of_node_put(np);
75cfa76ddfSKrzysztof Kozlowski 	if (!clk_base) {
76cfa76ddfSKrzysztof Kozlowski 		pr_err("%s: failed to map clock registers\n", __func__);
77cfa76ddfSKrzysztof Kozlowski 		return ERR_PTR(-EINVAL);
78cfa76ddfSKrzysztof Kozlowski 	}
79cfa76ddfSKrzysztof Kozlowski 
80a453f369SKrzysztof Kozlowski 	ctrl->priv = (void __force *)clk_base;
81cfa76ddfSKrzysztof Kozlowski 	ctrl->disable = s5pv210_retention_disable;
82cfa76ddfSKrzysztof Kozlowski 
83cfa76ddfSKrzysztof Kozlowski 	return ctrl;
84cfa76ddfSKrzysztof Kozlowski }
85cfa76ddfSKrzysztof Kozlowski 
86cfa76ddfSKrzysztof Kozlowski static const struct samsung_retention_data s5pv210_retention_data __initconst = {
87cfa76ddfSKrzysztof Kozlowski 	.init	 = s5pv210_retention_init,
88cfa76ddfSKrzysztof Kozlowski };
89cfa76ddfSKrzysztof Kozlowski 
90cfa76ddfSKrzysztof Kozlowski /* pin banks of s5pv210 pin-controller */
91cfa76ddfSKrzysztof Kozlowski static const struct samsung_pin_bank_data s5pv210_pin_bank[] __initconst = {
92938a10bbSPaweł Chmiel 	/* Must start with EINTG banks, ordered by EINT group number. */
93cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpa0", 0x00),
94cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(4, 0x020, "gpa1", 0x04),
95cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpb", 0x08),
96cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(5, 0x060, "gpc0", 0x0c),
97cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(5, 0x080, "gpc1", 0x10),
98cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(4, 0x0a0, "gpd0", 0x14),
99cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(6, 0x0c0, "gpd1", 0x18),
100cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x0e0, "gpe0", 0x1c),
101cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(5, 0x100, "gpe1", 0x20),
102cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x120, "gpf0", 0x24),
103cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x140, "gpf1", 0x28),
104cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x160, "gpf2", 0x2c),
105cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(6, 0x180, "gpf3", 0x30),
106cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(7, 0x1a0, "gpg0", 0x34),
107cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(7, 0x1c0, "gpg1", 0x38),
108cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(7, 0x1e0, "gpg2", 0x3c),
109cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(7, 0x200, "gpg3", 0x40),
110cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x240, "gpj0", 0x44),
111cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(6, 0x260, "gpj1", 0x48),
112cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x280, "gpj2", 0x4c),
113cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x2a0, "gpj3", 0x50),
114cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(5, 0x2c0, "gpj4", 0x54),
1155cf9a338SPaweł Chmiel 	EXYNOS_PIN_BANK_EINTN(7, 0x220, "gpi"),
116cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(8, 0x2e0, "mp01"),
117cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(4, 0x300, "mp02"),
118cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(8, 0x320, "mp03"),
119cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(8, 0x340, "mp04"),
120cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(8, 0x360, "mp05"),
121cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(8, 0x380, "mp06"),
122cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(8, 0x3a0, "mp07"),
123cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTW(8, 0xc00, "gph0", 0x00),
124cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTW(8, 0xc20, "gph1", 0x04),
125cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTW(8, 0xc40, "gph2", 0x08),
126cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTW(8, 0xc60, "gph3", 0x0c),
127cfa76ddfSKrzysztof Kozlowski };
128cfa76ddfSKrzysztof Kozlowski 
12993b0beaeSKrzysztof Kozlowski static const struct samsung_pin_ctrl s5pv210_pin_ctrl[] __initconst = {
130cfa76ddfSKrzysztof Kozlowski 	{
131cfa76ddfSKrzysztof Kozlowski 		/* pin-controller instance 0 data */
132cfa76ddfSKrzysztof Kozlowski 		.pin_banks	= s5pv210_pin_bank,
133cfa76ddfSKrzysztof Kozlowski 		.nr_banks	= ARRAY_SIZE(s5pv210_pin_bank),
134cfa76ddfSKrzysztof Kozlowski 		.eint_gpio_init = exynos_eint_gpio_init,
135cfa76ddfSKrzysztof Kozlowski 		.eint_wkup_init = exynos_eint_wkup_init,
136cfa76ddfSKrzysztof Kozlowski 		.suspend	= exynos_pinctrl_suspend,
137cfa76ddfSKrzysztof Kozlowski 		.resume		= exynos_pinctrl_resume,
138cfa76ddfSKrzysztof Kozlowski 		.retention_data	= &s5pv210_retention_data,
139cfa76ddfSKrzysztof Kozlowski 	},
140cfa76ddfSKrzysztof Kozlowski };
141cfa76ddfSKrzysztof Kozlowski 
14293b0beaeSKrzysztof Kozlowski const struct samsung_pinctrl_of_match_data s5pv210_of_data __initconst = {
14393b0beaeSKrzysztof Kozlowski 	.ctrl		= s5pv210_pin_ctrl,
14493b0beaeSKrzysztof Kozlowski 	.num_ctrl	= ARRAY_SIZE(s5pv210_pin_ctrl),
14593b0beaeSKrzysztof Kozlowski };
14693b0beaeSKrzysztof Kozlowski 
147cfa76ddfSKrzysztof Kozlowski /* Pad retention control code for accessing PMU regmap */
148cfa76ddfSKrzysztof Kozlowski static atomic_t exynos_shared_retention_refcnt;
149cfa76ddfSKrzysztof Kozlowski 
150cfa76ddfSKrzysztof Kozlowski /* pin banks of exynos3250 pin-controller 0 */
151cfa76ddfSKrzysztof Kozlowski static const struct samsung_pin_bank_data exynos3250_pin_banks0[] __initconst = {
152938a10bbSPaweł Chmiel 	/* Must start with EINTG banks, ordered by EINT group number. */
153cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpa0", 0x00),
154cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(6, 0x020, "gpa1", 0x04),
155cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpb",  0x08),
156cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(5, 0x060, "gpc0", 0x0c),
157cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(5, 0x080, "gpc1", 0x10),
158cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(4, 0x0a0, "gpd0", 0x14),
159cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(4, 0x0c0, "gpd1", 0x18),
160cfa76ddfSKrzysztof Kozlowski };
161cfa76ddfSKrzysztof Kozlowski 
162cfa76ddfSKrzysztof Kozlowski /* pin banks of exynos3250 pin-controller 1 */
163cfa76ddfSKrzysztof Kozlowski static const struct samsung_pin_bank_data exynos3250_pin_banks1[] __initconst = {
164938a10bbSPaweł Chmiel 	/* Must start with EINTG banks, ordered by EINT group number. */
165cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(8, 0x120, "gpe0"),
166cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(8, 0x140, "gpe1"),
167cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(3, 0x180, "gpe2"),
168cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpk0", 0x08),
169cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(7, 0x060, "gpk1", 0x0c),
170cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(7, 0x080, "gpk2", 0x10),
171cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(4, 0x0c0, "gpl0", 0x18),
172cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x260, "gpm0", 0x24),
173cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(7, 0x280, "gpm1", 0x28),
174cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(5, 0x2a0, "gpm2", 0x2c),
175cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x2c0, "gpm3", 0x30),
176cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x2e0, "gpm4", 0x34),
177cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTW(8, 0xc00, "gpx0", 0x00),
178cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTW(8, 0xc20, "gpx1", 0x04),
179cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTW(8, 0xc40, "gpx2", 0x08),
180cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTW(8, 0xc60, "gpx3", 0x0c),
181cfa76ddfSKrzysztof Kozlowski };
182cfa76ddfSKrzysztof Kozlowski 
183cfa76ddfSKrzysztof Kozlowski /*
184cfa76ddfSKrzysztof Kozlowski  * PMU pad retention groups for Exynos3250 doesn't match pin banks, so handle
185cfa76ddfSKrzysztof Kozlowski  * them all together
186cfa76ddfSKrzysztof Kozlowski  */
187cfa76ddfSKrzysztof Kozlowski static const u32 exynos3250_retention_regs[] = {
188cfa76ddfSKrzysztof Kozlowski 	S5P_PAD_RET_MAUDIO_OPTION,
189cfa76ddfSKrzysztof Kozlowski 	S5P_PAD_RET_GPIO_OPTION,
190cfa76ddfSKrzysztof Kozlowski 	S5P_PAD_RET_UART_OPTION,
191cfa76ddfSKrzysztof Kozlowski 	S5P_PAD_RET_MMCA_OPTION,
192cfa76ddfSKrzysztof Kozlowski 	S5P_PAD_RET_MMCB_OPTION,
193cfa76ddfSKrzysztof Kozlowski 	S5P_PAD_RET_EBIA_OPTION,
194cfa76ddfSKrzysztof Kozlowski 	S5P_PAD_RET_EBIB_OPTION,
195cfa76ddfSKrzysztof Kozlowski 	S5P_PAD_RET_MMC2_OPTION,
196cfa76ddfSKrzysztof Kozlowski 	S5P_PAD_RET_SPI_OPTION,
197cfa76ddfSKrzysztof Kozlowski };
198cfa76ddfSKrzysztof Kozlowski 
199cfa76ddfSKrzysztof Kozlowski static const struct samsung_retention_data exynos3250_retention_data __initconst = {
200cfa76ddfSKrzysztof Kozlowski 	.regs	 = exynos3250_retention_regs,
201cfa76ddfSKrzysztof Kozlowski 	.nr_regs = ARRAY_SIZE(exynos3250_retention_regs),
202cfa76ddfSKrzysztof Kozlowski 	.value	 = EXYNOS_WAKEUP_FROM_LOWPWR,
203cfa76ddfSKrzysztof Kozlowski 	.refcnt	 = &exynos_shared_retention_refcnt,
204cfa76ddfSKrzysztof Kozlowski 	.init	 = exynos_retention_init,
205cfa76ddfSKrzysztof Kozlowski };
206cfa76ddfSKrzysztof Kozlowski 
207cfa76ddfSKrzysztof Kozlowski /*
208cfa76ddfSKrzysztof Kozlowski  * Samsung pinctrl driver data for Exynos3250 SoC. Exynos3250 SoC includes
209cfa76ddfSKrzysztof Kozlowski  * two gpio/pin-mux/pinconfig controllers.
210cfa76ddfSKrzysztof Kozlowski  */
21193b0beaeSKrzysztof Kozlowski static const struct samsung_pin_ctrl exynos3250_pin_ctrl[] __initconst = {
212cfa76ddfSKrzysztof Kozlowski 	{
213cfa76ddfSKrzysztof Kozlowski 		/* pin-controller instance 0 data */
214cfa76ddfSKrzysztof Kozlowski 		.pin_banks	= exynos3250_pin_banks0,
215cfa76ddfSKrzysztof Kozlowski 		.nr_banks	= ARRAY_SIZE(exynos3250_pin_banks0),
216cfa76ddfSKrzysztof Kozlowski 		.eint_gpio_init = exynos_eint_gpio_init,
217cfa76ddfSKrzysztof Kozlowski 		.suspend	= exynos_pinctrl_suspend,
218cfa76ddfSKrzysztof Kozlowski 		.resume		= exynos_pinctrl_resume,
219cfa76ddfSKrzysztof Kozlowski 		.retention_data	= &exynos3250_retention_data,
220cfa76ddfSKrzysztof Kozlowski 	}, {
221cfa76ddfSKrzysztof Kozlowski 		/* pin-controller instance 1 data */
222cfa76ddfSKrzysztof Kozlowski 		.pin_banks	= exynos3250_pin_banks1,
223cfa76ddfSKrzysztof Kozlowski 		.nr_banks	= ARRAY_SIZE(exynos3250_pin_banks1),
224cfa76ddfSKrzysztof Kozlowski 		.eint_gpio_init = exynos_eint_gpio_init,
225cfa76ddfSKrzysztof Kozlowski 		.eint_wkup_init = exynos_eint_wkup_init,
226cfa76ddfSKrzysztof Kozlowski 		.suspend	= exynos_pinctrl_suspend,
227cfa76ddfSKrzysztof Kozlowski 		.resume		= exynos_pinctrl_resume,
228cfa76ddfSKrzysztof Kozlowski 		.retention_data	= &exynos3250_retention_data,
229cfa76ddfSKrzysztof Kozlowski 	},
230cfa76ddfSKrzysztof Kozlowski };
231cfa76ddfSKrzysztof Kozlowski 
23293b0beaeSKrzysztof Kozlowski const struct samsung_pinctrl_of_match_data exynos3250_of_data __initconst = {
23393b0beaeSKrzysztof Kozlowski 	.ctrl		= exynos3250_pin_ctrl,
23493b0beaeSKrzysztof Kozlowski 	.num_ctrl	= ARRAY_SIZE(exynos3250_pin_ctrl),
23593b0beaeSKrzysztof Kozlowski };
23693b0beaeSKrzysztof Kozlowski 
237cfa76ddfSKrzysztof Kozlowski /* pin banks of exynos4210 pin-controller 0 */
238cfa76ddfSKrzysztof Kozlowski static const struct samsung_pin_bank_data exynos4210_pin_banks0[] __initconst = {
239938a10bbSPaweł Chmiel 	/* Must start with EINTG banks, ordered by EINT group number. */
240cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpa0", 0x00),
241cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(6, 0x020, "gpa1", 0x04),
242cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpb", 0x08),
243cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(5, 0x060, "gpc0", 0x0c),
244cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(5, 0x080, "gpc1", 0x10),
245cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(4, 0x0A0, "gpd0", 0x14),
246cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(4, 0x0C0, "gpd1", 0x18),
247cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(5, 0x0E0, "gpe0", 0x1c),
248cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x100, "gpe1", 0x20),
249cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(6, 0x120, "gpe2", 0x24),
250cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x140, "gpe3", 0x28),
251cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x160, "gpe4", 0x2c),
252cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x180, "gpf0", 0x30),
253cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x1A0, "gpf1", 0x34),
254cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x1C0, "gpf2", 0x38),
255cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(6, 0x1E0, "gpf3", 0x3c),
256cfa76ddfSKrzysztof Kozlowski };
257cfa76ddfSKrzysztof Kozlowski 
258cfa76ddfSKrzysztof Kozlowski /* pin banks of exynos4210 pin-controller 1 */
259cfa76ddfSKrzysztof Kozlowski static const struct samsung_pin_bank_data exynos4210_pin_banks1[] __initconst = {
260938a10bbSPaweł Chmiel 	/* Must start with EINTG banks, ordered by EINT group number. */
261cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpj0", 0x00),
262cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(5, 0x020, "gpj1", 0x04),
263cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(7, 0x040, "gpk0", 0x08),
264cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(7, 0x060, "gpk1", 0x0c),
265cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(7, 0x080, "gpk2", 0x10),
266cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(7, 0x0A0, "gpk3", 0x14),
267cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x0C0, "gpl0", 0x18),
268cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(3, 0x0E0, "gpl1", 0x1c),
269cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x100, "gpl2", 0x20),
270cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(6, 0x120, "gpy0"),
271cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(4, 0x140, "gpy1"),
272cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(6, 0x160, "gpy2"),
273cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(8, 0x180, "gpy3"),
274cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(8, 0x1A0, "gpy4"),
275cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(8, 0x1C0, "gpy5"),
276cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(8, 0x1E0, "gpy6"),
277cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTW(8, 0xC00, "gpx0", 0x00),
278cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTW(8, 0xC20, "gpx1", 0x04),
279cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTW(8, 0xC40, "gpx2", 0x08),
280cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTW(8, 0xC60, "gpx3", 0x0c),
281cfa76ddfSKrzysztof Kozlowski };
282cfa76ddfSKrzysztof Kozlowski 
283cfa76ddfSKrzysztof Kozlowski /* pin banks of exynos4210 pin-controller 2 */
284cfa76ddfSKrzysztof Kozlowski static const struct samsung_pin_bank_data exynos4210_pin_banks2[] __initconst = {
285938a10bbSPaweł Chmiel 	/* Must start with EINTG banks, ordered by EINT group number. */
286cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(7, 0x000, "gpz"),
287cfa76ddfSKrzysztof Kozlowski };
288cfa76ddfSKrzysztof Kozlowski 
289cfa76ddfSKrzysztof Kozlowski /* PMU pad retention groups registers for Exynos4 (without audio) */
290cfa76ddfSKrzysztof Kozlowski static const u32 exynos4_retention_regs[] = {
291cfa76ddfSKrzysztof Kozlowski 	S5P_PAD_RET_GPIO_OPTION,
292cfa76ddfSKrzysztof Kozlowski 	S5P_PAD_RET_UART_OPTION,
293cfa76ddfSKrzysztof Kozlowski 	S5P_PAD_RET_MMCA_OPTION,
294cfa76ddfSKrzysztof Kozlowski 	S5P_PAD_RET_MMCB_OPTION,
295cfa76ddfSKrzysztof Kozlowski 	S5P_PAD_RET_EBIA_OPTION,
296cfa76ddfSKrzysztof Kozlowski 	S5P_PAD_RET_EBIB_OPTION,
297cfa76ddfSKrzysztof Kozlowski };
298cfa76ddfSKrzysztof Kozlowski 
299cfa76ddfSKrzysztof Kozlowski static const struct samsung_retention_data exynos4_retention_data __initconst = {
300cfa76ddfSKrzysztof Kozlowski 	.regs	 = exynos4_retention_regs,
301cfa76ddfSKrzysztof Kozlowski 	.nr_regs = ARRAY_SIZE(exynos4_retention_regs),
302cfa76ddfSKrzysztof Kozlowski 	.value	 = EXYNOS_WAKEUP_FROM_LOWPWR,
303cfa76ddfSKrzysztof Kozlowski 	.refcnt	 = &exynos_shared_retention_refcnt,
304cfa76ddfSKrzysztof Kozlowski 	.init	 = exynos_retention_init,
305cfa76ddfSKrzysztof Kozlowski };
306cfa76ddfSKrzysztof Kozlowski 
307cfa76ddfSKrzysztof Kozlowski /* PMU retention control for audio pins can be tied to audio pin bank */
308cfa76ddfSKrzysztof Kozlowski static const u32 exynos4_audio_retention_regs[] = {
309cfa76ddfSKrzysztof Kozlowski 	S5P_PAD_RET_MAUDIO_OPTION,
310cfa76ddfSKrzysztof Kozlowski };
311cfa76ddfSKrzysztof Kozlowski 
312cfa76ddfSKrzysztof Kozlowski static const struct samsung_retention_data exynos4_audio_retention_data __initconst = {
313cfa76ddfSKrzysztof Kozlowski 	.regs	 = exynos4_audio_retention_regs,
314cfa76ddfSKrzysztof Kozlowski 	.nr_regs = ARRAY_SIZE(exynos4_audio_retention_regs),
315cfa76ddfSKrzysztof Kozlowski 	.value	 = EXYNOS_WAKEUP_FROM_LOWPWR,
316cfa76ddfSKrzysztof Kozlowski 	.init	 = exynos_retention_init,
317cfa76ddfSKrzysztof Kozlowski };
318cfa76ddfSKrzysztof Kozlowski 
319cfa76ddfSKrzysztof Kozlowski /*
320cfa76ddfSKrzysztof Kozlowski  * Samsung pinctrl driver data for Exynos4210 SoC. Exynos4210 SoC includes
321cfa76ddfSKrzysztof Kozlowski  * three gpio/pin-mux/pinconfig controllers.
322cfa76ddfSKrzysztof Kozlowski  */
32393b0beaeSKrzysztof Kozlowski static const struct samsung_pin_ctrl exynos4210_pin_ctrl[] __initconst = {
324cfa76ddfSKrzysztof Kozlowski 	{
325cfa76ddfSKrzysztof Kozlowski 		/* pin-controller instance 0 data */
326cfa76ddfSKrzysztof Kozlowski 		.pin_banks	= exynos4210_pin_banks0,
327cfa76ddfSKrzysztof Kozlowski 		.nr_banks	= ARRAY_SIZE(exynos4210_pin_banks0),
328cfa76ddfSKrzysztof Kozlowski 		.eint_gpio_init = exynos_eint_gpio_init,
329cfa76ddfSKrzysztof Kozlowski 		.suspend	= exynos_pinctrl_suspend,
330cfa76ddfSKrzysztof Kozlowski 		.resume		= exynos_pinctrl_resume,
331cfa76ddfSKrzysztof Kozlowski 		.retention_data	= &exynos4_retention_data,
332cfa76ddfSKrzysztof Kozlowski 	}, {
333cfa76ddfSKrzysztof Kozlowski 		/* pin-controller instance 1 data */
334cfa76ddfSKrzysztof Kozlowski 		.pin_banks	= exynos4210_pin_banks1,
335cfa76ddfSKrzysztof Kozlowski 		.nr_banks	= ARRAY_SIZE(exynos4210_pin_banks1),
336cfa76ddfSKrzysztof Kozlowski 		.eint_gpio_init = exynos_eint_gpio_init,
337cfa76ddfSKrzysztof Kozlowski 		.eint_wkup_init = exynos_eint_wkup_init,
338cfa76ddfSKrzysztof Kozlowski 		.suspend	= exynos_pinctrl_suspend,
339cfa76ddfSKrzysztof Kozlowski 		.resume		= exynos_pinctrl_resume,
340cfa76ddfSKrzysztof Kozlowski 		.retention_data	= &exynos4_retention_data,
341cfa76ddfSKrzysztof Kozlowski 	}, {
342cfa76ddfSKrzysztof Kozlowski 		/* pin-controller instance 2 data */
343cfa76ddfSKrzysztof Kozlowski 		.pin_banks	= exynos4210_pin_banks2,
344cfa76ddfSKrzysztof Kozlowski 		.nr_banks	= ARRAY_SIZE(exynos4210_pin_banks2),
345cfa76ddfSKrzysztof Kozlowski 		.retention_data	= &exynos4_audio_retention_data,
346cfa76ddfSKrzysztof Kozlowski 	},
347cfa76ddfSKrzysztof Kozlowski };
348cfa76ddfSKrzysztof Kozlowski 
34993b0beaeSKrzysztof Kozlowski const struct samsung_pinctrl_of_match_data exynos4210_of_data __initconst = {
35093b0beaeSKrzysztof Kozlowski 	.ctrl		= exynos4210_pin_ctrl,
35193b0beaeSKrzysztof Kozlowski 	.num_ctrl	= ARRAY_SIZE(exynos4210_pin_ctrl),
35293b0beaeSKrzysztof Kozlowski };
35393b0beaeSKrzysztof Kozlowski 
354cfa76ddfSKrzysztof Kozlowski /* pin banks of exynos4x12 pin-controller 0 */
355cfa76ddfSKrzysztof Kozlowski static const struct samsung_pin_bank_data exynos4x12_pin_banks0[] __initconst = {
356938a10bbSPaweł Chmiel 	/* Must start with EINTG banks, ordered by EINT group number. */
357cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpa0", 0x00),
358cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(6, 0x020, "gpa1", 0x04),
359cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpb", 0x08),
360cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(5, 0x060, "gpc0", 0x0c),
361cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(5, 0x080, "gpc1", 0x10),
362cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(4, 0x0A0, "gpd0", 0x14),
363cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(4, 0x0C0, "gpd1", 0x18),
364cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x180, "gpf0", 0x30),
365cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x1A0, "gpf1", 0x34),
366cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x1C0, "gpf2", 0x38),
367cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(6, 0x1E0, "gpf3", 0x3c),
368cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x240, "gpj0", 0x40),
369cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(5, 0x260, "gpj1", 0x44),
370cfa76ddfSKrzysztof Kozlowski };
371cfa76ddfSKrzysztof Kozlowski 
372cfa76ddfSKrzysztof Kozlowski /* pin banks of exynos4x12 pin-controller 1 */
373cfa76ddfSKrzysztof Kozlowski static const struct samsung_pin_bank_data exynos4x12_pin_banks1[] __initconst = {
374938a10bbSPaweł Chmiel 	/* Must start with EINTG banks, ordered by EINT group number. */
375cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(7, 0x040, "gpk0", 0x08),
376cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(7, 0x060, "gpk1", 0x0c),
377cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(7, 0x080, "gpk2", 0x10),
378cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(7, 0x0A0, "gpk3", 0x14),
379cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(7, 0x0C0, "gpl0", 0x18),
380cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(2, 0x0E0, "gpl1", 0x1c),
381cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x100, "gpl2", 0x20),
382cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x260, "gpm0", 0x24),
383cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(7, 0x280, "gpm1", 0x28),
384cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(5, 0x2A0, "gpm2", 0x2c),
385cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x2C0, "gpm3", 0x30),
386cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x2E0, "gpm4", 0x34),
387cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(6, 0x120, "gpy0"),
388cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(4, 0x140, "gpy1"),
389cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(6, 0x160, "gpy2"),
390cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(8, 0x180, "gpy3"),
391cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(8, 0x1A0, "gpy4"),
392cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(8, 0x1C0, "gpy5"),
393cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(8, 0x1E0, "gpy6"),
394cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTW(8, 0xC00, "gpx0", 0x00),
395cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTW(8, 0xC20, "gpx1", 0x04),
396cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTW(8, 0xC40, "gpx2", 0x08),
397cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTW(8, 0xC60, "gpx3", 0x0c),
398cfa76ddfSKrzysztof Kozlowski };
399cfa76ddfSKrzysztof Kozlowski 
400cfa76ddfSKrzysztof Kozlowski /* pin banks of exynos4x12 pin-controller 2 */
401cfa76ddfSKrzysztof Kozlowski static const struct samsung_pin_bank_data exynos4x12_pin_banks2[] __initconst = {
402938a10bbSPaweł Chmiel 	/* Must start with EINTG banks, ordered by EINT group number. */
403cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(7, 0x000, "gpz", 0x00),
404cfa76ddfSKrzysztof Kozlowski };
405cfa76ddfSKrzysztof Kozlowski 
406cfa76ddfSKrzysztof Kozlowski /* pin banks of exynos4x12 pin-controller 3 */
407cfa76ddfSKrzysztof Kozlowski static const struct samsung_pin_bank_data exynos4x12_pin_banks3[] __initconst = {
408938a10bbSPaweł Chmiel 	/* Must start with EINTG banks, ordered by EINT group number. */
409cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpv0", 0x00),
410cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x020, "gpv1", 0x04),
411cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpv2", 0x08),
412cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x060, "gpv3", 0x0c),
413cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(2, 0x080, "gpv4", 0x10),
414cfa76ddfSKrzysztof Kozlowski };
415cfa76ddfSKrzysztof Kozlowski 
416cfa76ddfSKrzysztof Kozlowski /*
417cfa76ddfSKrzysztof Kozlowski  * Samsung pinctrl driver data for Exynos4x12 SoC. Exynos4x12 SoC includes
418cfa76ddfSKrzysztof Kozlowski  * four gpio/pin-mux/pinconfig controllers.
419cfa76ddfSKrzysztof Kozlowski  */
42093b0beaeSKrzysztof Kozlowski static const struct samsung_pin_ctrl exynos4x12_pin_ctrl[] __initconst = {
421cfa76ddfSKrzysztof Kozlowski 	{
422cfa76ddfSKrzysztof Kozlowski 		/* pin-controller instance 0 data */
423cfa76ddfSKrzysztof Kozlowski 		.pin_banks	= exynos4x12_pin_banks0,
424cfa76ddfSKrzysztof Kozlowski 		.nr_banks	= ARRAY_SIZE(exynos4x12_pin_banks0),
425cfa76ddfSKrzysztof Kozlowski 		.eint_gpio_init = exynos_eint_gpio_init,
426cfa76ddfSKrzysztof Kozlowski 		.suspend	= exynos_pinctrl_suspend,
427cfa76ddfSKrzysztof Kozlowski 		.resume		= exynos_pinctrl_resume,
428cfa76ddfSKrzysztof Kozlowski 		.retention_data	= &exynos4_retention_data,
429cfa76ddfSKrzysztof Kozlowski 	}, {
430cfa76ddfSKrzysztof Kozlowski 		/* pin-controller instance 1 data */
431cfa76ddfSKrzysztof Kozlowski 		.pin_banks	= exynos4x12_pin_banks1,
432cfa76ddfSKrzysztof Kozlowski 		.nr_banks	= ARRAY_SIZE(exynos4x12_pin_banks1),
433cfa76ddfSKrzysztof Kozlowski 		.eint_gpio_init = exynos_eint_gpio_init,
434cfa76ddfSKrzysztof Kozlowski 		.eint_wkup_init = exynos_eint_wkup_init,
435cfa76ddfSKrzysztof Kozlowski 		.suspend	= exynos_pinctrl_suspend,
436cfa76ddfSKrzysztof Kozlowski 		.resume		= exynos_pinctrl_resume,
437cfa76ddfSKrzysztof Kozlowski 		.retention_data	= &exynos4_retention_data,
438cfa76ddfSKrzysztof Kozlowski 	}, {
439cfa76ddfSKrzysztof Kozlowski 		/* pin-controller instance 2 data */
440cfa76ddfSKrzysztof Kozlowski 		.pin_banks	= exynos4x12_pin_banks2,
441cfa76ddfSKrzysztof Kozlowski 		.nr_banks	= ARRAY_SIZE(exynos4x12_pin_banks2),
442cfa76ddfSKrzysztof Kozlowski 		.eint_gpio_init = exynos_eint_gpio_init,
443cfa76ddfSKrzysztof Kozlowski 		.suspend	= exynos_pinctrl_suspend,
444cfa76ddfSKrzysztof Kozlowski 		.resume		= exynos_pinctrl_resume,
445cfa76ddfSKrzysztof Kozlowski 		.retention_data	= &exynos4_audio_retention_data,
446cfa76ddfSKrzysztof Kozlowski 	}, {
447cfa76ddfSKrzysztof Kozlowski 		/* pin-controller instance 3 data */
448cfa76ddfSKrzysztof Kozlowski 		.pin_banks	= exynos4x12_pin_banks3,
449cfa76ddfSKrzysztof Kozlowski 		.nr_banks	= ARRAY_SIZE(exynos4x12_pin_banks3),
450cfa76ddfSKrzysztof Kozlowski 		.eint_gpio_init = exynos_eint_gpio_init,
451cfa76ddfSKrzysztof Kozlowski 		.suspend	= exynos_pinctrl_suspend,
452cfa76ddfSKrzysztof Kozlowski 		.resume		= exynos_pinctrl_resume,
453cfa76ddfSKrzysztof Kozlowski 	},
454cfa76ddfSKrzysztof Kozlowski };
455cfa76ddfSKrzysztof Kozlowski 
45693b0beaeSKrzysztof Kozlowski const struct samsung_pinctrl_of_match_data exynos4x12_of_data __initconst = {
45793b0beaeSKrzysztof Kozlowski 	.ctrl		= exynos4x12_pin_ctrl,
45893b0beaeSKrzysztof Kozlowski 	.num_ctrl	= ARRAY_SIZE(exynos4x12_pin_ctrl),
45993b0beaeSKrzysztof Kozlowski };
46093b0beaeSKrzysztof Kozlowski 
461cfa76ddfSKrzysztof Kozlowski /* pin banks of exynos5250 pin-controller 0 */
462cfa76ddfSKrzysztof Kozlowski static const struct samsung_pin_bank_data exynos5250_pin_banks0[] __initconst = {
463938a10bbSPaweł Chmiel 	/* Must start with EINTG banks, ordered by EINT group number. */
464cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpa0", 0x00),
465cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(6, 0x020, "gpa1", 0x04),
466cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpa2", 0x08),
467cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(5, 0x060, "gpb0", 0x0c),
468cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(5, 0x080, "gpb1", 0x10),
469cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(4, 0x0A0, "gpb2", 0x14),
470cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(4, 0x0C0, "gpb3", 0x18),
471cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(7, 0x0E0, "gpc0", 0x1c),
472cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(4, 0x100, "gpc1", 0x20),
473cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(7, 0x120, "gpc2", 0x24),
474cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(7, 0x140, "gpc3", 0x28),
475cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(4, 0x160, "gpd0", 0x2c),
476cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x180, "gpd1", 0x30),
477cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(7, 0x2E0, "gpc4", 0x34),
478cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(6, 0x1A0, "gpy0"),
479cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(4, 0x1C0, "gpy1"),
480cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(6, 0x1E0, "gpy2"),
481cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(8, 0x200, "gpy3"),
482cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(8, 0x220, "gpy4"),
483cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(8, 0x240, "gpy5"),
484cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(8, 0x260, "gpy6"),
485cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTW(8, 0xC00, "gpx0", 0x00),
486cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTW(8, 0xC20, "gpx1", 0x04),
487cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTW(8, 0xC40, "gpx2", 0x08),
488cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTW(8, 0xC60, "gpx3", 0x0c),
489cfa76ddfSKrzysztof Kozlowski };
490cfa76ddfSKrzysztof Kozlowski 
491cfa76ddfSKrzysztof Kozlowski /* pin banks of exynos5250 pin-controller 1 */
492cfa76ddfSKrzysztof Kozlowski static const struct samsung_pin_bank_data exynos5250_pin_banks1[] __initconst = {
493938a10bbSPaweł Chmiel 	/* Must start with EINTG banks, ordered by EINT group number. */
494cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpe0", 0x00),
495cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(2, 0x020, "gpe1", 0x04),
496cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(4, 0x040, "gpf0", 0x08),
497cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(4, 0x060, "gpf1", 0x0c),
498cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x080, "gpg0", 0x10),
499cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x0A0, "gpg1", 0x14),
500cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(2, 0x0C0, "gpg2", 0x18),
501cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(4, 0x0E0, "gph0", 0x1c),
502cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x100, "gph1", 0x20),
503cfa76ddfSKrzysztof Kozlowski };
504cfa76ddfSKrzysztof Kozlowski 
505cfa76ddfSKrzysztof Kozlowski /* pin banks of exynos5250 pin-controller 2 */
506cfa76ddfSKrzysztof Kozlowski static const struct samsung_pin_bank_data exynos5250_pin_banks2[] __initconst = {
507938a10bbSPaweł Chmiel 	/* Must start with EINTG banks, ordered by EINT group number. */
508cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpv0", 0x00),
509cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x020, "gpv1", 0x04),
510cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x060, "gpv2", 0x08),
511cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x080, "gpv3", 0x0c),
512cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(2, 0x0C0, "gpv4", 0x10),
513cfa76ddfSKrzysztof Kozlowski };
514cfa76ddfSKrzysztof Kozlowski 
515cfa76ddfSKrzysztof Kozlowski /* pin banks of exynos5250 pin-controller 3 */
516cfa76ddfSKrzysztof Kozlowski static const struct samsung_pin_bank_data exynos5250_pin_banks3[] __initconst = {
517938a10bbSPaweł Chmiel 	/* Must start with EINTG banks, ordered by EINT group number. */
518cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(7, 0x000, "gpz", 0x00),
519cfa76ddfSKrzysztof Kozlowski };
520cfa76ddfSKrzysztof Kozlowski 
521cfa76ddfSKrzysztof Kozlowski /*
522cfa76ddfSKrzysztof Kozlowski  * Samsung pinctrl driver data for Exynos5250 SoC. Exynos5250 SoC includes
523cfa76ddfSKrzysztof Kozlowski  * four gpio/pin-mux/pinconfig controllers.
524cfa76ddfSKrzysztof Kozlowski  */
52593b0beaeSKrzysztof Kozlowski static const struct samsung_pin_ctrl exynos5250_pin_ctrl[] __initconst = {
526cfa76ddfSKrzysztof Kozlowski 	{
527cfa76ddfSKrzysztof Kozlowski 		/* pin-controller instance 0 data */
528cfa76ddfSKrzysztof Kozlowski 		.pin_banks	= exynos5250_pin_banks0,
529cfa76ddfSKrzysztof Kozlowski 		.nr_banks	= ARRAY_SIZE(exynos5250_pin_banks0),
530cfa76ddfSKrzysztof Kozlowski 		.eint_gpio_init = exynos_eint_gpio_init,
531cfa76ddfSKrzysztof Kozlowski 		.eint_wkup_init = exynos_eint_wkup_init,
532cfa76ddfSKrzysztof Kozlowski 		.suspend	= exynos_pinctrl_suspend,
533cfa76ddfSKrzysztof Kozlowski 		.resume		= exynos_pinctrl_resume,
534cfa76ddfSKrzysztof Kozlowski 		.retention_data	= &exynos4_retention_data,
535cfa76ddfSKrzysztof Kozlowski 	}, {
536cfa76ddfSKrzysztof Kozlowski 		/* pin-controller instance 1 data */
537cfa76ddfSKrzysztof Kozlowski 		.pin_banks	= exynos5250_pin_banks1,
538cfa76ddfSKrzysztof Kozlowski 		.nr_banks	= ARRAY_SIZE(exynos5250_pin_banks1),
539cfa76ddfSKrzysztof Kozlowski 		.eint_gpio_init = exynos_eint_gpio_init,
540cfa76ddfSKrzysztof Kozlowski 		.suspend	= exynos_pinctrl_suspend,
541cfa76ddfSKrzysztof Kozlowski 		.resume		= exynos_pinctrl_resume,
542cfa76ddfSKrzysztof Kozlowski 		.retention_data	= &exynos4_retention_data,
543cfa76ddfSKrzysztof Kozlowski 	}, {
544cfa76ddfSKrzysztof Kozlowski 		/* pin-controller instance 2 data */
545cfa76ddfSKrzysztof Kozlowski 		.pin_banks	= exynos5250_pin_banks2,
546cfa76ddfSKrzysztof Kozlowski 		.nr_banks	= ARRAY_SIZE(exynos5250_pin_banks2),
547cfa76ddfSKrzysztof Kozlowski 		.eint_gpio_init = exynos_eint_gpio_init,
548cfa76ddfSKrzysztof Kozlowski 		.suspend	= exynos_pinctrl_suspend,
549cfa76ddfSKrzysztof Kozlowski 		.resume		= exynos_pinctrl_resume,
550cfa76ddfSKrzysztof Kozlowski 	}, {
551cfa76ddfSKrzysztof Kozlowski 		/* pin-controller instance 3 data */
552cfa76ddfSKrzysztof Kozlowski 		.pin_banks	= exynos5250_pin_banks3,
553cfa76ddfSKrzysztof Kozlowski 		.nr_banks	= ARRAY_SIZE(exynos5250_pin_banks3),
554cfa76ddfSKrzysztof Kozlowski 		.eint_gpio_init = exynos_eint_gpio_init,
555cfa76ddfSKrzysztof Kozlowski 		.suspend	= exynos_pinctrl_suspend,
556cfa76ddfSKrzysztof Kozlowski 		.resume		= exynos_pinctrl_resume,
557cfa76ddfSKrzysztof Kozlowski 		.retention_data	= &exynos4_audio_retention_data,
558cfa76ddfSKrzysztof Kozlowski 	},
559cfa76ddfSKrzysztof Kozlowski };
560cfa76ddfSKrzysztof Kozlowski 
56193b0beaeSKrzysztof Kozlowski const struct samsung_pinctrl_of_match_data exynos5250_of_data __initconst = {
56293b0beaeSKrzysztof Kozlowski 	.ctrl		= exynos5250_pin_ctrl,
56393b0beaeSKrzysztof Kozlowski 	.num_ctrl	= ARRAY_SIZE(exynos5250_pin_ctrl),
56493b0beaeSKrzysztof Kozlowski };
56593b0beaeSKrzysztof Kozlowski 
566cfa76ddfSKrzysztof Kozlowski /* pin banks of exynos5260 pin-controller 0 */
567cfa76ddfSKrzysztof Kozlowski static const struct samsung_pin_bank_data exynos5260_pin_banks0[] __initconst = {
568938a10bbSPaweł Chmiel 	/* Must start with EINTG banks, ordered by EINT group number. */
569cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(4, 0x000, "gpa0", 0x00),
570cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(7, 0x020, "gpa1", 0x04),
571cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpa2", 0x08),
572cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(5, 0x060, "gpb0", 0x0c),
573cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(4, 0x080, "gpb1", 0x10),
574cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(5, 0x0a0, "gpb2", 0x14),
575cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x0c0, "gpb3", 0x18),
576cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x0e0, "gpb4", 0x1c),
577cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x100, "gpb5", 0x20),
578cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x120, "gpd0", 0x24),
579cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(7, 0x140, "gpd1", 0x28),
580cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(5, 0x160, "gpd2", 0x2c),
581cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x180, "gpe0", 0x30),
582cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(5, 0x1a0, "gpe1", 0x34),
583cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(4, 0x1c0, "gpf0", 0x38),
584cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x1e0, "gpf1", 0x3c),
585cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(2, 0x200, "gpk0", 0x40),
586cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTW(8, 0xc00, "gpx0", 0x00),
587cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTW(8, 0xc20, "gpx1", 0x04),
588cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTW(8, 0xc40, "gpx2", 0x08),
589cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTW(8, 0xc60, "gpx3", 0x0c),
590cfa76ddfSKrzysztof Kozlowski };
591cfa76ddfSKrzysztof Kozlowski 
592cfa76ddfSKrzysztof Kozlowski /* pin banks of exynos5260 pin-controller 1 */
593cfa76ddfSKrzysztof Kozlowski static const struct samsung_pin_bank_data exynos5260_pin_banks1[] __initconst = {
594938a10bbSPaweł Chmiel 	/* Must start with EINTG banks, ordered by EINT group number. */
595cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(7, 0x000, "gpc0", 0x00),
596cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(6, 0x020, "gpc1", 0x04),
597cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(7, 0x040, "gpc2", 0x08),
598cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(4, 0x060, "gpc3", 0x0c),
599cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(4, 0x080, "gpc4", 0x10),
600cfa76ddfSKrzysztof Kozlowski };
601cfa76ddfSKrzysztof Kozlowski 
602cfa76ddfSKrzysztof Kozlowski /* pin banks of exynos5260 pin-controller 2 */
603cfa76ddfSKrzysztof Kozlowski static const struct samsung_pin_bank_data exynos5260_pin_banks2[] __initconst = {
604938a10bbSPaweł Chmiel 	/* Must start with EINTG banks, ordered by EINT group number. */
605cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(7, 0x000, "gpz0", 0x00),
606cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(4, 0x020, "gpz1", 0x04),
607cfa76ddfSKrzysztof Kozlowski };
608cfa76ddfSKrzysztof Kozlowski 
609cfa76ddfSKrzysztof Kozlowski /*
610cfa76ddfSKrzysztof Kozlowski  * Samsung pinctrl driver data for Exynos5260 SoC. Exynos5260 SoC includes
611cfa76ddfSKrzysztof Kozlowski  * three gpio/pin-mux/pinconfig controllers.
612cfa76ddfSKrzysztof Kozlowski  */
61393b0beaeSKrzysztof Kozlowski static const struct samsung_pin_ctrl exynos5260_pin_ctrl[] __initconst = {
614cfa76ddfSKrzysztof Kozlowski 	{
615cfa76ddfSKrzysztof Kozlowski 		/* pin-controller instance 0 data */
616cfa76ddfSKrzysztof Kozlowski 		.pin_banks	= exynos5260_pin_banks0,
617cfa76ddfSKrzysztof Kozlowski 		.nr_banks	= ARRAY_SIZE(exynos5260_pin_banks0),
618cfa76ddfSKrzysztof Kozlowski 		.eint_gpio_init = exynos_eint_gpio_init,
619cfa76ddfSKrzysztof Kozlowski 		.eint_wkup_init = exynos_eint_wkup_init,
620cafec5a7SKrzysztof Kozlowski 		.suspend	= exynos_pinctrl_suspend,
621cafec5a7SKrzysztof Kozlowski 		.resume		= exynos_pinctrl_resume,
622cfa76ddfSKrzysztof Kozlowski 	}, {
623cfa76ddfSKrzysztof Kozlowski 		/* pin-controller instance 1 data */
624cfa76ddfSKrzysztof Kozlowski 		.pin_banks	= exynos5260_pin_banks1,
625cfa76ddfSKrzysztof Kozlowski 		.nr_banks	= ARRAY_SIZE(exynos5260_pin_banks1),
626cfa76ddfSKrzysztof Kozlowski 		.eint_gpio_init = exynos_eint_gpio_init,
627cafec5a7SKrzysztof Kozlowski 		.suspend	= exynos_pinctrl_suspend,
628cafec5a7SKrzysztof Kozlowski 		.resume		= exynos_pinctrl_resume,
629cfa76ddfSKrzysztof Kozlowski 	}, {
630cfa76ddfSKrzysztof Kozlowski 		/* pin-controller instance 2 data */
631cfa76ddfSKrzysztof Kozlowski 		.pin_banks	= exynos5260_pin_banks2,
632cfa76ddfSKrzysztof Kozlowski 		.nr_banks	= ARRAY_SIZE(exynos5260_pin_banks2),
633cfa76ddfSKrzysztof Kozlowski 		.eint_gpio_init = exynos_eint_gpio_init,
634cafec5a7SKrzysztof Kozlowski 		.suspend	= exynos_pinctrl_suspend,
635cafec5a7SKrzysztof Kozlowski 		.resume		= exynos_pinctrl_resume,
636cfa76ddfSKrzysztof Kozlowski 	},
637cfa76ddfSKrzysztof Kozlowski };
638cfa76ddfSKrzysztof Kozlowski 
63993b0beaeSKrzysztof Kozlowski const struct samsung_pinctrl_of_match_data exynos5260_of_data __initconst = {
64093b0beaeSKrzysztof Kozlowski 	.ctrl		= exynos5260_pin_ctrl,
64193b0beaeSKrzysztof Kozlowski 	.num_ctrl	= ARRAY_SIZE(exynos5260_pin_ctrl),
64293b0beaeSKrzysztof Kozlowski };
64393b0beaeSKrzysztof Kozlowski 
644cfa76ddfSKrzysztof Kozlowski /* pin banks of exynos5410 pin-controller 0 */
645cfa76ddfSKrzysztof Kozlowski static const struct samsung_pin_bank_data exynos5410_pin_banks0[] __initconst = {
646938a10bbSPaweł Chmiel 	/* Must start with EINTG banks, ordered by EINT group number. */
647cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpa0", 0x00),
648cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(6, 0x020, "gpa1", 0x04),
649cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpa2", 0x08),
650cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(5, 0x060, "gpb0", 0x0c),
651cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(5, 0x080, "gpb1", 0x10),
652cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(4, 0x0A0, "gpb2", 0x14),
653cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(4, 0x0C0, "gpb3", 0x18),
654cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(7, 0x0E0, "gpc0", 0x1c),
655cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(4, 0x100, "gpc3", 0x20),
656cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(7, 0x120, "gpc1", 0x24),
657cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(7, 0x140, "gpc2", 0x28),
658cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x180, "gpd1", 0x2c),
659cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x1A0, "gpe0", 0x30),
660cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(2, 0x1C0, "gpe1", 0x34),
661cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(6, 0x1E0, "gpf0", 0x38),
662cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x200, "gpf1", 0x3c),
663cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x220, "gpg0", 0x40),
664cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x240, "gpg1", 0x44),
665cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(2, 0x260, "gpg2", 0x48),
666cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(4, 0x280, "gph0", 0x4c),
667cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x2A0, "gph1", 0x50),
6685cf9a338SPaweł Chmiel 	EXYNOS_PIN_BANK_EINTN(2, 0x160, "gpm5"),
669cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(8, 0x2C0, "gpm7"),
670cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(6, 0x2E0, "gpy0"),
671cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(4, 0x300, "gpy1"),
672cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(6, 0x320, "gpy2"),
673cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(8, 0x340, "gpy3"),
674cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(8, 0x360, "gpy4"),
675cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(8, 0x380, "gpy5"),
676cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(8, 0x3A0, "gpy6"),
677cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(8, 0x3C0, "gpy7"),
678cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTW(8, 0xC00, "gpx0", 0x00),
679cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTW(8, 0xC20, "gpx1", 0x04),
680cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTW(8, 0xC40, "gpx2", 0x08),
681cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTW(8, 0xC60, "gpx3", 0x0c),
682cfa76ddfSKrzysztof Kozlowski };
683cfa76ddfSKrzysztof Kozlowski 
684cfa76ddfSKrzysztof Kozlowski /* pin banks of exynos5410 pin-controller 1 */
685cfa76ddfSKrzysztof Kozlowski static const struct samsung_pin_bank_data exynos5410_pin_banks1[] __initconst = {
686938a10bbSPaweł Chmiel 	/* Must start with EINTG banks, ordered by EINT group number. */
687cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(5, 0x000, "gpj0", 0x00),
688cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x020, "gpj1", 0x04),
689cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpj2", 0x08),
690cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x060, "gpj3", 0x0c),
691cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(2, 0x080, "gpj4", 0x10),
692cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x0A0, "gpk0", 0x14),
693cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x0C0, "gpk1", 0x18),
694cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x0E0, "gpk2", 0x1c),
695cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(7, 0x100, "gpk3", 0x20),
696cfa76ddfSKrzysztof Kozlowski };
697cfa76ddfSKrzysztof Kozlowski 
698cfa76ddfSKrzysztof Kozlowski /* pin banks of exynos5410 pin-controller 2 */
699cfa76ddfSKrzysztof Kozlowski static const struct samsung_pin_bank_data exynos5410_pin_banks2[] __initconst = {
700938a10bbSPaweł Chmiel 	/* Must start with EINTG banks, ordered by EINT group number. */
701cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpv0", 0x00),
702cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x020, "gpv1", 0x04),
703cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x060, "gpv2", 0x08),
704cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x080, "gpv3", 0x0c),
705cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(2, 0x0C0, "gpv4", 0x10),
706cfa76ddfSKrzysztof Kozlowski };
707cfa76ddfSKrzysztof Kozlowski 
708cfa76ddfSKrzysztof Kozlowski /* pin banks of exynos5410 pin-controller 3 */
709cfa76ddfSKrzysztof Kozlowski static const struct samsung_pin_bank_data exynos5410_pin_banks3[] __initconst = {
710938a10bbSPaweł Chmiel 	/* Must start with EINTG banks, ordered by EINT group number. */
711cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(7, 0x000, "gpz", 0x00),
712cfa76ddfSKrzysztof Kozlowski };
713cfa76ddfSKrzysztof Kozlowski 
714cfa76ddfSKrzysztof Kozlowski /*
715cfa76ddfSKrzysztof Kozlowski  * Samsung pinctrl driver data for Exynos5410 SoC. Exynos5410 SoC includes
716cfa76ddfSKrzysztof Kozlowski  * four gpio/pin-mux/pinconfig controllers.
717cfa76ddfSKrzysztof Kozlowski  */
71893b0beaeSKrzysztof Kozlowski static const struct samsung_pin_ctrl exynos5410_pin_ctrl[] __initconst = {
719cfa76ddfSKrzysztof Kozlowski 	{
720cfa76ddfSKrzysztof Kozlowski 		/* pin-controller instance 0 data */
721cfa76ddfSKrzysztof Kozlowski 		.pin_banks	= exynos5410_pin_banks0,
722cfa76ddfSKrzysztof Kozlowski 		.nr_banks	= ARRAY_SIZE(exynos5410_pin_banks0),
723cfa76ddfSKrzysztof Kozlowski 		.eint_gpio_init = exynos_eint_gpio_init,
724cfa76ddfSKrzysztof Kozlowski 		.eint_wkup_init = exynos_eint_wkup_init,
725cfa76ddfSKrzysztof Kozlowski 		.suspend	= exynos_pinctrl_suspend,
726cfa76ddfSKrzysztof Kozlowski 		.resume		= exynos_pinctrl_resume,
727cfa76ddfSKrzysztof Kozlowski 	}, {
728cfa76ddfSKrzysztof Kozlowski 		/* pin-controller instance 1 data */
729cfa76ddfSKrzysztof Kozlowski 		.pin_banks	= exynos5410_pin_banks1,
730cfa76ddfSKrzysztof Kozlowski 		.nr_banks	= ARRAY_SIZE(exynos5410_pin_banks1),
731cfa76ddfSKrzysztof Kozlowski 		.eint_gpio_init = exynos_eint_gpio_init,
732cfa76ddfSKrzysztof Kozlowski 		.suspend	= exynos_pinctrl_suspend,
733cfa76ddfSKrzysztof Kozlowski 		.resume		= exynos_pinctrl_resume,
734cfa76ddfSKrzysztof Kozlowski 	}, {
735cfa76ddfSKrzysztof Kozlowski 		/* pin-controller instance 2 data */
736cfa76ddfSKrzysztof Kozlowski 		.pin_banks	= exynos5410_pin_banks2,
737cfa76ddfSKrzysztof Kozlowski 		.nr_banks	= ARRAY_SIZE(exynos5410_pin_banks2),
738cfa76ddfSKrzysztof Kozlowski 		.eint_gpio_init = exynos_eint_gpio_init,
739cfa76ddfSKrzysztof Kozlowski 		.suspend	= exynos_pinctrl_suspend,
740cfa76ddfSKrzysztof Kozlowski 		.resume		= exynos_pinctrl_resume,
741cfa76ddfSKrzysztof Kozlowski 	}, {
742cfa76ddfSKrzysztof Kozlowski 		/* pin-controller instance 3 data */
743cfa76ddfSKrzysztof Kozlowski 		.pin_banks	= exynos5410_pin_banks3,
744cfa76ddfSKrzysztof Kozlowski 		.nr_banks	= ARRAY_SIZE(exynos5410_pin_banks3),
745cfa76ddfSKrzysztof Kozlowski 		.eint_gpio_init = exynos_eint_gpio_init,
746cfa76ddfSKrzysztof Kozlowski 		.suspend	= exynos_pinctrl_suspend,
747cfa76ddfSKrzysztof Kozlowski 		.resume		= exynos_pinctrl_resume,
748cfa76ddfSKrzysztof Kozlowski 	},
749cfa76ddfSKrzysztof Kozlowski };
750cfa76ddfSKrzysztof Kozlowski 
75193b0beaeSKrzysztof Kozlowski const struct samsung_pinctrl_of_match_data exynos5410_of_data __initconst = {
75293b0beaeSKrzysztof Kozlowski 	.ctrl		= exynos5410_pin_ctrl,
75393b0beaeSKrzysztof Kozlowski 	.num_ctrl	= ARRAY_SIZE(exynos5410_pin_ctrl),
75493b0beaeSKrzysztof Kozlowski };
75593b0beaeSKrzysztof Kozlowski 
756cfa76ddfSKrzysztof Kozlowski /* pin banks of exynos5420 pin-controller 0 */
757cfa76ddfSKrzysztof Kozlowski static const struct samsung_pin_bank_data exynos5420_pin_banks0[] __initconst = {
758938a10bbSPaweł Chmiel 	/* Must start with EINTG banks, ordered by EINT group number. */
759cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpy7", 0x00),
760cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTW(8, 0xC00, "gpx0", 0x00),
761cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTW(8, 0xC20, "gpx1", 0x04),
762cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTW(8, 0xC40, "gpx2", 0x08),
763cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTW(8, 0xC60, "gpx3", 0x0c),
764cfa76ddfSKrzysztof Kozlowski };
765cfa76ddfSKrzysztof Kozlowski 
766cfa76ddfSKrzysztof Kozlowski /* pin banks of exynos5420 pin-controller 1 */
767cfa76ddfSKrzysztof Kozlowski static const struct samsung_pin_bank_data exynos5420_pin_banks1[] __initconst = {
768938a10bbSPaweł Chmiel 	/* Must start with EINTG banks, ordered by EINT group number. */
769cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpc0", 0x00),
770cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x020, "gpc1", 0x04),
771cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(7, 0x040, "gpc2", 0x08),
772cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(4, 0x060, "gpc3", 0x0c),
773cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(2, 0x080, "gpc4", 0x10),
774cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x0A0, "gpd1", 0x14),
775cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(6, 0x0C0, "gpy0"),
776cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(4, 0x0E0, "gpy1"),
777cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(6, 0x100, "gpy2"),
778cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(8, 0x120, "gpy3"),
779cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(8, 0x140, "gpy4"),
780cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(8, 0x160, "gpy5"),
781cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTN(8, 0x180, "gpy6"),
782cfa76ddfSKrzysztof Kozlowski };
783cfa76ddfSKrzysztof Kozlowski 
784cfa76ddfSKrzysztof Kozlowski /* pin banks of exynos5420 pin-controller 2 */
785cfa76ddfSKrzysztof Kozlowski static const struct samsung_pin_bank_data exynos5420_pin_banks2[] __initconst = {
786938a10bbSPaweł Chmiel 	/* Must start with EINTG banks, ordered by EINT group number. */
787cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpe0", 0x00),
788cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(2, 0x020, "gpe1", 0x04),
789cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(6, 0x040, "gpf0", 0x08),
790cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x060, "gpf1", 0x0c),
791cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x080, "gpg0", 0x10),
792cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x0A0, "gpg1", 0x14),
793cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(2, 0x0C0, "gpg2", 0x18),
794cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(4, 0x0E0, "gpj4", 0x1c),
795cfa76ddfSKrzysztof Kozlowski };
796cfa76ddfSKrzysztof Kozlowski 
797cfa76ddfSKrzysztof Kozlowski /* pin banks of exynos5420 pin-controller 3 */
798cfa76ddfSKrzysztof Kozlowski static const struct samsung_pin_bank_data exynos5420_pin_banks3[] __initconst = {
799938a10bbSPaweł Chmiel 	/* Must start with EINTG banks, ordered by EINT group number. */
800cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpa0", 0x00),
801cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(6, 0x020, "gpa1", 0x04),
802cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpa2", 0x08),
803cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(5, 0x060, "gpb0", 0x0c),
804cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(5, 0x080, "gpb1", 0x10),
805cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(4, 0x0A0, "gpb2", 0x14),
806cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x0C0, "gpb3", 0x18),
807cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(2, 0x0E0, "gpb4", 0x1c),
808cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(8, 0x100, "gph0", 0x20),
809cfa76ddfSKrzysztof Kozlowski };
810cfa76ddfSKrzysztof Kozlowski 
811cfa76ddfSKrzysztof Kozlowski /* pin banks of exynos5420 pin-controller 4 */
812cfa76ddfSKrzysztof Kozlowski static const struct samsung_pin_bank_data exynos5420_pin_banks4[] __initconst = {
813938a10bbSPaweł Chmiel 	/* Must start with EINTG banks, ordered by EINT group number. */
814cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PIN_BANK_EINTG(7, 0x000, "gpz", 0x00),
815cfa76ddfSKrzysztof Kozlowski };
816cfa76ddfSKrzysztof Kozlowski 
817cfa76ddfSKrzysztof Kozlowski /* PMU pad retention groups registers for Exynos5420 (without audio) */
818cfa76ddfSKrzysztof Kozlowski static const u32 exynos5420_retention_regs[] = {
819cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PAD_RET_DRAM_OPTION,
820cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PAD_RET_JTAG_OPTION,
821cfa76ddfSKrzysztof Kozlowski 	EXYNOS5420_PAD_RET_GPIO_OPTION,
822cfa76ddfSKrzysztof Kozlowski 	EXYNOS5420_PAD_RET_UART_OPTION,
823cfa76ddfSKrzysztof Kozlowski 	EXYNOS5420_PAD_RET_MMCA_OPTION,
824cfa76ddfSKrzysztof Kozlowski 	EXYNOS5420_PAD_RET_MMCB_OPTION,
825cfa76ddfSKrzysztof Kozlowski 	EXYNOS5420_PAD_RET_MMCC_OPTION,
826cfa76ddfSKrzysztof Kozlowski 	EXYNOS5420_PAD_RET_HSI_OPTION,
827cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PAD_RET_EBIA_OPTION,
828cfa76ddfSKrzysztof Kozlowski 	EXYNOS_PAD_RET_EBIB_OPTION,
829cfa76ddfSKrzysztof Kozlowski 	EXYNOS5420_PAD_RET_SPI_OPTION,
830cfa76ddfSKrzysztof Kozlowski 	EXYNOS5420_PAD_RET_DRAM_COREBLK_OPTION,
831cfa76ddfSKrzysztof Kozlowski };
832cfa76ddfSKrzysztof Kozlowski 
833cfa76ddfSKrzysztof Kozlowski static const struct samsung_retention_data exynos5420_retention_data __initconst = {
834cfa76ddfSKrzysztof Kozlowski 	.regs	 = exynos5420_retention_regs,
835cfa76ddfSKrzysztof Kozlowski 	.nr_regs = ARRAY_SIZE(exynos5420_retention_regs),
836cfa76ddfSKrzysztof Kozlowski 	.value	 = EXYNOS_WAKEUP_FROM_LOWPWR,
837cfa76ddfSKrzysztof Kozlowski 	.refcnt	 = &exynos_shared_retention_refcnt,
838cfa76ddfSKrzysztof Kozlowski 	.init	 = exynos_retention_init,
839cfa76ddfSKrzysztof Kozlowski };
840cfa76ddfSKrzysztof Kozlowski 
841cfa76ddfSKrzysztof Kozlowski /*
842cfa76ddfSKrzysztof Kozlowski  * Samsung pinctrl driver data for Exynos5420 SoC. Exynos5420 SoC includes
843cfa76ddfSKrzysztof Kozlowski  * four gpio/pin-mux/pinconfig controllers.
844cfa76ddfSKrzysztof Kozlowski  */
84593b0beaeSKrzysztof Kozlowski static const struct samsung_pin_ctrl exynos5420_pin_ctrl[] __initconst = {
846cfa76ddfSKrzysztof Kozlowski 	{
847cfa76ddfSKrzysztof Kozlowski 		/* pin-controller instance 0 data */
848cfa76ddfSKrzysztof Kozlowski 		.pin_banks	= exynos5420_pin_banks0,
849cfa76ddfSKrzysztof Kozlowski 		.nr_banks	= ARRAY_SIZE(exynos5420_pin_banks0),
850cfa76ddfSKrzysztof Kozlowski 		.eint_gpio_init = exynos_eint_gpio_init,
851cfa76ddfSKrzysztof Kozlowski 		.eint_wkup_init = exynos_eint_wkup_init,
852cafec5a7SKrzysztof Kozlowski 		.suspend	= exynos_pinctrl_suspend,
853cafec5a7SKrzysztof Kozlowski 		.resume		= exynos_pinctrl_resume,
854cfa76ddfSKrzysztof Kozlowski 		.retention_data	= &exynos5420_retention_data,
855cfa76ddfSKrzysztof Kozlowski 	}, {
856cfa76ddfSKrzysztof Kozlowski 		/* pin-controller instance 1 data */
857cfa76ddfSKrzysztof Kozlowski 		.pin_banks	= exynos5420_pin_banks1,
858cfa76ddfSKrzysztof Kozlowski 		.nr_banks	= ARRAY_SIZE(exynos5420_pin_banks1),
859cfa76ddfSKrzysztof Kozlowski 		.eint_gpio_init = exynos_eint_gpio_init,
860cafec5a7SKrzysztof Kozlowski 		.suspend	= exynos_pinctrl_suspend,
861cafec5a7SKrzysztof Kozlowski 		.resume		= exynos_pinctrl_resume,
862cfa76ddfSKrzysztof Kozlowski 		.retention_data	= &exynos5420_retention_data,
863cfa76ddfSKrzysztof Kozlowski 	}, {
864cfa76ddfSKrzysztof Kozlowski 		/* pin-controller instance 2 data */
865cfa76ddfSKrzysztof Kozlowski 		.pin_banks	= exynos5420_pin_banks2,
866cfa76ddfSKrzysztof Kozlowski 		.nr_banks	= ARRAY_SIZE(exynos5420_pin_banks2),
867cfa76ddfSKrzysztof Kozlowski 		.eint_gpio_init = exynos_eint_gpio_init,
868cafec5a7SKrzysztof Kozlowski 		.suspend	= exynos_pinctrl_suspend,
869cafec5a7SKrzysztof Kozlowski 		.resume		= exynos_pinctrl_resume,
870cfa76ddfSKrzysztof Kozlowski 		.retention_data	= &exynos5420_retention_data,
871cfa76ddfSKrzysztof Kozlowski 	}, {
872cfa76ddfSKrzysztof Kozlowski 		/* pin-controller instance 3 data */
873cfa76ddfSKrzysztof Kozlowski 		.pin_banks	= exynos5420_pin_banks3,
874cfa76ddfSKrzysztof Kozlowski 		.nr_banks	= ARRAY_SIZE(exynos5420_pin_banks3),
875cfa76ddfSKrzysztof Kozlowski 		.eint_gpio_init = exynos_eint_gpio_init,
876cafec5a7SKrzysztof Kozlowski 		.suspend	= exynos_pinctrl_suspend,
877cafec5a7SKrzysztof Kozlowski 		.resume		= exynos_pinctrl_resume,
878cfa76ddfSKrzysztof Kozlowski 		.retention_data	= &exynos5420_retention_data,
879cfa76ddfSKrzysztof Kozlowski 	}, {
880cfa76ddfSKrzysztof Kozlowski 		/* pin-controller instance 4 data */
881cfa76ddfSKrzysztof Kozlowski 		.pin_banks	= exynos5420_pin_banks4,
882cfa76ddfSKrzysztof Kozlowski 		.nr_banks	= ARRAY_SIZE(exynos5420_pin_banks4),
883cfa76ddfSKrzysztof Kozlowski 		.eint_gpio_init = exynos_eint_gpio_init,
884cafec5a7SKrzysztof Kozlowski 		.suspend	= exynos_pinctrl_suspend,
885cafec5a7SKrzysztof Kozlowski 		.resume		= exynos_pinctrl_resume,
886cfa76ddfSKrzysztof Kozlowski 		.retention_data	= &exynos4_audio_retention_data,
887cfa76ddfSKrzysztof Kozlowski 	},
888cfa76ddfSKrzysztof Kozlowski };
88993b0beaeSKrzysztof Kozlowski 
89093b0beaeSKrzysztof Kozlowski const struct samsung_pinctrl_of_match_data exynos5420_of_data __initconst = {
89193b0beaeSKrzysztof Kozlowski 	.ctrl		= exynos5420_pin_ctrl,
89293b0beaeSKrzysztof Kozlowski 	.num_ctrl	= ARRAY_SIZE(exynos5420_pin_ctrl),
89393b0beaeSKrzysztof Kozlowski };
894