xref: /linux/drivers/pinctrl/samsung/pinctrl-exynos.c (revision 26fecf0b21d17d17ba98fd64e8ac5a5c87ffb0d5)
143b169dbSThomas Abraham /*
243b169dbSThomas Abraham  * Exynos specific support for Samsung pinctrl/gpiolib driver with eint support.
343b169dbSThomas Abraham  *
443b169dbSThomas Abraham  * Copyright (c) 2012 Samsung Electronics Co., Ltd.
543b169dbSThomas Abraham  *		http://www.samsung.com
643b169dbSThomas Abraham  * Copyright (c) 2012 Linaro Ltd
743b169dbSThomas Abraham  *		http://www.linaro.org
843b169dbSThomas Abraham  *
943b169dbSThomas Abraham  * Author: Thomas Abraham <thomas.ab@samsung.com>
1043b169dbSThomas Abraham  *
1143b169dbSThomas Abraham  * This program is free software; you can redistribute it and/or modify
1243b169dbSThomas Abraham  * it under the terms of the GNU General Public License as published by
1343b169dbSThomas Abraham  * the Free Software Foundation; either version 2 of the License, or
1443b169dbSThomas Abraham  * (at your option) any later version.
1543b169dbSThomas Abraham  *
1643b169dbSThomas Abraham  * This file contains the Samsung Exynos specific information required by the
1743b169dbSThomas Abraham  * the Samsung pinctrl/gpiolib driver. It also includes the implementation of
1843b169dbSThomas Abraham  * external gpio and wakeup interrupt support.
1943b169dbSThomas Abraham  */
2043b169dbSThomas Abraham 
2143b169dbSThomas Abraham #include <linux/module.h>
2243b169dbSThomas Abraham #include <linux/device.h>
2343b169dbSThomas Abraham #include <linux/interrupt.h>
2443b169dbSThomas Abraham #include <linux/irqdomain.h>
2543b169dbSThomas Abraham #include <linux/irq.h>
26de88cbb7SCatalin Marinas #include <linux/irqchip/chained_irq.h>
2743b169dbSThomas Abraham #include <linux/of_irq.h>
2843b169dbSThomas Abraham #include <linux/io.h>
2943b169dbSThomas Abraham #include <linux/slab.h>
3019846950STomasz Figa #include <linux/spinlock.h>
3143b169dbSThomas Abraham #include <linux/err.h>
3243b169dbSThomas Abraham 
3343b169dbSThomas Abraham #include "pinctrl-samsung.h"
3443b169dbSThomas Abraham #include "pinctrl-exynos.h"
3543b169dbSThomas Abraham 
362e4a4fdaSTomasz Figa struct exynos_irq_chip {
372e4a4fdaSTomasz Figa 	struct irq_chip chip;
382e4a4fdaSTomasz Figa 
392e4a4fdaSTomasz Figa 	u32 eint_con;
402e4a4fdaSTomasz Figa 	u32 eint_mask;
412e4a4fdaSTomasz Figa 	u32 eint_pend;
422e4a4fdaSTomasz Figa };
432e4a4fdaSTomasz Figa 
442e4a4fdaSTomasz Figa static inline struct exynos_irq_chip *to_exynos_irq_chip(struct irq_chip *chip)
452e4a4fdaSTomasz Figa {
462e4a4fdaSTomasz Figa 	return container_of(chip, struct exynos_irq_chip, chip);
472e4a4fdaSTomasz Figa }
48499147c9STomasz Figa 
4994ce944bSTomasz Figa static const struct samsung_pin_bank_type bank_type_off = {
50499147c9STomasz Figa 	.fld_width = { 4, 1, 2, 2, 2, 2, },
5143fc9e7fSTomasz Figa 	.reg_offset = { 0x00, 0x04, 0x08, 0x0c, 0x10, 0x14, },
52499147c9STomasz Figa };
53499147c9STomasz Figa 
5494ce944bSTomasz Figa static const struct samsung_pin_bank_type bank_type_alive = {
55499147c9STomasz Figa 	.fld_width = { 4, 1, 2, 2, },
5643fc9e7fSTomasz Figa 	.reg_offset = { 0x00, 0x04, 0x08, 0x0c, },
57499147c9STomasz Figa };
58499147c9STomasz Figa 
592e4a4fdaSTomasz Figa static void exynos_irq_mask(struct irq_data *irqd)
6043b169dbSThomas Abraham {
612e4a4fdaSTomasz Figa 	struct irq_chip *chip = irq_data_get_irq_chip(irqd);
622e4a4fdaSTomasz Figa 	struct exynos_irq_chip *our_chip = to_exynos_irq_chip(chip);
63595be726STomasz Figa 	struct samsung_pin_bank *bank = irq_data_get_irq_chip_data(irqd);
64595be726STomasz Figa 	struct samsung_pinctrl_drv_data *d = bank->drvdata;
652e4a4fdaSTomasz Figa 	unsigned long reg_mask = our_chip->eint_mask + bank->eint_offset;
6643b169dbSThomas Abraham 	unsigned long mask;
675ae8cf79SDoug Anderson 	unsigned long flags;
685ae8cf79SDoug Anderson 
695ae8cf79SDoug Anderson 	spin_lock_irqsave(&bank->slock, flags);
7043b169dbSThomas Abraham 
7143b169dbSThomas Abraham 	mask = readl(d->virt_base + reg_mask);
72595be726STomasz Figa 	mask |= 1 << irqd->hwirq;
7343b169dbSThomas Abraham 	writel(mask, d->virt_base + reg_mask);
745ae8cf79SDoug Anderson 
755ae8cf79SDoug Anderson 	spin_unlock_irqrestore(&bank->slock, flags);
7643b169dbSThomas Abraham }
7743b169dbSThomas Abraham 
782e4a4fdaSTomasz Figa static void exynos_irq_ack(struct irq_data *irqd)
7943b169dbSThomas Abraham {
802e4a4fdaSTomasz Figa 	struct irq_chip *chip = irq_data_get_irq_chip(irqd);
812e4a4fdaSTomasz Figa 	struct exynos_irq_chip *our_chip = to_exynos_irq_chip(chip);
82595be726STomasz Figa 	struct samsung_pin_bank *bank = irq_data_get_irq_chip_data(irqd);
83595be726STomasz Figa 	struct samsung_pinctrl_drv_data *d = bank->drvdata;
842e4a4fdaSTomasz Figa 	unsigned long reg_pend = our_chip->eint_pend + bank->eint_offset;
8543b169dbSThomas Abraham 
86595be726STomasz Figa 	writel(1 << irqd->hwirq, d->virt_base + reg_pend);
8743b169dbSThomas Abraham }
8843b169dbSThomas Abraham 
892e4a4fdaSTomasz Figa static void exynos_irq_unmask(struct irq_data *irqd)
905ace03fbSDoug Anderson {
912e4a4fdaSTomasz Figa 	struct irq_chip *chip = irq_data_get_irq_chip(irqd);
922e4a4fdaSTomasz Figa 	struct exynos_irq_chip *our_chip = to_exynos_irq_chip(chip);
935ace03fbSDoug Anderson 	struct samsung_pin_bank *bank = irq_data_get_irq_chip_data(irqd);
945ace03fbSDoug Anderson 	struct samsung_pinctrl_drv_data *d = bank->drvdata;
952e4a4fdaSTomasz Figa 	unsigned long reg_mask = our_chip->eint_mask + bank->eint_offset;
965ace03fbSDoug Anderson 	unsigned long mask;
975ace03fbSDoug Anderson 	unsigned long flags;
985ace03fbSDoug Anderson 
995a68e7a7SDoug Anderson 	/*
1005a68e7a7SDoug Anderson 	 * Ack level interrupts right before unmask
1015a68e7a7SDoug Anderson 	 *
1025a68e7a7SDoug Anderson 	 * If we don't do this we'll get a double-interrupt.  Level triggered
1035a68e7a7SDoug Anderson 	 * interrupts must not fire an interrupt if the level is not
1045a68e7a7SDoug Anderson 	 * _currently_ active, even if it was active while the interrupt was
1055a68e7a7SDoug Anderson 	 * masked.
1065a68e7a7SDoug Anderson 	 */
1075a68e7a7SDoug Anderson 	if (irqd_get_trigger_type(irqd) & IRQ_TYPE_LEVEL_MASK)
1082e4a4fdaSTomasz Figa 		exynos_irq_ack(irqd);
1095a68e7a7SDoug Anderson 
1105ace03fbSDoug Anderson 	spin_lock_irqsave(&bank->slock, flags);
1115ace03fbSDoug Anderson 
1125ace03fbSDoug Anderson 	mask = readl(d->virt_base + reg_mask);
1135ace03fbSDoug Anderson 	mask &= ~(1 << irqd->hwirq);
1145ace03fbSDoug Anderson 	writel(mask, d->virt_base + reg_mask);
1155ace03fbSDoug Anderson 
1165ace03fbSDoug Anderson 	spin_unlock_irqrestore(&bank->slock, flags);
1175ace03fbSDoug Anderson }
1185ace03fbSDoug Anderson 
1192e4a4fdaSTomasz Figa static int exynos_irq_set_type(struct irq_data *irqd, unsigned int type)
12043b169dbSThomas Abraham {
1212e4a4fdaSTomasz Figa 	struct irq_chip *chip = irq_data_get_irq_chip(irqd);
1222e4a4fdaSTomasz Figa 	struct exynos_irq_chip *our_chip = to_exynos_irq_chip(chip);
123595be726STomasz Figa 	struct samsung_pin_bank *bank = irq_data_get_irq_chip_data(irqd);
124595be726STomasz Figa 	struct samsung_pinctrl_drv_data *d = bank->drvdata;
125f6a8249fSTomasz Figa 	unsigned int shift = EXYNOS_EINT_CON_LEN * irqd->hwirq;
12643b169dbSThomas Abraham 	unsigned int con, trig_type;
1272e4a4fdaSTomasz Figa 	unsigned long reg_con = our_chip->eint_con + bank->eint_offset;
12843b169dbSThomas Abraham 
12943b169dbSThomas Abraham 	switch (type) {
13043b169dbSThomas Abraham 	case IRQ_TYPE_EDGE_RISING:
13143b169dbSThomas Abraham 		trig_type = EXYNOS_EINT_EDGE_RISING;
13243b169dbSThomas Abraham 		break;
13343b169dbSThomas Abraham 	case IRQ_TYPE_EDGE_FALLING:
13443b169dbSThomas Abraham 		trig_type = EXYNOS_EINT_EDGE_FALLING;
13543b169dbSThomas Abraham 		break;
13643b169dbSThomas Abraham 	case IRQ_TYPE_EDGE_BOTH:
13743b169dbSThomas Abraham 		trig_type = EXYNOS_EINT_EDGE_BOTH;
13843b169dbSThomas Abraham 		break;
13943b169dbSThomas Abraham 	case IRQ_TYPE_LEVEL_HIGH:
14043b169dbSThomas Abraham 		trig_type = EXYNOS_EINT_LEVEL_HIGH;
14143b169dbSThomas Abraham 		break;
14243b169dbSThomas Abraham 	case IRQ_TYPE_LEVEL_LOW:
14343b169dbSThomas Abraham 		trig_type = EXYNOS_EINT_LEVEL_LOW;
14443b169dbSThomas Abraham 		break;
14543b169dbSThomas Abraham 	default:
14643b169dbSThomas Abraham 		pr_err("unsupported external interrupt type\n");
14743b169dbSThomas Abraham 		return -EINVAL;
14843b169dbSThomas Abraham 	}
14943b169dbSThomas Abraham 
15043b169dbSThomas Abraham 	if (type & IRQ_TYPE_EDGE_BOTH)
15140ec168aSThomas Gleixner 		irq_set_handler_locked(irqd, handle_edge_irq);
15243b169dbSThomas Abraham 	else
15340ec168aSThomas Gleixner 		irq_set_handler_locked(irqd, handle_level_irq);
15443b169dbSThomas Abraham 
15543b169dbSThomas Abraham 	con = readl(d->virt_base + reg_con);
15643b169dbSThomas Abraham 	con &= ~(EXYNOS_EINT_CON_MASK << shift);
15743b169dbSThomas Abraham 	con |= trig_type << shift;
15843b169dbSThomas Abraham 	writel(con, d->virt_base + reg_con);
159ee2f573cSTomasz Figa 
160f6a8249fSTomasz Figa 	return 0;
161f6a8249fSTomasz Figa }
162f6a8249fSTomasz Figa 
163f6a8249fSTomasz Figa static int exynos_irq_request_resources(struct irq_data *irqd)
164f6a8249fSTomasz Figa {
165f6a8249fSTomasz Figa 	struct irq_chip *chip = irq_data_get_irq_chip(irqd);
166f6a8249fSTomasz Figa 	struct exynos_irq_chip *our_chip = to_exynos_irq_chip(chip);
167f6a8249fSTomasz Figa 	struct samsung_pin_bank *bank = irq_data_get_irq_chip_data(irqd);
16894ce944bSTomasz Figa 	const struct samsung_pin_bank_type *bank_type = bank->type;
169f6a8249fSTomasz Figa 	struct samsung_pinctrl_drv_data *d = bank->drvdata;
170f6a8249fSTomasz Figa 	unsigned int shift = EXYNOS_EINT_CON_LEN * irqd->hwirq;
171f6a8249fSTomasz Figa 	unsigned long reg_con = our_chip->eint_con + bank->eint_offset;
172f6a8249fSTomasz Figa 	unsigned long flags;
173f6a8249fSTomasz Figa 	unsigned int mask;
174f6a8249fSTomasz Figa 	unsigned int con;
175f6a8249fSTomasz Figa 	int ret;
176f6a8249fSTomasz Figa 
177e3a2e878SAlexandre Courbot 	ret = gpiochip_lock_as_irq(&bank->gpio_chip, irqd->hwirq);
178f6a8249fSTomasz Figa 	if (ret) {
17958383c78SLinus Walleij 		dev_err(bank->gpio_chip.parent,
18058383c78SLinus Walleij 			"unable to lock pin %s-%lu IRQ\n",
181f6a8249fSTomasz Figa 			bank->name, irqd->hwirq);
182f6a8249fSTomasz Figa 		return ret;
183f6a8249fSTomasz Figa 	}
184f6a8249fSTomasz Figa 
18543fc9e7fSTomasz Figa 	reg_con = bank->pctl_offset + bank_type->reg_offset[PINCFG_TYPE_FUNC];
186f6a8249fSTomasz Figa 	shift = irqd->hwirq * bank_type->fld_width[PINCFG_TYPE_FUNC];
187499147c9STomasz Figa 	mask = (1 << bank_type->fld_width[PINCFG_TYPE_FUNC]) - 1;
188ee2f573cSTomasz Figa 
18919846950STomasz Figa 	spin_lock_irqsave(&bank->slock, flags);
19019846950STomasz Figa 
191ee2f573cSTomasz Figa 	con = readl(d->virt_base + reg_con);
192ee2f573cSTomasz Figa 	con &= ~(mask << shift);
193ee2f573cSTomasz Figa 	con |= EXYNOS_EINT_FUNC << shift;
194ee2f573cSTomasz Figa 	writel(con, d->virt_base + reg_con);
195ee2f573cSTomasz Figa 
19619846950STomasz Figa 	spin_unlock_irqrestore(&bank->slock, flags);
19719846950STomasz Figa 
198f6a8249fSTomasz Figa 	exynos_irq_unmask(irqd);
199f6a8249fSTomasz Figa 
20043b169dbSThomas Abraham 	return 0;
20143b169dbSThomas Abraham }
20243b169dbSThomas Abraham 
203f6a8249fSTomasz Figa static void exynos_irq_release_resources(struct irq_data *irqd)
204f6a8249fSTomasz Figa {
205f6a8249fSTomasz Figa 	struct irq_chip *chip = irq_data_get_irq_chip(irqd);
206f6a8249fSTomasz Figa 	struct exynos_irq_chip *our_chip = to_exynos_irq_chip(chip);
207f6a8249fSTomasz Figa 	struct samsung_pin_bank *bank = irq_data_get_irq_chip_data(irqd);
20894ce944bSTomasz Figa 	const struct samsung_pin_bank_type *bank_type = bank->type;
209f6a8249fSTomasz Figa 	struct samsung_pinctrl_drv_data *d = bank->drvdata;
210f6a8249fSTomasz Figa 	unsigned int shift = EXYNOS_EINT_CON_LEN * irqd->hwirq;
211f6a8249fSTomasz Figa 	unsigned long reg_con = our_chip->eint_con + bank->eint_offset;
212f6a8249fSTomasz Figa 	unsigned long flags;
213f6a8249fSTomasz Figa 	unsigned int mask;
214f6a8249fSTomasz Figa 	unsigned int con;
215f6a8249fSTomasz Figa 
216f6a8249fSTomasz Figa 	reg_con = bank->pctl_offset + bank_type->reg_offset[PINCFG_TYPE_FUNC];
217f6a8249fSTomasz Figa 	shift = irqd->hwirq * bank_type->fld_width[PINCFG_TYPE_FUNC];
218f6a8249fSTomasz Figa 	mask = (1 << bank_type->fld_width[PINCFG_TYPE_FUNC]) - 1;
219f6a8249fSTomasz Figa 
220f6a8249fSTomasz Figa 	exynos_irq_mask(irqd);
221f6a8249fSTomasz Figa 
222f6a8249fSTomasz Figa 	spin_lock_irqsave(&bank->slock, flags);
223f6a8249fSTomasz Figa 
224f6a8249fSTomasz Figa 	con = readl(d->virt_base + reg_con);
225f6a8249fSTomasz Figa 	con &= ~(mask << shift);
226f6a8249fSTomasz Figa 	con |= FUNC_INPUT << shift;
227f6a8249fSTomasz Figa 	writel(con, d->virt_base + reg_con);
228f6a8249fSTomasz Figa 
229f6a8249fSTomasz Figa 	spin_unlock_irqrestore(&bank->slock, flags);
230f6a8249fSTomasz Figa 
231e3a2e878SAlexandre Courbot 	gpiochip_unlock_as_irq(&bank->gpio_chip, irqd->hwirq);
232f6a8249fSTomasz Figa }
233f6a8249fSTomasz Figa 
23443b169dbSThomas Abraham /*
23543b169dbSThomas Abraham  * irq_chip for gpio interrupts.
23643b169dbSThomas Abraham  */
2372e4a4fdaSTomasz Figa static struct exynos_irq_chip exynos_gpio_irq_chip = {
2382e4a4fdaSTomasz Figa 	.chip = {
23943b169dbSThomas Abraham 		.name = "exynos_gpio_irq_chip",
2402e4a4fdaSTomasz Figa 		.irq_unmask = exynos_irq_unmask,
2412e4a4fdaSTomasz Figa 		.irq_mask = exynos_irq_mask,
2422e4a4fdaSTomasz Figa 		.irq_ack = exynos_irq_ack,
2432e4a4fdaSTomasz Figa 		.irq_set_type = exynos_irq_set_type,
244f6a8249fSTomasz Figa 		.irq_request_resources = exynos_irq_request_resources,
245f6a8249fSTomasz Figa 		.irq_release_resources = exynos_irq_release_resources,
2462e4a4fdaSTomasz Figa 	},
2472e4a4fdaSTomasz Figa 	.eint_con = EXYNOS_GPIO_ECON_OFFSET,
2482e4a4fdaSTomasz Figa 	.eint_mask = EXYNOS_GPIO_EMASK_OFFSET,
2492e4a4fdaSTomasz Figa 	.eint_pend = EXYNOS_GPIO_EPEND_OFFSET,
25043b169dbSThomas Abraham };
25143b169dbSThomas Abraham 
2526f5e41bdSAbhilash Kesavan static int exynos_eint_irq_map(struct irq_domain *h, unsigned int virq,
25343b169dbSThomas Abraham 					irq_hw_number_t hw)
25443b169dbSThomas Abraham {
255595be726STomasz Figa 	struct samsung_pin_bank *b = h->host_data;
25643b169dbSThomas Abraham 
257595be726STomasz Figa 	irq_set_chip_data(virq, b);
2580d3d30dbSAbhilash Kesavan 	irq_set_chip_and_handler(virq, &b->irq_chip->chip,
25943b169dbSThomas Abraham 					handle_level_irq);
26043b169dbSThomas Abraham 	return 0;
26143b169dbSThomas Abraham }
26243b169dbSThomas Abraham 
26343b169dbSThomas Abraham /*
2646f5e41bdSAbhilash Kesavan  * irq domain callbacks for external gpio and wakeup interrupt controllers.
26543b169dbSThomas Abraham  */
2666f5e41bdSAbhilash Kesavan static const struct irq_domain_ops exynos_eint_irqd_ops = {
2676f5e41bdSAbhilash Kesavan 	.map	= exynos_eint_irq_map,
26843b169dbSThomas Abraham 	.xlate	= irq_domain_xlate_twocell,
26943b169dbSThomas Abraham };
27043b169dbSThomas Abraham 
27143b169dbSThomas Abraham static irqreturn_t exynos_eint_gpio_irq(int irq, void *data)
27243b169dbSThomas Abraham {
27343b169dbSThomas Abraham 	struct samsung_pinctrl_drv_data *d = data;
2741bf00d7aSTomasz Figa 	struct samsung_pin_bank *bank = d->pin_banks;
27543b169dbSThomas Abraham 	unsigned int svc, group, pin, virq;
27643b169dbSThomas Abraham 
2772e4a4fdaSTomasz Figa 	svc = readl(d->virt_base + EXYNOS_SVC_OFFSET);
27843b169dbSThomas Abraham 	group = EXYNOS_SVC_GROUP(svc);
27943b169dbSThomas Abraham 	pin = svc & EXYNOS_SVC_NUM_MASK;
28043b169dbSThomas Abraham 
28143b169dbSThomas Abraham 	if (!group)
28243b169dbSThomas Abraham 		return IRQ_HANDLED;
28343b169dbSThomas Abraham 	bank += (group - 1);
28443b169dbSThomas Abraham 
285595be726STomasz Figa 	virq = irq_linear_revmap(bank->irq_domain, pin);
28643b169dbSThomas Abraham 	if (!virq)
28743b169dbSThomas Abraham 		return IRQ_NONE;
28843b169dbSThomas Abraham 	generic_handle_irq(virq);
28943b169dbSThomas Abraham 	return IRQ_HANDLED;
29043b169dbSThomas Abraham }
29143b169dbSThomas Abraham 
2927ccbc60cSTomasz Figa struct exynos_eint_gpio_save {
2937ccbc60cSTomasz Figa 	u32 eint_con;
2947ccbc60cSTomasz Figa 	u32 eint_fltcon0;
2957ccbc60cSTomasz Figa 	u32 eint_fltcon1;
2967ccbc60cSTomasz Figa };
2977ccbc60cSTomasz Figa 
29843b169dbSThomas Abraham /*
29943b169dbSThomas Abraham  * exynos_eint_gpio_init() - setup handling of external gpio interrupts.
30043b169dbSThomas Abraham  * @d: driver data of samsung pinctrl driver.
30143b169dbSThomas Abraham  */
30243b169dbSThomas Abraham static int exynos_eint_gpio_init(struct samsung_pinctrl_drv_data *d)
30343b169dbSThomas Abraham {
304595be726STomasz Figa 	struct samsung_pin_bank *bank;
30543b169dbSThomas Abraham 	struct device *dev = d->dev;
3067ccbc60cSTomasz Figa 	int ret;
3077ccbc60cSTomasz Figa 	int i;
30843b169dbSThomas Abraham 
30943b169dbSThomas Abraham 	if (!d->irq) {
31043b169dbSThomas Abraham 		dev_err(dev, "irq number not available\n");
31143b169dbSThomas Abraham 		return -EINVAL;
31243b169dbSThomas Abraham 	}
31343b169dbSThomas Abraham 
31443b169dbSThomas Abraham 	ret = devm_request_irq(dev, d->irq, exynos_eint_gpio_irq,
31543b169dbSThomas Abraham 					0, dev_name(dev), d);
31643b169dbSThomas Abraham 	if (ret) {
31743b169dbSThomas Abraham 		dev_err(dev, "irq request failed\n");
31843b169dbSThomas Abraham 		return -ENXIO;
31943b169dbSThomas Abraham 	}
32043b169dbSThomas Abraham 
3211bf00d7aSTomasz Figa 	bank = d->pin_banks;
3221bf00d7aSTomasz Figa 	for (i = 0; i < d->nr_banks; ++i, ++bank) {
323595be726STomasz Figa 		if (bank->eint_type != EINT_TYPE_GPIO)
324595be726STomasz Figa 			continue;
325595be726STomasz Figa 		bank->irq_domain = irq_domain_add_linear(bank->of_node,
3266f5e41bdSAbhilash Kesavan 				bank->nr_pins, &exynos_eint_irqd_ops, bank);
327595be726STomasz Figa 		if (!bank->irq_domain) {
328595be726STomasz Figa 			dev_err(dev, "gpio irq domain add failed\n");
3297ccbc60cSTomasz Figa 			ret = -ENXIO;
3307ccbc60cSTomasz Figa 			goto err_domains;
3317ccbc60cSTomasz Figa 		}
3327ccbc60cSTomasz Figa 
3337ccbc60cSTomasz Figa 		bank->soc_priv = devm_kzalloc(d->dev,
3347ccbc60cSTomasz Figa 			sizeof(struct exynos_eint_gpio_save), GFP_KERNEL);
3357ccbc60cSTomasz Figa 		if (!bank->soc_priv) {
3367ccbc60cSTomasz Figa 			irq_domain_remove(bank->irq_domain);
3377ccbc60cSTomasz Figa 			ret = -ENOMEM;
3387ccbc60cSTomasz Figa 			goto err_domains;
33943b169dbSThomas Abraham 		}
3400d3d30dbSAbhilash Kesavan 
3410d3d30dbSAbhilash Kesavan 		bank->irq_chip = &exynos_gpio_irq_chip;
342595be726STomasz Figa 	}
34343b169dbSThomas Abraham 
34443b169dbSThomas Abraham 	return 0;
3457ccbc60cSTomasz Figa 
3467ccbc60cSTomasz Figa err_domains:
3477ccbc60cSTomasz Figa 	for (--i, --bank; i >= 0; --i, --bank) {
3487ccbc60cSTomasz Figa 		if (bank->eint_type != EINT_TYPE_GPIO)
3497ccbc60cSTomasz Figa 			continue;
3507ccbc60cSTomasz Figa 		irq_domain_remove(bank->irq_domain);
3517ccbc60cSTomasz Figa 	}
3527ccbc60cSTomasz Figa 
3537ccbc60cSTomasz Figa 	return ret;
35443b169dbSThomas Abraham }
35543b169dbSThomas Abraham 
356ad350cd9STomasz Figa static u32 exynos_eint_wake_mask = 0xffffffff;
357ad350cd9STomasz Figa 
358ad350cd9STomasz Figa u32 exynos_get_eint_wake_mask(void)
359ad350cd9STomasz Figa {
360ad350cd9STomasz Figa 	return exynos_eint_wake_mask;
361ad350cd9STomasz Figa }
362ad350cd9STomasz Figa 
363ad350cd9STomasz Figa static int exynos_wkup_irq_set_wake(struct irq_data *irqd, unsigned int on)
364ad350cd9STomasz Figa {
365ad350cd9STomasz Figa 	struct samsung_pin_bank *bank = irq_data_get_irq_chip_data(irqd);
366ad350cd9STomasz Figa 	unsigned long bit = 1UL << (2 * bank->eint_offset + irqd->hwirq);
367ad350cd9STomasz Figa 
368ad350cd9STomasz Figa 	pr_info("wake %s for irq %d\n", on ? "enabled" : "disabled", irqd->irq);
369ad350cd9STomasz Figa 
370ad350cd9STomasz Figa 	if (!on)
371ad350cd9STomasz Figa 		exynos_eint_wake_mask |= bit;
372ad350cd9STomasz Figa 	else
373ad350cd9STomasz Figa 		exynos_eint_wake_mask &= ~bit;
374ad350cd9STomasz Figa 
375ad350cd9STomasz Figa 	return 0;
376ad350cd9STomasz Figa }
377ad350cd9STomasz Figa 
37843b169dbSThomas Abraham /*
37943b169dbSThomas Abraham  * irq_chip for wakeup interrupts
38043b169dbSThomas Abraham  */
38114c255d3SAbhilash Kesavan static struct exynos_irq_chip exynos4210_wkup_irq_chip __initdata = {
3822e4a4fdaSTomasz Figa 	.chip = {
38314c255d3SAbhilash Kesavan 		.name = "exynos4210_wkup_irq_chip",
3842e4a4fdaSTomasz Figa 		.irq_unmask = exynos_irq_unmask,
3852e4a4fdaSTomasz Figa 		.irq_mask = exynos_irq_mask,
3862e4a4fdaSTomasz Figa 		.irq_ack = exynos_irq_ack,
3872e4a4fdaSTomasz Figa 		.irq_set_type = exynos_irq_set_type,
388ad350cd9STomasz Figa 		.irq_set_wake = exynos_wkup_irq_set_wake,
389f6a8249fSTomasz Figa 		.irq_request_resources = exynos_irq_request_resources,
390f6a8249fSTomasz Figa 		.irq_release_resources = exynos_irq_release_resources,
3912e4a4fdaSTomasz Figa 	},
3922e4a4fdaSTomasz Figa 	.eint_con = EXYNOS_WKUP_ECON_OFFSET,
3932e4a4fdaSTomasz Figa 	.eint_mask = EXYNOS_WKUP_EMASK_OFFSET,
3942e4a4fdaSTomasz Figa 	.eint_pend = EXYNOS_WKUP_EPEND_OFFSET,
39543b169dbSThomas Abraham };
39643b169dbSThomas Abraham 
39714c255d3SAbhilash Kesavan static struct exynos_irq_chip exynos7_wkup_irq_chip __initdata = {
39814c255d3SAbhilash Kesavan 	.chip = {
39914c255d3SAbhilash Kesavan 		.name = "exynos7_wkup_irq_chip",
40014c255d3SAbhilash Kesavan 		.irq_unmask = exynos_irq_unmask,
40114c255d3SAbhilash Kesavan 		.irq_mask = exynos_irq_mask,
40214c255d3SAbhilash Kesavan 		.irq_ack = exynos_irq_ack,
40314c255d3SAbhilash Kesavan 		.irq_set_type = exynos_irq_set_type,
40414c255d3SAbhilash Kesavan 		.irq_set_wake = exynos_wkup_irq_set_wake,
40514c255d3SAbhilash Kesavan 		.irq_request_resources = exynos_irq_request_resources,
40614c255d3SAbhilash Kesavan 		.irq_release_resources = exynos_irq_release_resources,
40714c255d3SAbhilash Kesavan 	},
40814c255d3SAbhilash Kesavan 	.eint_con = EXYNOS7_WKUP_ECON_OFFSET,
40914c255d3SAbhilash Kesavan 	.eint_mask = EXYNOS7_WKUP_EMASK_OFFSET,
41014c255d3SAbhilash Kesavan 	.eint_pend = EXYNOS7_WKUP_EPEND_OFFSET,
41114c255d3SAbhilash Kesavan };
41214c255d3SAbhilash Kesavan 
41314c255d3SAbhilash Kesavan /* list of external wakeup controllers supported */
41414c255d3SAbhilash Kesavan static const struct of_device_id exynos_wkup_irq_ids[] = {
41514c255d3SAbhilash Kesavan 	{ .compatible = "samsung,exynos4210-wakeup-eint",
41614c255d3SAbhilash Kesavan 			.data = &exynos4210_wkup_irq_chip },
41714c255d3SAbhilash Kesavan 	{ .compatible = "samsung,exynos7-wakeup-eint",
41814c255d3SAbhilash Kesavan 			.data = &exynos7_wkup_irq_chip },
41914c255d3SAbhilash Kesavan 	{ }
42014c255d3SAbhilash Kesavan };
42114c255d3SAbhilash Kesavan 
42243b169dbSThomas Abraham /* interrupt handler for wakeup interrupts 0..15 */
423bd0b9ac4SThomas Gleixner static void exynos_irq_eint0_15(struct irq_desc *desc)
42443b169dbSThomas Abraham {
4255663bb27SJiang Liu 	struct exynos_weint_data *eintd = irq_desc_get_handler_data(desc);
426a04b07c0STomasz Figa 	struct samsung_pin_bank *bank = eintd->bank;
4275663bb27SJiang Liu 	struct irq_chip *chip = irq_desc_get_chip(desc);
42843b169dbSThomas Abraham 	int eint_irq;
42943b169dbSThomas Abraham 
43043b169dbSThomas Abraham 	chained_irq_enter(chip, desc);
43143b169dbSThomas Abraham 
432a04b07c0STomasz Figa 	eint_irq = irq_linear_revmap(bank->irq_domain, eintd->irq);
43343b169dbSThomas Abraham 	generic_handle_irq(eint_irq);
434*26fecf0bSperr perr 
43543b169dbSThomas Abraham 	chained_irq_exit(chip, desc);
43643b169dbSThomas Abraham }
43743b169dbSThomas Abraham 
438a04b07c0STomasz Figa static inline void exynos_irq_demux_eint(unsigned long pend,
43943b169dbSThomas Abraham 						struct irq_domain *domain)
44043b169dbSThomas Abraham {
44143b169dbSThomas Abraham 	unsigned int irq;
44243b169dbSThomas Abraham 
44343b169dbSThomas Abraham 	while (pend) {
44443b169dbSThomas Abraham 		irq = fls(pend) - 1;
445a04b07c0STomasz Figa 		generic_handle_irq(irq_find_mapping(domain, irq));
44643b169dbSThomas Abraham 		pend &= ~(1 << irq);
44743b169dbSThomas Abraham 	}
44843b169dbSThomas Abraham }
44943b169dbSThomas Abraham 
45043b169dbSThomas Abraham /* interrupt handler for wakeup interrupt 16 */
451bd0b9ac4SThomas Gleixner static void exynos_irq_demux_eint16_31(struct irq_desc *desc)
45243b169dbSThomas Abraham {
4535663bb27SJiang Liu 	struct irq_chip *chip = irq_desc_get_chip(desc);
4545663bb27SJiang Liu 	struct exynos_muxed_weint_data *eintd = irq_desc_get_handler_data(desc);
455a04b07c0STomasz Figa 	struct samsung_pinctrl_drv_data *d = eintd->banks[0]->drvdata;
45643b169dbSThomas Abraham 	unsigned long pend;
457de59049bSTomasz Figa 	unsigned long mask;
458a04b07c0STomasz Figa 	int i;
45943b169dbSThomas Abraham 
46043b169dbSThomas Abraham 	chained_irq_enter(chip, desc);
461a04b07c0STomasz Figa 
462a04b07c0STomasz Figa 	for (i = 0; i < eintd->nr_banks; ++i) {
463a04b07c0STomasz Figa 		struct samsung_pin_bank *b = eintd->banks[i];
4640d3d30dbSAbhilash Kesavan 		pend = readl(d->virt_base + b->irq_chip->eint_pend
4652e4a4fdaSTomasz Figa 				+ b->eint_offset);
4660d3d30dbSAbhilash Kesavan 		mask = readl(d->virt_base + b->irq_chip->eint_mask
4672e4a4fdaSTomasz Figa 				+ b->eint_offset);
468a04b07c0STomasz Figa 		exynos_irq_demux_eint(pend & ~mask, b->irq_domain);
469a04b07c0STomasz Figa 	}
470a04b07c0STomasz Figa 
47143b169dbSThomas Abraham 	chained_irq_exit(chip, desc);
47243b169dbSThomas Abraham }
47343b169dbSThomas Abraham 
47443b169dbSThomas Abraham /*
47543b169dbSThomas Abraham  * exynos_eint_wkup_init() - setup handling of external wakeup interrupts.
47643b169dbSThomas Abraham  * @d: driver data of samsung pinctrl driver.
47743b169dbSThomas Abraham  */
47843b169dbSThomas Abraham static int exynos_eint_wkup_init(struct samsung_pinctrl_drv_data *d)
47943b169dbSThomas Abraham {
48043b169dbSThomas Abraham 	struct device *dev = d->dev;
481c3ad056bSTomasz Figa 	struct device_node *wkup_np = NULL;
482c3ad056bSTomasz Figa 	struct device_node *np;
483a04b07c0STomasz Figa 	struct samsung_pin_bank *bank;
48443b169dbSThomas Abraham 	struct exynos_weint_data *weint_data;
485a04b07c0STomasz Figa 	struct exynos_muxed_weint_data *muxed_data;
48614c255d3SAbhilash Kesavan 	struct exynos_irq_chip *irq_chip;
487a04b07c0STomasz Figa 	unsigned int muxed_banks = 0;
488a04b07c0STomasz Figa 	unsigned int i;
48943b169dbSThomas Abraham 	int idx, irq;
49043b169dbSThomas Abraham 
491c3ad056bSTomasz Figa 	for_each_child_of_node(dev->of_node, np) {
49214c255d3SAbhilash Kesavan 		const struct of_device_id *match;
49314c255d3SAbhilash Kesavan 
49414c255d3SAbhilash Kesavan 		match = of_match_node(exynos_wkup_irq_ids, np);
49514c255d3SAbhilash Kesavan 		if (match) {
49614c255d3SAbhilash Kesavan 			irq_chip = kmemdup(match->data,
49714c255d3SAbhilash Kesavan 				sizeof(*irq_chip), GFP_KERNEL);
498c3ad056bSTomasz Figa 			wkup_np = np;
499c3ad056bSTomasz Figa 			break;
50043b169dbSThomas Abraham 		}
501c3ad056bSTomasz Figa 	}
502c3ad056bSTomasz Figa 	if (!wkup_np)
503c3ad056bSTomasz Figa 		return -ENODEV;
50443b169dbSThomas Abraham 
5051bf00d7aSTomasz Figa 	bank = d->pin_banks;
5061bf00d7aSTomasz Figa 	for (i = 0; i < d->nr_banks; ++i, ++bank) {
507a04b07c0STomasz Figa 		if (bank->eint_type != EINT_TYPE_WKUP)
508a04b07c0STomasz Figa 			continue;
509a04b07c0STomasz Figa 
510a04b07c0STomasz Figa 		bank->irq_domain = irq_domain_add_linear(bank->of_node,
5116f5e41bdSAbhilash Kesavan 				bank->nr_pins, &exynos_eint_irqd_ops, bank);
512a04b07c0STomasz Figa 		if (!bank->irq_domain) {
513a04b07c0STomasz Figa 			dev_err(dev, "wkup irq domain add failed\n");
51443b169dbSThomas Abraham 			return -ENXIO;
51543b169dbSThomas Abraham 		}
51643b169dbSThomas Abraham 
51714c255d3SAbhilash Kesavan 		bank->irq_chip = irq_chip;
5180d3d30dbSAbhilash Kesavan 
519a04b07c0STomasz Figa 		if (!of_find_property(bank->of_node, "interrupts", NULL)) {
520a04b07c0STomasz Figa 			bank->eint_type = EINT_TYPE_WKUP_MUX;
521a04b07c0STomasz Figa 			++muxed_banks;
522a04b07c0STomasz Figa 			continue;
523a04b07c0STomasz Figa 		}
524a04b07c0STomasz Figa 
525a04b07c0STomasz Figa 		weint_data = devm_kzalloc(dev, bank->nr_pins
526a04b07c0STomasz Figa 					* sizeof(*weint_data), GFP_KERNEL);
52743b169dbSThomas Abraham 		if (!weint_data) {
52843b169dbSThomas Abraham 			dev_err(dev, "could not allocate memory for weint_data\n");
52943b169dbSThomas Abraham 			return -ENOMEM;
53043b169dbSThomas Abraham 		}
53143b169dbSThomas Abraham 
532a04b07c0STomasz Figa 		for (idx = 0; idx < bank->nr_pins; ++idx) {
533a04b07c0STomasz Figa 			irq = irq_of_parse_and_map(bank->of_node, idx);
534a04b07c0STomasz Figa 			if (!irq) {
535a04b07c0STomasz Figa 				dev_err(dev, "irq number for eint-%s-%d not found\n",
536a04b07c0STomasz Figa 							bank->name, idx);
537a04b07c0STomasz Figa 				continue;
53843b169dbSThomas Abraham 			}
53943b169dbSThomas Abraham 			weint_data[idx].irq = idx;
540a04b07c0STomasz Figa 			weint_data[idx].bank = bank;
541c21f7849SThomas Gleixner 			irq_set_chained_handler_and_data(irq,
542c21f7849SThomas Gleixner 							 exynos_irq_eint0_15,
543c21f7849SThomas Gleixner 							 &weint_data[idx]);
54443b169dbSThomas Abraham 		}
54543b169dbSThomas Abraham 	}
546a04b07c0STomasz Figa 
547a04b07c0STomasz Figa 	if (!muxed_banks)
548a04b07c0STomasz Figa 		return 0;
549a04b07c0STomasz Figa 
550a04b07c0STomasz Figa 	irq = irq_of_parse_and_map(wkup_np, 0);
551a04b07c0STomasz Figa 	if (!irq) {
552a04b07c0STomasz Figa 		dev_err(dev, "irq number for muxed EINTs not found\n");
553a04b07c0STomasz Figa 		return 0;
554a04b07c0STomasz Figa 	}
555a04b07c0STomasz Figa 
556a04b07c0STomasz Figa 	muxed_data = devm_kzalloc(dev, sizeof(*muxed_data)
557a04b07c0STomasz Figa 		+ muxed_banks*sizeof(struct samsung_pin_bank *), GFP_KERNEL);
558a04b07c0STomasz Figa 	if (!muxed_data) {
559a04b07c0STomasz Figa 		dev_err(dev, "could not allocate memory for muxed_data\n");
560a04b07c0STomasz Figa 		return -ENOMEM;
561a04b07c0STomasz Figa 	}
562a04b07c0STomasz Figa 
563bb56fc35SThomas Gleixner 	irq_set_chained_handler_and_data(irq, exynos_irq_demux_eint16_31,
564bb56fc35SThomas Gleixner 					 muxed_data);
565a04b07c0STomasz Figa 
5661bf00d7aSTomasz Figa 	bank = d->pin_banks;
567a04b07c0STomasz Figa 	idx = 0;
5681bf00d7aSTomasz Figa 	for (i = 0; i < d->nr_banks; ++i, ++bank) {
569a04b07c0STomasz Figa 		if (bank->eint_type != EINT_TYPE_WKUP_MUX)
570a04b07c0STomasz Figa 			continue;
571a04b07c0STomasz Figa 
572a04b07c0STomasz Figa 		muxed_data->banks[idx++] = bank;
573a04b07c0STomasz Figa 	}
574a04b07c0STomasz Figa 	muxed_data->nr_banks = muxed_banks;
575a04b07c0STomasz Figa 
57643b169dbSThomas Abraham 	return 0;
57743b169dbSThomas Abraham }
57843b169dbSThomas Abraham 
5797ccbc60cSTomasz Figa static void exynos_pinctrl_suspend_bank(
5807ccbc60cSTomasz Figa 				struct samsung_pinctrl_drv_data *drvdata,
5817ccbc60cSTomasz Figa 				struct samsung_pin_bank *bank)
5827ccbc60cSTomasz Figa {
5837ccbc60cSTomasz Figa 	struct exynos_eint_gpio_save *save = bank->soc_priv;
5847ccbc60cSTomasz Figa 	void __iomem *regs = drvdata->virt_base;
5857ccbc60cSTomasz Figa 
5867ccbc60cSTomasz Figa 	save->eint_con = readl(regs + EXYNOS_GPIO_ECON_OFFSET
5877ccbc60cSTomasz Figa 						+ bank->eint_offset);
5887ccbc60cSTomasz Figa 	save->eint_fltcon0 = readl(regs + EXYNOS_GPIO_EFLTCON_OFFSET
5897ccbc60cSTomasz Figa 						+ 2 * bank->eint_offset);
5907ccbc60cSTomasz Figa 	save->eint_fltcon1 = readl(regs + EXYNOS_GPIO_EFLTCON_OFFSET
5917ccbc60cSTomasz Figa 						+ 2 * bank->eint_offset + 4);
5927ccbc60cSTomasz Figa 
5937ccbc60cSTomasz Figa 	pr_debug("%s: save     con %#010x\n", bank->name, save->eint_con);
5947ccbc60cSTomasz Figa 	pr_debug("%s: save fltcon0 %#010x\n", bank->name, save->eint_fltcon0);
5957ccbc60cSTomasz Figa 	pr_debug("%s: save fltcon1 %#010x\n", bank->name, save->eint_fltcon1);
5967ccbc60cSTomasz Figa }
5977ccbc60cSTomasz Figa 
5987ccbc60cSTomasz Figa static void exynos_pinctrl_suspend(struct samsung_pinctrl_drv_data *drvdata)
5997ccbc60cSTomasz Figa {
6001bf00d7aSTomasz Figa 	struct samsung_pin_bank *bank = drvdata->pin_banks;
6017ccbc60cSTomasz Figa 	int i;
6027ccbc60cSTomasz Figa 
6031bf00d7aSTomasz Figa 	for (i = 0; i < drvdata->nr_banks; ++i, ++bank)
6047ccbc60cSTomasz Figa 		if (bank->eint_type == EINT_TYPE_GPIO)
6057ccbc60cSTomasz Figa 			exynos_pinctrl_suspend_bank(drvdata, bank);
6067ccbc60cSTomasz Figa }
6077ccbc60cSTomasz Figa 
6087ccbc60cSTomasz Figa static void exynos_pinctrl_resume_bank(
6097ccbc60cSTomasz Figa 				struct samsung_pinctrl_drv_data *drvdata,
6107ccbc60cSTomasz Figa 				struct samsung_pin_bank *bank)
6117ccbc60cSTomasz Figa {
6127ccbc60cSTomasz Figa 	struct exynos_eint_gpio_save *save = bank->soc_priv;
6137ccbc60cSTomasz Figa 	void __iomem *regs = drvdata->virt_base;
6147ccbc60cSTomasz Figa 
6157ccbc60cSTomasz Figa 	pr_debug("%s:     con %#010x => %#010x\n", bank->name,
6167ccbc60cSTomasz Figa 			readl(regs + EXYNOS_GPIO_ECON_OFFSET
6177ccbc60cSTomasz Figa 			+ bank->eint_offset), save->eint_con);
6187ccbc60cSTomasz Figa 	pr_debug("%s: fltcon0 %#010x => %#010x\n", bank->name,
6197ccbc60cSTomasz Figa 			readl(regs + EXYNOS_GPIO_EFLTCON_OFFSET
6207ccbc60cSTomasz Figa 			+ 2 * bank->eint_offset), save->eint_fltcon0);
6217ccbc60cSTomasz Figa 	pr_debug("%s: fltcon1 %#010x => %#010x\n", bank->name,
6227ccbc60cSTomasz Figa 			readl(regs + EXYNOS_GPIO_EFLTCON_OFFSET
6237ccbc60cSTomasz Figa 			+ 2 * bank->eint_offset + 4), save->eint_fltcon1);
6247ccbc60cSTomasz Figa 
6257ccbc60cSTomasz Figa 	writel(save->eint_con, regs + EXYNOS_GPIO_ECON_OFFSET
6267ccbc60cSTomasz Figa 						+ bank->eint_offset);
6277ccbc60cSTomasz Figa 	writel(save->eint_fltcon0, regs + EXYNOS_GPIO_EFLTCON_OFFSET
6287ccbc60cSTomasz Figa 						+ 2 * bank->eint_offset);
6297ccbc60cSTomasz Figa 	writel(save->eint_fltcon1, regs + EXYNOS_GPIO_EFLTCON_OFFSET
6307ccbc60cSTomasz Figa 						+ 2 * bank->eint_offset + 4);
6317ccbc60cSTomasz Figa }
6327ccbc60cSTomasz Figa 
6337ccbc60cSTomasz Figa static void exynos_pinctrl_resume(struct samsung_pinctrl_drv_data *drvdata)
6347ccbc60cSTomasz Figa {
6351bf00d7aSTomasz Figa 	struct samsung_pin_bank *bank = drvdata->pin_banks;
6367ccbc60cSTomasz Figa 	int i;
6377ccbc60cSTomasz Figa 
6381bf00d7aSTomasz Figa 	for (i = 0; i < drvdata->nr_banks; ++i, ++bank)
6397ccbc60cSTomasz Figa 		if (bank->eint_type == EINT_TYPE_GPIO)
6407ccbc60cSTomasz Figa 			exynos_pinctrl_resume_bank(drvdata, bank);
6417ccbc60cSTomasz Figa }
6427ccbc60cSTomasz Figa 
643608a26a7SMateusz Krawczuk /* pin banks of s5pv210 pin-controller */
6448100cf47STomasz Figa static const struct samsung_pin_bank_data s5pv210_pin_bank[] __initconst = {
645608a26a7SMateusz Krawczuk 	EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpa0", 0x00),
64648802925SMateusz Krawczuk 	EXYNOS_PIN_BANK_EINTG(4, 0x020, "gpa1", 0x04),
647608a26a7SMateusz Krawczuk 	EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpb", 0x08),
648608a26a7SMateusz Krawczuk 	EXYNOS_PIN_BANK_EINTG(5, 0x060, "gpc0", 0x0c),
649608a26a7SMateusz Krawczuk 	EXYNOS_PIN_BANK_EINTG(5, 0x080, "gpc1", 0x10),
650608a26a7SMateusz Krawczuk 	EXYNOS_PIN_BANK_EINTG(4, 0x0a0, "gpd0", 0x14),
65148802925SMateusz Krawczuk 	EXYNOS_PIN_BANK_EINTG(6, 0x0c0, "gpd1", 0x18),
65248802925SMateusz Krawczuk 	EXYNOS_PIN_BANK_EINTG(8, 0x0e0, "gpe0", 0x1c),
65348802925SMateusz Krawczuk 	EXYNOS_PIN_BANK_EINTG(5, 0x100, "gpe1", 0x20),
65448802925SMateusz Krawczuk 	EXYNOS_PIN_BANK_EINTG(8, 0x120, "gpf0", 0x24),
655608a26a7SMateusz Krawczuk 	EXYNOS_PIN_BANK_EINTG(8, 0x140, "gpf1", 0x28),
656608a26a7SMateusz Krawczuk 	EXYNOS_PIN_BANK_EINTG(8, 0x160, "gpf2", 0x2c),
65748802925SMateusz Krawczuk 	EXYNOS_PIN_BANK_EINTG(6, 0x180, "gpf3", 0x30),
658608a26a7SMateusz Krawczuk 	EXYNOS_PIN_BANK_EINTG(7, 0x1a0, "gpg0", 0x34),
659608a26a7SMateusz Krawczuk 	EXYNOS_PIN_BANK_EINTG(7, 0x1c0, "gpg1", 0x38),
660608a26a7SMateusz Krawczuk 	EXYNOS_PIN_BANK_EINTG(7, 0x1e0, "gpg2", 0x3c),
661608a26a7SMateusz Krawczuk 	EXYNOS_PIN_BANK_EINTG(7, 0x200, "gpg3", 0x40),
662608a26a7SMateusz Krawczuk 	EXYNOS_PIN_BANK_EINTN(7, 0x220, "gpi"),
663608a26a7SMateusz Krawczuk 	EXYNOS_PIN_BANK_EINTG(8, 0x240, "gpj0", 0x44),
664608a26a7SMateusz Krawczuk 	EXYNOS_PIN_BANK_EINTG(6, 0x260, "gpj1", 0x48),
665608a26a7SMateusz Krawczuk 	EXYNOS_PIN_BANK_EINTG(8, 0x280, "gpj2", 0x4c),
666608a26a7SMateusz Krawczuk 	EXYNOS_PIN_BANK_EINTG(8, 0x2a0, "gpj3", 0x50),
667608a26a7SMateusz Krawczuk 	EXYNOS_PIN_BANK_EINTG(5, 0x2c0, "gpj4", 0x54),
668608a26a7SMateusz Krawczuk 	EXYNOS_PIN_BANK_EINTN(8, 0x2e0, "mp01"),
669608a26a7SMateusz Krawczuk 	EXYNOS_PIN_BANK_EINTN(4, 0x300, "mp02"),
670608a26a7SMateusz Krawczuk 	EXYNOS_PIN_BANK_EINTN(8, 0x320, "mp03"),
671608a26a7SMateusz Krawczuk 	EXYNOS_PIN_BANK_EINTN(8, 0x340, "mp04"),
672608a26a7SMateusz Krawczuk 	EXYNOS_PIN_BANK_EINTN(8, 0x360, "mp05"),
673608a26a7SMateusz Krawczuk 	EXYNOS_PIN_BANK_EINTN(8, 0x380, "mp06"),
674608a26a7SMateusz Krawczuk 	EXYNOS_PIN_BANK_EINTN(8, 0x3a0, "mp07"),
675608a26a7SMateusz Krawczuk 	EXYNOS_PIN_BANK_EINTW(8, 0xc00, "gph0", 0x00),
676608a26a7SMateusz Krawczuk 	EXYNOS_PIN_BANK_EINTW(8, 0xc20, "gph1", 0x04),
677608a26a7SMateusz Krawczuk 	EXYNOS_PIN_BANK_EINTW(8, 0xc40, "gph2", 0x08),
678608a26a7SMateusz Krawczuk 	EXYNOS_PIN_BANK_EINTW(8, 0xc60, "gph3", 0x0c),
679608a26a7SMateusz Krawczuk };
680608a26a7SMateusz Krawczuk 
6811bf00d7aSTomasz Figa const struct samsung_pin_ctrl s5pv210_pin_ctrl[] __initconst = {
682608a26a7SMateusz Krawczuk 	{
683608a26a7SMateusz Krawczuk 		/* pin-controller instance 0 data */
684608a26a7SMateusz Krawczuk 		.pin_banks	= s5pv210_pin_bank,
685608a26a7SMateusz Krawczuk 		.nr_banks	= ARRAY_SIZE(s5pv210_pin_bank),
686608a26a7SMateusz Krawczuk 		.eint_gpio_init = exynos_eint_gpio_init,
687608a26a7SMateusz Krawczuk 		.eint_wkup_init = exynos_eint_wkup_init,
688608a26a7SMateusz Krawczuk 		.suspend	= exynos_pinctrl_suspend,
689608a26a7SMateusz Krawczuk 		.resume		= exynos_pinctrl_resume,
690608a26a7SMateusz Krawczuk 	},
691608a26a7SMateusz Krawczuk };
692608a26a7SMateusz Krawczuk 
693d97f5b98STomasz Figa /* pin banks of exynos3250 pin-controller 0 */
6948100cf47STomasz Figa static const struct samsung_pin_bank_data exynos3250_pin_banks0[] __initconst = {
695d97f5b98STomasz Figa 	EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpa0", 0x00),
696d97f5b98STomasz Figa 	EXYNOS_PIN_BANK_EINTG(6, 0x020, "gpa1", 0x04),
697d97f5b98STomasz Figa 	EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpb",  0x08),
698d97f5b98STomasz Figa 	EXYNOS_PIN_BANK_EINTG(5, 0x060, "gpc0", 0x0c),
699d97f5b98STomasz Figa 	EXYNOS_PIN_BANK_EINTG(5, 0x080, "gpc1", 0x10),
700d97f5b98STomasz Figa 	EXYNOS_PIN_BANK_EINTG(4, 0x0a0, "gpd0", 0x14),
701d97f5b98STomasz Figa 	EXYNOS_PIN_BANK_EINTG(4, 0x0c0, "gpd1", 0x18),
702d97f5b98STomasz Figa };
703d97f5b98STomasz Figa 
704d97f5b98STomasz Figa /* pin banks of exynos3250 pin-controller 1 */
7058100cf47STomasz Figa static const struct samsung_pin_bank_data exynos3250_pin_banks1[] __initconst = {
706d97f5b98STomasz Figa 	EXYNOS_PIN_BANK_EINTN(8, 0x120, "gpe0"),
707d97f5b98STomasz Figa 	EXYNOS_PIN_BANK_EINTN(8, 0x140, "gpe1"),
708d97f5b98STomasz Figa 	EXYNOS_PIN_BANK_EINTN(3, 0x180, "gpe2"),
709d97f5b98STomasz Figa 	EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpk0", 0x08),
710d97f5b98STomasz Figa 	EXYNOS_PIN_BANK_EINTG(7, 0x060, "gpk1", 0x0c),
711d97f5b98STomasz Figa 	EXYNOS_PIN_BANK_EINTG(7, 0x080, "gpk2", 0x10),
712d97f5b98STomasz Figa 	EXYNOS_PIN_BANK_EINTG(4, 0x0c0, "gpl0", 0x18),
713d97f5b98STomasz Figa 	EXYNOS_PIN_BANK_EINTG(8, 0x260, "gpm0", 0x24),
714d97f5b98STomasz Figa 	EXYNOS_PIN_BANK_EINTG(7, 0x280, "gpm1", 0x28),
715d97f5b98STomasz Figa 	EXYNOS_PIN_BANK_EINTG(5, 0x2a0, "gpm2", 0x2c),
716d97f5b98STomasz Figa 	EXYNOS_PIN_BANK_EINTG(8, 0x2c0, "gpm3", 0x30),
717d97f5b98STomasz Figa 	EXYNOS_PIN_BANK_EINTG(8, 0x2e0, "gpm4", 0x34),
718d97f5b98STomasz Figa 	EXYNOS_PIN_BANK_EINTW(8, 0xc00, "gpx0", 0x00),
719d97f5b98STomasz Figa 	EXYNOS_PIN_BANK_EINTW(8, 0xc20, "gpx1", 0x04),
720d97f5b98STomasz Figa 	EXYNOS_PIN_BANK_EINTW(8, 0xc40, "gpx2", 0x08),
721d97f5b98STomasz Figa 	EXYNOS_PIN_BANK_EINTW(8, 0xc60, "gpx3", 0x0c),
722d97f5b98STomasz Figa };
723d97f5b98STomasz Figa 
724d97f5b98STomasz Figa /*
725d97f5b98STomasz Figa  * Samsung pinctrl driver data for Exynos3250 SoC. Exynos3250 SoC includes
726d97f5b98STomasz Figa  * two gpio/pin-mux/pinconfig controllers.
727d97f5b98STomasz Figa  */
7281bf00d7aSTomasz Figa const struct samsung_pin_ctrl exynos3250_pin_ctrl[] __initconst = {
729d97f5b98STomasz Figa 	{
730d97f5b98STomasz Figa 		/* pin-controller instance 0 data */
731d97f5b98STomasz Figa 		.pin_banks	= exynos3250_pin_banks0,
732d97f5b98STomasz Figa 		.nr_banks	= ARRAY_SIZE(exynos3250_pin_banks0),
733d97f5b98STomasz Figa 		.eint_gpio_init = exynos_eint_gpio_init,
734d97f5b98STomasz Figa 		.suspend	= exynos_pinctrl_suspend,
735d97f5b98STomasz Figa 		.resume		= exynos_pinctrl_resume,
736d97f5b98STomasz Figa 	}, {
737d97f5b98STomasz Figa 		/* pin-controller instance 1 data */
738d97f5b98STomasz Figa 		.pin_banks	= exynos3250_pin_banks1,
739d97f5b98STomasz Figa 		.nr_banks	= ARRAY_SIZE(exynos3250_pin_banks1),
740d97f5b98STomasz Figa 		.eint_gpio_init = exynos_eint_gpio_init,
741d97f5b98STomasz Figa 		.eint_wkup_init = exynos_eint_wkup_init,
742d97f5b98STomasz Figa 		.suspend	= exynos_pinctrl_suspend,
743d97f5b98STomasz Figa 		.resume		= exynos_pinctrl_resume,
744d97f5b98STomasz Figa 	},
745d97f5b98STomasz Figa };
746d97f5b98STomasz Figa 
74743b169dbSThomas Abraham /* pin banks of exynos4210 pin-controller 0 */
7488100cf47STomasz Figa static const struct samsung_pin_bank_data exynos4210_pin_banks0[] __initconst = {
7491b6056d6STomasz Figa 	EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpa0", 0x00),
7501b6056d6STomasz Figa 	EXYNOS_PIN_BANK_EINTG(6, 0x020, "gpa1", 0x04),
7511b6056d6STomasz Figa 	EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpb", 0x08),
7521b6056d6STomasz Figa 	EXYNOS_PIN_BANK_EINTG(5, 0x060, "gpc0", 0x0c),
7531b6056d6STomasz Figa 	EXYNOS_PIN_BANK_EINTG(5, 0x080, "gpc1", 0x10),
7541b6056d6STomasz Figa 	EXYNOS_PIN_BANK_EINTG(4, 0x0A0, "gpd0", 0x14),
7551b6056d6STomasz Figa 	EXYNOS_PIN_BANK_EINTG(4, 0x0C0, "gpd1", 0x18),
7561b6056d6STomasz Figa 	EXYNOS_PIN_BANK_EINTG(5, 0x0E0, "gpe0", 0x1c),
7571b6056d6STomasz Figa 	EXYNOS_PIN_BANK_EINTG(8, 0x100, "gpe1", 0x20),
7581b6056d6STomasz Figa 	EXYNOS_PIN_BANK_EINTG(6, 0x120, "gpe2", 0x24),
7591b6056d6STomasz Figa 	EXYNOS_PIN_BANK_EINTG(8, 0x140, "gpe3", 0x28),
7601b6056d6STomasz Figa 	EXYNOS_PIN_BANK_EINTG(8, 0x160, "gpe4", 0x2c),
7611b6056d6STomasz Figa 	EXYNOS_PIN_BANK_EINTG(8, 0x180, "gpf0", 0x30),
7621b6056d6STomasz Figa 	EXYNOS_PIN_BANK_EINTG(8, 0x1A0, "gpf1", 0x34),
7631b6056d6STomasz Figa 	EXYNOS_PIN_BANK_EINTG(8, 0x1C0, "gpf2", 0x38),
7641b6056d6STomasz Figa 	EXYNOS_PIN_BANK_EINTG(6, 0x1E0, "gpf3", 0x3c),
76543b169dbSThomas Abraham };
76643b169dbSThomas Abraham 
76743b169dbSThomas Abraham /* pin banks of exynos4210 pin-controller 1 */
7688100cf47STomasz Figa static const struct samsung_pin_bank_data exynos4210_pin_banks1[] __initconst = {
7691b6056d6STomasz Figa 	EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpj0", 0x00),
7701b6056d6STomasz Figa 	EXYNOS_PIN_BANK_EINTG(5, 0x020, "gpj1", 0x04),
7711b6056d6STomasz Figa 	EXYNOS_PIN_BANK_EINTG(7, 0x040, "gpk0", 0x08),
7721b6056d6STomasz Figa 	EXYNOS_PIN_BANK_EINTG(7, 0x060, "gpk1", 0x0c),
7731b6056d6STomasz Figa 	EXYNOS_PIN_BANK_EINTG(7, 0x080, "gpk2", 0x10),
7741b6056d6STomasz Figa 	EXYNOS_PIN_BANK_EINTG(7, 0x0A0, "gpk3", 0x14),
7751b6056d6STomasz Figa 	EXYNOS_PIN_BANK_EINTG(8, 0x0C0, "gpl0", 0x18),
7761b6056d6STomasz Figa 	EXYNOS_PIN_BANK_EINTG(3, 0x0E0, "gpl1", 0x1c),
7771b6056d6STomasz Figa 	EXYNOS_PIN_BANK_EINTG(8, 0x100, "gpl2", 0x20),
77840ba6227STomasz Figa 	EXYNOS_PIN_BANK_EINTN(6, 0x120, "gpy0"),
77940ba6227STomasz Figa 	EXYNOS_PIN_BANK_EINTN(4, 0x140, "gpy1"),
78040ba6227STomasz Figa 	EXYNOS_PIN_BANK_EINTN(6, 0x160, "gpy2"),
78140ba6227STomasz Figa 	EXYNOS_PIN_BANK_EINTN(8, 0x180, "gpy3"),
78240ba6227STomasz Figa 	EXYNOS_PIN_BANK_EINTN(8, 0x1A0, "gpy4"),
78340ba6227STomasz Figa 	EXYNOS_PIN_BANK_EINTN(8, 0x1C0, "gpy5"),
78440ba6227STomasz Figa 	EXYNOS_PIN_BANK_EINTN(8, 0x1E0, "gpy6"),
785a04b07c0STomasz Figa 	EXYNOS_PIN_BANK_EINTW(8, 0xC00, "gpx0", 0x00),
786a04b07c0STomasz Figa 	EXYNOS_PIN_BANK_EINTW(8, 0xC20, "gpx1", 0x04),
787a04b07c0STomasz Figa 	EXYNOS_PIN_BANK_EINTW(8, 0xC40, "gpx2", 0x08),
788a04b07c0STomasz Figa 	EXYNOS_PIN_BANK_EINTW(8, 0xC60, "gpx3", 0x0c),
78943b169dbSThomas Abraham };
79043b169dbSThomas Abraham 
79143b169dbSThomas Abraham /* pin banks of exynos4210 pin-controller 2 */
7928100cf47STomasz Figa static const struct samsung_pin_bank_data exynos4210_pin_banks2[] __initconst = {
79340ba6227STomasz Figa 	EXYNOS_PIN_BANK_EINTN(7, 0x000, "gpz"),
79443b169dbSThomas Abraham };
79543b169dbSThomas Abraham 
79643b169dbSThomas Abraham /*
79743b169dbSThomas Abraham  * Samsung pinctrl driver data for Exynos4210 SoC. Exynos4210 SoC includes
79843b169dbSThomas Abraham  * three gpio/pin-mux/pinconfig controllers.
79943b169dbSThomas Abraham  */
8001bf00d7aSTomasz Figa const struct samsung_pin_ctrl exynos4210_pin_ctrl[] __initconst = {
80143b169dbSThomas Abraham 	{
80243b169dbSThomas Abraham 		/* pin-controller instance 0 data */
80343b169dbSThomas Abraham 		.pin_banks	= exynos4210_pin_banks0,
80443b169dbSThomas Abraham 		.nr_banks	= ARRAY_SIZE(exynos4210_pin_banks0),
80543b169dbSThomas Abraham 		.eint_gpio_init = exynos_eint_gpio_init,
8067ccbc60cSTomasz Figa 		.suspend	= exynos_pinctrl_suspend,
8077ccbc60cSTomasz Figa 		.resume		= exynos_pinctrl_resume,
80843b169dbSThomas Abraham 	}, {
80943b169dbSThomas Abraham 		/* pin-controller instance 1 data */
81043b169dbSThomas Abraham 		.pin_banks	= exynos4210_pin_banks1,
81143b169dbSThomas Abraham 		.nr_banks	= ARRAY_SIZE(exynos4210_pin_banks1),
81243b169dbSThomas Abraham 		.eint_gpio_init = exynos_eint_gpio_init,
81343b169dbSThomas Abraham 		.eint_wkup_init = exynos_eint_wkup_init,
8147ccbc60cSTomasz Figa 		.suspend	= exynos_pinctrl_suspend,
8157ccbc60cSTomasz Figa 		.resume		= exynos_pinctrl_resume,
81643b169dbSThomas Abraham 	}, {
81743b169dbSThomas Abraham 		/* pin-controller instance 2 data */
81843b169dbSThomas Abraham 		.pin_banks	= exynos4210_pin_banks2,
81943b169dbSThomas Abraham 		.nr_banks	= ARRAY_SIZE(exynos4210_pin_banks2),
82043b169dbSThomas Abraham 	},
82143b169dbSThomas Abraham };
8226edc794aSTomasz Figa 
8236edc794aSTomasz Figa /* pin banks of exynos4x12 pin-controller 0 */
8248100cf47STomasz Figa static const struct samsung_pin_bank_data exynos4x12_pin_banks0[] __initconst = {
8256edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpa0", 0x00),
8266edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTG(6, 0x020, "gpa1", 0x04),
8276edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpb", 0x08),
8286edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTG(5, 0x060, "gpc0", 0x0c),
8296edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTG(5, 0x080, "gpc1", 0x10),
8306edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTG(4, 0x0A0, "gpd0", 0x14),
8316edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTG(4, 0x0C0, "gpd1", 0x18),
8326edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTG(8, 0x180, "gpf0", 0x30),
8336edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTG(8, 0x1A0, "gpf1", 0x34),
8346edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTG(8, 0x1C0, "gpf2", 0x38),
8356edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTG(6, 0x1E0, "gpf3", 0x3c),
8366edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTG(8, 0x240, "gpj0", 0x40),
8376edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTG(5, 0x260, "gpj1", 0x44),
8386edc794aSTomasz Figa };
8396edc794aSTomasz Figa 
8406edc794aSTomasz Figa /* pin banks of exynos4x12 pin-controller 1 */
8418100cf47STomasz Figa static const struct samsung_pin_bank_data exynos4x12_pin_banks1[] __initconst = {
8426edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTG(7, 0x040, "gpk0", 0x08),
8436edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTG(7, 0x060, "gpk1", 0x0c),
8446edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTG(7, 0x080, "gpk2", 0x10),
8456edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTG(7, 0x0A0, "gpk3", 0x14),
8466edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTG(7, 0x0C0, "gpl0", 0x18),
8476edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTG(2, 0x0E0, "gpl1", 0x1c),
8486edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTG(8, 0x100, "gpl2", 0x20),
8496edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTG(8, 0x260, "gpm0", 0x24),
8506edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTG(7, 0x280, "gpm1", 0x28),
8516edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTG(5, 0x2A0, "gpm2", 0x2c),
8526edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTG(8, 0x2C0, "gpm3", 0x30),
8536edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTG(8, 0x2E0, "gpm4", 0x34),
8546edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTN(6, 0x120, "gpy0"),
8556edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTN(4, 0x140, "gpy1"),
8566edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTN(6, 0x160, "gpy2"),
8576edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTN(8, 0x180, "gpy3"),
8586edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTN(8, 0x1A0, "gpy4"),
8596edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTN(8, 0x1C0, "gpy5"),
8606edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTN(8, 0x1E0, "gpy6"),
8616edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTW(8, 0xC00, "gpx0", 0x00),
8626edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTW(8, 0xC20, "gpx1", 0x04),
8636edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTW(8, 0xC40, "gpx2", 0x08),
8646edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTW(8, 0xC60, "gpx3", 0x0c),
8656edc794aSTomasz Figa };
8666edc794aSTomasz Figa 
8676edc794aSTomasz Figa /* pin banks of exynos4x12 pin-controller 2 */
8688100cf47STomasz Figa static const struct samsung_pin_bank_data exynos4x12_pin_banks2[] __initconst = {
8696edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTG(7, 0x000, "gpz", 0x00),
8706edc794aSTomasz Figa };
8716edc794aSTomasz Figa 
8726edc794aSTomasz Figa /* pin banks of exynos4x12 pin-controller 3 */
8738100cf47STomasz Figa static const struct samsung_pin_bank_data exynos4x12_pin_banks3[] __initconst = {
8746edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpv0", 0x00),
8756edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTG(8, 0x020, "gpv1", 0x04),
8766edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpv2", 0x08),
8776edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTG(8, 0x060, "gpv3", 0x0c),
8786edc794aSTomasz Figa 	EXYNOS_PIN_BANK_EINTG(2, 0x080, "gpv4", 0x10),
8796edc794aSTomasz Figa };
8806edc794aSTomasz Figa 
8816edc794aSTomasz Figa /*
8826edc794aSTomasz Figa  * Samsung pinctrl driver data for Exynos4x12 SoC. Exynos4x12 SoC includes
8836edc794aSTomasz Figa  * four gpio/pin-mux/pinconfig controllers.
8846edc794aSTomasz Figa  */
8851bf00d7aSTomasz Figa const struct samsung_pin_ctrl exynos4x12_pin_ctrl[] __initconst = {
8866edc794aSTomasz Figa 	{
8876edc794aSTomasz Figa 		/* pin-controller instance 0 data */
8886edc794aSTomasz Figa 		.pin_banks	= exynos4x12_pin_banks0,
8896edc794aSTomasz Figa 		.nr_banks	= ARRAY_SIZE(exynos4x12_pin_banks0),
8906edc794aSTomasz Figa 		.eint_gpio_init = exynos_eint_gpio_init,
8917ccbc60cSTomasz Figa 		.suspend	= exynos_pinctrl_suspend,
8927ccbc60cSTomasz Figa 		.resume		= exynos_pinctrl_resume,
8936edc794aSTomasz Figa 	}, {
8946edc794aSTomasz Figa 		/* pin-controller instance 1 data */
8956edc794aSTomasz Figa 		.pin_banks	= exynos4x12_pin_banks1,
8966edc794aSTomasz Figa 		.nr_banks	= ARRAY_SIZE(exynos4x12_pin_banks1),
8976edc794aSTomasz Figa 		.eint_gpio_init = exynos_eint_gpio_init,
8986edc794aSTomasz Figa 		.eint_wkup_init = exynos_eint_wkup_init,
8997ccbc60cSTomasz Figa 		.suspend	= exynos_pinctrl_suspend,
9007ccbc60cSTomasz Figa 		.resume		= exynos_pinctrl_resume,
9016edc794aSTomasz Figa 	}, {
9026edc794aSTomasz Figa 		/* pin-controller instance 2 data */
9036edc794aSTomasz Figa 		.pin_banks	= exynos4x12_pin_banks2,
9046edc794aSTomasz Figa 		.nr_banks	= ARRAY_SIZE(exynos4x12_pin_banks2),
9056edc794aSTomasz Figa 		.eint_gpio_init = exynos_eint_gpio_init,
9067ccbc60cSTomasz Figa 		.suspend	= exynos_pinctrl_suspend,
9077ccbc60cSTomasz Figa 		.resume		= exynos_pinctrl_resume,
9086edc794aSTomasz Figa 	}, {
9096edc794aSTomasz Figa 		/* pin-controller instance 3 data */
9106edc794aSTomasz Figa 		.pin_banks	= exynos4x12_pin_banks3,
9116edc794aSTomasz Figa 		.nr_banks	= ARRAY_SIZE(exynos4x12_pin_banks3),
9126edc794aSTomasz Figa 		.eint_gpio_init = exynos_eint_gpio_init,
9137ccbc60cSTomasz Figa 		.suspend	= exynos_pinctrl_suspend,
9147ccbc60cSTomasz Figa 		.resume		= exynos_pinctrl_resume,
9156edc794aSTomasz Figa 	},
9166edc794aSTomasz Figa };
917f67faf48SThomas Abraham 
9182891ba29STomasz Figa /* pin banks of exynos4415 pin-controller 0 */
9192891ba29STomasz Figa static const struct samsung_pin_bank_data exynos4415_pin_banks0[] = {
9202891ba29STomasz Figa 	EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpa0", 0x00),
9212891ba29STomasz Figa 	EXYNOS_PIN_BANK_EINTG(6, 0x020, "gpa1", 0x04),
9222891ba29STomasz Figa 	EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpb", 0x08),
9232891ba29STomasz Figa 	EXYNOS_PIN_BANK_EINTG(5, 0x060, "gpc0", 0x0c),
9242891ba29STomasz Figa 	EXYNOS_PIN_BANK_EINTG(5, 0x080, "gpc1", 0x10),
9252891ba29STomasz Figa 	EXYNOS_PIN_BANK_EINTG(4, 0x0A0, "gpd0", 0x14),
9262891ba29STomasz Figa 	EXYNOS_PIN_BANK_EINTG(4, 0x0C0, "gpd1", 0x18),
9272891ba29STomasz Figa 	EXYNOS_PIN_BANK_EINTG(8, 0x180, "gpf0", 0x30),
9282891ba29STomasz Figa 	EXYNOS_PIN_BANK_EINTG(8, 0x1A0, "gpf1", 0x34),
9292891ba29STomasz Figa 	EXYNOS_PIN_BANK_EINTG(1, 0x1C0, "gpf2", 0x38),
9302891ba29STomasz Figa };
9312891ba29STomasz Figa 
9322891ba29STomasz Figa /* pin banks of exynos4415 pin-controller 1 */
9332891ba29STomasz Figa static const struct samsung_pin_bank_data exynos4415_pin_banks1[] = {
9342891ba29STomasz Figa 	EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpk0", 0x08),
9352891ba29STomasz Figa 	EXYNOS_PIN_BANK_EINTG(7, 0x060, "gpk1", 0x0c),
9362891ba29STomasz Figa 	EXYNOS_PIN_BANK_EINTG(7, 0x080, "gpk2", 0x10),
9372891ba29STomasz Figa 	EXYNOS_PIN_BANK_EINTG(7, 0x0A0, "gpk3", 0x14),
9382891ba29STomasz Figa 	EXYNOS_PIN_BANK_EINTG(4, 0x0C0, "gpl0", 0x18),
9392891ba29STomasz Figa 	EXYNOS_PIN_BANK_EINTN(6, 0x120, "mp00"),
9402891ba29STomasz Figa 	EXYNOS_PIN_BANK_EINTN(4, 0x140, "mp01"),
9412891ba29STomasz Figa 	EXYNOS_PIN_BANK_EINTN(6, 0x160, "mp02"),
9422891ba29STomasz Figa 	EXYNOS_PIN_BANK_EINTN(8, 0x180, "mp03"),
9432891ba29STomasz Figa 	EXYNOS_PIN_BANK_EINTN(8, 0x1A0, "mp04"),
9442891ba29STomasz Figa 	EXYNOS_PIN_BANK_EINTN(8, 0x1C0, "mp05"),
9452891ba29STomasz Figa 	EXYNOS_PIN_BANK_EINTN(8, 0x1E0, "mp06"),
9462891ba29STomasz Figa 	EXYNOS_PIN_BANK_EINTG(8, 0x260, "gpm0", 0x24),
9472891ba29STomasz Figa 	EXYNOS_PIN_BANK_EINTG(7, 0x280, "gpm1", 0x28),
9482891ba29STomasz Figa 	EXYNOS_PIN_BANK_EINTG(5, 0x2A0, "gpm2", 0x2c),
9492891ba29STomasz Figa 	EXYNOS_PIN_BANK_EINTG(8, 0x2C0, "gpm3", 0x30),
9502891ba29STomasz Figa 	EXYNOS_PIN_BANK_EINTG(8, 0x2E0, "gpm4", 0x34),
9512891ba29STomasz Figa 	EXYNOS_PIN_BANK_EINTW(8, 0xC00, "gpx0", 0x00),
9522891ba29STomasz Figa 	EXYNOS_PIN_BANK_EINTW(8, 0xC20, "gpx1", 0x04),
9532891ba29STomasz Figa 	EXYNOS_PIN_BANK_EINTW(8, 0xC40, "gpx2", 0x08),
9542891ba29STomasz Figa 	EXYNOS_PIN_BANK_EINTW(8, 0xC60, "gpx3", 0x0c),
9552891ba29STomasz Figa };
9562891ba29STomasz Figa 
9572891ba29STomasz Figa /* pin banks of exynos4415 pin-controller 2 */
9582891ba29STomasz Figa static const struct samsung_pin_bank_data exynos4415_pin_banks2[] = {
9592891ba29STomasz Figa 	EXYNOS_PIN_BANK_EINTG(7, 0x000, "gpz", 0x00),
9602891ba29STomasz Figa 	EXYNOS_PIN_BANK_EINTN(2, 0x000, "etc1"),
9612891ba29STomasz Figa };
9622891ba29STomasz Figa 
9632891ba29STomasz Figa /*
9642891ba29STomasz Figa  * Samsung pinctrl driver data for Exynos4415 SoC. Exynos4415 SoC includes
9652891ba29STomasz Figa  * three gpio/pin-mux/pinconfig controllers.
9662891ba29STomasz Figa  */
9672891ba29STomasz Figa const struct samsung_pin_ctrl exynos4415_pin_ctrl[] = {
9682891ba29STomasz Figa 	{
9692891ba29STomasz Figa 		/* pin-controller instance 0 data */
9702891ba29STomasz Figa 		.pin_banks	= exynos4415_pin_banks0,
9712891ba29STomasz Figa 		.nr_banks	= ARRAY_SIZE(exynos4415_pin_banks0),
9722891ba29STomasz Figa 		.eint_gpio_init = exynos_eint_gpio_init,
9732891ba29STomasz Figa 		.suspend	= exynos_pinctrl_suspend,
9742891ba29STomasz Figa 		.resume		= exynos_pinctrl_resume,
9752891ba29STomasz Figa 	}, {
9762891ba29STomasz Figa 		/* pin-controller instance 1 data */
9772891ba29STomasz Figa 		.pin_banks	= exynos4415_pin_banks1,
9782891ba29STomasz Figa 		.nr_banks	= ARRAY_SIZE(exynos4415_pin_banks1),
9792891ba29STomasz Figa 		.eint_gpio_init = exynos_eint_gpio_init,
9802891ba29STomasz Figa 		.eint_wkup_init = exynos_eint_wkup_init,
9812891ba29STomasz Figa 		.suspend	= exynos_pinctrl_suspend,
9822891ba29STomasz Figa 		.resume		= exynos_pinctrl_resume,
9832891ba29STomasz Figa 	}, {
9842891ba29STomasz Figa 		/* pin-controller instance 2 data */
9852891ba29STomasz Figa 		.pin_banks	= exynos4415_pin_banks2,
9862891ba29STomasz Figa 		.nr_banks	= ARRAY_SIZE(exynos4415_pin_banks2),
9872891ba29STomasz Figa 		.eint_gpio_init = exynos_eint_gpio_init,
9882891ba29STomasz Figa 		.suspend	= exynos_pinctrl_suspend,
9892891ba29STomasz Figa 		.resume		= exynos_pinctrl_resume,
9902891ba29STomasz Figa 	},
9912891ba29STomasz Figa };
9922891ba29STomasz Figa 
993f67faf48SThomas Abraham /* pin banks of exynos5250 pin-controller 0 */
9948100cf47STomasz Figa static const struct samsung_pin_bank_data exynos5250_pin_banks0[] __initconst = {
995f67faf48SThomas Abraham 	EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpa0", 0x00),
996f67faf48SThomas Abraham 	EXYNOS_PIN_BANK_EINTG(6, 0x020, "gpa1", 0x04),
997f67faf48SThomas Abraham 	EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpa2", 0x08),
998f67faf48SThomas Abraham 	EXYNOS_PIN_BANK_EINTG(5, 0x060, "gpb0", 0x0c),
999f67faf48SThomas Abraham 	EXYNOS_PIN_BANK_EINTG(5, 0x080, "gpb1", 0x10),
1000f67faf48SThomas Abraham 	EXYNOS_PIN_BANK_EINTG(4, 0x0A0, "gpb2", 0x14),
1001f67faf48SThomas Abraham 	EXYNOS_PIN_BANK_EINTG(4, 0x0C0, "gpb3", 0x18),
1002f67faf48SThomas Abraham 	EXYNOS_PIN_BANK_EINTG(7, 0x0E0, "gpc0", 0x1c),
1003f67faf48SThomas Abraham 	EXYNOS_PIN_BANK_EINTG(4, 0x100, "gpc1", 0x20),
1004f67faf48SThomas Abraham 	EXYNOS_PIN_BANK_EINTG(7, 0x120, "gpc2", 0x24),
1005f67faf48SThomas Abraham 	EXYNOS_PIN_BANK_EINTG(7, 0x140, "gpc3", 0x28),
1006f67faf48SThomas Abraham 	EXYNOS_PIN_BANK_EINTG(4, 0x160, "gpd0", 0x2c),
1007f67faf48SThomas Abraham 	EXYNOS_PIN_BANK_EINTG(8, 0x180, "gpd1", 0x30),
1008f67faf48SThomas Abraham 	EXYNOS_PIN_BANK_EINTG(7, 0x2E0, "gpc4", 0x34),
1009f67faf48SThomas Abraham 	EXYNOS_PIN_BANK_EINTN(6, 0x1A0, "gpy0"),
1010f67faf48SThomas Abraham 	EXYNOS_PIN_BANK_EINTN(4, 0x1C0, "gpy1"),
1011f67faf48SThomas Abraham 	EXYNOS_PIN_BANK_EINTN(6, 0x1E0, "gpy2"),
1012f67faf48SThomas Abraham 	EXYNOS_PIN_BANK_EINTN(8, 0x200, "gpy3"),
1013f67faf48SThomas Abraham 	EXYNOS_PIN_BANK_EINTN(8, 0x220, "gpy4"),
1014f67faf48SThomas Abraham 	EXYNOS_PIN_BANK_EINTN(8, 0x240, "gpy5"),
1015f67faf48SThomas Abraham 	EXYNOS_PIN_BANK_EINTN(8, 0x260, "gpy6"),
1016f67faf48SThomas Abraham 	EXYNOS_PIN_BANK_EINTW(8, 0xC00, "gpx0", 0x00),
1017f67faf48SThomas Abraham 	EXYNOS_PIN_BANK_EINTW(8, 0xC20, "gpx1", 0x04),
1018f67faf48SThomas Abraham 	EXYNOS_PIN_BANK_EINTW(8, 0xC40, "gpx2", 0x08),
1019f67faf48SThomas Abraham 	EXYNOS_PIN_BANK_EINTW(8, 0xC60, "gpx3", 0x0c),
1020f67faf48SThomas Abraham };
1021f67faf48SThomas Abraham 
1022f67faf48SThomas Abraham /* pin banks of exynos5250 pin-controller 1 */
10238100cf47STomasz Figa static const struct samsung_pin_bank_data exynos5250_pin_banks1[] __initconst = {
1024f67faf48SThomas Abraham 	EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpe0", 0x00),
1025f67faf48SThomas Abraham 	EXYNOS_PIN_BANK_EINTG(2, 0x020, "gpe1", 0x04),
1026f67faf48SThomas Abraham 	EXYNOS_PIN_BANK_EINTG(4, 0x040, "gpf0", 0x08),
1027f67faf48SThomas Abraham 	EXYNOS_PIN_BANK_EINTG(4, 0x060, "gpf1", 0x0c),
1028f67faf48SThomas Abraham 	EXYNOS_PIN_BANK_EINTG(8, 0x080, "gpg0", 0x10),
1029f67faf48SThomas Abraham 	EXYNOS_PIN_BANK_EINTG(8, 0x0A0, "gpg1", 0x14),
1030f67faf48SThomas Abraham 	EXYNOS_PIN_BANK_EINTG(2, 0x0C0, "gpg2", 0x18),
1031f67faf48SThomas Abraham 	EXYNOS_PIN_BANK_EINTG(4, 0x0E0, "gph0", 0x1c),
1032f67faf48SThomas Abraham 	EXYNOS_PIN_BANK_EINTG(8, 0x100, "gph1", 0x20),
1033f67faf48SThomas Abraham };
1034f67faf48SThomas Abraham 
1035f67faf48SThomas Abraham /* pin banks of exynos5250 pin-controller 2 */
10368100cf47STomasz Figa static const struct samsung_pin_bank_data exynos5250_pin_banks2[] __initconst = {
1037f67faf48SThomas Abraham 	EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpv0", 0x00),
1038f67faf48SThomas Abraham 	EXYNOS_PIN_BANK_EINTG(8, 0x020, "gpv1", 0x04),
1039f67faf48SThomas Abraham 	EXYNOS_PIN_BANK_EINTG(8, 0x060, "gpv2", 0x08),
1040f67faf48SThomas Abraham 	EXYNOS_PIN_BANK_EINTG(8, 0x080, "gpv3", 0x0c),
1041f67faf48SThomas Abraham 	EXYNOS_PIN_BANK_EINTG(2, 0x0C0, "gpv4", 0x10),
1042f67faf48SThomas Abraham };
1043f67faf48SThomas Abraham 
1044f67faf48SThomas Abraham /* pin banks of exynos5250 pin-controller 3 */
10458100cf47STomasz Figa static const struct samsung_pin_bank_data exynos5250_pin_banks3[] __initconst = {
1046f67faf48SThomas Abraham 	EXYNOS_PIN_BANK_EINTG(7, 0x000, "gpz", 0x00),
1047f67faf48SThomas Abraham };
1048f67faf48SThomas Abraham 
1049f67faf48SThomas Abraham /*
1050f67faf48SThomas Abraham  * Samsung pinctrl driver data for Exynos5250 SoC. Exynos5250 SoC includes
1051f67faf48SThomas Abraham  * four gpio/pin-mux/pinconfig controllers.
1052f67faf48SThomas Abraham  */
10531bf00d7aSTomasz Figa const struct samsung_pin_ctrl exynos5250_pin_ctrl[] __initconst = {
1054f67faf48SThomas Abraham 	{
1055f67faf48SThomas Abraham 		/* pin-controller instance 0 data */
1056f67faf48SThomas Abraham 		.pin_banks	= exynos5250_pin_banks0,
1057f67faf48SThomas Abraham 		.nr_banks	= ARRAY_SIZE(exynos5250_pin_banks0),
1058f67faf48SThomas Abraham 		.eint_gpio_init = exynos_eint_gpio_init,
1059f67faf48SThomas Abraham 		.eint_wkup_init = exynos_eint_wkup_init,
10607ccbc60cSTomasz Figa 		.suspend	= exynos_pinctrl_suspend,
10617ccbc60cSTomasz Figa 		.resume		= exynos_pinctrl_resume,
1062f67faf48SThomas Abraham 	}, {
1063f67faf48SThomas Abraham 		/* pin-controller instance 1 data */
1064f67faf48SThomas Abraham 		.pin_banks	= exynos5250_pin_banks1,
1065f67faf48SThomas Abraham 		.nr_banks	= ARRAY_SIZE(exynos5250_pin_banks1),
1066f67faf48SThomas Abraham 		.eint_gpio_init = exynos_eint_gpio_init,
10677ccbc60cSTomasz Figa 		.suspend	= exynos_pinctrl_suspend,
10687ccbc60cSTomasz Figa 		.resume		= exynos_pinctrl_resume,
1069f67faf48SThomas Abraham 	}, {
1070f67faf48SThomas Abraham 		/* pin-controller instance 2 data */
1071f67faf48SThomas Abraham 		.pin_banks	= exynos5250_pin_banks2,
1072f67faf48SThomas Abraham 		.nr_banks	= ARRAY_SIZE(exynos5250_pin_banks2),
1073f67faf48SThomas Abraham 		.eint_gpio_init = exynos_eint_gpio_init,
10747ccbc60cSTomasz Figa 		.suspend	= exynos_pinctrl_suspend,
10757ccbc60cSTomasz Figa 		.resume		= exynos_pinctrl_resume,
1076f67faf48SThomas Abraham 	}, {
1077f67faf48SThomas Abraham 		/* pin-controller instance 3 data */
1078f67faf48SThomas Abraham 		.pin_banks	= exynos5250_pin_banks3,
1079f67faf48SThomas Abraham 		.nr_banks	= ARRAY_SIZE(exynos5250_pin_banks3),
1080f67faf48SThomas Abraham 		.eint_gpio_init = exynos_eint_gpio_init,
10817ccbc60cSTomasz Figa 		.suspend	= exynos_pinctrl_suspend,
10827ccbc60cSTomasz Figa 		.resume		= exynos_pinctrl_resume,
1083f67faf48SThomas Abraham 	},
1084f67faf48SThomas Abraham };
1085983dbeb3SLeela Krishna Amudala 
10869a8b6079SYoung-Gun Jang /* pin banks of exynos5260 pin-controller 0 */
10878100cf47STomasz Figa static const struct samsung_pin_bank_data exynos5260_pin_banks0[] __initconst = {
10889a8b6079SYoung-Gun Jang 	EXYNOS_PIN_BANK_EINTG(4, 0x000, "gpa0", 0x00),
10899a8b6079SYoung-Gun Jang 	EXYNOS_PIN_BANK_EINTG(7, 0x020, "gpa1", 0x04),
10909a8b6079SYoung-Gun Jang 	EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpa2", 0x08),
10919a8b6079SYoung-Gun Jang 	EXYNOS_PIN_BANK_EINTG(5, 0x060, "gpb0", 0x0c),
10929a8b6079SYoung-Gun Jang 	EXYNOS_PIN_BANK_EINTG(4, 0x080, "gpb1", 0x10),
10939a8b6079SYoung-Gun Jang 	EXYNOS_PIN_BANK_EINTG(5, 0x0a0, "gpb2", 0x14),
10949a8b6079SYoung-Gun Jang 	EXYNOS_PIN_BANK_EINTG(8, 0x0c0, "gpb3", 0x18),
10959a8b6079SYoung-Gun Jang 	EXYNOS_PIN_BANK_EINTG(8, 0x0e0, "gpb4", 0x1c),
10969a8b6079SYoung-Gun Jang 	EXYNOS_PIN_BANK_EINTG(8, 0x100, "gpb5", 0x20),
10979a8b6079SYoung-Gun Jang 	EXYNOS_PIN_BANK_EINTG(8, 0x120, "gpd0", 0x24),
10989a8b6079SYoung-Gun Jang 	EXYNOS_PIN_BANK_EINTG(7, 0x140, "gpd1", 0x28),
10999a8b6079SYoung-Gun Jang 	EXYNOS_PIN_BANK_EINTG(5, 0x160, "gpd2", 0x2c),
11009a8b6079SYoung-Gun Jang 	EXYNOS_PIN_BANK_EINTG(8, 0x180, "gpe0", 0x30),
11019a8b6079SYoung-Gun Jang 	EXYNOS_PIN_BANK_EINTG(5, 0x1a0, "gpe1", 0x34),
11029a8b6079SYoung-Gun Jang 	EXYNOS_PIN_BANK_EINTG(4, 0x1c0, "gpf0", 0x38),
11039a8b6079SYoung-Gun Jang 	EXYNOS_PIN_BANK_EINTG(8, 0x1e0, "gpf1", 0x3c),
11049a8b6079SYoung-Gun Jang 	EXYNOS_PIN_BANK_EINTG(2, 0x200, "gpk0", 0x40),
11059a8b6079SYoung-Gun Jang 	EXYNOS_PIN_BANK_EINTW(8, 0xc00, "gpx0", 0x00),
11069a8b6079SYoung-Gun Jang 	EXYNOS_PIN_BANK_EINTW(8, 0xc20, "gpx1", 0x04),
11079a8b6079SYoung-Gun Jang 	EXYNOS_PIN_BANK_EINTW(8, 0xc40, "gpx2", 0x08),
11089a8b6079SYoung-Gun Jang 	EXYNOS_PIN_BANK_EINTW(8, 0xc60, "gpx3", 0x0c),
11099a8b6079SYoung-Gun Jang };
11109a8b6079SYoung-Gun Jang 
11119a8b6079SYoung-Gun Jang /* pin banks of exynos5260 pin-controller 1 */
11128100cf47STomasz Figa static const struct samsung_pin_bank_data exynos5260_pin_banks1[] __initconst = {
11139a8b6079SYoung-Gun Jang 	EXYNOS_PIN_BANK_EINTG(7, 0x000, "gpc0", 0x00),
11149a8b6079SYoung-Gun Jang 	EXYNOS_PIN_BANK_EINTG(6, 0x020, "gpc1", 0x04),
11159a8b6079SYoung-Gun Jang 	EXYNOS_PIN_BANK_EINTG(7, 0x040, "gpc2", 0x08),
11169a8b6079SYoung-Gun Jang 	EXYNOS_PIN_BANK_EINTG(4, 0x060, "gpc3", 0x0c),
11179a8b6079SYoung-Gun Jang 	EXYNOS_PIN_BANK_EINTG(4, 0x080, "gpc4", 0x10),
11189a8b6079SYoung-Gun Jang };
11199a8b6079SYoung-Gun Jang 
11209a8b6079SYoung-Gun Jang /* pin banks of exynos5260 pin-controller 2 */
11218100cf47STomasz Figa static const struct samsung_pin_bank_data exynos5260_pin_banks2[] __initconst = {
11229a8b6079SYoung-Gun Jang 	EXYNOS_PIN_BANK_EINTG(7, 0x000, "gpz0", 0x00),
11239a8b6079SYoung-Gun Jang 	EXYNOS_PIN_BANK_EINTG(4, 0x020, "gpz1", 0x04),
11249a8b6079SYoung-Gun Jang };
11259a8b6079SYoung-Gun Jang 
11269a8b6079SYoung-Gun Jang /*
11279a8b6079SYoung-Gun Jang  * Samsung pinctrl driver data for Exynos5260 SoC. Exynos5260 SoC includes
11289a8b6079SYoung-Gun Jang  * three gpio/pin-mux/pinconfig controllers.
11299a8b6079SYoung-Gun Jang  */
11301bf00d7aSTomasz Figa const struct samsung_pin_ctrl exynos5260_pin_ctrl[] __initconst = {
11319a8b6079SYoung-Gun Jang 	{
11329a8b6079SYoung-Gun Jang 		/* pin-controller instance 0 data */
11339a8b6079SYoung-Gun Jang 		.pin_banks	= exynos5260_pin_banks0,
11349a8b6079SYoung-Gun Jang 		.nr_banks	= ARRAY_SIZE(exynos5260_pin_banks0),
11359a8b6079SYoung-Gun Jang 		.eint_gpio_init = exynos_eint_gpio_init,
11369a8b6079SYoung-Gun Jang 		.eint_wkup_init = exynos_eint_wkup_init,
11379a8b6079SYoung-Gun Jang 	}, {
11389a8b6079SYoung-Gun Jang 		/* pin-controller instance 1 data */
11399a8b6079SYoung-Gun Jang 		.pin_banks	= exynos5260_pin_banks1,
11409a8b6079SYoung-Gun Jang 		.nr_banks	= ARRAY_SIZE(exynos5260_pin_banks1),
11419a8b6079SYoung-Gun Jang 		.eint_gpio_init = exynos_eint_gpio_init,
11429a8b6079SYoung-Gun Jang 	}, {
11439a8b6079SYoung-Gun Jang 		/* pin-controller instance 2 data */
11449a8b6079SYoung-Gun Jang 		.pin_banks	= exynos5260_pin_banks2,
11459a8b6079SYoung-Gun Jang 		.nr_banks	= ARRAY_SIZE(exynos5260_pin_banks2),
11469a8b6079SYoung-Gun Jang 		.eint_gpio_init = exynos_eint_gpio_init,
11479a8b6079SYoung-Gun Jang 	},
11489a8b6079SYoung-Gun Jang };
11499a8b6079SYoung-Gun Jang 
1150023e06dfSHakjoo Kim /* pin banks of exynos5410 pin-controller 0 */
1151023e06dfSHakjoo Kim static const struct samsung_pin_bank_data exynos5410_pin_banks0[] __initconst = {
1152023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpa0", 0x00),
1153023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTG(6, 0x020, "gpa1", 0x04),
1154023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpa2", 0x08),
1155023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTG(5, 0x060, "gpb0", 0x0c),
1156023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTG(5, 0x080, "gpb1", 0x10),
1157023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTG(4, 0x0A0, "gpb2", 0x14),
1158023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTG(4, 0x0C0, "gpb3", 0x18),
1159023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTG(7, 0x0E0, "gpc0", 0x1c),
1160023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTG(4, 0x100, "gpc3", 0x20),
1161023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTG(7, 0x120, "gpc1", 0x24),
1162023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTG(7, 0x140, "gpc2", 0x28),
1163023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTN(2, 0x160, "gpm5"),
1164023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTG(8, 0x180, "gpd1", 0x2c),
1165023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTG(8, 0x1A0, "gpe0", 0x30),
1166023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTG(2, 0x1C0, "gpe1", 0x34),
1167023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTG(6, 0x1E0, "gpf0", 0x38),
1168023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTG(8, 0x200, "gpf1", 0x3c),
1169023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTG(8, 0x220, "gpg0", 0x40),
1170023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTG(8, 0x240, "gpg1", 0x44),
1171023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTG(2, 0x260, "gpg2", 0x48),
1172023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTG(4, 0x280, "gph0", 0x4c),
1173023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTG(8, 0x2A0, "gph1", 0x50),
1174023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTN(8, 0x2C0, "gpm7"),
1175023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTN(6, 0x2E0, "gpy0"),
1176023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTN(4, 0x300, "gpy1"),
1177023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTN(6, 0x320, "gpy2"),
1178023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTN(8, 0x340, "gpy3"),
1179023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTN(8, 0x360, "gpy4"),
1180023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTN(8, 0x380, "gpy5"),
1181023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTN(8, 0x3A0, "gpy6"),
1182023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTN(8, 0x3C0, "gpy7"),
1183023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTW(8, 0xC00, "gpx0", 0x00),
1184023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTW(8, 0xC20, "gpx1", 0x04),
1185023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTW(8, 0xC40, "gpx2", 0x08),
1186023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTW(8, 0xC60, "gpx3", 0x0c),
1187023e06dfSHakjoo Kim };
1188023e06dfSHakjoo Kim 
1189023e06dfSHakjoo Kim /* pin banks of exynos5410 pin-controller 1 */
1190023e06dfSHakjoo Kim static const struct samsung_pin_bank_data exynos5410_pin_banks1[] __initconst = {
1191023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTG(5, 0x000, "gpj0", 0x00),
1192023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTG(8, 0x020, "gpj1", 0x04),
1193023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpj2", 0x08),
1194023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTG(8, 0x060, "gpj3", 0x0c),
1195023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTG(2, 0x080, "gpj4", 0x10),
1196023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTG(8, 0x0A0, "gpk0", 0x14),
1197023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTG(8, 0x0C0, "gpk1", 0x18),
1198023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTG(8, 0x0E0, "gpk2", 0x1c),
1199023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTG(7, 0x100, "gpk3", 0x20),
1200023e06dfSHakjoo Kim };
1201023e06dfSHakjoo Kim 
1202023e06dfSHakjoo Kim /* pin banks of exynos5410 pin-controller 2 */
1203023e06dfSHakjoo Kim static const struct samsung_pin_bank_data exynos5410_pin_banks2[] __initconst = {
1204023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpv0", 0x00),
1205023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTG(8, 0x020, "gpv1", 0x04),
1206023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTG(8, 0x060, "gpv2", 0x08),
1207023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTG(8, 0x080, "gpv3", 0x0c),
1208023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTG(2, 0x0C0, "gpv4", 0x10),
1209023e06dfSHakjoo Kim };
1210023e06dfSHakjoo Kim 
1211023e06dfSHakjoo Kim /* pin banks of exynos5410 pin-controller 3 */
1212023e06dfSHakjoo Kim static const struct samsung_pin_bank_data exynos5410_pin_banks3[] __initconst = {
1213023e06dfSHakjoo Kim 	EXYNOS_PIN_BANK_EINTG(7, 0x000, "gpz", 0x00),
1214023e06dfSHakjoo Kim };
1215023e06dfSHakjoo Kim 
1216023e06dfSHakjoo Kim /*
1217023e06dfSHakjoo Kim  * Samsung pinctrl driver data for Exynos5410 SoC. Exynos5410 SoC includes
1218023e06dfSHakjoo Kim  * four gpio/pin-mux/pinconfig controllers.
1219023e06dfSHakjoo Kim  */
1220023e06dfSHakjoo Kim const struct samsung_pin_ctrl exynos5410_pin_ctrl[] __initconst = {
1221023e06dfSHakjoo Kim 	{
1222023e06dfSHakjoo Kim 		/* pin-controller instance 0 data */
1223023e06dfSHakjoo Kim 		.pin_banks	= exynos5410_pin_banks0,
1224023e06dfSHakjoo Kim 		.nr_banks	= ARRAY_SIZE(exynos5410_pin_banks0),
1225023e06dfSHakjoo Kim 		.eint_gpio_init = exynos_eint_gpio_init,
1226023e06dfSHakjoo Kim 		.eint_wkup_init = exynos_eint_wkup_init,
1227023e06dfSHakjoo Kim 		.suspend	= exynos_pinctrl_suspend,
1228023e06dfSHakjoo Kim 		.resume		= exynos_pinctrl_resume,
1229023e06dfSHakjoo Kim 	}, {
1230023e06dfSHakjoo Kim 		/* pin-controller instance 1 data */
1231023e06dfSHakjoo Kim 		.pin_banks	= exynos5410_pin_banks1,
1232023e06dfSHakjoo Kim 		.nr_banks	= ARRAY_SIZE(exynos5410_pin_banks1),
1233023e06dfSHakjoo Kim 		.eint_gpio_init = exynos_eint_gpio_init,
1234023e06dfSHakjoo Kim 		.suspend	= exynos_pinctrl_suspend,
1235023e06dfSHakjoo Kim 		.resume		= exynos_pinctrl_resume,
1236023e06dfSHakjoo Kim 	}, {
1237023e06dfSHakjoo Kim 		/* pin-controller instance 2 data */
1238023e06dfSHakjoo Kim 		.pin_banks	= exynos5410_pin_banks2,
1239023e06dfSHakjoo Kim 		.nr_banks	= ARRAY_SIZE(exynos5410_pin_banks2),
1240023e06dfSHakjoo Kim 		.eint_gpio_init = exynos_eint_gpio_init,
1241023e06dfSHakjoo Kim 		.suspend	= exynos_pinctrl_suspend,
1242023e06dfSHakjoo Kim 		.resume		= exynos_pinctrl_resume,
1243023e06dfSHakjoo Kim 	}, {
1244023e06dfSHakjoo Kim 		/* pin-controller instance 3 data */
1245023e06dfSHakjoo Kim 		.pin_banks	= exynos5410_pin_banks3,
1246023e06dfSHakjoo Kim 		.nr_banks	= ARRAY_SIZE(exynos5410_pin_banks3),
1247023e06dfSHakjoo Kim 		.eint_gpio_init = exynos_eint_gpio_init,
1248023e06dfSHakjoo Kim 		.suspend	= exynos_pinctrl_suspend,
1249023e06dfSHakjoo Kim 		.resume		= exynos_pinctrl_resume,
1250023e06dfSHakjoo Kim 	},
1251023e06dfSHakjoo Kim };
1252023e06dfSHakjoo Kim 
1253983dbeb3SLeela Krishna Amudala /* pin banks of exynos5420 pin-controller 0 */
12548100cf47STomasz Figa static const struct samsung_pin_bank_data exynos5420_pin_banks0[] __initconst = {
1255983dbeb3SLeela Krishna Amudala 	EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpy7", 0x00),
1256983dbeb3SLeela Krishna Amudala 	EXYNOS_PIN_BANK_EINTW(8, 0xC00, "gpx0", 0x00),
1257983dbeb3SLeela Krishna Amudala 	EXYNOS_PIN_BANK_EINTW(8, 0xC20, "gpx1", 0x04),
1258983dbeb3SLeela Krishna Amudala 	EXYNOS_PIN_BANK_EINTW(8, 0xC40, "gpx2", 0x08),
1259983dbeb3SLeela Krishna Amudala 	EXYNOS_PIN_BANK_EINTW(8, 0xC60, "gpx3", 0x0c),
1260983dbeb3SLeela Krishna Amudala };
1261983dbeb3SLeela Krishna Amudala 
1262983dbeb3SLeela Krishna Amudala /* pin banks of exynos5420 pin-controller 1 */
12638100cf47STomasz Figa static const struct samsung_pin_bank_data exynos5420_pin_banks1[] __initconst = {
1264983dbeb3SLeela Krishna Amudala 	EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpc0", 0x00),
1265983dbeb3SLeela Krishna Amudala 	EXYNOS_PIN_BANK_EINTG(8, 0x020, "gpc1", 0x04),
1266983dbeb3SLeela Krishna Amudala 	EXYNOS_PIN_BANK_EINTG(7, 0x040, "gpc2", 0x08),
1267983dbeb3SLeela Krishna Amudala 	EXYNOS_PIN_BANK_EINTG(4, 0x060, "gpc3", 0x0c),
1268983dbeb3SLeela Krishna Amudala 	EXYNOS_PIN_BANK_EINTG(2, 0x080, "gpc4", 0x10),
1269983dbeb3SLeela Krishna Amudala 	EXYNOS_PIN_BANK_EINTG(8, 0x0A0, "gpd1", 0x14),
1270983dbeb3SLeela Krishna Amudala 	EXYNOS_PIN_BANK_EINTN(6, 0x0C0, "gpy0"),
1271983dbeb3SLeela Krishna Amudala 	EXYNOS_PIN_BANK_EINTN(4, 0x0E0, "gpy1"),
1272983dbeb3SLeela Krishna Amudala 	EXYNOS_PIN_BANK_EINTN(6, 0x100, "gpy2"),
1273983dbeb3SLeela Krishna Amudala 	EXYNOS_PIN_BANK_EINTN(8, 0x120, "gpy3"),
1274983dbeb3SLeela Krishna Amudala 	EXYNOS_PIN_BANK_EINTN(8, 0x140, "gpy4"),
1275983dbeb3SLeela Krishna Amudala 	EXYNOS_PIN_BANK_EINTN(8, 0x160, "gpy5"),
1276983dbeb3SLeela Krishna Amudala 	EXYNOS_PIN_BANK_EINTN(8, 0x180, "gpy6"),
1277983dbeb3SLeela Krishna Amudala };
1278983dbeb3SLeela Krishna Amudala 
1279983dbeb3SLeela Krishna Amudala /* pin banks of exynos5420 pin-controller 2 */
12808100cf47STomasz Figa static const struct samsung_pin_bank_data exynos5420_pin_banks2[] __initconst = {
1281983dbeb3SLeela Krishna Amudala 	EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpe0", 0x00),
1282983dbeb3SLeela Krishna Amudala 	EXYNOS_PIN_BANK_EINTG(2, 0x020, "gpe1", 0x04),
1283983dbeb3SLeela Krishna Amudala 	EXYNOS_PIN_BANK_EINTG(6, 0x040, "gpf0", 0x08),
1284983dbeb3SLeela Krishna Amudala 	EXYNOS_PIN_BANK_EINTG(8, 0x060, "gpf1", 0x0c),
1285983dbeb3SLeela Krishna Amudala 	EXYNOS_PIN_BANK_EINTG(8, 0x080, "gpg0", 0x10),
1286983dbeb3SLeela Krishna Amudala 	EXYNOS_PIN_BANK_EINTG(8, 0x0A0, "gpg1", 0x14),
1287983dbeb3SLeela Krishna Amudala 	EXYNOS_PIN_BANK_EINTG(2, 0x0C0, "gpg2", 0x18),
1288983dbeb3SLeela Krishna Amudala 	EXYNOS_PIN_BANK_EINTG(4, 0x0E0, "gpj4", 0x1c),
1289983dbeb3SLeela Krishna Amudala };
1290983dbeb3SLeela Krishna Amudala 
1291983dbeb3SLeela Krishna Amudala /* pin banks of exynos5420 pin-controller 3 */
12928100cf47STomasz Figa static const struct samsung_pin_bank_data exynos5420_pin_banks3[] __initconst = {
1293983dbeb3SLeela Krishna Amudala 	EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpa0", 0x00),
1294983dbeb3SLeela Krishna Amudala 	EXYNOS_PIN_BANK_EINTG(6, 0x020, "gpa1", 0x04),
1295983dbeb3SLeela Krishna Amudala 	EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpa2", 0x08),
1296983dbeb3SLeela Krishna Amudala 	EXYNOS_PIN_BANK_EINTG(5, 0x060, "gpb0", 0x0c),
1297983dbeb3SLeela Krishna Amudala 	EXYNOS_PIN_BANK_EINTG(5, 0x080, "gpb1", 0x10),
1298983dbeb3SLeela Krishna Amudala 	EXYNOS_PIN_BANK_EINTG(4, 0x0A0, "gpb2", 0x14),
1299983dbeb3SLeela Krishna Amudala 	EXYNOS_PIN_BANK_EINTG(8, 0x0C0, "gpb3", 0x18),
1300983dbeb3SLeela Krishna Amudala 	EXYNOS_PIN_BANK_EINTG(2, 0x0E0, "gpb4", 0x1c),
1301983dbeb3SLeela Krishna Amudala 	EXYNOS_PIN_BANK_EINTG(8, 0x100, "gph0", 0x20),
1302983dbeb3SLeela Krishna Amudala };
1303983dbeb3SLeela Krishna Amudala 
1304983dbeb3SLeela Krishna Amudala /* pin banks of exynos5420 pin-controller 4 */
13058100cf47STomasz Figa static const struct samsung_pin_bank_data exynos5420_pin_banks4[] __initconst = {
1306983dbeb3SLeela Krishna Amudala 	EXYNOS_PIN_BANK_EINTG(7, 0x000, "gpz", 0x00),
1307983dbeb3SLeela Krishna Amudala };
1308983dbeb3SLeela Krishna Amudala 
1309983dbeb3SLeela Krishna Amudala /*
1310983dbeb3SLeela Krishna Amudala  * Samsung pinctrl driver data for Exynos5420 SoC. Exynos5420 SoC includes
1311983dbeb3SLeela Krishna Amudala  * four gpio/pin-mux/pinconfig controllers.
1312983dbeb3SLeela Krishna Amudala  */
13131bf00d7aSTomasz Figa const struct samsung_pin_ctrl exynos5420_pin_ctrl[] __initconst = {
1314983dbeb3SLeela Krishna Amudala 	{
1315983dbeb3SLeela Krishna Amudala 		/* pin-controller instance 0 data */
1316983dbeb3SLeela Krishna Amudala 		.pin_banks	= exynos5420_pin_banks0,
1317983dbeb3SLeela Krishna Amudala 		.nr_banks	= ARRAY_SIZE(exynos5420_pin_banks0),
1318983dbeb3SLeela Krishna Amudala 		.eint_gpio_init = exynos_eint_gpio_init,
1319983dbeb3SLeela Krishna Amudala 		.eint_wkup_init = exynos_eint_wkup_init,
1320983dbeb3SLeela Krishna Amudala 	}, {
1321983dbeb3SLeela Krishna Amudala 		/* pin-controller instance 1 data */
1322983dbeb3SLeela Krishna Amudala 		.pin_banks	= exynos5420_pin_banks1,
1323983dbeb3SLeela Krishna Amudala 		.nr_banks	= ARRAY_SIZE(exynos5420_pin_banks1),
1324983dbeb3SLeela Krishna Amudala 		.eint_gpio_init = exynos_eint_gpio_init,
1325983dbeb3SLeela Krishna Amudala 	}, {
1326983dbeb3SLeela Krishna Amudala 		/* pin-controller instance 2 data */
1327983dbeb3SLeela Krishna Amudala 		.pin_banks	= exynos5420_pin_banks2,
1328983dbeb3SLeela Krishna Amudala 		.nr_banks	= ARRAY_SIZE(exynos5420_pin_banks2),
1329983dbeb3SLeela Krishna Amudala 		.eint_gpio_init = exynos_eint_gpio_init,
1330983dbeb3SLeela Krishna Amudala 	}, {
1331983dbeb3SLeela Krishna Amudala 		/* pin-controller instance 3 data */
1332983dbeb3SLeela Krishna Amudala 		.pin_banks	= exynos5420_pin_banks3,
1333983dbeb3SLeela Krishna Amudala 		.nr_banks	= ARRAY_SIZE(exynos5420_pin_banks3),
1334983dbeb3SLeela Krishna Amudala 		.eint_gpio_init = exynos_eint_gpio_init,
1335983dbeb3SLeela Krishna Amudala 	}, {
1336983dbeb3SLeela Krishna Amudala 		/* pin-controller instance 4 data */
1337983dbeb3SLeela Krishna Amudala 		.pin_banks	= exynos5420_pin_banks4,
1338983dbeb3SLeela Krishna Amudala 		.nr_banks	= ARRAY_SIZE(exynos5420_pin_banks4),
1339983dbeb3SLeela Krishna Amudala 		.eint_gpio_init = exynos_eint_gpio_init,
1340983dbeb3SLeela Krishna Amudala 	},
1341983dbeb3SLeela Krishna Amudala };
134250cea0cfSNaveen Krishna Ch 
13433c5ecc9eSChanwoo Choi /* pin banks of exynos5433 pin-controller - ALIVE */
13443c5ecc9eSChanwoo Choi static const struct samsung_pin_bank_data exynos5433_pin_banks0[] = {
13453c5ecc9eSChanwoo Choi 	EXYNOS_PIN_BANK_EINTW(8, 0x000, "gpa0", 0x00),
13463c5ecc9eSChanwoo Choi 	EXYNOS_PIN_BANK_EINTW(8, 0x020, "gpa1", 0x04),
13473c5ecc9eSChanwoo Choi 	EXYNOS_PIN_BANK_EINTW(8, 0x040, "gpa2", 0x08),
13483c5ecc9eSChanwoo Choi 	EXYNOS_PIN_BANK_EINTW(8, 0x060, "gpa3", 0x0c),
13493c5ecc9eSChanwoo Choi };
13503c5ecc9eSChanwoo Choi 
13513c5ecc9eSChanwoo Choi /* pin banks of exynos5433 pin-controller - AUD */
13523c5ecc9eSChanwoo Choi static const struct samsung_pin_bank_data exynos5433_pin_banks1[] = {
13533c5ecc9eSChanwoo Choi 	EXYNOS_PIN_BANK_EINTG(7, 0x000, "gpz0", 0x00),
13543c5ecc9eSChanwoo Choi 	EXYNOS_PIN_BANK_EINTG(4, 0x020, "gpz1", 0x04),
13553c5ecc9eSChanwoo Choi };
13563c5ecc9eSChanwoo Choi 
13573c5ecc9eSChanwoo Choi /* pin banks of exynos5433 pin-controller - CPIF */
13583c5ecc9eSChanwoo Choi static const struct samsung_pin_bank_data exynos5433_pin_banks2[] = {
13593c5ecc9eSChanwoo Choi 	EXYNOS_PIN_BANK_EINTG(2, 0x000, "gpv6", 0x00),
13603c5ecc9eSChanwoo Choi };
13613c5ecc9eSChanwoo Choi 
13623c5ecc9eSChanwoo Choi /* pin banks of exynos5433 pin-controller - eSE */
13633c5ecc9eSChanwoo Choi static const struct samsung_pin_bank_data exynos5433_pin_banks3[] = {
13643c5ecc9eSChanwoo Choi 	EXYNOS_PIN_BANK_EINTG(3, 0x000, "gpj2", 0x00),
13653c5ecc9eSChanwoo Choi };
13663c5ecc9eSChanwoo Choi 
13673c5ecc9eSChanwoo Choi /* pin banks of exynos5433 pin-controller - FINGER */
13683c5ecc9eSChanwoo Choi static const struct samsung_pin_bank_data exynos5433_pin_banks4[] = {
13693c5ecc9eSChanwoo Choi 	EXYNOS_PIN_BANK_EINTG(4, 0x000, "gpd5", 0x00),
13703c5ecc9eSChanwoo Choi };
13713c5ecc9eSChanwoo Choi 
13723c5ecc9eSChanwoo Choi /* pin banks of exynos5433 pin-controller - FSYS */
13733c5ecc9eSChanwoo Choi static const struct samsung_pin_bank_data exynos5433_pin_banks5[] = {
13743c5ecc9eSChanwoo Choi 	EXYNOS_PIN_BANK_EINTG(6, 0x000, "gph1", 0x00),
13753c5ecc9eSChanwoo Choi 	EXYNOS_PIN_BANK_EINTG(7, 0x020, "gpr4", 0x04),
13763c5ecc9eSChanwoo Choi 	EXYNOS_PIN_BANK_EINTG(5, 0x040, "gpr0", 0x08),
13773c5ecc9eSChanwoo Choi 	EXYNOS_PIN_BANK_EINTG(8, 0x060, "gpr1", 0x0c),
13783c5ecc9eSChanwoo Choi 	EXYNOS_PIN_BANK_EINTG(2, 0x080, "gpr2", 0x10),
13793c5ecc9eSChanwoo Choi 	EXYNOS_PIN_BANK_EINTG(8, 0x0a0, "gpr3", 0x14),
13803c5ecc9eSChanwoo Choi };
13813c5ecc9eSChanwoo Choi 
13823c5ecc9eSChanwoo Choi /* pin banks of exynos5433 pin-controller - IMEM */
13833c5ecc9eSChanwoo Choi static const struct samsung_pin_bank_data exynos5433_pin_banks6[] = {
13843c5ecc9eSChanwoo Choi 	EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpf0", 0x00),
13853c5ecc9eSChanwoo Choi };
13863c5ecc9eSChanwoo Choi 
13873c5ecc9eSChanwoo Choi /* pin banks of exynos5433 pin-controller - NFC */
13883c5ecc9eSChanwoo Choi static const struct samsung_pin_bank_data exynos5433_pin_banks7[] = {
13893c5ecc9eSChanwoo Choi 	EXYNOS_PIN_BANK_EINTG(3, 0x000, "gpj0", 0x00),
13903c5ecc9eSChanwoo Choi };
13913c5ecc9eSChanwoo Choi 
13923c5ecc9eSChanwoo Choi /* pin banks of exynos5433 pin-controller - PERIC */
13933c5ecc9eSChanwoo Choi static const struct samsung_pin_bank_data exynos5433_pin_banks8[] = {
13943c5ecc9eSChanwoo Choi 	EXYNOS_PIN_BANK_EINTG(6, 0x000, "gpv7", 0x00),
13953c5ecc9eSChanwoo Choi 	EXYNOS_PIN_BANK_EINTG(5, 0x020, "gpb0", 0x04),
13963c5ecc9eSChanwoo Choi 	EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpc0", 0x08),
13973c5ecc9eSChanwoo Choi 	EXYNOS_PIN_BANK_EINTG(2, 0x060, "gpc1", 0x0c),
13983c5ecc9eSChanwoo Choi 	EXYNOS_PIN_BANK_EINTG(6, 0x080, "gpc2", 0x10),
13993c5ecc9eSChanwoo Choi 	EXYNOS_PIN_BANK_EINTG(8, 0x0a0, "gpc3", 0x14),
14003c5ecc9eSChanwoo Choi 	EXYNOS_PIN_BANK_EINTG(2, 0x0c0, "gpg0", 0x18),
14013c5ecc9eSChanwoo Choi 	EXYNOS_PIN_BANK_EINTG(4, 0x0e0, "gpd0", 0x1c),
14023c5ecc9eSChanwoo Choi 	EXYNOS_PIN_BANK_EINTG(6, 0x100, "gpd1", 0x20),
14033c5ecc9eSChanwoo Choi 	EXYNOS_PIN_BANK_EINTG(8, 0x120, "gpd2", 0x24),
14043c5ecc9eSChanwoo Choi 	EXYNOS_PIN_BANK_EINTG(5, 0x140, "gpd4", 0x28),
14053c5ecc9eSChanwoo Choi 	EXYNOS_PIN_BANK_EINTG(2, 0x160, "gpd8", 0x2c),
14063c5ecc9eSChanwoo Choi 	EXYNOS_PIN_BANK_EINTG(7, 0x180, "gpd6", 0x30),
14073c5ecc9eSChanwoo Choi 	EXYNOS_PIN_BANK_EINTG(3, 0x1a0, "gpd7", 0x34),
14083c5ecc9eSChanwoo Choi 	EXYNOS_PIN_BANK_EINTG(5, 0x1c0, "gpg1", 0x38),
14093c5ecc9eSChanwoo Choi 	EXYNOS_PIN_BANK_EINTG(2, 0x1e0, "gpg2", 0x3c),
14103c5ecc9eSChanwoo Choi 	EXYNOS_PIN_BANK_EINTG(8, 0x200, "gpg3", 0x40),
14113c5ecc9eSChanwoo Choi };
14123c5ecc9eSChanwoo Choi 
14133c5ecc9eSChanwoo Choi /* pin banks of exynos5433 pin-controller - TOUCH */
14143c5ecc9eSChanwoo Choi static const struct samsung_pin_bank_data exynos5433_pin_banks9[] = {
14153c5ecc9eSChanwoo Choi 	EXYNOS_PIN_BANK_EINTG(3, 0x000, "gpj1", 0x00),
14163c5ecc9eSChanwoo Choi };
14173c5ecc9eSChanwoo Choi 
14183c5ecc9eSChanwoo Choi /*
14193c5ecc9eSChanwoo Choi  * Samsung pinctrl driver data for Exynos5433 SoC. Exynos5433 SoC includes
14203c5ecc9eSChanwoo Choi  * ten gpio/pin-mux/pinconfig controllers.
14213c5ecc9eSChanwoo Choi  */
14223c5ecc9eSChanwoo Choi const struct samsung_pin_ctrl exynos5433_pin_ctrl[] = {
14233c5ecc9eSChanwoo Choi 	{
14243c5ecc9eSChanwoo Choi 		/* pin-controller instance 0 data */
14253c5ecc9eSChanwoo Choi 		.pin_banks	= exynos5433_pin_banks0,
14263c5ecc9eSChanwoo Choi 		.nr_banks	= ARRAY_SIZE(exynos5433_pin_banks0),
14273c5ecc9eSChanwoo Choi 		.eint_wkup_init = exynos_eint_wkup_init,
14283c5ecc9eSChanwoo Choi 		.suspend	= exynos_pinctrl_suspend,
14293c5ecc9eSChanwoo Choi 		.resume		= exynos_pinctrl_resume,
14303c5ecc9eSChanwoo Choi 	}, {
14313c5ecc9eSChanwoo Choi 		/* pin-controller instance 1 data */
14323c5ecc9eSChanwoo Choi 		.pin_banks	= exynos5433_pin_banks1,
14333c5ecc9eSChanwoo Choi 		.nr_banks	= ARRAY_SIZE(exynos5433_pin_banks1),
14343c5ecc9eSChanwoo Choi 		.eint_gpio_init = exynos_eint_gpio_init,
14353c5ecc9eSChanwoo Choi 		.suspend	= exynos_pinctrl_suspend,
14363c5ecc9eSChanwoo Choi 		.resume		= exynos_pinctrl_resume,
14373c5ecc9eSChanwoo Choi 	}, {
14383c5ecc9eSChanwoo Choi 		/* pin-controller instance 2 data */
14393c5ecc9eSChanwoo Choi 		.pin_banks	= exynos5433_pin_banks2,
14403c5ecc9eSChanwoo Choi 		.nr_banks	= ARRAY_SIZE(exynos5433_pin_banks2),
14413c5ecc9eSChanwoo Choi 		.eint_gpio_init = exynos_eint_gpio_init,
14423c5ecc9eSChanwoo Choi 		.suspend	= exynos_pinctrl_suspend,
14433c5ecc9eSChanwoo Choi 		.resume		= exynos_pinctrl_resume,
14443c5ecc9eSChanwoo Choi 	}, {
14453c5ecc9eSChanwoo Choi 		/* pin-controller instance 3 data */
14463c5ecc9eSChanwoo Choi 		.pin_banks	= exynos5433_pin_banks3,
14473c5ecc9eSChanwoo Choi 		.nr_banks	= ARRAY_SIZE(exynos5433_pin_banks3),
14483c5ecc9eSChanwoo Choi 		.eint_gpio_init = exynos_eint_gpio_init,
14493c5ecc9eSChanwoo Choi 		.suspend	= exynos_pinctrl_suspend,
14503c5ecc9eSChanwoo Choi 		.resume		= exynos_pinctrl_resume,
14513c5ecc9eSChanwoo Choi 	}, {
14523c5ecc9eSChanwoo Choi 		/* pin-controller instance 4 data */
14533c5ecc9eSChanwoo Choi 		.pin_banks	= exynos5433_pin_banks4,
14543c5ecc9eSChanwoo Choi 		.nr_banks	= ARRAY_SIZE(exynos5433_pin_banks4),
14553c5ecc9eSChanwoo Choi 		.eint_gpio_init = exynos_eint_gpio_init,
14563c5ecc9eSChanwoo Choi 		.suspend	= exynos_pinctrl_suspend,
14573c5ecc9eSChanwoo Choi 		.resume		= exynos_pinctrl_resume,
14583c5ecc9eSChanwoo Choi 	}, {
14593c5ecc9eSChanwoo Choi 		/* pin-controller instance 5 data */
14603c5ecc9eSChanwoo Choi 		.pin_banks	= exynos5433_pin_banks5,
14613c5ecc9eSChanwoo Choi 		.nr_banks	= ARRAY_SIZE(exynos5433_pin_banks5),
14623c5ecc9eSChanwoo Choi 		.eint_gpio_init = exynos_eint_gpio_init,
14633c5ecc9eSChanwoo Choi 		.suspend	= exynos_pinctrl_suspend,
14643c5ecc9eSChanwoo Choi 		.resume		= exynos_pinctrl_resume,
14653c5ecc9eSChanwoo Choi 	}, {
14663c5ecc9eSChanwoo Choi 		/* pin-controller instance 6 data */
14673c5ecc9eSChanwoo Choi 		.pin_banks	= exynos5433_pin_banks6,
14683c5ecc9eSChanwoo Choi 		.nr_banks	= ARRAY_SIZE(exynos5433_pin_banks6),
14693c5ecc9eSChanwoo Choi 		.eint_gpio_init = exynos_eint_gpio_init,
14703c5ecc9eSChanwoo Choi 		.suspend	= exynos_pinctrl_suspend,
14713c5ecc9eSChanwoo Choi 		.resume		= exynos_pinctrl_resume,
14723c5ecc9eSChanwoo Choi 	}, {
14733c5ecc9eSChanwoo Choi 		/* pin-controller instance 7 data */
14743c5ecc9eSChanwoo Choi 		.pin_banks	= exynos5433_pin_banks7,
14753c5ecc9eSChanwoo Choi 		.nr_banks	= ARRAY_SIZE(exynos5433_pin_banks7),
14763c5ecc9eSChanwoo Choi 		.eint_gpio_init = exynos_eint_gpio_init,
14773c5ecc9eSChanwoo Choi 		.suspend	= exynos_pinctrl_suspend,
14783c5ecc9eSChanwoo Choi 		.resume		= exynos_pinctrl_resume,
14793c5ecc9eSChanwoo Choi 	}, {
14803c5ecc9eSChanwoo Choi 		/* pin-controller instance 8 data */
14813c5ecc9eSChanwoo Choi 		.pin_banks	= exynos5433_pin_banks8,
14823c5ecc9eSChanwoo Choi 		.nr_banks	= ARRAY_SIZE(exynos5433_pin_banks8),
14833c5ecc9eSChanwoo Choi 		.eint_gpio_init = exynos_eint_gpio_init,
14843c5ecc9eSChanwoo Choi 		.suspend	= exynos_pinctrl_suspend,
14853c5ecc9eSChanwoo Choi 		.resume		= exynos_pinctrl_resume,
14863c5ecc9eSChanwoo Choi 	}, {
14873c5ecc9eSChanwoo Choi 		/* pin-controller instance 9 data */
14883c5ecc9eSChanwoo Choi 		.pin_banks	= exynos5433_pin_banks9,
14893c5ecc9eSChanwoo Choi 		.nr_banks	= ARRAY_SIZE(exynos5433_pin_banks9),
14903c5ecc9eSChanwoo Choi 		.eint_gpio_init = exynos_eint_gpio_init,
14913c5ecc9eSChanwoo Choi 		.suspend	= exynos_pinctrl_suspend,
14923c5ecc9eSChanwoo Choi 		.resume		= exynos_pinctrl_resume,
14933c5ecc9eSChanwoo Choi 	},
14943c5ecc9eSChanwoo Choi };
14953c5ecc9eSChanwoo Choi 
149650cea0cfSNaveen Krishna Ch /* pin banks of exynos7 pin-controller - ALIVE */
149750cea0cfSNaveen Krishna Ch static const struct samsung_pin_bank_data exynos7_pin_banks0[] __initconst = {
149850cea0cfSNaveen Krishna Ch 	EXYNOS_PIN_BANK_EINTW(8, 0x000, "gpa0", 0x00),
149950cea0cfSNaveen Krishna Ch 	EXYNOS_PIN_BANK_EINTW(8, 0x020, "gpa1", 0x04),
150050cea0cfSNaveen Krishna Ch 	EXYNOS_PIN_BANK_EINTW(8, 0x040, "gpa2", 0x08),
150150cea0cfSNaveen Krishna Ch 	EXYNOS_PIN_BANK_EINTW(8, 0x060, "gpa3", 0x0c),
150250cea0cfSNaveen Krishna Ch };
150350cea0cfSNaveen Krishna Ch 
150450cea0cfSNaveen Krishna Ch /* pin banks of exynos7 pin-controller - BUS0 */
150550cea0cfSNaveen Krishna Ch static const struct samsung_pin_bank_data exynos7_pin_banks1[] __initconst = {
150650cea0cfSNaveen Krishna Ch 	EXYNOS_PIN_BANK_EINTG(5, 0x000, "gpb0", 0x00),
150750cea0cfSNaveen Krishna Ch 	EXYNOS_PIN_BANK_EINTG(8, 0x020, "gpc0", 0x04),
150850cea0cfSNaveen Krishna Ch 	EXYNOS_PIN_BANK_EINTG(2, 0x040, "gpc1", 0x08),
150950cea0cfSNaveen Krishna Ch 	EXYNOS_PIN_BANK_EINTG(6, 0x060, "gpc2", 0x0c),
151050cea0cfSNaveen Krishna Ch 	EXYNOS_PIN_BANK_EINTG(8, 0x080, "gpc3", 0x10),
151150cea0cfSNaveen Krishna Ch 	EXYNOS_PIN_BANK_EINTG(4, 0x0a0, "gpd0", 0x14),
151250cea0cfSNaveen Krishna Ch 	EXYNOS_PIN_BANK_EINTG(6, 0x0c0, "gpd1", 0x18),
151350cea0cfSNaveen Krishna Ch 	EXYNOS_PIN_BANK_EINTG(8, 0x0e0, "gpd2", 0x1c),
151450cea0cfSNaveen Krishna Ch 	EXYNOS_PIN_BANK_EINTG(5, 0x100, "gpd4", 0x20),
151550cea0cfSNaveen Krishna Ch 	EXYNOS_PIN_BANK_EINTG(4, 0x120, "gpd5", 0x24),
151650cea0cfSNaveen Krishna Ch 	EXYNOS_PIN_BANK_EINTG(6, 0x140, "gpd6", 0x28),
151750cea0cfSNaveen Krishna Ch 	EXYNOS_PIN_BANK_EINTG(3, 0x160, "gpd7", 0x2c),
151850cea0cfSNaveen Krishna Ch 	EXYNOS_PIN_BANK_EINTG(2, 0x180, "gpd8", 0x30),
151950cea0cfSNaveen Krishna Ch 	EXYNOS_PIN_BANK_EINTG(2, 0x1a0, "gpg0", 0x34),
152050cea0cfSNaveen Krishna Ch 	EXYNOS_PIN_BANK_EINTG(4, 0x1c0, "gpg3", 0x38),
152150cea0cfSNaveen Krishna Ch };
152250cea0cfSNaveen Krishna Ch 
152350cea0cfSNaveen Krishna Ch /* pin banks of exynos7 pin-controller - NFC */
152450cea0cfSNaveen Krishna Ch static const struct samsung_pin_bank_data exynos7_pin_banks2[] __initconst = {
152550cea0cfSNaveen Krishna Ch 	EXYNOS_PIN_BANK_EINTG(3, 0x000, "gpj0", 0x00),
152650cea0cfSNaveen Krishna Ch };
152750cea0cfSNaveen Krishna Ch 
152850cea0cfSNaveen Krishna Ch /* pin banks of exynos7 pin-controller - TOUCH */
152950cea0cfSNaveen Krishna Ch static const struct samsung_pin_bank_data exynos7_pin_banks3[] __initconst = {
153050cea0cfSNaveen Krishna Ch 	EXYNOS_PIN_BANK_EINTG(3, 0x000, "gpj1", 0x00),
153150cea0cfSNaveen Krishna Ch };
153250cea0cfSNaveen Krishna Ch 
153350cea0cfSNaveen Krishna Ch /* pin banks of exynos7 pin-controller - FF */
153450cea0cfSNaveen Krishna Ch static const struct samsung_pin_bank_data exynos7_pin_banks4[] __initconst = {
153550cea0cfSNaveen Krishna Ch 	EXYNOS_PIN_BANK_EINTG(4, 0x000, "gpg4", 0x00),
153650cea0cfSNaveen Krishna Ch };
153750cea0cfSNaveen Krishna Ch 
153850cea0cfSNaveen Krishna Ch /* pin banks of exynos7 pin-controller - ESE */
153950cea0cfSNaveen Krishna Ch static const struct samsung_pin_bank_data exynos7_pin_banks5[] __initconst = {
154050cea0cfSNaveen Krishna Ch 	EXYNOS_PIN_BANK_EINTG(5, 0x000, "gpv7", 0x00),
154150cea0cfSNaveen Krishna Ch };
154250cea0cfSNaveen Krishna Ch 
154350cea0cfSNaveen Krishna Ch /* pin banks of exynos7 pin-controller - FSYS0 */
154450cea0cfSNaveen Krishna Ch static const struct samsung_pin_bank_data exynos7_pin_banks6[] __initconst = {
154550cea0cfSNaveen Krishna Ch 	EXYNOS_PIN_BANK_EINTG(7, 0x000, "gpr4", 0x00),
154650cea0cfSNaveen Krishna Ch };
154750cea0cfSNaveen Krishna Ch 
154850cea0cfSNaveen Krishna Ch /* pin banks of exynos7 pin-controller - FSYS1 */
154950cea0cfSNaveen Krishna Ch static const struct samsung_pin_bank_data exynos7_pin_banks7[] __initconst = {
155050cea0cfSNaveen Krishna Ch 	EXYNOS_PIN_BANK_EINTG(4, 0x000, "gpr0", 0x00),
155150cea0cfSNaveen Krishna Ch 	EXYNOS_PIN_BANK_EINTG(8, 0x020, "gpr1", 0x04),
155250cea0cfSNaveen Krishna Ch 	EXYNOS_PIN_BANK_EINTG(5, 0x040, "gpr2", 0x08),
155350cea0cfSNaveen Krishna Ch 	EXYNOS_PIN_BANK_EINTG(8, 0x060, "gpr3", 0x0c),
155450cea0cfSNaveen Krishna Ch };
155550cea0cfSNaveen Krishna Ch 
1556d171cd02SVivek Gautam /* pin banks of exynos7 pin-controller - BUS1 */
1557d171cd02SVivek Gautam static const struct samsung_pin_bank_data exynos7_pin_banks8[] __initconst = {
1558d171cd02SVivek Gautam 	EXYNOS_PIN_BANK_EINTG(8, 0x020, "gpf0", 0x00),
1559d171cd02SVivek Gautam 	EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpf1", 0x04),
1560d171cd02SVivek Gautam 	EXYNOS_PIN_BANK_EINTG(4, 0x060, "gpf2", 0x08),
1561d171cd02SVivek Gautam 	EXYNOS_PIN_BANK_EINTG(5, 0x080, "gpf3", 0x0c),
1562d171cd02SVivek Gautam 	EXYNOS_PIN_BANK_EINTG(8, 0x0a0, "gpf4", 0x10),
1563d171cd02SVivek Gautam 	EXYNOS_PIN_BANK_EINTG(8, 0x0c0, "gpf5", 0x14),
1564d171cd02SVivek Gautam 	EXYNOS_PIN_BANK_EINTG(5, 0x0e0, "gpg1", 0x18),
1565d171cd02SVivek Gautam 	EXYNOS_PIN_BANK_EINTG(5, 0x100, "gpg2", 0x1c),
1566d171cd02SVivek Gautam 	EXYNOS_PIN_BANK_EINTG(6, 0x120, "gph1", 0x20),
1567d171cd02SVivek Gautam 	EXYNOS_PIN_BANK_EINTG(3, 0x140, "gpv6", 0x24),
1568d171cd02SVivek Gautam };
1569d171cd02SVivek Gautam 
1570ac5a186eSPadmavathi Venna static const struct samsung_pin_bank_data exynos7_pin_banks9[] __initconst = {
1571ac5a186eSPadmavathi Venna 	EXYNOS_PIN_BANK_EINTG(7, 0x000, "gpz0", 0x00),
1572ac5a186eSPadmavathi Venna 	EXYNOS_PIN_BANK_EINTG(4, 0x020, "gpz1", 0x04),
1573ac5a186eSPadmavathi Venna };
1574ac5a186eSPadmavathi Venna 
157550cea0cfSNaveen Krishna Ch const struct samsung_pin_ctrl exynos7_pin_ctrl[] __initconst = {
157650cea0cfSNaveen Krishna Ch 	{
157750cea0cfSNaveen Krishna Ch 		/* pin-controller instance 0 Alive data */
157850cea0cfSNaveen Krishna Ch 		.pin_banks	= exynos7_pin_banks0,
157950cea0cfSNaveen Krishna Ch 		.nr_banks	= ARRAY_SIZE(exynos7_pin_banks0),
158050cea0cfSNaveen Krishna Ch 		.eint_wkup_init = exynos_eint_wkup_init,
158150cea0cfSNaveen Krishna Ch 	}, {
158250cea0cfSNaveen Krishna Ch 		/* pin-controller instance 1 BUS0 data */
158350cea0cfSNaveen Krishna Ch 		.pin_banks	= exynos7_pin_banks1,
158450cea0cfSNaveen Krishna Ch 		.nr_banks	= ARRAY_SIZE(exynos7_pin_banks1),
158550cea0cfSNaveen Krishna Ch 		.eint_gpio_init = exynos_eint_gpio_init,
158650cea0cfSNaveen Krishna Ch 	}, {
158750cea0cfSNaveen Krishna Ch 		/* pin-controller instance 2 NFC data */
158850cea0cfSNaveen Krishna Ch 		.pin_banks	= exynos7_pin_banks2,
158950cea0cfSNaveen Krishna Ch 		.nr_banks	= ARRAY_SIZE(exynos7_pin_banks2),
159050cea0cfSNaveen Krishna Ch 		.eint_gpio_init = exynos_eint_gpio_init,
159150cea0cfSNaveen Krishna Ch 	}, {
159250cea0cfSNaveen Krishna Ch 		/* pin-controller instance 3 TOUCH data */
159350cea0cfSNaveen Krishna Ch 		.pin_banks	= exynos7_pin_banks3,
159450cea0cfSNaveen Krishna Ch 		.nr_banks	= ARRAY_SIZE(exynos7_pin_banks3),
159550cea0cfSNaveen Krishna Ch 		.eint_gpio_init = exynos_eint_gpio_init,
159650cea0cfSNaveen Krishna Ch 	}, {
159750cea0cfSNaveen Krishna Ch 		/* pin-controller instance 4 FF data */
159850cea0cfSNaveen Krishna Ch 		.pin_banks	= exynos7_pin_banks4,
159950cea0cfSNaveen Krishna Ch 		.nr_banks	= ARRAY_SIZE(exynos7_pin_banks4),
160050cea0cfSNaveen Krishna Ch 		.eint_gpio_init = exynos_eint_gpio_init,
160150cea0cfSNaveen Krishna Ch 	}, {
160250cea0cfSNaveen Krishna Ch 		/* pin-controller instance 5 ESE data */
160350cea0cfSNaveen Krishna Ch 		.pin_banks	= exynos7_pin_banks5,
160450cea0cfSNaveen Krishna Ch 		.nr_banks	= ARRAY_SIZE(exynos7_pin_banks5),
160550cea0cfSNaveen Krishna Ch 		.eint_gpio_init = exynos_eint_gpio_init,
160650cea0cfSNaveen Krishna Ch 	}, {
160750cea0cfSNaveen Krishna Ch 		/* pin-controller instance 6 FSYS0 data */
160850cea0cfSNaveen Krishna Ch 		.pin_banks	= exynos7_pin_banks6,
160950cea0cfSNaveen Krishna Ch 		.nr_banks	= ARRAY_SIZE(exynos7_pin_banks6),
161050cea0cfSNaveen Krishna Ch 		.eint_gpio_init = exynos_eint_gpio_init,
161150cea0cfSNaveen Krishna Ch 	}, {
161250cea0cfSNaveen Krishna Ch 		/* pin-controller instance 7 FSYS1 data */
161350cea0cfSNaveen Krishna Ch 		.pin_banks	= exynos7_pin_banks7,
161450cea0cfSNaveen Krishna Ch 		.nr_banks	= ARRAY_SIZE(exynos7_pin_banks7),
161550cea0cfSNaveen Krishna Ch 		.eint_gpio_init = exynos_eint_gpio_init,
1616d171cd02SVivek Gautam 	}, {
1617d171cd02SVivek Gautam 		/* pin-controller instance 8 BUS1 data */
1618d171cd02SVivek Gautam 		.pin_banks	= exynos7_pin_banks8,
1619d171cd02SVivek Gautam 		.nr_banks	= ARRAY_SIZE(exynos7_pin_banks8),
1620d171cd02SVivek Gautam 		.eint_gpio_init = exynos_eint_gpio_init,
1621ac5a186eSPadmavathi Venna 	}, {
1622ac5a186eSPadmavathi Venna 		/* pin-controller instance 9 AUD data */
1623ac5a186eSPadmavathi Venna 		.pin_banks	= exynos7_pin_banks9,
1624ac5a186eSPadmavathi Venna 		.nr_banks	= ARRAY_SIZE(exynos7_pin_banks9),
1625ac5a186eSPadmavathi Venna 		.eint_gpio_init = exynos_eint_gpio_init,
162650cea0cfSNaveen Krishna Ch 	},
162750cea0cfSNaveen Krishna Ch };
1628