0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016 #include <linux/device.h>
0017 #include <linux/of_address.h>
0018 #include <linux/slab.h>
0019 #include <linux/err.h>
0020 #include <linux/soc/samsung/exynos-regs-pmu.h>
0021
0022 #include "pinctrl-samsung.h"
0023 #include "pinctrl-exynos.h"
0024
0025 static const struct samsung_pin_bank_type bank_type_off = {
0026 .fld_width = { 4, 1, 2, 2, 2, 2, },
0027 .reg_offset = { 0x00, 0x04, 0x08, 0x0c, 0x10, 0x14, },
0028 };
0029
0030 static const struct samsung_pin_bank_type bank_type_alive = {
0031 .fld_width = { 4, 1, 2, 2, },
0032 .reg_offset = { 0x00, 0x04, 0x08, 0x0c, },
0033 };
0034
0035
0036 #define S5P_OTHERS 0xE000
0037
0038 #define S5P_OTHERS_RET_IO (1 << 31)
0039 #define S5P_OTHERS_RET_CF (1 << 30)
0040 #define S5P_OTHERS_RET_MMC (1 << 29)
0041 #define S5P_OTHERS_RET_UART (1 << 28)
0042
0043 static void s5pv210_retention_disable(struct samsung_pinctrl_drv_data *drvdata)
0044 {
0045 void __iomem *clk_base = (void __iomem *)drvdata->retention_ctrl->priv;
0046 u32 tmp;
0047
0048 tmp = __raw_readl(clk_base + S5P_OTHERS);
0049 tmp |= (S5P_OTHERS_RET_IO | S5P_OTHERS_RET_CF | S5P_OTHERS_RET_MMC |
0050 S5P_OTHERS_RET_UART);
0051 __raw_writel(tmp, clk_base + S5P_OTHERS);
0052 }
0053
0054 static struct samsung_retention_ctrl *
0055 s5pv210_retention_init(struct samsung_pinctrl_drv_data *drvdata,
0056 const struct samsung_retention_data *data)
0057 {
0058 struct samsung_retention_ctrl *ctrl;
0059 struct device_node *np;
0060 void __iomem *clk_base;
0061
0062 ctrl = devm_kzalloc(drvdata->dev, sizeof(*ctrl), GFP_KERNEL);
0063 if (!ctrl)
0064 return ERR_PTR(-ENOMEM);
0065
0066 np = of_find_compatible_node(NULL, NULL, "samsung,s5pv210-clock");
0067 if (!np) {
0068 pr_err("%s: failed to find clock controller DT node\n",
0069 __func__);
0070 return ERR_PTR(-ENODEV);
0071 }
0072
0073 clk_base = of_iomap(np, 0);
0074 of_node_put(np);
0075 if (!clk_base) {
0076 pr_err("%s: failed to map clock registers\n", __func__);
0077 return ERR_PTR(-EINVAL);
0078 }
0079
0080 ctrl->priv = (void __force *)clk_base;
0081 ctrl->disable = s5pv210_retention_disable;
0082
0083 return ctrl;
0084 }
0085
0086 static const struct samsung_retention_data s5pv210_retention_data __initconst = {
0087 .init = s5pv210_retention_init,
0088 };
0089
0090
0091 static const struct samsung_pin_bank_data s5pv210_pin_bank[] __initconst = {
0092
0093 EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpa0", 0x00),
0094 EXYNOS_PIN_BANK_EINTG(4, 0x020, "gpa1", 0x04),
0095 EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpb", 0x08),
0096 EXYNOS_PIN_BANK_EINTG(5, 0x060, "gpc0", 0x0c),
0097 EXYNOS_PIN_BANK_EINTG(5, 0x080, "gpc1", 0x10),
0098 EXYNOS_PIN_BANK_EINTG(4, 0x0a0, "gpd0", 0x14),
0099 EXYNOS_PIN_BANK_EINTG(6, 0x0c0, "gpd1", 0x18),
0100 EXYNOS_PIN_BANK_EINTG(8, 0x0e0, "gpe0", 0x1c),
0101 EXYNOS_PIN_BANK_EINTG(5, 0x100, "gpe1", 0x20),
0102 EXYNOS_PIN_BANK_EINTG(8, 0x120, "gpf0", 0x24),
0103 EXYNOS_PIN_BANK_EINTG(8, 0x140, "gpf1", 0x28),
0104 EXYNOS_PIN_BANK_EINTG(8, 0x160, "gpf2", 0x2c),
0105 EXYNOS_PIN_BANK_EINTG(6, 0x180, "gpf3", 0x30),
0106 EXYNOS_PIN_BANK_EINTG(7, 0x1a0, "gpg0", 0x34),
0107 EXYNOS_PIN_BANK_EINTG(7, 0x1c0, "gpg1", 0x38),
0108 EXYNOS_PIN_BANK_EINTG(7, 0x1e0, "gpg2", 0x3c),
0109 EXYNOS_PIN_BANK_EINTG(7, 0x200, "gpg3", 0x40),
0110 EXYNOS_PIN_BANK_EINTG(8, 0x240, "gpj0", 0x44),
0111 EXYNOS_PIN_BANK_EINTG(6, 0x260, "gpj1", 0x48),
0112 EXYNOS_PIN_BANK_EINTG(8, 0x280, "gpj2", 0x4c),
0113 EXYNOS_PIN_BANK_EINTG(8, 0x2a0, "gpj3", 0x50),
0114 EXYNOS_PIN_BANK_EINTG(5, 0x2c0, "gpj4", 0x54),
0115 EXYNOS_PIN_BANK_EINTN(7, 0x220, "gpi"),
0116 EXYNOS_PIN_BANK_EINTN(8, 0x2e0, "mp01"),
0117 EXYNOS_PIN_BANK_EINTN(4, 0x300, "mp02"),
0118 EXYNOS_PIN_BANK_EINTN(8, 0x320, "mp03"),
0119 EXYNOS_PIN_BANK_EINTN(8, 0x340, "mp04"),
0120 EXYNOS_PIN_BANK_EINTN(8, 0x360, "mp05"),
0121 EXYNOS_PIN_BANK_EINTN(8, 0x380, "mp06"),
0122 EXYNOS_PIN_BANK_EINTN(8, 0x3a0, "mp07"),
0123 EXYNOS_PIN_BANK_EINTW(8, 0xc00, "gph0", 0x00),
0124 EXYNOS_PIN_BANK_EINTW(8, 0xc20, "gph1", 0x04),
0125 EXYNOS_PIN_BANK_EINTW(8, 0xc40, "gph2", 0x08),
0126 EXYNOS_PIN_BANK_EINTW(8, 0xc60, "gph3", 0x0c),
0127 };
0128
0129 static const struct samsung_pin_ctrl s5pv210_pin_ctrl[] __initconst = {
0130 {
0131
0132 .pin_banks = s5pv210_pin_bank,
0133 .nr_banks = ARRAY_SIZE(s5pv210_pin_bank),
0134 .eint_gpio_init = exynos_eint_gpio_init,
0135 .eint_wkup_init = exynos_eint_wkup_init,
0136 .suspend = exynos_pinctrl_suspend,
0137 .resume = exynos_pinctrl_resume,
0138 .retention_data = &s5pv210_retention_data,
0139 },
0140 };
0141
0142 const struct samsung_pinctrl_of_match_data s5pv210_of_data __initconst = {
0143 .ctrl = s5pv210_pin_ctrl,
0144 .num_ctrl = ARRAY_SIZE(s5pv210_pin_ctrl),
0145 };
0146
0147
0148 static atomic_t exynos_shared_retention_refcnt;
0149
0150
0151 static const struct samsung_pin_bank_data exynos3250_pin_banks0[] __initconst = {
0152
0153 EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpa0", 0x00),
0154 EXYNOS_PIN_BANK_EINTG(6, 0x020, "gpa1", 0x04),
0155 EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpb", 0x08),
0156 EXYNOS_PIN_BANK_EINTG(5, 0x060, "gpc0", 0x0c),
0157 EXYNOS_PIN_BANK_EINTG(5, 0x080, "gpc1", 0x10),
0158 EXYNOS_PIN_BANK_EINTG(4, 0x0a0, "gpd0", 0x14),
0159 EXYNOS_PIN_BANK_EINTG(4, 0x0c0, "gpd1", 0x18),
0160 };
0161
0162
0163 static const struct samsung_pin_bank_data exynos3250_pin_banks1[] __initconst = {
0164
0165 EXYNOS_PIN_BANK_EINTN(8, 0x120, "gpe0"),
0166 EXYNOS_PIN_BANK_EINTN(8, 0x140, "gpe1"),
0167 EXYNOS_PIN_BANK_EINTN(3, 0x180, "gpe2"),
0168 EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpk0", 0x08),
0169 EXYNOS_PIN_BANK_EINTG(7, 0x060, "gpk1", 0x0c),
0170 EXYNOS_PIN_BANK_EINTG(7, 0x080, "gpk2", 0x10),
0171 EXYNOS_PIN_BANK_EINTG(4, 0x0c0, "gpl0", 0x18),
0172 EXYNOS_PIN_BANK_EINTG(8, 0x260, "gpm0", 0x24),
0173 EXYNOS_PIN_BANK_EINTG(7, 0x280, "gpm1", 0x28),
0174 EXYNOS_PIN_BANK_EINTG(5, 0x2a0, "gpm2", 0x2c),
0175 EXYNOS_PIN_BANK_EINTG(8, 0x2c0, "gpm3", 0x30),
0176 EXYNOS_PIN_BANK_EINTG(8, 0x2e0, "gpm4", 0x34),
0177 EXYNOS_PIN_BANK_EINTW(8, 0xc00, "gpx0", 0x00),
0178 EXYNOS_PIN_BANK_EINTW(8, 0xc20, "gpx1", 0x04),
0179 EXYNOS_PIN_BANK_EINTW(8, 0xc40, "gpx2", 0x08),
0180 EXYNOS_PIN_BANK_EINTW(8, 0xc60, "gpx3", 0x0c),
0181 };
0182
0183
0184
0185
0186
0187 static const u32 exynos3250_retention_regs[] = {
0188 S5P_PAD_RET_MAUDIO_OPTION,
0189 S5P_PAD_RET_GPIO_OPTION,
0190 S5P_PAD_RET_UART_OPTION,
0191 S5P_PAD_RET_MMCA_OPTION,
0192 S5P_PAD_RET_MMCB_OPTION,
0193 S5P_PAD_RET_EBIA_OPTION,
0194 S5P_PAD_RET_EBIB_OPTION,
0195 S5P_PAD_RET_MMC2_OPTION,
0196 S5P_PAD_RET_SPI_OPTION,
0197 };
0198
0199 static const struct samsung_retention_data exynos3250_retention_data __initconst = {
0200 .regs = exynos3250_retention_regs,
0201 .nr_regs = ARRAY_SIZE(exynos3250_retention_regs),
0202 .value = EXYNOS_WAKEUP_FROM_LOWPWR,
0203 .refcnt = &exynos_shared_retention_refcnt,
0204 .init = exynos_retention_init,
0205 };
0206
0207
0208
0209
0210
0211 static const struct samsung_pin_ctrl exynos3250_pin_ctrl[] __initconst = {
0212 {
0213
0214 .pin_banks = exynos3250_pin_banks0,
0215 .nr_banks = ARRAY_SIZE(exynos3250_pin_banks0),
0216 .eint_gpio_init = exynos_eint_gpio_init,
0217 .suspend = exynos_pinctrl_suspend,
0218 .resume = exynos_pinctrl_resume,
0219 .retention_data = &exynos3250_retention_data,
0220 }, {
0221
0222 .pin_banks = exynos3250_pin_banks1,
0223 .nr_banks = ARRAY_SIZE(exynos3250_pin_banks1),
0224 .eint_gpio_init = exynos_eint_gpio_init,
0225 .eint_wkup_init = exynos_eint_wkup_init,
0226 .suspend = exynos_pinctrl_suspend,
0227 .resume = exynos_pinctrl_resume,
0228 .retention_data = &exynos3250_retention_data,
0229 },
0230 };
0231
0232 const struct samsung_pinctrl_of_match_data exynos3250_of_data __initconst = {
0233 .ctrl = exynos3250_pin_ctrl,
0234 .num_ctrl = ARRAY_SIZE(exynos3250_pin_ctrl),
0235 };
0236
0237
0238 static const struct samsung_pin_bank_data exynos4210_pin_banks0[] __initconst = {
0239
0240 EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpa0", 0x00),
0241 EXYNOS_PIN_BANK_EINTG(6, 0x020, "gpa1", 0x04),
0242 EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpb", 0x08),
0243 EXYNOS_PIN_BANK_EINTG(5, 0x060, "gpc0", 0x0c),
0244 EXYNOS_PIN_BANK_EINTG(5, 0x080, "gpc1", 0x10),
0245 EXYNOS_PIN_BANK_EINTG(4, 0x0A0, "gpd0", 0x14),
0246 EXYNOS_PIN_BANK_EINTG(4, 0x0C0, "gpd1", 0x18),
0247 EXYNOS_PIN_BANK_EINTG(5, 0x0E0, "gpe0", 0x1c),
0248 EXYNOS_PIN_BANK_EINTG(8, 0x100, "gpe1", 0x20),
0249 EXYNOS_PIN_BANK_EINTG(6, 0x120, "gpe2", 0x24),
0250 EXYNOS_PIN_BANK_EINTG(8, 0x140, "gpe3", 0x28),
0251 EXYNOS_PIN_BANK_EINTG(8, 0x160, "gpe4", 0x2c),
0252 EXYNOS_PIN_BANK_EINTG(8, 0x180, "gpf0", 0x30),
0253 EXYNOS_PIN_BANK_EINTG(8, 0x1A0, "gpf1", 0x34),
0254 EXYNOS_PIN_BANK_EINTG(8, 0x1C0, "gpf2", 0x38),
0255 EXYNOS_PIN_BANK_EINTG(6, 0x1E0, "gpf3", 0x3c),
0256 };
0257
0258
0259 static const struct samsung_pin_bank_data exynos4210_pin_banks1[] __initconst = {
0260
0261 EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpj0", 0x00),
0262 EXYNOS_PIN_BANK_EINTG(5, 0x020, "gpj1", 0x04),
0263 EXYNOS_PIN_BANK_EINTG(7, 0x040, "gpk0", 0x08),
0264 EXYNOS_PIN_BANK_EINTG(7, 0x060, "gpk1", 0x0c),
0265 EXYNOS_PIN_BANK_EINTG(7, 0x080, "gpk2", 0x10),
0266 EXYNOS_PIN_BANK_EINTG(7, 0x0A0, "gpk3", 0x14),
0267 EXYNOS_PIN_BANK_EINTG(8, 0x0C0, "gpl0", 0x18),
0268 EXYNOS_PIN_BANK_EINTG(3, 0x0E0, "gpl1", 0x1c),
0269 EXYNOS_PIN_BANK_EINTG(8, 0x100, "gpl2", 0x20),
0270 EXYNOS_PIN_BANK_EINTN(6, 0x120, "gpy0"),
0271 EXYNOS_PIN_BANK_EINTN(4, 0x140, "gpy1"),
0272 EXYNOS_PIN_BANK_EINTN(6, 0x160, "gpy2"),
0273 EXYNOS_PIN_BANK_EINTN(8, 0x180, "gpy3"),
0274 EXYNOS_PIN_BANK_EINTN(8, 0x1A0, "gpy4"),
0275 EXYNOS_PIN_BANK_EINTN(8, 0x1C0, "gpy5"),
0276 EXYNOS_PIN_BANK_EINTN(8, 0x1E0, "gpy6"),
0277 EXYNOS_PIN_BANK_EINTW(8, 0xC00, "gpx0", 0x00),
0278 EXYNOS_PIN_BANK_EINTW(8, 0xC20, "gpx1", 0x04),
0279 EXYNOS_PIN_BANK_EINTW(8, 0xC40, "gpx2", 0x08),
0280 EXYNOS_PIN_BANK_EINTW(8, 0xC60, "gpx3", 0x0c),
0281 };
0282
0283
0284 static const struct samsung_pin_bank_data exynos4210_pin_banks2[] __initconst = {
0285
0286 EXYNOS_PIN_BANK_EINTN(7, 0x000, "gpz"),
0287 };
0288
0289
0290 static const u32 exynos4_retention_regs[] = {
0291 S5P_PAD_RET_GPIO_OPTION,
0292 S5P_PAD_RET_UART_OPTION,
0293 S5P_PAD_RET_MMCA_OPTION,
0294 S5P_PAD_RET_MMCB_OPTION,
0295 S5P_PAD_RET_EBIA_OPTION,
0296 S5P_PAD_RET_EBIB_OPTION,
0297 };
0298
0299 static const struct samsung_retention_data exynos4_retention_data __initconst = {
0300 .regs = exynos4_retention_regs,
0301 .nr_regs = ARRAY_SIZE(exynos4_retention_regs),
0302 .value = EXYNOS_WAKEUP_FROM_LOWPWR,
0303 .refcnt = &exynos_shared_retention_refcnt,
0304 .init = exynos_retention_init,
0305 };
0306
0307
0308 static const u32 exynos4_audio_retention_regs[] = {
0309 S5P_PAD_RET_MAUDIO_OPTION,
0310 };
0311
0312 static const struct samsung_retention_data exynos4_audio_retention_data __initconst = {
0313 .regs = exynos4_audio_retention_regs,
0314 .nr_regs = ARRAY_SIZE(exynos4_audio_retention_regs),
0315 .value = EXYNOS_WAKEUP_FROM_LOWPWR,
0316 .init = exynos_retention_init,
0317 };
0318
0319
0320
0321
0322
0323 static const struct samsung_pin_ctrl exynos4210_pin_ctrl[] __initconst = {
0324 {
0325
0326 .pin_banks = exynos4210_pin_banks0,
0327 .nr_banks = ARRAY_SIZE(exynos4210_pin_banks0),
0328 .eint_gpio_init = exynos_eint_gpio_init,
0329 .suspend = exynos_pinctrl_suspend,
0330 .resume = exynos_pinctrl_resume,
0331 .retention_data = &exynos4_retention_data,
0332 }, {
0333
0334 .pin_banks = exynos4210_pin_banks1,
0335 .nr_banks = ARRAY_SIZE(exynos4210_pin_banks1),
0336 .eint_gpio_init = exynos_eint_gpio_init,
0337 .eint_wkup_init = exynos_eint_wkup_init,
0338 .suspend = exynos_pinctrl_suspend,
0339 .resume = exynos_pinctrl_resume,
0340 .retention_data = &exynos4_retention_data,
0341 }, {
0342
0343 .pin_banks = exynos4210_pin_banks2,
0344 .nr_banks = ARRAY_SIZE(exynos4210_pin_banks2),
0345 .retention_data = &exynos4_audio_retention_data,
0346 },
0347 };
0348
0349 const struct samsung_pinctrl_of_match_data exynos4210_of_data __initconst = {
0350 .ctrl = exynos4210_pin_ctrl,
0351 .num_ctrl = ARRAY_SIZE(exynos4210_pin_ctrl),
0352 };
0353
0354
0355 static const struct samsung_pin_bank_data exynos4x12_pin_banks0[] __initconst = {
0356
0357 EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpa0", 0x00),
0358 EXYNOS_PIN_BANK_EINTG(6, 0x020, "gpa1", 0x04),
0359 EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpb", 0x08),
0360 EXYNOS_PIN_BANK_EINTG(5, 0x060, "gpc0", 0x0c),
0361 EXYNOS_PIN_BANK_EINTG(5, 0x080, "gpc1", 0x10),
0362 EXYNOS_PIN_BANK_EINTG(4, 0x0A0, "gpd0", 0x14),
0363 EXYNOS_PIN_BANK_EINTG(4, 0x0C0, "gpd1", 0x18),
0364 EXYNOS_PIN_BANK_EINTG(8, 0x180, "gpf0", 0x30),
0365 EXYNOS_PIN_BANK_EINTG(8, 0x1A0, "gpf1", 0x34),
0366 EXYNOS_PIN_BANK_EINTG(8, 0x1C0, "gpf2", 0x38),
0367 EXYNOS_PIN_BANK_EINTG(6, 0x1E0, "gpf3", 0x3c),
0368 EXYNOS_PIN_BANK_EINTG(8, 0x240, "gpj0", 0x40),
0369 EXYNOS_PIN_BANK_EINTG(5, 0x260, "gpj1", 0x44),
0370 };
0371
0372
0373 static const struct samsung_pin_bank_data exynos4x12_pin_banks1[] __initconst = {
0374
0375 EXYNOS_PIN_BANK_EINTG(7, 0x040, "gpk0", 0x08),
0376 EXYNOS_PIN_BANK_EINTG(7, 0x060, "gpk1", 0x0c),
0377 EXYNOS_PIN_BANK_EINTG(7, 0x080, "gpk2", 0x10),
0378 EXYNOS_PIN_BANK_EINTG(7, 0x0A0, "gpk3", 0x14),
0379 EXYNOS_PIN_BANK_EINTG(7, 0x0C0, "gpl0", 0x18),
0380 EXYNOS_PIN_BANK_EINTG(2, 0x0E0, "gpl1", 0x1c),
0381 EXYNOS_PIN_BANK_EINTG(8, 0x100, "gpl2", 0x20),
0382 EXYNOS_PIN_BANK_EINTG(8, 0x260, "gpm0", 0x24),
0383 EXYNOS_PIN_BANK_EINTG(7, 0x280, "gpm1", 0x28),
0384 EXYNOS_PIN_BANK_EINTG(5, 0x2A0, "gpm2", 0x2c),
0385 EXYNOS_PIN_BANK_EINTG(8, 0x2C0, "gpm3", 0x30),
0386 EXYNOS_PIN_BANK_EINTG(8, 0x2E0, "gpm4", 0x34),
0387 EXYNOS_PIN_BANK_EINTN(6, 0x120, "gpy0"),
0388 EXYNOS_PIN_BANK_EINTN(4, 0x140, "gpy1"),
0389 EXYNOS_PIN_BANK_EINTN(6, 0x160, "gpy2"),
0390 EXYNOS_PIN_BANK_EINTN(8, 0x180, "gpy3"),
0391 EXYNOS_PIN_BANK_EINTN(8, 0x1A0, "gpy4"),
0392 EXYNOS_PIN_BANK_EINTN(8, 0x1C0, "gpy5"),
0393 EXYNOS_PIN_BANK_EINTN(8, 0x1E0, "gpy6"),
0394 EXYNOS_PIN_BANK_EINTW(8, 0xC00, "gpx0", 0x00),
0395 EXYNOS_PIN_BANK_EINTW(8, 0xC20, "gpx1", 0x04),
0396 EXYNOS_PIN_BANK_EINTW(8, 0xC40, "gpx2", 0x08),
0397 EXYNOS_PIN_BANK_EINTW(8, 0xC60, "gpx3", 0x0c),
0398 };
0399
0400
0401 static const struct samsung_pin_bank_data exynos4x12_pin_banks2[] __initconst = {
0402
0403 EXYNOS_PIN_BANK_EINTG(7, 0x000, "gpz", 0x00),
0404 };
0405
0406
0407 static const struct samsung_pin_bank_data exynos4x12_pin_banks3[] __initconst = {
0408
0409 EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpv0", 0x00),
0410 EXYNOS_PIN_BANK_EINTG(8, 0x020, "gpv1", 0x04),
0411 EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpv2", 0x08),
0412 EXYNOS_PIN_BANK_EINTG(8, 0x060, "gpv3", 0x0c),
0413 EXYNOS_PIN_BANK_EINTG(2, 0x080, "gpv4", 0x10),
0414 };
0415
0416
0417
0418
0419
0420 static const struct samsung_pin_ctrl exynos4x12_pin_ctrl[] __initconst = {
0421 {
0422
0423 .pin_banks = exynos4x12_pin_banks0,
0424 .nr_banks = ARRAY_SIZE(exynos4x12_pin_banks0),
0425 .eint_gpio_init = exynos_eint_gpio_init,
0426 .suspend = exynos_pinctrl_suspend,
0427 .resume = exynos_pinctrl_resume,
0428 .retention_data = &exynos4_retention_data,
0429 }, {
0430
0431 .pin_banks = exynos4x12_pin_banks1,
0432 .nr_banks = ARRAY_SIZE(exynos4x12_pin_banks1),
0433 .eint_gpio_init = exynos_eint_gpio_init,
0434 .eint_wkup_init = exynos_eint_wkup_init,
0435 .suspend = exynos_pinctrl_suspend,
0436 .resume = exynos_pinctrl_resume,
0437 .retention_data = &exynos4_retention_data,
0438 }, {
0439
0440 .pin_banks = exynos4x12_pin_banks2,
0441 .nr_banks = ARRAY_SIZE(exynos4x12_pin_banks2),
0442 .eint_gpio_init = exynos_eint_gpio_init,
0443 .suspend = exynos_pinctrl_suspend,
0444 .resume = exynos_pinctrl_resume,
0445 .retention_data = &exynos4_audio_retention_data,
0446 }, {
0447
0448 .pin_banks = exynos4x12_pin_banks3,
0449 .nr_banks = ARRAY_SIZE(exynos4x12_pin_banks3),
0450 .eint_gpio_init = exynos_eint_gpio_init,
0451 .suspend = exynos_pinctrl_suspend,
0452 .resume = exynos_pinctrl_resume,
0453 },
0454 };
0455
0456 const struct samsung_pinctrl_of_match_data exynos4x12_of_data __initconst = {
0457 .ctrl = exynos4x12_pin_ctrl,
0458 .num_ctrl = ARRAY_SIZE(exynos4x12_pin_ctrl),
0459 };
0460
0461
0462 static const struct samsung_pin_bank_data exynos5250_pin_banks0[] __initconst = {
0463
0464 EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpa0", 0x00),
0465 EXYNOS_PIN_BANK_EINTG(6, 0x020, "gpa1", 0x04),
0466 EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpa2", 0x08),
0467 EXYNOS_PIN_BANK_EINTG(5, 0x060, "gpb0", 0x0c),
0468 EXYNOS_PIN_BANK_EINTG(5, 0x080, "gpb1", 0x10),
0469 EXYNOS_PIN_BANK_EINTG(4, 0x0A0, "gpb2", 0x14),
0470 EXYNOS_PIN_BANK_EINTG(4, 0x0C0, "gpb3", 0x18),
0471 EXYNOS_PIN_BANK_EINTG(7, 0x0E0, "gpc0", 0x1c),
0472 EXYNOS_PIN_BANK_EINTG(4, 0x100, "gpc1", 0x20),
0473 EXYNOS_PIN_BANK_EINTG(7, 0x120, "gpc2", 0x24),
0474 EXYNOS_PIN_BANK_EINTG(7, 0x140, "gpc3", 0x28),
0475 EXYNOS_PIN_BANK_EINTG(4, 0x160, "gpd0", 0x2c),
0476 EXYNOS_PIN_BANK_EINTG(8, 0x180, "gpd1", 0x30),
0477 EXYNOS_PIN_BANK_EINTG(7, 0x2E0, "gpc4", 0x34),
0478 EXYNOS_PIN_BANK_EINTN(6, 0x1A0, "gpy0"),
0479 EXYNOS_PIN_BANK_EINTN(4, 0x1C0, "gpy1"),
0480 EXYNOS_PIN_BANK_EINTN(6, 0x1E0, "gpy2"),
0481 EXYNOS_PIN_BANK_EINTN(8, 0x200, "gpy3"),
0482 EXYNOS_PIN_BANK_EINTN(8, 0x220, "gpy4"),
0483 EXYNOS_PIN_BANK_EINTN(8, 0x240, "gpy5"),
0484 EXYNOS_PIN_BANK_EINTN(8, 0x260, "gpy6"),
0485 EXYNOS_PIN_BANK_EINTW(8, 0xC00, "gpx0", 0x00),
0486 EXYNOS_PIN_BANK_EINTW(8, 0xC20, "gpx1", 0x04),
0487 EXYNOS_PIN_BANK_EINTW(8, 0xC40, "gpx2", 0x08),
0488 EXYNOS_PIN_BANK_EINTW(8, 0xC60, "gpx3", 0x0c),
0489 };
0490
0491
0492 static const struct samsung_pin_bank_data exynos5250_pin_banks1[] __initconst = {
0493
0494 EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpe0", 0x00),
0495 EXYNOS_PIN_BANK_EINTG(2, 0x020, "gpe1", 0x04),
0496 EXYNOS_PIN_BANK_EINTG(4, 0x040, "gpf0", 0x08),
0497 EXYNOS_PIN_BANK_EINTG(4, 0x060, "gpf1", 0x0c),
0498 EXYNOS_PIN_BANK_EINTG(8, 0x080, "gpg0", 0x10),
0499 EXYNOS_PIN_BANK_EINTG(8, 0x0A0, "gpg1", 0x14),
0500 EXYNOS_PIN_BANK_EINTG(2, 0x0C0, "gpg2", 0x18),
0501 EXYNOS_PIN_BANK_EINTG(4, 0x0E0, "gph0", 0x1c),
0502 EXYNOS_PIN_BANK_EINTG(8, 0x100, "gph1", 0x20),
0503 };
0504
0505
0506 static const struct samsung_pin_bank_data exynos5250_pin_banks2[] __initconst = {
0507
0508 EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpv0", 0x00),
0509 EXYNOS_PIN_BANK_EINTG(8, 0x020, "gpv1", 0x04),
0510 EXYNOS_PIN_BANK_EINTG(8, 0x060, "gpv2", 0x08),
0511 EXYNOS_PIN_BANK_EINTG(8, 0x080, "gpv3", 0x0c),
0512 EXYNOS_PIN_BANK_EINTG(2, 0x0C0, "gpv4", 0x10),
0513 };
0514
0515
0516 static const struct samsung_pin_bank_data exynos5250_pin_banks3[] __initconst = {
0517
0518 EXYNOS_PIN_BANK_EINTG(7, 0x000, "gpz", 0x00),
0519 };
0520
0521
0522
0523
0524
0525 static const struct samsung_pin_ctrl exynos5250_pin_ctrl[] __initconst = {
0526 {
0527
0528 .pin_banks = exynos5250_pin_banks0,
0529 .nr_banks = ARRAY_SIZE(exynos5250_pin_banks0),
0530 .eint_gpio_init = exynos_eint_gpio_init,
0531 .eint_wkup_init = exynos_eint_wkup_init,
0532 .suspend = exynos_pinctrl_suspend,
0533 .resume = exynos_pinctrl_resume,
0534 .retention_data = &exynos4_retention_data,
0535 }, {
0536
0537 .pin_banks = exynos5250_pin_banks1,
0538 .nr_banks = ARRAY_SIZE(exynos5250_pin_banks1),
0539 .eint_gpio_init = exynos_eint_gpio_init,
0540 .suspend = exynos_pinctrl_suspend,
0541 .resume = exynos_pinctrl_resume,
0542 .retention_data = &exynos4_retention_data,
0543 }, {
0544
0545 .pin_banks = exynos5250_pin_banks2,
0546 .nr_banks = ARRAY_SIZE(exynos5250_pin_banks2),
0547 .eint_gpio_init = exynos_eint_gpio_init,
0548 .suspend = exynos_pinctrl_suspend,
0549 .resume = exynos_pinctrl_resume,
0550 }, {
0551
0552 .pin_banks = exynos5250_pin_banks3,
0553 .nr_banks = ARRAY_SIZE(exynos5250_pin_banks3),
0554 .eint_gpio_init = exynos_eint_gpio_init,
0555 .suspend = exynos_pinctrl_suspend,
0556 .resume = exynos_pinctrl_resume,
0557 .retention_data = &exynos4_audio_retention_data,
0558 },
0559 };
0560
0561 const struct samsung_pinctrl_of_match_data exynos5250_of_data __initconst = {
0562 .ctrl = exynos5250_pin_ctrl,
0563 .num_ctrl = ARRAY_SIZE(exynos5250_pin_ctrl),
0564 };
0565
0566
0567 static const struct samsung_pin_bank_data exynos5260_pin_banks0[] __initconst = {
0568
0569 EXYNOS_PIN_BANK_EINTG(4, 0x000, "gpa0", 0x00),
0570 EXYNOS_PIN_BANK_EINTG(7, 0x020, "gpa1", 0x04),
0571 EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpa2", 0x08),
0572 EXYNOS_PIN_BANK_EINTG(5, 0x060, "gpb0", 0x0c),
0573 EXYNOS_PIN_BANK_EINTG(4, 0x080, "gpb1", 0x10),
0574 EXYNOS_PIN_BANK_EINTG(5, 0x0a0, "gpb2", 0x14),
0575 EXYNOS_PIN_BANK_EINTG(8, 0x0c0, "gpb3", 0x18),
0576 EXYNOS_PIN_BANK_EINTG(8, 0x0e0, "gpb4", 0x1c),
0577 EXYNOS_PIN_BANK_EINTG(8, 0x100, "gpb5", 0x20),
0578 EXYNOS_PIN_BANK_EINTG(8, 0x120, "gpd0", 0x24),
0579 EXYNOS_PIN_BANK_EINTG(7, 0x140, "gpd1", 0x28),
0580 EXYNOS_PIN_BANK_EINTG(5, 0x160, "gpd2", 0x2c),
0581 EXYNOS_PIN_BANK_EINTG(8, 0x180, "gpe0", 0x30),
0582 EXYNOS_PIN_BANK_EINTG(5, 0x1a0, "gpe1", 0x34),
0583 EXYNOS_PIN_BANK_EINTG(4, 0x1c0, "gpf0", 0x38),
0584 EXYNOS_PIN_BANK_EINTG(8, 0x1e0, "gpf1", 0x3c),
0585 EXYNOS_PIN_BANK_EINTG(2, 0x200, "gpk0", 0x40),
0586 EXYNOS_PIN_BANK_EINTW(8, 0xc00, "gpx0", 0x00),
0587 EXYNOS_PIN_BANK_EINTW(8, 0xc20, "gpx1", 0x04),
0588 EXYNOS_PIN_BANK_EINTW(8, 0xc40, "gpx2", 0x08),
0589 EXYNOS_PIN_BANK_EINTW(8, 0xc60, "gpx3", 0x0c),
0590 };
0591
0592
0593 static const struct samsung_pin_bank_data exynos5260_pin_banks1[] __initconst = {
0594
0595 EXYNOS_PIN_BANK_EINTG(7, 0x000, "gpc0", 0x00),
0596 EXYNOS_PIN_BANK_EINTG(6, 0x020, "gpc1", 0x04),
0597 EXYNOS_PIN_BANK_EINTG(7, 0x040, "gpc2", 0x08),
0598 EXYNOS_PIN_BANK_EINTG(4, 0x060, "gpc3", 0x0c),
0599 EXYNOS_PIN_BANK_EINTG(4, 0x080, "gpc4", 0x10),
0600 };
0601
0602
0603 static const struct samsung_pin_bank_data exynos5260_pin_banks2[] __initconst = {
0604
0605 EXYNOS_PIN_BANK_EINTG(7, 0x000, "gpz0", 0x00),
0606 EXYNOS_PIN_BANK_EINTG(4, 0x020, "gpz1", 0x04),
0607 };
0608
0609
0610
0611
0612
0613 static const struct samsung_pin_ctrl exynos5260_pin_ctrl[] __initconst = {
0614 {
0615
0616 .pin_banks = exynos5260_pin_banks0,
0617 .nr_banks = ARRAY_SIZE(exynos5260_pin_banks0),
0618 .eint_gpio_init = exynos_eint_gpio_init,
0619 .eint_wkup_init = exynos_eint_wkup_init,
0620 .suspend = exynos_pinctrl_suspend,
0621 .resume = exynos_pinctrl_resume,
0622 }, {
0623
0624 .pin_banks = exynos5260_pin_banks1,
0625 .nr_banks = ARRAY_SIZE(exynos5260_pin_banks1),
0626 .eint_gpio_init = exynos_eint_gpio_init,
0627 .suspend = exynos_pinctrl_suspend,
0628 .resume = exynos_pinctrl_resume,
0629 }, {
0630
0631 .pin_banks = exynos5260_pin_banks2,
0632 .nr_banks = ARRAY_SIZE(exynos5260_pin_banks2),
0633 .eint_gpio_init = exynos_eint_gpio_init,
0634 .suspend = exynos_pinctrl_suspend,
0635 .resume = exynos_pinctrl_resume,
0636 },
0637 };
0638
0639 const struct samsung_pinctrl_of_match_data exynos5260_of_data __initconst = {
0640 .ctrl = exynos5260_pin_ctrl,
0641 .num_ctrl = ARRAY_SIZE(exynos5260_pin_ctrl),
0642 };
0643
0644
0645 static const struct samsung_pin_bank_data exynos5410_pin_banks0[] __initconst = {
0646
0647 EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpa0", 0x00),
0648 EXYNOS_PIN_BANK_EINTG(6, 0x020, "gpa1", 0x04),
0649 EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpa2", 0x08),
0650 EXYNOS_PIN_BANK_EINTG(5, 0x060, "gpb0", 0x0c),
0651 EXYNOS_PIN_BANK_EINTG(5, 0x080, "gpb1", 0x10),
0652 EXYNOS_PIN_BANK_EINTG(4, 0x0A0, "gpb2", 0x14),
0653 EXYNOS_PIN_BANK_EINTG(4, 0x0C0, "gpb3", 0x18),
0654 EXYNOS_PIN_BANK_EINTG(7, 0x0E0, "gpc0", 0x1c),
0655 EXYNOS_PIN_BANK_EINTG(4, 0x100, "gpc3", 0x20),
0656 EXYNOS_PIN_BANK_EINTG(7, 0x120, "gpc1", 0x24),
0657 EXYNOS_PIN_BANK_EINTG(7, 0x140, "gpc2", 0x28),
0658 EXYNOS_PIN_BANK_EINTG(8, 0x180, "gpd1", 0x2c),
0659 EXYNOS_PIN_BANK_EINTG(8, 0x1A0, "gpe0", 0x30),
0660 EXYNOS_PIN_BANK_EINTG(2, 0x1C0, "gpe1", 0x34),
0661 EXYNOS_PIN_BANK_EINTG(6, 0x1E0, "gpf0", 0x38),
0662 EXYNOS_PIN_BANK_EINTG(8, 0x200, "gpf1", 0x3c),
0663 EXYNOS_PIN_BANK_EINTG(8, 0x220, "gpg0", 0x40),
0664 EXYNOS_PIN_BANK_EINTG(8, 0x240, "gpg1", 0x44),
0665 EXYNOS_PIN_BANK_EINTG(2, 0x260, "gpg2", 0x48),
0666 EXYNOS_PIN_BANK_EINTG(4, 0x280, "gph0", 0x4c),
0667 EXYNOS_PIN_BANK_EINTG(8, 0x2A0, "gph1", 0x50),
0668 EXYNOS_PIN_BANK_EINTN(2, 0x160, "gpm5"),
0669 EXYNOS_PIN_BANK_EINTN(8, 0x2C0, "gpm7"),
0670 EXYNOS_PIN_BANK_EINTN(6, 0x2E0, "gpy0"),
0671 EXYNOS_PIN_BANK_EINTN(4, 0x300, "gpy1"),
0672 EXYNOS_PIN_BANK_EINTN(6, 0x320, "gpy2"),
0673 EXYNOS_PIN_BANK_EINTN(8, 0x340, "gpy3"),
0674 EXYNOS_PIN_BANK_EINTN(8, 0x360, "gpy4"),
0675 EXYNOS_PIN_BANK_EINTN(8, 0x380, "gpy5"),
0676 EXYNOS_PIN_BANK_EINTN(8, 0x3A0, "gpy6"),
0677 EXYNOS_PIN_BANK_EINTN(8, 0x3C0, "gpy7"),
0678 EXYNOS_PIN_BANK_EINTW(8, 0xC00, "gpx0", 0x00),
0679 EXYNOS_PIN_BANK_EINTW(8, 0xC20, "gpx1", 0x04),
0680 EXYNOS_PIN_BANK_EINTW(8, 0xC40, "gpx2", 0x08),
0681 EXYNOS_PIN_BANK_EINTW(8, 0xC60, "gpx3", 0x0c),
0682 };
0683
0684
0685 static const struct samsung_pin_bank_data exynos5410_pin_banks1[] __initconst = {
0686
0687 EXYNOS_PIN_BANK_EINTG(5, 0x000, "gpj0", 0x00),
0688 EXYNOS_PIN_BANK_EINTG(8, 0x020, "gpj1", 0x04),
0689 EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpj2", 0x08),
0690 EXYNOS_PIN_BANK_EINTG(8, 0x060, "gpj3", 0x0c),
0691 EXYNOS_PIN_BANK_EINTG(2, 0x080, "gpj4", 0x10),
0692 EXYNOS_PIN_BANK_EINTG(8, 0x0A0, "gpk0", 0x14),
0693 EXYNOS_PIN_BANK_EINTG(8, 0x0C0, "gpk1", 0x18),
0694 EXYNOS_PIN_BANK_EINTG(8, 0x0E0, "gpk2", 0x1c),
0695 EXYNOS_PIN_BANK_EINTG(7, 0x100, "gpk3", 0x20),
0696 };
0697
0698
0699 static const struct samsung_pin_bank_data exynos5410_pin_banks2[] __initconst = {
0700
0701 EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpv0", 0x00),
0702 EXYNOS_PIN_BANK_EINTG(8, 0x020, "gpv1", 0x04),
0703 EXYNOS_PIN_BANK_EINTG(8, 0x060, "gpv2", 0x08),
0704 EXYNOS_PIN_BANK_EINTG(8, 0x080, "gpv3", 0x0c),
0705 EXYNOS_PIN_BANK_EINTG(2, 0x0C0, "gpv4", 0x10),
0706 };
0707
0708
0709 static const struct samsung_pin_bank_data exynos5410_pin_banks3[] __initconst = {
0710
0711 EXYNOS_PIN_BANK_EINTG(7, 0x000, "gpz", 0x00),
0712 };
0713
0714
0715
0716
0717
0718 static const struct samsung_pin_ctrl exynos5410_pin_ctrl[] __initconst = {
0719 {
0720
0721 .pin_banks = exynos5410_pin_banks0,
0722 .nr_banks = ARRAY_SIZE(exynos5410_pin_banks0),
0723 .eint_gpio_init = exynos_eint_gpio_init,
0724 .eint_wkup_init = exynos_eint_wkup_init,
0725 .suspend = exynos_pinctrl_suspend,
0726 .resume = exynos_pinctrl_resume,
0727 }, {
0728
0729 .pin_banks = exynos5410_pin_banks1,
0730 .nr_banks = ARRAY_SIZE(exynos5410_pin_banks1),
0731 .eint_gpio_init = exynos_eint_gpio_init,
0732 .suspend = exynos_pinctrl_suspend,
0733 .resume = exynos_pinctrl_resume,
0734 }, {
0735
0736 .pin_banks = exynos5410_pin_banks2,
0737 .nr_banks = ARRAY_SIZE(exynos5410_pin_banks2),
0738 .eint_gpio_init = exynos_eint_gpio_init,
0739 .suspend = exynos_pinctrl_suspend,
0740 .resume = exynos_pinctrl_resume,
0741 }, {
0742
0743 .pin_banks = exynos5410_pin_banks3,
0744 .nr_banks = ARRAY_SIZE(exynos5410_pin_banks3),
0745 .eint_gpio_init = exynos_eint_gpio_init,
0746 .suspend = exynos_pinctrl_suspend,
0747 .resume = exynos_pinctrl_resume,
0748 },
0749 };
0750
0751 const struct samsung_pinctrl_of_match_data exynos5410_of_data __initconst = {
0752 .ctrl = exynos5410_pin_ctrl,
0753 .num_ctrl = ARRAY_SIZE(exynos5410_pin_ctrl),
0754 };
0755
0756
0757 static const struct samsung_pin_bank_data exynos5420_pin_banks0[] __initconst = {
0758
0759 EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpy7", 0x00),
0760 EXYNOS_PIN_BANK_EINTW(8, 0xC00, "gpx0", 0x00),
0761 EXYNOS_PIN_BANK_EINTW(8, 0xC20, "gpx1", 0x04),
0762 EXYNOS_PIN_BANK_EINTW(8, 0xC40, "gpx2", 0x08),
0763 EXYNOS_PIN_BANK_EINTW(8, 0xC60, "gpx3", 0x0c),
0764 };
0765
0766
0767 static const struct samsung_pin_bank_data exynos5420_pin_banks1[] __initconst = {
0768
0769 EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpc0", 0x00),
0770 EXYNOS_PIN_BANK_EINTG(8, 0x020, "gpc1", 0x04),
0771 EXYNOS_PIN_BANK_EINTG(7, 0x040, "gpc2", 0x08),
0772 EXYNOS_PIN_BANK_EINTG(4, 0x060, "gpc3", 0x0c),
0773 EXYNOS_PIN_BANK_EINTG(2, 0x080, "gpc4", 0x10),
0774 EXYNOS_PIN_BANK_EINTG(8, 0x0A0, "gpd1", 0x14),
0775 EXYNOS_PIN_BANK_EINTN(6, 0x0C0, "gpy0"),
0776 EXYNOS_PIN_BANK_EINTN(4, 0x0E0, "gpy1"),
0777 EXYNOS_PIN_BANK_EINTN(6, 0x100, "gpy2"),
0778 EXYNOS_PIN_BANK_EINTN(8, 0x120, "gpy3"),
0779 EXYNOS_PIN_BANK_EINTN(8, 0x140, "gpy4"),
0780 EXYNOS_PIN_BANK_EINTN(8, 0x160, "gpy5"),
0781 EXYNOS_PIN_BANK_EINTN(8, 0x180, "gpy6"),
0782 };
0783
0784
0785 static const struct samsung_pin_bank_data exynos5420_pin_banks2[] __initconst = {
0786
0787 EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpe0", 0x00),
0788 EXYNOS_PIN_BANK_EINTG(2, 0x020, "gpe1", 0x04),
0789 EXYNOS_PIN_BANK_EINTG(6, 0x040, "gpf0", 0x08),
0790 EXYNOS_PIN_BANK_EINTG(8, 0x060, "gpf1", 0x0c),
0791 EXYNOS_PIN_BANK_EINTG(8, 0x080, "gpg0", 0x10),
0792 EXYNOS_PIN_BANK_EINTG(8, 0x0A0, "gpg1", 0x14),
0793 EXYNOS_PIN_BANK_EINTG(2, 0x0C0, "gpg2", 0x18),
0794 EXYNOS_PIN_BANK_EINTG(4, 0x0E0, "gpj4", 0x1c),
0795 };
0796
0797
0798 static const struct samsung_pin_bank_data exynos5420_pin_banks3[] __initconst = {
0799
0800 EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpa0", 0x00),
0801 EXYNOS_PIN_BANK_EINTG(6, 0x020, "gpa1", 0x04),
0802 EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpa2", 0x08),
0803 EXYNOS_PIN_BANK_EINTG(5, 0x060, "gpb0", 0x0c),
0804 EXYNOS_PIN_BANK_EINTG(5, 0x080, "gpb1", 0x10),
0805 EXYNOS_PIN_BANK_EINTG(4, 0x0A0, "gpb2", 0x14),
0806 EXYNOS_PIN_BANK_EINTG(8, 0x0C0, "gpb3", 0x18),
0807 EXYNOS_PIN_BANK_EINTG(2, 0x0E0, "gpb4", 0x1c),
0808 EXYNOS_PIN_BANK_EINTG(8, 0x100, "gph0", 0x20),
0809 };
0810
0811
0812 static const struct samsung_pin_bank_data exynos5420_pin_banks4[] __initconst = {
0813
0814 EXYNOS_PIN_BANK_EINTG(7, 0x000, "gpz", 0x00),
0815 };
0816
0817
0818 static const u32 exynos5420_retention_regs[] = {
0819 EXYNOS_PAD_RET_DRAM_OPTION,
0820 EXYNOS_PAD_RET_JTAG_OPTION,
0821 EXYNOS5420_PAD_RET_GPIO_OPTION,
0822 EXYNOS5420_PAD_RET_UART_OPTION,
0823 EXYNOS5420_PAD_RET_MMCA_OPTION,
0824 EXYNOS5420_PAD_RET_MMCB_OPTION,
0825 EXYNOS5420_PAD_RET_MMCC_OPTION,
0826 EXYNOS5420_PAD_RET_HSI_OPTION,
0827 EXYNOS_PAD_RET_EBIA_OPTION,
0828 EXYNOS_PAD_RET_EBIB_OPTION,
0829 EXYNOS5420_PAD_RET_SPI_OPTION,
0830 EXYNOS5420_PAD_RET_DRAM_COREBLK_OPTION,
0831 };
0832
0833 static const struct samsung_retention_data exynos5420_retention_data __initconst = {
0834 .regs = exynos5420_retention_regs,
0835 .nr_regs = ARRAY_SIZE(exynos5420_retention_regs),
0836 .value = EXYNOS_WAKEUP_FROM_LOWPWR,
0837 .refcnt = &exynos_shared_retention_refcnt,
0838 .init = exynos_retention_init,
0839 };
0840
0841
0842
0843
0844
0845 static const struct samsung_pin_ctrl exynos5420_pin_ctrl[] __initconst = {
0846 {
0847
0848 .pin_banks = exynos5420_pin_banks0,
0849 .nr_banks = ARRAY_SIZE(exynos5420_pin_banks0),
0850 .eint_gpio_init = exynos_eint_gpio_init,
0851 .eint_wkup_init = exynos_eint_wkup_init,
0852 .suspend = exynos_pinctrl_suspend,
0853 .resume = exynos_pinctrl_resume,
0854 .retention_data = &exynos5420_retention_data,
0855 }, {
0856
0857 .pin_banks = exynos5420_pin_banks1,
0858 .nr_banks = ARRAY_SIZE(exynos5420_pin_banks1),
0859 .eint_gpio_init = exynos_eint_gpio_init,
0860 .suspend = exynos_pinctrl_suspend,
0861 .resume = exynos_pinctrl_resume,
0862 .retention_data = &exynos5420_retention_data,
0863 }, {
0864
0865 .pin_banks = exynos5420_pin_banks2,
0866 .nr_banks = ARRAY_SIZE(exynos5420_pin_banks2),
0867 .eint_gpio_init = exynos_eint_gpio_init,
0868 .suspend = exynos_pinctrl_suspend,
0869 .resume = exynos_pinctrl_resume,
0870 .retention_data = &exynos5420_retention_data,
0871 }, {
0872
0873 .pin_banks = exynos5420_pin_banks3,
0874 .nr_banks = ARRAY_SIZE(exynos5420_pin_banks3),
0875 .eint_gpio_init = exynos_eint_gpio_init,
0876 .suspend = exynos_pinctrl_suspend,
0877 .resume = exynos_pinctrl_resume,
0878 .retention_data = &exynos5420_retention_data,
0879 }, {
0880
0881 .pin_banks = exynos5420_pin_banks4,
0882 .nr_banks = ARRAY_SIZE(exynos5420_pin_banks4),
0883 .eint_gpio_init = exynos_eint_gpio_init,
0884 .suspend = exynos_pinctrl_suspend,
0885 .resume = exynos_pinctrl_resume,
0886 .retention_data = &exynos4_audio_retention_data,
0887 },
0888 };
0889
0890 const struct samsung_pinctrl_of_match_data exynos5420_of_data __initconst = {
0891 .ctrl = exynos5420_pin_ctrl,
0892 .num_ctrl = ARRAY_SIZE(exynos5420_pin_ctrl),
0893 };