linux/arch/arm/mach-at91/gpio.c
<<
>>
Prefs
   1/*
   2 * linux/arch/arm/mach-at91/gpio.c
   3 *
   4 * Copyright (C) 2005 HP Labs
   5 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License as published by
   8 * the Free Software Foundation; either version 2 of the License, or
   9 * (at your option) any later version.
  10 */
  11
  12#include <linux/clk.h>
  13#include <linux/errno.h>
  14#include <linux/device.h>
  15#include <linux/gpio.h>
  16#include <linux/interrupt.h>
  17#include <linux/irq.h>
  18#include <linux/debugfs.h>
  19#include <linux/seq_file.h>
  20#include <linux/kernel.h>
  21#include <linux/list.h>
  22#include <linux/module.h>
  23#include <linux/io.h>
  24#include <linux/irqdomain.h>
  25#include <linux/irqchip/chained_irq.h>
  26#include <linux/of_address.h>
  27
  28#include <mach/hardware.h>
  29#include <mach/at91_pio.h>
  30
  31#include "generic.h"
  32
  33#define MAX_NB_GPIO_PER_BANK    32
  34
  35struct at91_gpio_chip {
  36        struct gpio_chip        chip;
  37        struct at91_gpio_chip   *next;          /* Bank sharing same clock */
  38        int                     pioc_hwirq;     /* PIO bank interrupt identifier on AIC */
  39        int                     pioc_virq;      /* PIO bank Linux virtual interrupt */
  40        int                     pioc_idx;       /* PIO bank index */
  41        void __iomem            *regbase;       /* PIO bank virtual address */
  42        struct clk              *clock;         /* associated clock */
  43        struct irq_domain       *domain;        /* associated irq domain */
  44};
  45
  46#define to_at91_gpio_chip(c) container_of(c, struct at91_gpio_chip, chip)
  47
  48static int at91_gpiolib_request(struct gpio_chip *chip, unsigned offset);
  49static void at91_gpiolib_dbg_show(struct seq_file *s, struct gpio_chip *chip);
  50static void at91_gpiolib_set(struct gpio_chip *chip, unsigned offset, int val);
  51static int at91_gpiolib_get(struct gpio_chip *chip, unsigned offset);
  52static int at91_gpiolib_direction_output(struct gpio_chip *chip,
  53                                         unsigned offset, int val);
  54static int at91_gpiolib_direction_input(struct gpio_chip *chip,
  55                                        unsigned offset);
  56static int at91_gpiolib_to_irq(struct gpio_chip *chip, unsigned offset);
  57
  58#define AT91_GPIO_CHIP(name)                                            \
  59        {                                                               \
  60                .chip = {                                               \
  61                        .label            = name,                       \
  62                        .request          = at91_gpiolib_request,       \
  63                        .direction_input  = at91_gpiolib_direction_input, \
  64                        .direction_output = at91_gpiolib_direction_output, \
  65                        .get              = at91_gpiolib_get,           \
  66                        .set              = at91_gpiolib_set,           \
  67                        .dbg_show         = at91_gpiolib_dbg_show,      \
  68                        .to_irq           = at91_gpiolib_to_irq,        \
  69                        .ngpio            = MAX_NB_GPIO_PER_BANK,       \
  70                },                                                      \
  71        }
  72
  73static struct at91_gpio_chip gpio_chip[] = {
  74        AT91_GPIO_CHIP("pioA"),
  75        AT91_GPIO_CHIP("pioB"),
  76        AT91_GPIO_CHIP("pioC"),
  77        AT91_GPIO_CHIP("pioD"),
  78        AT91_GPIO_CHIP("pioE"),
  79};
  80
  81static int gpio_banks;
  82static unsigned long at91_gpio_caps;
  83
  84/* All PIO controllers support PIO3 features */
  85#define AT91_GPIO_CAP_PIO3      (1 <<  0)
  86
  87#define has_pio3()      (at91_gpio_caps & AT91_GPIO_CAP_PIO3)
  88
  89/*--------------------------------------------------------------------------*/
  90
  91static inline void __iomem *pin_to_controller(unsigned pin)
  92{
  93        pin /= MAX_NB_GPIO_PER_BANK;
  94        if (likely(pin < gpio_banks))
  95                return gpio_chip[pin].regbase;
  96
  97        return NULL;
  98}
  99
 100static inline unsigned pin_to_mask(unsigned pin)
 101{
 102        return 1 << (pin % MAX_NB_GPIO_PER_BANK);
 103}
 104
 105
 106static char peripheral_function(void __iomem *pio, unsigned mask)
 107{
 108        char    ret = 'X';
 109        u8      select;
 110
 111        if (pio) {
 112                if (has_pio3()) {
 113                        select = !!(__raw_readl(pio + PIO_ABCDSR1) & mask);
 114                        select |= (!!(__raw_readl(pio + PIO_ABCDSR2) & mask) << 1);
 115                        ret = 'A' + select;
 116                } else {
 117                        ret = __raw_readl(pio + PIO_ABSR) & mask ?
 118                                                        'B' : 'A';
 119                }
 120        }
 121
 122        return ret;
 123}
 124
 125/*--------------------------------------------------------------------------*/
 126
 127/* Not all hardware capabilities are exposed through these calls; they
 128 * only encapsulate the most common features and modes.  (So if you
 129 * want to change signals in groups, do it directly.)
 130 *
 131 * Bootloaders will usually handle some of the pin multiplexing setup.
 132 * The intent is certainly that by the time Linux is fully booted, all
 133 * pins should have been fully initialized.  These setup calls should
 134 * only be used by board setup routines, or possibly in driver probe().
 135 *
 136 * For bootloaders doing all that setup, these calls could be inlined
 137 * as NOPs so Linux won't duplicate any setup code
 138 */
 139
 140
 141/*
 142 * mux the pin to the "GPIO" peripheral role.
 143 */
 144int __init_or_module at91_set_GPIO_periph(unsigned pin, int use_pullup)
 145{
 146        void __iomem    *pio = pin_to_controller(pin);
 147        unsigned        mask = pin_to_mask(pin);
 148
 149        if (!pio)
 150                return -EINVAL;
 151        __raw_writel(mask, pio + PIO_IDR);
 152        __raw_writel(mask, pio + (use_pullup ? PIO_PUER : PIO_PUDR));
 153        __raw_writel(mask, pio + PIO_PER);
 154        return 0;
 155}
 156EXPORT_SYMBOL(at91_set_GPIO_periph);
 157
 158
 159/*
 160 * mux the pin to the "A" internal peripheral role.
 161 */
 162int __init_or_module at91_set_A_periph(unsigned pin, int use_pullup)
 163{
 164        void __iomem    *pio = pin_to_controller(pin);
 165        unsigned        mask = pin_to_mask(pin);
 166
 167        if (!pio)
 168                return -EINVAL;
 169
 170        __raw_writel(mask, pio + PIO_IDR);
 171        __raw_writel(mask, pio + (use_pullup ? PIO_PUER : PIO_PUDR));
 172        if (has_pio3()) {
 173                __raw_writel(__raw_readl(pio + PIO_ABCDSR1) & ~mask,
 174                                                        pio + PIO_ABCDSR1);
 175                __raw_writel(__raw_readl(pio + PIO_ABCDSR2) & ~mask,
 176                                                        pio + PIO_ABCDSR2);
 177        } else {
 178                __raw_writel(mask, pio + PIO_ASR);
 179        }
 180        __raw_writel(mask, pio + PIO_PDR);
 181        return 0;
 182}
 183EXPORT_SYMBOL(at91_set_A_periph);
 184
 185
 186/*
 187 * mux the pin to the "B" internal peripheral role.
 188 */
 189int __init_or_module at91_set_B_periph(unsigned pin, int use_pullup)
 190{
 191        void __iomem    *pio = pin_to_controller(pin);
 192        unsigned        mask = pin_to_mask(pin);
 193
 194        if (!pio)
 195                return -EINVAL;
 196
 197        __raw_writel(mask, pio + PIO_IDR);
 198        __raw_writel(mask, pio + (use_pullup ? PIO_PUER : PIO_PUDR));
 199        if (has_pio3()) {
 200                __raw_writel(__raw_readl(pio + PIO_ABCDSR1) | mask,
 201                                                        pio + PIO_ABCDSR1);
 202                __raw_writel(__raw_readl(pio + PIO_ABCDSR2) & ~mask,
 203                                                        pio + PIO_ABCDSR2);
 204        } else {
 205                __raw_writel(mask, pio + PIO_BSR);
 206        }
 207        __raw_writel(mask, pio + PIO_PDR);
 208        return 0;
 209}
 210EXPORT_SYMBOL(at91_set_B_periph);
 211
 212
 213/*
 214 * mux the pin to the "C" internal peripheral role.
 215 */
 216int __init_or_module at91_set_C_periph(unsigned pin, int use_pullup)
 217{
 218        void __iomem    *pio = pin_to_controller(pin);
 219        unsigned        mask = pin_to_mask(pin);
 220
 221        if (!pio || !has_pio3())
 222                return -EINVAL;
 223
 224        __raw_writel(mask, pio + PIO_IDR);
 225        __raw_writel(mask, pio + (use_pullup ? PIO_PUER : PIO_PUDR));
 226        __raw_writel(__raw_readl(pio + PIO_ABCDSR1) & ~mask, pio + PIO_ABCDSR1);
 227        __raw_writel(__raw_readl(pio + PIO_ABCDSR2) | mask, pio + PIO_ABCDSR2);
 228        __raw_writel(mask, pio + PIO_PDR);
 229        return 0;
 230}
 231EXPORT_SYMBOL(at91_set_C_periph);
 232
 233
 234/*
 235 * mux the pin to the "D" internal peripheral role.
 236 */
 237int __init_or_module at91_set_D_periph(unsigned pin, int use_pullup)
 238{
 239        void __iomem    *pio = pin_to_controller(pin);
 240        unsigned        mask = pin_to_mask(pin);
 241
 242        if (!pio || !has_pio3())
 243                return -EINVAL;
 244
 245        __raw_writel(mask, pio + PIO_IDR);
 246        __raw_writel(mask, pio + (use_pullup ? PIO_PUER : PIO_PUDR));
 247        __raw_writel(__raw_readl(pio + PIO_ABCDSR1) | mask, pio + PIO_ABCDSR1);
 248        __raw_writel(__raw_readl(pio + PIO_ABCDSR2) | mask, pio + PIO_ABCDSR2);
 249        __raw_writel(mask, pio + PIO_PDR);
 250        return 0;
 251}
 252EXPORT_SYMBOL(at91_set_D_periph);
 253
 254
 255/*
 256 * mux the pin to the gpio controller (instead of "A", "B", "C"
 257 * or "D" peripheral), and configure it for an input.
 258 */
 259int __init_or_module at91_set_gpio_input(unsigned pin, int use_pullup)
 260{
 261        void __iomem    *pio = pin_to_controller(pin);
 262        unsigned        mask = pin_to_mask(pin);
 263
 264        if (!pio)
 265                return -EINVAL;
 266
 267        __raw_writel(mask, pio + PIO_IDR);
 268        __raw_writel(mask, pio + (use_pullup ? PIO_PUER : PIO_PUDR));
 269        __raw_writel(mask, pio + PIO_ODR);
 270        __raw_writel(mask, pio + PIO_PER);
 271        return 0;
 272}
 273EXPORT_SYMBOL(at91_set_gpio_input);
 274
 275
 276/*
 277 * mux the pin to the gpio controller (instead of "A", "B", "C"
 278 * or "D" peripheral), and configure it for an output.
 279 */
 280int __init_or_module at91_set_gpio_output(unsigned pin, int value)
 281{
 282        void __iomem    *pio = pin_to_controller(pin);
 283        unsigned        mask = pin_to_mask(pin);
 284
 285        if (!pio)
 286                return -EINVAL;
 287
 288        __raw_writel(mask, pio + PIO_IDR);
 289        __raw_writel(mask, pio + PIO_PUDR);
 290        __raw_writel(mask, pio + (value ? PIO_SODR : PIO_CODR));
 291        __raw_writel(mask, pio + PIO_OER);
 292        __raw_writel(mask, pio + PIO_PER);
 293        return 0;
 294}
 295EXPORT_SYMBOL(at91_set_gpio_output);
 296
 297
 298/*
 299 * enable/disable the glitch filter; mostly used with IRQ handling.
 300 */
 301int __init_or_module at91_set_deglitch(unsigned pin, int is_on)
 302{
 303        void __iomem    *pio = pin_to_controller(pin);
 304        unsigned        mask = pin_to_mask(pin);
 305
 306        if (!pio)
 307                return -EINVAL;
 308
 309        if (has_pio3() && is_on)
 310                __raw_writel(mask, pio + PIO_IFSCDR);
 311        __raw_writel(mask, pio + (is_on ? PIO_IFER : PIO_IFDR));
 312        return 0;
 313}
 314EXPORT_SYMBOL(at91_set_deglitch);
 315
 316/*
 317 * enable/disable the debounce filter;
 318 */
 319int __init_or_module at91_set_debounce(unsigned pin, int is_on, int div)
 320{
 321        void __iomem    *pio = pin_to_controller(pin);
 322        unsigned        mask = pin_to_mask(pin);
 323
 324        if (!pio || !has_pio3())
 325                return -EINVAL;
 326
 327        if (is_on) {
 328                __raw_writel(mask, pio + PIO_IFSCER);
 329                __raw_writel(div & PIO_SCDR_DIV, pio + PIO_SCDR);
 330                __raw_writel(mask, pio + PIO_IFER);
 331        } else {
 332                __raw_writel(mask, pio + PIO_IFDR);
 333        }
 334        return 0;
 335}
 336EXPORT_SYMBOL(at91_set_debounce);
 337
 338/*
 339 * enable/disable the multi-driver; This is only valid for output and
 340 * allows the output pin to run as an open collector output.
 341 */
 342int __init_or_module at91_set_multi_drive(unsigned pin, int is_on)
 343{
 344        void __iomem    *pio = pin_to_controller(pin);
 345        unsigned        mask = pin_to_mask(pin);
 346
 347        if (!pio)
 348                return -EINVAL;
 349
 350        __raw_writel(mask, pio + (is_on ? PIO_MDER : PIO_MDDR));
 351        return 0;
 352}
 353EXPORT_SYMBOL(at91_set_multi_drive);
 354
 355/*
 356 * enable/disable the pull-down.
 357 * If pull-up already enabled while calling the function, we disable it.
 358 */
 359int __init_or_module at91_set_pulldown(unsigned pin, int is_on)
 360{
 361        void __iomem    *pio = pin_to_controller(pin);
 362        unsigned        mask = pin_to_mask(pin);
 363
 364        if (!pio || !has_pio3())
 365                return -EINVAL;
 366
 367        /* Disable pull-up anyway */
 368        __raw_writel(mask, pio + PIO_PUDR);
 369        __raw_writel(mask, pio + (is_on ? PIO_PPDER : PIO_PPDDR));
 370        return 0;
 371}
 372EXPORT_SYMBOL(at91_set_pulldown);
 373
 374/*
 375 * disable Schmitt trigger
 376 */
 377int __init_or_module at91_disable_schmitt_trig(unsigned pin)
 378{
 379        void __iomem    *pio = pin_to_controller(pin);
 380        unsigned        mask = pin_to_mask(pin);
 381
 382        if (!pio || !has_pio3())
 383                return -EINVAL;
 384
 385        __raw_writel(__raw_readl(pio + PIO_SCHMITT) | mask, pio + PIO_SCHMITT);
 386        return 0;
 387}
 388EXPORT_SYMBOL(at91_disable_schmitt_trig);
 389
 390/*
 391 * assuming the pin is muxed as a gpio output, set its value.
 392 */
 393int at91_set_gpio_value(unsigned pin, int value)
 394{
 395        void __iomem    *pio = pin_to_controller(pin);
 396        unsigned        mask = pin_to_mask(pin);
 397
 398        if (!pio)
 399                return -EINVAL;
 400        __raw_writel(mask, pio + (value ? PIO_SODR : PIO_CODR));
 401        return 0;
 402}
 403EXPORT_SYMBOL(at91_set_gpio_value);
 404
 405
 406/*
 407 * read the pin's value (works even if it's not muxed as a gpio).
 408 */
 409int at91_get_gpio_value(unsigned pin)
 410{
 411        void __iomem    *pio = pin_to_controller(pin);
 412        unsigned        mask = pin_to_mask(pin);
 413        u32             pdsr;
 414
 415        if (!pio)
 416                return -EINVAL;
 417        pdsr = __raw_readl(pio + PIO_PDSR);
 418        return (pdsr & mask) != 0;
 419}
 420EXPORT_SYMBOL(at91_get_gpio_value);
 421
 422/*--------------------------------------------------------------------------*/
 423
 424#ifdef CONFIG_PM
 425
 426static u32 wakeups[MAX_GPIO_BANKS];
 427static u32 backups[MAX_GPIO_BANKS];
 428
 429static int gpio_irq_set_wake(struct irq_data *d, unsigned state)
 430{
 431        struct at91_gpio_chip *at91_gpio = irq_data_get_irq_chip_data(d);
 432        unsigned        mask = 1 << d->hwirq;
 433        unsigned        bank = at91_gpio->pioc_idx;
 434
 435        if (unlikely(bank >= MAX_GPIO_BANKS))
 436                return -EINVAL;
 437
 438        if (state)
 439                wakeups[bank] |= mask;
 440        else
 441                wakeups[bank] &= ~mask;
 442
 443        irq_set_irq_wake(at91_gpio->pioc_virq, state);
 444
 445        return 0;
 446}
 447
 448void at91_gpio_suspend(void)
 449{
 450        int i;
 451
 452        for (i = 0; i < gpio_banks; i++) {
 453                void __iomem    *pio = gpio_chip[i].regbase;
 454
 455                backups[i] = __raw_readl(pio + PIO_IMR);
 456                __raw_writel(backups[i], pio + PIO_IDR);
 457                __raw_writel(wakeups[i], pio + PIO_IER);
 458
 459                if (!wakeups[i]) {
 460                        clk_unprepare(gpio_chip[i].clock);
 461                        clk_disable(gpio_chip[i].clock);
 462                } else {
 463#ifdef CONFIG_PM_DEBUG
 464                        printk(KERN_DEBUG "GPIO-%c may wake for %08x\n", 'A'+i, wakeups[i]);
 465#endif
 466                }
 467        }
 468}
 469
 470void at91_gpio_resume(void)
 471{
 472        int i;
 473
 474        for (i = 0; i < gpio_banks; i++) {
 475                void __iomem    *pio = gpio_chip[i].regbase;
 476
 477                if (!wakeups[i]) {
 478                        if (clk_prepare(gpio_chip[i].clock) == 0)
 479                                clk_enable(gpio_chip[i].clock);
 480                }
 481
 482                __raw_writel(wakeups[i], pio + PIO_IDR);
 483                __raw_writel(backups[i], pio + PIO_IER);
 484        }
 485}
 486
 487#else
 488#define gpio_irq_set_wake       NULL
 489#endif
 490
 491
 492/* Several AIC controller irqs are dispatched through this GPIO handler.
 493 * To use any AT91_PIN_* as an externally triggered IRQ, first call
 494 * at91_set_gpio_input() then maybe enable its glitch filter.
 495 * Then just request_irq() with the pin ID; it works like any ARM IRQ
 496 * handler.
 497 * First implementation always triggers on rising and falling edges
 498 * whereas the newer PIO3 can be additionally configured to trigger on
 499 * level, edge with any polarity.
 500 *
 501 * Alternatively, certain pins may be used directly as IRQ0..IRQ6 after
 502 * configuring them with at91_set_a_periph() or at91_set_b_periph().
 503 * IRQ0..IRQ6 should be configurable, e.g. level vs edge triggering.
 504 */
 505
 506static void gpio_irq_mask(struct irq_data *d)
 507{
 508        struct at91_gpio_chip *at91_gpio = irq_data_get_irq_chip_data(d);
 509        void __iomem    *pio = at91_gpio->regbase;
 510        unsigned        mask = 1 << d->hwirq;
 511
 512        if (pio)
 513                __raw_writel(mask, pio + PIO_IDR);
 514}
 515
 516static void gpio_irq_unmask(struct irq_data *d)
 517{
 518        struct at91_gpio_chip *at91_gpio = irq_data_get_irq_chip_data(d);
 519        void __iomem    *pio = at91_gpio->regbase;
 520        unsigned        mask = 1 << d->hwirq;
 521
 522        if (pio)
 523                __raw_writel(mask, pio + PIO_IER);
 524}
 525
 526static int gpio_irq_type(struct irq_data *d, unsigned type)
 527{
 528        switch (type) {
 529        case IRQ_TYPE_NONE:
 530        case IRQ_TYPE_EDGE_BOTH:
 531                return 0;
 532        default:
 533                return -EINVAL;
 534        }
 535}
 536
 537/* Alternate irq type for PIO3 support */
 538static int alt_gpio_irq_type(struct irq_data *d, unsigned type)
 539{
 540        struct at91_gpio_chip *at91_gpio = irq_data_get_irq_chip_data(d);
 541        void __iomem    *pio = at91_gpio->regbase;
 542        unsigned        mask = 1 << d->hwirq;
 543
 544        switch (type) {
 545        case IRQ_TYPE_EDGE_RISING:
 546                __raw_writel(mask, pio + PIO_ESR);
 547                __raw_writel(mask, pio + PIO_REHLSR);
 548                break;
 549        case IRQ_TYPE_EDGE_FALLING:
 550                __raw_writel(mask, pio + PIO_ESR);
 551                __raw_writel(mask, pio + PIO_FELLSR);
 552                break;
 553        case IRQ_TYPE_LEVEL_LOW:
 554                __raw_writel(mask, pio + PIO_LSR);
 555                __raw_writel(mask, pio + PIO_FELLSR);
 556                break;
 557        case IRQ_TYPE_LEVEL_HIGH:
 558                __raw_writel(mask, pio + PIO_LSR);
 559                __raw_writel(mask, pio + PIO_REHLSR);
 560                break;
 561        case IRQ_TYPE_EDGE_BOTH:
 562                /*
 563                 * disable additional interrupt modes:
 564                 * fall back to default behavior
 565                 */
 566                __raw_writel(mask, pio + PIO_AIMDR);
 567                return 0;
 568        case IRQ_TYPE_NONE:
 569        default:
 570                pr_warn("AT91: No type for irq %d\n", gpio_to_irq(d->irq));
 571                return -EINVAL;
 572        }
 573
 574        /* enable additional interrupt modes */
 575        __raw_writel(mask, pio + PIO_AIMER);
 576
 577        return 0;
 578}
 579
 580static struct irq_chip gpio_irqchip = {
 581        .name           = "GPIO",
 582        .irq_disable    = gpio_irq_mask,
 583        .irq_mask       = gpio_irq_mask,
 584        .irq_unmask     = gpio_irq_unmask,
 585        /* .irq_set_type is set dynamically */
 586        .irq_set_wake   = gpio_irq_set_wake,
 587};
 588
 589static void gpio_irq_handler(unsigned irq, struct irq_desc *desc)
 590{
 591        struct irq_chip *chip = irq_desc_get_chip(desc);
 592        struct irq_data *idata = irq_desc_get_irq_data(desc);
 593        struct at91_gpio_chip *at91_gpio = irq_data_get_irq_chip_data(idata);
 594        void __iomem    *pio = at91_gpio->regbase;
 595        unsigned long   isr;
 596        int             n;
 597
 598        chained_irq_enter(chip, desc);
 599        for (;;) {
 600                /* Reading ISR acks pending (edge triggered) GPIO interrupts.
 601                 * When there none are pending, we're finished unless we need
 602                 * to process multiple banks (like ID_PIOCDE on sam9263).
 603                 */
 604                isr = __raw_readl(pio + PIO_ISR) & __raw_readl(pio + PIO_IMR);
 605                if (!isr) {
 606                        if (!at91_gpio->next)
 607                                break;
 608                        at91_gpio = at91_gpio->next;
 609                        pio = at91_gpio->regbase;
 610                        continue;
 611                }
 612
 613                n = find_first_bit(&isr, BITS_PER_LONG);
 614                while (n < BITS_PER_LONG) {
 615                        generic_handle_irq(irq_find_mapping(at91_gpio->domain, n));
 616                        n = find_next_bit(&isr, BITS_PER_LONG, n + 1);
 617                }
 618        }
 619        chained_irq_exit(chip, desc);
 620        /* now it may re-trigger */
 621}
 622
 623/*--------------------------------------------------------------------------*/
 624
 625#ifdef CONFIG_DEBUG_FS
 626
 627static void gpio_printf(struct seq_file *s, void __iomem *pio, unsigned mask)
 628{
 629        char    *trigger = NULL;
 630        char    *polarity = NULL;
 631
 632        if (__raw_readl(pio + PIO_IMR) & mask) {
 633                if (!has_pio3() || !(__raw_readl(pio + PIO_AIMMR) & mask )) {
 634                        trigger = "edge";
 635                        polarity = "both";
 636                } else {
 637                        if (__raw_readl(pio + PIO_ELSR) & mask) {
 638                                trigger = "level";
 639                                polarity = __raw_readl(pio + PIO_FRLHSR) & mask ?
 640                                        "high" : "low";
 641                        } else {
 642                                trigger = "edge";
 643                                polarity = __raw_readl(pio + PIO_FRLHSR) & mask ?
 644                                                "rising" : "falling";
 645                        }
 646                }
 647                seq_printf(s, "IRQ:%s-%s\t", trigger, polarity);
 648        } else {
 649                seq_printf(s, "GPIO:%s\t\t",
 650                                __raw_readl(pio + PIO_PDSR) & mask ? "1" : "0");
 651        }
 652}
 653
 654static int at91_gpio_show(struct seq_file *s, void *unused)
 655{
 656        int bank, j;
 657
 658        /* print heading */
 659        seq_printf(s, "Pin\t");
 660        for (bank = 0; bank < gpio_banks; bank++) {
 661                seq_printf(s, "PIO%c\t\t", 'A' + bank);
 662        };
 663        seq_printf(s, "\n\n");
 664
 665        /* print pin status */
 666        for (j = 0; j < 32; j++) {
 667                seq_printf(s, "%i:\t", j);
 668
 669                for (bank = 0; bank < gpio_banks; bank++) {
 670                        unsigned        pin  = (32 * bank) + j;
 671                        void __iomem    *pio = pin_to_controller(pin);
 672                        unsigned        mask = pin_to_mask(pin);
 673
 674                        if (__raw_readl(pio + PIO_PSR) & mask)
 675                                gpio_printf(s, pio, mask);
 676                        else
 677                                seq_printf(s, "%c\t\t",
 678                                                peripheral_function(pio, mask));
 679                }
 680
 681                seq_printf(s, "\n");
 682        }
 683
 684        return 0;
 685}
 686
 687static int at91_gpio_open(struct inode *inode, struct file *file)
 688{
 689        return single_open(file, at91_gpio_show, NULL);
 690}
 691
 692static const struct file_operations at91_gpio_operations = {
 693        .open           = at91_gpio_open,
 694        .read           = seq_read,
 695        .llseek         = seq_lseek,
 696        .release        = single_release,
 697};
 698
 699static int __init at91_gpio_debugfs_init(void)
 700{
 701        /* /sys/kernel/debug/at91_gpio */
 702        (void) debugfs_create_file("at91_gpio", S_IFREG | S_IRUGO, NULL, NULL, &at91_gpio_operations);
 703        return 0;
 704}
 705postcore_initcall(at91_gpio_debugfs_init);
 706
 707#endif
 708
 709/*--------------------------------------------------------------------------*/
 710
 711/*
 712 * This lock class tells lockdep that GPIO irqs are in a different
 713 * category than their parents, so it won't report false recursion.
 714 */
 715static struct lock_class_key gpio_lock_class;
 716
 717/*
 718 * irqdomain initialization: pile up irqdomains on top of AIC range
 719 */
 720static void __init at91_gpio_irqdomain(struct at91_gpio_chip *at91_gpio)
 721{
 722        int irq_base;
 723
 724        irq_base = irq_alloc_descs(-1, 0, at91_gpio->chip.ngpio, 0);
 725        if (irq_base < 0)
 726                panic("at91_gpio.%d: error %d: couldn't allocate IRQ numbers.\n",
 727                        at91_gpio->pioc_idx, irq_base);
 728        at91_gpio->domain = irq_domain_add_legacy(NULL, at91_gpio->chip.ngpio,
 729                                                  irq_base, 0,
 730                                                  &irq_domain_simple_ops, NULL);
 731        if (!at91_gpio->domain)
 732                panic("at91_gpio.%d: couldn't allocate irq domain.\n",
 733                        at91_gpio->pioc_idx);
 734}
 735
 736/*
 737 * Called from the processor-specific init to enable GPIO interrupt support.
 738 */
 739void __init at91_gpio_irq_setup(void)
 740{
 741        unsigned                pioc;
 742        int                     gpio_irqnbr = 0;
 743        struct at91_gpio_chip   *this, *prev;
 744
 745        /* Setup proper .irq_set_type function */
 746        if (has_pio3())
 747                gpio_irqchip.irq_set_type = alt_gpio_irq_type;
 748        else
 749                gpio_irqchip.irq_set_type = gpio_irq_type;
 750
 751        for (pioc = 0, this = gpio_chip, prev = NULL;
 752                        pioc++ < gpio_banks;
 753                        prev = this, this++) {
 754                int offset;
 755
 756                __raw_writel(~0, this->regbase + PIO_IDR);
 757
 758                /* setup irq domain for this GPIO controller */
 759                at91_gpio_irqdomain(this);
 760
 761                for (offset = 0; offset < this->chip.ngpio; offset++) {
 762                        unsigned int virq = irq_find_mapping(this->domain, offset);
 763                        irq_set_lockdep_class(virq, &gpio_lock_class);
 764
 765                        /*
 766                         * Can use the "simple" and not "edge" handler since it's
 767                         * shorter, and the AIC handles interrupts sanely.
 768                         */
 769                        irq_set_chip_and_handler(virq, &gpio_irqchip,
 770                                                 handle_simple_irq);
 771                        set_irq_flags(virq, IRQF_VALID);
 772                        irq_set_chip_data(virq, this);
 773
 774                        gpio_irqnbr++;
 775                }
 776
 777                /* The toplevel handler handles one bank of GPIOs, except
 778                 * on some SoC it can handles up to three...
 779                 * We only set up the handler for the first of the list.
 780                 */
 781                if (prev && prev->next == this)
 782                        continue;
 783
 784                this->pioc_virq = irq_create_mapping(NULL, this->pioc_hwirq);
 785                irq_set_chip_data(this->pioc_virq, this);
 786                irq_set_chained_handler(this->pioc_virq, gpio_irq_handler);
 787        }
 788        pr_info("AT91: %d gpio irqs in %d banks\n", gpio_irqnbr, gpio_banks);
 789}
 790
 791/* gpiolib support */
 792static int at91_gpiolib_request(struct gpio_chip *chip, unsigned offset)
 793{
 794        struct at91_gpio_chip *at91_gpio = to_at91_gpio_chip(chip);
 795        void __iomem *pio = at91_gpio->regbase;
 796        unsigned mask = 1 << offset;
 797
 798        __raw_writel(mask, pio + PIO_PER);
 799        return 0;
 800}
 801
 802static int at91_gpiolib_direction_input(struct gpio_chip *chip,
 803                                        unsigned offset)
 804{
 805        struct at91_gpio_chip *at91_gpio = to_at91_gpio_chip(chip);
 806        void __iomem *pio = at91_gpio->regbase;
 807        unsigned mask = 1 << offset;
 808
 809        __raw_writel(mask, pio + PIO_ODR);
 810        return 0;
 811}
 812
 813static int at91_gpiolib_direction_output(struct gpio_chip *chip,
 814                                         unsigned offset, int val)
 815{
 816        struct at91_gpio_chip *at91_gpio = to_at91_gpio_chip(chip);
 817        void __iomem *pio = at91_gpio->regbase;
 818        unsigned mask = 1 << offset;
 819
 820        __raw_writel(mask, pio + (val ? PIO_SODR : PIO_CODR));
 821        __raw_writel(mask, pio + PIO_OER);
 822        return 0;
 823}
 824
 825static int at91_gpiolib_get(struct gpio_chip *chip, unsigned offset)
 826{
 827        struct at91_gpio_chip *at91_gpio = to_at91_gpio_chip(chip);
 828        void __iomem *pio = at91_gpio->regbase;
 829        unsigned mask = 1 << offset;
 830        u32 pdsr;
 831
 832        pdsr = __raw_readl(pio + PIO_PDSR);
 833        return (pdsr & mask) != 0;
 834}
 835
 836static void at91_gpiolib_set(struct gpio_chip *chip, unsigned offset, int val)
 837{
 838        struct at91_gpio_chip *at91_gpio = to_at91_gpio_chip(chip);
 839        void __iomem *pio = at91_gpio->regbase;
 840        unsigned mask = 1 << offset;
 841
 842        __raw_writel(mask, pio + (val ? PIO_SODR : PIO_CODR));
 843}
 844
 845static void at91_gpiolib_dbg_show(struct seq_file *s, struct gpio_chip *chip)
 846{
 847        int i;
 848
 849        for (i = 0; i < chip->ngpio; i++) {
 850                unsigned pin = chip->base + i;
 851                void __iomem *pio = pin_to_controller(pin);
 852                unsigned mask = pin_to_mask(pin);
 853                const char *gpio_label;
 854
 855                gpio_label = gpiochip_is_requested(chip, i);
 856                if (gpio_label) {
 857                        seq_printf(s, "[%s] GPIO%s%d: ",
 858                                   gpio_label, chip->label, i);
 859                        if (__raw_readl(pio + PIO_PSR) & mask)
 860                                seq_printf(s, "[gpio] %s\n",
 861                                           at91_get_gpio_value(pin) ?
 862                                           "set" : "clear");
 863                        else
 864                                seq_printf(s, "[periph %c]\n",
 865                                           peripheral_function(pio, mask));
 866                }
 867        }
 868}
 869
 870static int at91_gpiolib_to_irq(struct gpio_chip *chip, unsigned offset)
 871{
 872        struct at91_gpio_chip *at91_gpio = to_at91_gpio_chip(chip);
 873        int virq;
 874
 875        if (offset < chip->ngpio)
 876                virq = irq_create_mapping(at91_gpio->domain, offset);
 877        else
 878                virq = -ENXIO;
 879
 880        dev_dbg(chip->dev, "%s: request IRQ for GPIO %d, return %d\n",
 881                                chip->label, offset + chip->base, virq);
 882        return virq;
 883}
 884
 885static int __init at91_gpio_setup_clk(int idx)
 886{
 887        struct at91_gpio_chip *at91_gpio = &gpio_chip[idx];
 888
 889        /* retreive PIO controller's clock */
 890        at91_gpio->clock = clk_get_sys(NULL, at91_gpio->chip.label);
 891        if (IS_ERR(at91_gpio->clock)) {
 892                pr_err("at91_gpio.%d, failed to get clock, ignoring.\n", idx);
 893                goto err;
 894        }
 895
 896        if (clk_prepare(at91_gpio->clock))
 897                goto clk_prep_err;
 898
 899        /* enable PIO controller's clock */
 900        if (clk_enable(at91_gpio->clock)) {
 901                pr_err("at91_gpio.%d, failed to enable clock, ignoring.\n", idx);
 902                goto clk_err;
 903        }
 904
 905        return 0;
 906
 907clk_err:
 908        clk_unprepare(at91_gpio->clock);
 909clk_prep_err:
 910        clk_put(at91_gpio->clock);
 911err:
 912        return -EINVAL;
 913}
 914
 915static void __init at91_gpio_init_one(int idx, u32 regbase, int pioc_hwirq)
 916{
 917        struct at91_gpio_chip *at91_gpio = &gpio_chip[idx];
 918
 919        at91_gpio->chip.base = idx * MAX_NB_GPIO_PER_BANK;
 920        at91_gpio->pioc_hwirq = pioc_hwirq;
 921        at91_gpio->pioc_idx = idx;
 922
 923        at91_gpio->regbase = ioremap(regbase, 512);
 924        if (!at91_gpio->regbase) {
 925                pr_err("at91_gpio.%d, failed to map registers, ignoring.\n", idx);
 926                return;
 927        }
 928
 929        if (at91_gpio_setup_clk(idx))
 930                goto ioremap_err;
 931
 932        gpio_banks = max(gpio_banks, idx + 1);
 933        return;
 934
 935ioremap_err:
 936        iounmap(at91_gpio->regbase);
 937}
 938
 939/*
 940 * Called from the processor-specific init to enable GPIO pin support.
 941 */
 942void __init at91_gpio_init(struct at91_gpio_bank *data, int nr_banks)
 943{
 944        unsigned i;
 945        struct at91_gpio_chip *at91_gpio, *last = NULL;
 946
 947        BUG_ON(nr_banks > MAX_GPIO_BANKS);
 948
 949        if (of_have_populated_dt())
 950                return;
 951
 952        for (i = 0; i < nr_banks; i++)
 953                at91_gpio_init_one(i, data[i].regbase, data[i].id);
 954
 955        for (i = 0; i < gpio_banks; i++) {
 956                at91_gpio = &gpio_chip[i];
 957
 958                /*
 959                 * GPIO controller are grouped on some SoC:
 960                 * PIOC, PIOD and PIOE can share the same IRQ line
 961                 */
 962                if (last && last->pioc_hwirq == at91_gpio->pioc_hwirq)
 963                        last->next = at91_gpio;
 964                last = at91_gpio;
 965
 966                gpiochip_add(&at91_gpio->chip);
 967        }
 968}
 969