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