linux/drivers/gpio/gpiolib.c
<<
>>
Prefs
   1#include <linux/kernel.h>
   2#include <linux/module.h>
   3#include <linux/interrupt.h>
   4#include <linux/irq.h>
   5#include <linux/spinlock.h>
   6#include <linux/list.h>
   7#include <linux/device.h>
   8#include <linux/err.h>
   9#include <linux/debugfs.h>
  10#include <linux/seq_file.h>
  11#include <linux/gpio.h>
  12#include <linux/of_gpio.h>
  13#include <linux/idr.h>
  14#include <linux/slab.h>
  15
  16#define CREATE_TRACE_POINTS
  17#include <trace/events/gpio.h>
  18
  19/* Optional implementation infrastructure for GPIO interfaces.
  20 *
  21 * Platforms may want to use this if they tend to use very many GPIOs
  22 * that aren't part of a System-On-Chip core; or across I2C/SPI/etc.
  23 *
  24 * When kernel footprint or instruction count is an issue, simpler
  25 * implementations may be preferred.  The GPIO programming interface
  26 * allows for inlining speed-critical get/set operations for common
  27 * cases, so that access to SOC-integrated GPIOs can sometimes cost
  28 * only an instruction or two per bit.
  29 */
  30
  31
  32/* When debugging, extend minimal trust to callers and platform code.
  33 * Also emit diagnostic messages that may help initial bringup, when
  34 * board setup or driver bugs are most common.
  35 *
  36 * Otherwise, minimize overhead in what may be bitbanging codepaths.
  37 */
  38#ifdef  DEBUG
  39#define extra_checks    1
  40#else
  41#define extra_checks    0
  42#endif
  43
  44/* gpio_lock prevents conflicts during gpio_desc[] table updates.
  45 * While any GPIO is requested, its gpio_chip is not removable;
  46 * each GPIO's "requested" flag serves as a lock and refcount.
  47 */
  48static DEFINE_SPINLOCK(gpio_lock);
  49
  50struct gpio_desc {
  51        struct gpio_chip        *chip;
  52        unsigned long           flags;
  53/* flag symbols are bit numbers */
  54#define FLAG_REQUESTED  0
  55#define FLAG_IS_OUT     1
  56#define FLAG_EXPORT     2       /* protected by sysfs_lock */
  57#define FLAG_SYSFS      3       /* exported via /sys/class/gpio/control */
  58#define FLAG_TRIG_FALL  4       /* trigger on falling edge */
  59#define FLAG_TRIG_RISE  5       /* trigger on rising edge */
  60#define FLAG_ACTIVE_LOW 6       /* sysfs value has active low */
  61#define FLAG_OPEN_DRAIN 7       /* Gpio is open drain type */
  62#define FLAG_OPEN_SOURCE 8      /* Gpio is open source type */
  63
  64#define ID_SHIFT        16      /* add new flags before this one */
  65
  66#define GPIO_FLAGS_MASK         ((1 << ID_SHIFT) - 1)
  67#define GPIO_TRIGGER_MASK       (BIT(FLAG_TRIG_FALL) | BIT(FLAG_TRIG_RISE))
  68
  69#ifdef CONFIG_DEBUG_FS
  70        const char              *label;
  71#endif
  72};
  73static struct gpio_desc gpio_desc[ARCH_NR_GPIOS];
  74
  75#define GPIO_OFFSET_VALID(chip, offset) (offset >= 0 && offset < chip->ngpio)
  76
  77static LIST_HEAD(gpio_chips);
  78
  79#ifdef CONFIG_GPIO_SYSFS
  80static DEFINE_IDR(dirent_idr);
  81#endif
  82
  83/*
  84 * Internal gpiod_* API using descriptors instead of the integer namespace.
  85 * Most of this should eventually go public.
  86 */
  87static int gpiod_request(struct gpio_desc *desc, const char *label);
  88static void gpiod_free(struct gpio_desc *desc);
  89static int gpiod_direction_input(struct gpio_desc *desc);
  90static int gpiod_direction_output(struct gpio_desc *desc, int value);
  91static int gpiod_get_direction(const struct gpio_desc *desc);
  92static int gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce);
  93static int gpiod_get_value_cansleep(const struct gpio_desc *desc);
  94static void gpiod_set_value_cansleep(struct gpio_desc *desc, int value);
  95static int gpiod_get_value(const struct gpio_desc *desc);
  96static void gpiod_set_value(struct gpio_desc *desc, int value);
  97static int gpiod_cansleep(const struct gpio_desc *desc);
  98static int gpiod_to_irq(const struct gpio_desc *desc);
  99static int gpiod_export(struct gpio_desc *desc, bool direction_may_change);
 100static int gpiod_export_link(struct device *dev, const char *name,
 101                             struct gpio_desc *desc);
 102static int gpiod_sysfs_set_active_low(struct gpio_desc *desc, int value);
 103static void gpiod_unexport(struct gpio_desc *desc);
 104
 105
 106static inline void desc_set_label(struct gpio_desc *d, const char *label)
 107{
 108#ifdef CONFIG_DEBUG_FS
 109        d->label = label;
 110#endif
 111}
 112
 113/*
 114 * Return the GPIO number of the passed descriptor relative to its chip
 115 */
 116static int gpio_chip_hwgpio(const struct gpio_desc *desc)
 117{
 118        return desc - &desc->chip->desc[0];
 119}
 120
 121/**
 122 * Convert a GPIO number to its descriptor
 123 */
 124static struct gpio_desc *gpio_to_desc(unsigned gpio)
 125{
 126        if (WARN(!gpio_is_valid(gpio), "invalid GPIO %d\n", gpio))
 127                return NULL;
 128        else
 129                return &gpio_desc[gpio];
 130}
 131
 132/**
 133 * Convert a GPIO descriptor to the integer namespace.
 134 * This should disappear in the future but is needed since we still
 135 * use GPIO numbers for error messages and sysfs nodes
 136 */
 137static int desc_to_gpio(const struct gpio_desc *desc)
 138{
 139        return desc - &gpio_desc[0];
 140}
 141
 142
 143/* Warn when drivers omit gpio_request() calls -- legal but ill-advised
 144 * when setting direction, and otherwise illegal.  Until board setup code
 145 * and drivers use explicit requests everywhere (which won't happen when
 146 * those calls have no teeth) we can't avoid autorequesting.  This nag
 147 * message should motivate switching to explicit requests... so should
 148 * the weaker cleanup after faults, compared to gpio_request().
 149 *
 150 * NOTE: the autorequest mechanism is going away; at this point it's
 151 * only "legal" in the sense that (old) code using it won't break yet,
 152 * but instead only triggers a WARN() stack dump.
 153 */
 154static int gpio_ensure_requested(struct gpio_desc *desc)
 155{
 156        const struct gpio_chip *chip = desc->chip;
 157        const int gpio = desc_to_gpio(desc);
 158
 159        if (WARN(test_and_set_bit(FLAG_REQUESTED, &desc->flags) == 0,
 160                        "autorequest GPIO-%d\n", gpio)) {
 161                if (!try_module_get(chip->owner)) {
 162                        pr_err("GPIO-%d: module can't be gotten \n", gpio);
 163                        clear_bit(FLAG_REQUESTED, &desc->flags);
 164                        /* lose */
 165                        return -EIO;
 166                }
 167                desc_set_label(desc, "[auto]");
 168                /* caller must chip->request() w/o spinlock */
 169                if (chip->request)
 170                        return 1;
 171        }
 172        return 0;
 173}
 174
 175static struct gpio_chip *gpiod_to_chip(const struct gpio_desc *desc)
 176{
 177        return desc ? desc->chip : NULL;
 178}
 179
 180/* caller holds gpio_lock *OR* gpio is marked as requested */
 181struct gpio_chip *gpio_to_chip(unsigned gpio)
 182{
 183        return gpiod_to_chip(gpio_to_desc(gpio));
 184}
 185
 186/* dynamic allocation of GPIOs, e.g. on a hotplugged device */
 187static int gpiochip_find_base(int ngpio)
 188{
 189        struct gpio_chip *chip;
 190        int base = ARCH_NR_GPIOS - ngpio;
 191
 192        list_for_each_entry_reverse(chip, &gpio_chips, list) {
 193                /* found a free space? */
 194                if (chip->base + chip->ngpio <= base)
 195                        break;
 196                else
 197                        /* nope, check the space right before the chip */
 198                        base = chip->base - ngpio;
 199        }
 200
 201        if (gpio_is_valid(base)) {
 202                pr_debug("%s: found new base at %d\n", __func__, base);
 203                return base;
 204        } else {
 205                pr_err("%s: cannot find free range\n", __func__);
 206                return -ENOSPC;
 207        }
 208}
 209
 210/* caller ensures gpio is valid and requested, chip->get_direction may sleep  */
 211static int gpiod_get_direction(const struct gpio_desc *desc)
 212{
 213        struct gpio_chip        *chip;
 214        unsigned                offset;
 215        int                     status = -EINVAL;
 216
 217        chip = gpiod_to_chip(desc);
 218        offset = gpio_chip_hwgpio(desc);
 219
 220        if (!chip->get_direction)
 221                return status;
 222
 223        status = chip->get_direction(chip, offset);
 224        if (status > 0) {
 225                /* GPIOF_DIR_IN, or other positive */
 226                status = 1;
 227                /* FLAG_IS_OUT is just a cache of the result of get_direction(),
 228                 * so it does not affect constness per se */
 229                clear_bit(FLAG_IS_OUT, &((struct gpio_desc *)desc)->flags);
 230        }
 231        if (status == 0) {
 232                /* GPIOF_DIR_OUT */
 233                set_bit(FLAG_IS_OUT, &((struct gpio_desc *)desc)->flags);
 234        }
 235        return status;
 236}
 237
 238#ifdef CONFIG_GPIO_SYSFS
 239
 240/* lock protects against unexport_gpio() being called while
 241 * sysfs files are active.
 242 */
 243static DEFINE_MUTEX(sysfs_lock);
 244
 245/*
 246 * /sys/class/gpio/gpioN... only for GPIOs that are exported
 247 *   /direction
 248 *      * MAY BE OMITTED if kernel won't allow direction changes
 249 *      * is read/write as "in" or "out"
 250 *      * may also be written as "high" or "low", initializing
 251 *        output value as specified ("out" implies "low")
 252 *   /value
 253 *      * always readable, subject to hardware behavior
 254 *      * may be writable, as zero/nonzero
 255 *   /edge
 256 *      * configures behavior of poll(2) on /value
 257 *      * available only if pin can generate IRQs on input
 258 *      * is read/write as "none", "falling", "rising", or "both"
 259 *   /active_low
 260 *      * configures polarity of /value
 261 *      * is read/write as zero/nonzero
 262 *      * also affects existing and subsequent "falling" and "rising"
 263 *        /edge configuration
 264 */
 265
 266static ssize_t gpio_direction_show(struct device *dev,
 267                struct device_attribute *attr, char *buf)
 268{
 269        const struct gpio_desc  *desc = dev_get_drvdata(dev);
 270        ssize_t                 status;
 271
 272        mutex_lock(&sysfs_lock);
 273
 274        if (!test_bit(FLAG_EXPORT, &desc->flags)) {
 275                status = -EIO;
 276        } else {
 277                gpiod_get_direction(desc);
 278                status = sprintf(buf, "%s\n",
 279                        test_bit(FLAG_IS_OUT, &desc->flags)
 280                                ? "out" : "in");
 281        }
 282
 283        mutex_unlock(&sysfs_lock);
 284        return status;
 285}
 286
 287static ssize_t gpio_direction_store(struct device *dev,
 288                struct device_attribute *attr, const char *buf, size_t size)
 289{
 290        struct gpio_desc        *desc = dev_get_drvdata(dev);
 291        ssize_t                 status;
 292
 293        mutex_lock(&sysfs_lock);
 294
 295        if (!test_bit(FLAG_EXPORT, &desc->flags))
 296                status = -EIO;
 297        else if (sysfs_streq(buf, "high"))
 298                status = gpiod_direction_output(desc, 1);
 299        else if (sysfs_streq(buf, "out") || sysfs_streq(buf, "low"))
 300                status = gpiod_direction_output(desc, 0);
 301        else if (sysfs_streq(buf, "in"))
 302                status = gpiod_direction_input(desc);
 303        else
 304                status = -EINVAL;
 305
 306        mutex_unlock(&sysfs_lock);
 307        return status ? : size;
 308}
 309
 310static /* const */ DEVICE_ATTR(direction, 0644,
 311                gpio_direction_show, gpio_direction_store);
 312
 313static ssize_t gpio_value_show(struct device *dev,
 314                struct device_attribute *attr, char *buf)
 315{
 316        struct gpio_desc        *desc = dev_get_drvdata(dev);
 317        ssize_t                 status;
 318
 319        mutex_lock(&sysfs_lock);
 320
 321        if (!test_bit(FLAG_EXPORT, &desc->flags)) {
 322                status = -EIO;
 323        } else {
 324                int value;
 325
 326                value = !!gpiod_get_value_cansleep(desc);
 327                if (test_bit(FLAG_ACTIVE_LOW, &desc->flags))
 328                        value = !value;
 329
 330                status = sprintf(buf, "%d\n", value);
 331        }
 332
 333        mutex_unlock(&sysfs_lock);
 334        return status;
 335}
 336
 337static ssize_t gpio_value_store(struct device *dev,
 338                struct device_attribute *attr, const char *buf, size_t size)
 339{
 340        struct gpio_desc        *desc = dev_get_drvdata(dev);
 341        ssize_t                 status;
 342
 343        mutex_lock(&sysfs_lock);
 344
 345        if (!test_bit(FLAG_EXPORT, &desc->flags))
 346                status = -EIO;
 347        else if (!test_bit(FLAG_IS_OUT, &desc->flags))
 348                status = -EPERM;
 349        else {
 350                long            value;
 351
 352                status = kstrtol(buf, 0, &value);
 353                if (status == 0) {
 354                        if (test_bit(FLAG_ACTIVE_LOW, &desc->flags))
 355                                value = !value;
 356                        gpiod_set_value_cansleep(desc, value != 0);
 357                        status = size;
 358                }
 359        }
 360
 361        mutex_unlock(&sysfs_lock);
 362        return status;
 363}
 364
 365static const DEVICE_ATTR(value, 0644,
 366                gpio_value_show, gpio_value_store);
 367
 368static irqreturn_t gpio_sysfs_irq(int irq, void *priv)
 369{
 370        struct sysfs_dirent     *value_sd = priv;
 371
 372        sysfs_notify_dirent(value_sd);
 373        return IRQ_HANDLED;
 374}
 375
 376static int gpio_setup_irq(struct gpio_desc *desc, struct device *dev,
 377                unsigned long gpio_flags)
 378{
 379        struct sysfs_dirent     *value_sd;
 380        unsigned long           irq_flags;
 381        int                     ret, irq, id;
 382
 383        if ((desc->flags & GPIO_TRIGGER_MASK) == gpio_flags)
 384                return 0;
 385
 386        irq = gpiod_to_irq(desc);
 387        if (irq < 0)
 388                return -EIO;
 389
 390        id = desc->flags >> ID_SHIFT;
 391        value_sd = idr_find(&dirent_idr, id);
 392        if (value_sd)
 393                free_irq(irq, value_sd);
 394
 395        desc->flags &= ~GPIO_TRIGGER_MASK;
 396
 397        if (!gpio_flags) {
 398                ret = 0;
 399                goto free_id;
 400        }
 401
 402        irq_flags = IRQF_SHARED;
 403        if (test_bit(FLAG_TRIG_FALL, &gpio_flags))
 404                irq_flags |= test_bit(FLAG_ACTIVE_LOW, &desc->flags) ?
 405                        IRQF_TRIGGER_RISING : IRQF_TRIGGER_FALLING;
 406        if (test_bit(FLAG_TRIG_RISE, &gpio_flags))
 407                irq_flags |= test_bit(FLAG_ACTIVE_LOW, &desc->flags) ?
 408                        IRQF_TRIGGER_FALLING : IRQF_TRIGGER_RISING;
 409
 410        if (!value_sd) {
 411                value_sd = sysfs_get_dirent(dev->kobj.sd, NULL, "value");
 412                if (!value_sd) {
 413                        ret = -ENODEV;
 414                        goto err_out;
 415                }
 416
 417                ret = idr_alloc(&dirent_idr, value_sd, 1, 0, GFP_KERNEL);
 418                if (ret < 0)
 419                        goto free_sd;
 420                id = ret;
 421
 422                desc->flags &= GPIO_FLAGS_MASK;
 423                desc->flags |= (unsigned long)id << ID_SHIFT;
 424
 425                if (desc->flags >> ID_SHIFT != id) {
 426                        ret = -ERANGE;
 427                        goto free_id;
 428                }
 429        }
 430
 431        ret = request_any_context_irq(irq, gpio_sysfs_irq, irq_flags,
 432                                "gpiolib", value_sd);
 433        if (ret < 0)
 434                goto free_id;
 435
 436        desc->flags |= gpio_flags;
 437        return 0;
 438
 439free_id:
 440        idr_remove(&dirent_idr, id);
 441        desc->flags &= GPIO_FLAGS_MASK;
 442free_sd:
 443        if (value_sd)
 444                sysfs_put(value_sd);
 445err_out:
 446        return ret;
 447}
 448
 449static const struct {
 450        const char *name;
 451        unsigned long flags;
 452} trigger_types[] = {
 453        { "none",    0 },
 454        { "falling", BIT(FLAG_TRIG_FALL) },
 455        { "rising",  BIT(FLAG_TRIG_RISE) },
 456        { "both",    BIT(FLAG_TRIG_FALL) | BIT(FLAG_TRIG_RISE) },
 457};
 458
 459static ssize_t gpio_edge_show(struct device *dev,
 460                struct device_attribute *attr, char *buf)
 461{
 462        const struct gpio_desc  *desc = dev_get_drvdata(dev);
 463        ssize_t                 status;
 464
 465        mutex_lock(&sysfs_lock);
 466
 467        if (!test_bit(FLAG_EXPORT, &desc->flags))
 468                status = -EIO;
 469        else {
 470                int i;
 471
 472                status = 0;
 473                for (i = 0; i < ARRAY_SIZE(trigger_types); i++)
 474                        if ((desc->flags & GPIO_TRIGGER_MASK)
 475                                        == trigger_types[i].flags) {
 476                                status = sprintf(buf, "%s\n",
 477                                                 trigger_types[i].name);
 478                                break;
 479                        }
 480        }
 481
 482        mutex_unlock(&sysfs_lock);
 483        return status;
 484}
 485
 486static ssize_t gpio_edge_store(struct device *dev,
 487                struct device_attribute *attr, const char *buf, size_t size)
 488{
 489        struct gpio_desc        *desc = dev_get_drvdata(dev);
 490        ssize_t                 status;
 491        int                     i;
 492
 493        for (i = 0; i < ARRAY_SIZE(trigger_types); i++)
 494                if (sysfs_streq(trigger_types[i].name, buf))
 495                        goto found;
 496        return -EINVAL;
 497
 498found:
 499        mutex_lock(&sysfs_lock);
 500
 501        if (!test_bit(FLAG_EXPORT, &desc->flags))
 502                status = -EIO;
 503        else {
 504                status = gpio_setup_irq(desc, dev, trigger_types[i].flags);
 505                if (!status)
 506                        status = size;
 507        }
 508
 509        mutex_unlock(&sysfs_lock);
 510
 511        return status;
 512}
 513
 514static DEVICE_ATTR(edge, 0644, gpio_edge_show, gpio_edge_store);
 515
 516static int sysfs_set_active_low(struct gpio_desc *desc, struct device *dev,
 517                                int value)
 518{
 519        int                     status = 0;
 520
 521        if (!!test_bit(FLAG_ACTIVE_LOW, &desc->flags) == !!value)
 522                return 0;
 523
 524        if (value)
 525                set_bit(FLAG_ACTIVE_LOW, &desc->flags);
 526        else
 527                clear_bit(FLAG_ACTIVE_LOW, &desc->flags);
 528
 529        /* reconfigure poll(2) support if enabled on one edge only */
 530        if (dev != NULL && (!!test_bit(FLAG_TRIG_RISE, &desc->flags) ^
 531                                !!test_bit(FLAG_TRIG_FALL, &desc->flags))) {
 532                unsigned long trigger_flags = desc->flags & GPIO_TRIGGER_MASK;
 533
 534                gpio_setup_irq(desc, dev, 0);
 535                status = gpio_setup_irq(desc, dev, trigger_flags);
 536        }
 537
 538        return status;
 539}
 540
 541static ssize_t gpio_active_low_show(struct device *dev,
 542                struct device_attribute *attr, char *buf)
 543{
 544        const struct gpio_desc  *desc = dev_get_drvdata(dev);
 545        ssize_t                 status;
 546
 547        mutex_lock(&sysfs_lock);
 548
 549        if (!test_bit(FLAG_EXPORT, &desc->flags))
 550                status = -EIO;
 551        else
 552                status = sprintf(buf, "%d\n",
 553                                !!test_bit(FLAG_ACTIVE_LOW, &desc->flags));
 554
 555        mutex_unlock(&sysfs_lock);
 556
 557        return status;
 558}
 559
 560static ssize_t gpio_active_low_store(struct device *dev,
 561                struct device_attribute *attr, const char *buf, size_t size)
 562{
 563        struct gpio_desc        *desc = dev_get_drvdata(dev);
 564        ssize_t                 status;
 565
 566        mutex_lock(&sysfs_lock);
 567
 568        if (!test_bit(FLAG_EXPORT, &desc->flags)) {
 569                status = -EIO;
 570        } else {
 571                long            value;
 572
 573                status = kstrtol(buf, 0, &value);
 574                if (status == 0)
 575                        status = sysfs_set_active_low(desc, dev, value != 0);
 576        }
 577
 578        mutex_unlock(&sysfs_lock);
 579
 580        return status ? : size;
 581}
 582
 583static const DEVICE_ATTR(active_low, 0644,
 584                gpio_active_low_show, gpio_active_low_store);
 585
 586static const struct attribute *gpio_attrs[] = {
 587        &dev_attr_value.attr,
 588        &dev_attr_active_low.attr,
 589        NULL,
 590};
 591
 592static const struct attribute_group gpio_attr_group = {
 593        .attrs = (struct attribute **) gpio_attrs,
 594};
 595
 596/*
 597 * /sys/class/gpio/gpiochipN/
 598 *   /base ... matching gpio_chip.base (N)
 599 *   /label ... matching gpio_chip.label
 600 *   /ngpio ... matching gpio_chip.ngpio
 601 */
 602
 603static ssize_t chip_base_show(struct device *dev,
 604                               struct device_attribute *attr, char *buf)
 605{
 606        const struct gpio_chip  *chip = dev_get_drvdata(dev);
 607
 608        return sprintf(buf, "%d\n", chip->base);
 609}
 610static DEVICE_ATTR(base, 0444, chip_base_show, NULL);
 611
 612static ssize_t chip_label_show(struct device *dev,
 613                               struct device_attribute *attr, char *buf)
 614{
 615        const struct gpio_chip  *chip = dev_get_drvdata(dev);
 616
 617        return sprintf(buf, "%s\n", chip->label ? : "");
 618}
 619static DEVICE_ATTR(label, 0444, chip_label_show, NULL);
 620
 621static ssize_t chip_ngpio_show(struct device *dev,
 622                               struct device_attribute *attr, char *buf)
 623{
 624        const struct gpio_chip  *chip = dev_get_drvdata(dev);
 625
 626        return sprintf(buf, "%u\n", chip->ngpio);
 627}
 628static DEVICE_ATTR(ngpio, 0444, chip_ngpio_show, NULL);
 629
 630static const struct attribute *gpiochip_attrs[] = {
 631        &dev_attr_base.attr,
 632        &dev_attr_label.attr,
 633        &dev_attr_ngpio.attr,
 634        NULL,
 635};
 636
 637static const struct attribute_group gpiochip_attr_group = {
 638        .attrs = (struct attribute **) gpiochip_attrs,
 639};
 640
 641/*
 642 * /sys/class/gpio/export ... write-only
 643 *      integer N ... number of GPIO to export (full access)
 644 * /sys/class/gpio/unexport ... write-only
 645 *      integer N ... number of GPIO to unexport
 646 */
 647static ssize_t export_store(struct class *class,
 648                                struct class_attribute *attr,
 649                                const char *buf, size_t len)
 650{
 651        long                    gpio;
 652        struct gpio_desc        *desc;
 653        int                     status;
 654
 655        status = kstrtol(buf, 0, &gpio);
 656        if (status < 0)
 657                goto done;
 658
 659        desc = gpio_to_desc(gpio);
 660        /* reject invalid GPIOs */
 661        if (!desc) {
 662                pr_warn("%s: invalid GPIO %ld\n", __func__, gpio);
 663                return -EINVAL;
 664        }
 665
 666        /* No extra locking here; FLAG_SYSFS just signifies that the
 667         * request and export were done by on behalf of userspace, so
 668         * they may be undone on its behalf too.
 669         */
 670
 671        status = gpiod_request(desc, "sysfs");
 672        if (status < 0) {
 673                if (status == -EPROBE_DEFER)
 674                        status = -ENODEV;
 675                goto done;
 676        }
 677        status = gpiod_export(desc, true);
 678        if (status < 0)
 679                gpiod_free(desc);
 680        else
 681                set_bit(FLAG_SYSFS, &desc->flags);
 682
 683done:
 684        if (status)
 685                pr_debug("%s: status %d\n", __func__, status);
 686        return status ? : len;
 687}
 688
 689static ssize_t unexport_store(struct class *class,
 690                                struct class_attribute *attr,
 691                                const char *buf, size_t len)
 692{
 693        long                    gpio;
 694        struct gpio_desc        *desc;
 695        int                     status;
 696
 697        status = kstrtol(buf, 0, &gpio);
 698        if (status < 0)
 699                goto done;
 700
 701        desc = gpio_to_desc(gpio);
 702        /* reject bogus commands (gpio_unexport ignores them) */
 703        if (!desc) {
 704                pr_warn("%s: invalid GPIO %ld\n", __func__, gpio);
 705                return -EINVAL;
 706        }
 707
 708        status = -EINVAL;
 709
 710        /* No extra locking here; FLAG_SYSFS just signifies that the
 711         * request and export were done by on behalf of userspace, so
 712         * they may be undone on its behalf too.
 713         */
 714        if (test_and_clear_bit(FLAG_SYSFS, &desc->flags)) {
 715                status = 0;
 716                gpiod_free(desc);
 717        }
 718done:
 719        if (status)
 720                pr_debug("%s: status %d\n", __func__, status);
 721        return status ? : len;
 722}
 723
 724static struct class_attribute gpio_class_attrs[] = {
 725        __ATTR(export, 0200, NULL, export_store),
 726        __ATTR(unexport, 0200, NULL, unexport_store),
 727        __ATTR_NULL,
 728};
 729
 730static struct class gpio_class = {
 731        .name =         "gpio",
 732        .owner =        THIS_MODULE,
 733
 734        .class_attrs =  gpio_class_attrs,
 735};
 736
 737
 738/**
 739 * gpio_export - export a GPIO through sysfs
 740 * @gpio: gpio to make available, already requested
 741 * @direction_may_change: true if userspace may change gpio direction
 742 * Context: arch_initcall or later
 743 *
 744 * When drivers want to make a GPIO accessible to userspace after they
 745 * have requested it -- perhaps while debugging, or as part of their
 746 * public interface -- they may use this routine.  If the GPIO can
 747 * change direction (some can't) and the caller allows it, userspace
 748 * will see "direction" sysfs attribute which may be used to change
 749 * the gpio's direction.  A "value" attribute will always be provided.
 750 *
 751 * Returns zero on success, else an error.
 752 */
 753static int gpiod_export(struct gpio_desc *desc, bool direction_may_change)
 754{
 755        unsigned long           flags;
 756        int                     status;
 757        const char              *ioname = NULL;
 758        struct device           *dev;
 759        int                     offset;
 760
 761        /* can't export until sysfs is available ... */
 762        if (!gpio_class.p) {
 763                pr_debug("%s: called too early!\n", __func__);
 764                return -ENOENT;
 765        }
 766
 767        if (!desc) {
 768                pr_debug("%s: invalid gpio descriptor\n", __func__);
 769                return -EINVAL;
 770        }
 771
 772        mutex_lock(&sysfs_lock);
 773
 774        spin_lock_irqsave(&gpio_lock, flags);
 775        if (!test_bit(FLAG_REQUESTED, &desc->flags) ||
 776             test_bit(FLAG_EXPORT, &desc->flags)) {
 777                spin_unlock_irqrestore(&gpio_lock, flags);
 778                pr_debug("%s: gpio %d unavailable (requested=%d, exported=%d)\n",
 779                                __func__, desc_to_gpio(desc),
 780                                test_bit(FLAG_REQUESTED, &desc->flags),
 781                                test_bit(FLAG_EXPORT, &desc->flags));
 782                status = -EPERM;
 783                goto fail_unlock;
 784        }
 785
 786        if (!desc->chip->direction_input || !desc->chip->direction_output)
 787                direction_may_change = false;
 788        spin_unlock_irqrestore(&gpio_lock, flags);
 789
 790        offset = gpio_chip_hwgpio(desc);
 791        if (desc->chip->names && desc->chip->names[offset])
 792                ioname = desc->chip->names[offset];
 793
 794        dev = device_create(&gpio_class, desc->chip->dev, MKDEV(0, 0),
 795                            desc, ioname ? ioname : "gpio%u",
 796                            desc_to_gpio(desc));
 797        if (IS_ERR(dev)) {
 798                status = PTR_ERR(dev);
 799                goto fail_unlock;
 800        }
 801
 802        status = sysfs_create_group(&dev->kobj, &gpio_attr_group);
 803        if (status)
 804                goto fail_unregister_device;
 805
 806        if (direction_may_change) {
 807                status = device_create_file(dev, &dev_attr_direction);
 808                if (status)
 809                        goto fail_unregister_device;
 810        }
 811
 812        if (gpiod_to_irq(desc) >= 0 && (direction_may_change ||
 813                                       !test_bit(FLAG_IS_OUT, &desc->flags))) {
 814                status = device_create_file(dev, &dev_attr_edge);
 815                if (status)
 816                        goto fail_unregister_device;
 817        }
 818
 819        set_bit(FLAG_EXPORT, &desc->flags);
 820        mutex_unlock(&sysfs_lock);
 821        return 0;
 822
 823fail_unregister_device:
 824        device_unregister(dev);
 825fail_unlock:
 826        mutex_unlock(&sysfs_lock);
 827        pr_debug("%s: gpio%d status %d\n", __func__, desc_to_gpio(desc),
 828                 status);
 829        return status;
 830}
 831
 832int gpio_export(unsigned gpio, bool direction_may_change)
 833{
 834        return gpiod_export(gpio_to_desc(gpio), direction_may_change);
 835}
 836EXPORT_SYMBOL_GPL(gpio_export);
 837
 838static int match_export(struct device *dev, const void *data)
 839{
 840        return dev_get_drvdata(dev) == data;
 841}
 842
 843/**
 844 * gpio_export_link - create a sysfs link to an exported GPIO node
 845 * @dev: device under which to create symlink
 846 * @name: name of the symlink
 847 * @gpio: gpio to create symlink to, already exported
 848 *
 849 * Set up a symlink from /sys/.../dev/name to /sys/class/gpio/gpioN
 850 * node. Caller is responsible for unlinking.
 851 *
 852 * Returns zero on success, else an error.
 853 */
 854static int gpiod_export_link(struct device *dev, const char *name,
 855                             struct gpio_desc *desc)
 856{
 857        int                     status = -EINVAL;
 858
 859        if (!desc) {
 860                pr_warn("%s: invalid GPIO\n", __func__);
 861                return -EINVAL;
 862        }
 863
 864        mutex_lock(&sysfs_lock);
 865
 866        if (test_bit(FLAG_EXPORT, &desc->flags)) {
 867                struct device *tdev;
 868
 869                tdev = class_find_device(&gpio_class, NULL, desc, match_export);
 870                if (tdev != NULL) {
 871                        status = sysfs_create_link(&dev->kobj, &tdev->kobj,
 872                                                name);
 873                } else {
 874                        status = -ENODEV;
 875                }
 876        }
 877
 878        mutex_unlock(&sysfs_lock);
 879
 880        if (status)
 881                pr_debug("%s: gpio%d status %d\n", __func__, desc_to_gpio(desc),
 882                         status);
 883
 884        return status;
 885}
 886
 887int gpio_export_link(struct device *dev, const char *name, unsigned gpio)
 888{
 889        return gpiod_export_link(dev, name, gpio_to_desc(gpio));
 890}
 891EXPORT_SYMBOL_GPL(gpio_export_link);
 892
 893/**
 894 * gpio_sysfs_set_active_low - set the polarity of gpio sysfs value
 895 * @gpio: gpio to change
 896 * @value: non-zero to use active low, i.e. inverted values
 897 *
 898 * Set the polarity of /sys/class/gpio/gpioN/value sysfs attribute.
 899 * The GPIO does not have to be exported yet.  If poll(2) support has
 900 * been enabled for either rising or falling edge, it will be
 901 * reconfigured to follow the new polarity.
 902 *
 903 * Returns zero on success, else an error.
 904 */
 905static int gpiod_sysfs_set_active_low(struct gpio_desc *desc, int value)
 906{
 907        struct device           *dev = NULL;
 908        int                     status = -EINVAL;
 909
 910        if (!desc) {
 911                pr_warn("%s: invalid GPIO\n", __func__);
 912                return -EINVAL;
 913        }
 914
 915        mutex_lock(&sysfs_lock);
 916
 917        if (test_bit(FLAG_EXPORT, &desc->flags)) {
 918                dev = class_find_device(&gpio_class, NULL, desc, match_export);
 919                if (dev == NULL) {
 920                        status = -ENODEV;
 921                        goto unlock;
 922                }
 923        }
 924
 925        status = sysfs_set_active_low(desc, dev, value);
 926
 927unlock:
 928        mutex_unlock(&sysfs_lock);
 929
 930        if (status)
 931                pr_debug("%s: gpio%d status %d\n", __func__, desc_to_gpio(desc),
 932                         status);
 933
 934        return status;
 935}
 936
 937int gpio_sysfs_set_active_low(unsigned gpio, int value)
 938{
 939        return gpiod_sysfs_set_active_low(gpio_to_desc(gpio), value);
 940}
 941EXPORT_SYMBOL_GPL(gpio_sysfs_set_active_low);
 942
 943/**
 944 * gpio_unexport - reverse effect of gpio_export()
 945 * @gpio: gpio to make unavailable
 946 *
 947 * This is implicit on gpio_free().
 948 */
 949static void gpiod_unexport(struct gpio_desc *desc)
 950{
 951        int                     status = 0;
 952        struct device           *dev = NULL;
 953
 954        if (!desc) {
 955                pr_warn("%s: invalid GPIO\n", __func__);
 956                return;
 957        }
 958
 959        mutex_lock(&sysfs_lock);
 960
 961        if (test_bit(FLAG_EXPORT, &desc->flags)) {
 962
 963                dev = class_find_device(&gpio_class, NULL, desc, match_export);
 964                if (dev) {
 965                        gpio_setup_irq(desc, dev, 0);
 966                        clear_bit(FLAG_EXPORT, &desc->flags);
 967                } else
 968                        status = -ENODEV;
 969        }
 970
 971        mutex_unlock(&sysfs_lock);
 972
 973        if (dev) {
 974                device_unregister(dev);
 975                put_device(dev);
 976        }
 977
 978        if (status)
 979                pr_debug("%s: gpio%d status %d\n", __func__, desc_to_gpio(desc),
 980                         status);
 981}
 982
 983void gpio_unexport(unsigned gpio)
 984{
 985        gpiod_unexport(gpio_to_desc(gpio));
 986}
 987EXPORT_SYMBOL_GPL(gpio_unexport);
 988
 989static int gpiochip_export(struct gpio_chip *chip)
 990{
 991        int             status;
 992        struct device   *dev;
 993
 994        /* Many systems register gpio chips for SOC support very early,
 995         * before driver model support is available.  In those cases we
 996         * export this later, in gpiolib_sysfs_init() ... here we just
 997         * verify that _some_ field of gpio_class got initialized.
 998         */
 999        if (!gpio_class.p)
1000                return 0;
1001
1002        /* use chip->base for the ID; it's already known to be unique */
1003        mutex_lock(&sysfs_lock);
1004        dev = device_create(&gpio_class, chip->dev, MKDEV(0, 0), chip,
1005                                "gpiochip%d", chip->base);
1006        if (!IS_ERR(dev)) {
1007                status = sysfs_create_group(&dev->kobj,
1008                                &gpiochip_attr_group);
1009        } else
1010                status = PTR_ERR(dev);
1011        chip->exported = (status == 0);
1012        mutex_unlock(&sysfs_lock);
1013
1014        if (status) {
1015                unsigned long   flags;
1016                unsigned        gpio;
1017
1018                spin_lock_irqsave(&gpio_lock, flags);
1019                gpio = 0;
1020                while (gpio < chip->ngpio)
1021                        chip->desc[gpio++].chip = NULL;
1022                spin_unlock_irqrestore(&gpio_lock, flags);
1023
1024                pr_debug("%s: chip %s status %d\n", __func__,
1025                                chip->label, status);
1026        }
1027
1028        return status;
1029}
1030
1031static void gpiochip_unexport(struct gpio_chip *chip)
1032{
1033        int                     status;
1034        struct device           *dev;
1035
1036        mutex_lock(&sysfs_lock);
1037        dev = class_find_device(&gpio_class, NULL, chip, match_export);
1038        if (dev) {
1039                put_device(dev);
1040                device_unregister(dev);
1041                chip->exported = 0;
1042                status = 0;
1043        } else
1044                status = -ENODEV;
1045        mutex_unlock(&sysfs_lock);
1046
1047        if (status)
1048                pr_debug("%s: chip %s status %d\n", __func__,
1049                                chip->label, status);
1050}
1051
1052static int __init gpiolib_sysfs_init(void)
1053{
1054        int             status;
1055        unsigned long   flags;
1056        struct gpio_chip *chip;
1057
1058        status = class_register(&gpio_class);
1059        if (status < 0)
1060                return status;
1061
1062        /* Scan and register the gpio_chips which registered very
1063         * early (e.g. before the class_register above was called).
1064         *
1065         * We run before arch_initcall() so chip->dev nodes can have
1066         * registered, and so arch_initcall() can always gpio_export().
1067         */
1068        spin_lock_irqsave(&gpio_lock, flags);
1069        list_for_each_entry(chip, &gpio_chips, list) {
1070                if (!chip || chip->exported)
1071                        continue;
1072
1073                spin_unlock_irqrestore(&gpio_lock, flags);
1074                status = gpiochip_export(chip);
1075                spin_lock_irqsave(&gpio_lock, flags);
1076        }
1077        spin_unlock_irqrestore(&gpio_lock, flags);
1078
1079
1080        return status;
1081}
1082postcore_initcall(gpiolib_sysfs_init);
1083
1084#else
1085static inline int gpiochip_export(struct gpio_chip *chip)
1086{
1087        return 0;
1088}
1089
1090static inline void gpiochip_unexport(struct gpio_chip *chip)
1091{
1092}
1093
1094static inline int gpiod_export(struct gpio_desc *desc,
1095                               bool direction_may_change)
1096{
1097        return -ENOSYS;
1098}
1099
1100static inline int gpiod_export_link(struct device *dev, const char *name,
1101                                    struct gpio_desc *desc)
1102{
1103        return -ENOSYS;
1104}
1105
1106static inline int gpiod_sysfs_set_active_low(struct gpio_desc *desc, int value)
1107{
1108        return -ENOSYS;
1109}
1110
1111static inline void gpiod_unexport(struct gpio_desc *desc)
1112{
1113}
1114
1115#endif /* CONFIG_GPIO_SYSFS */
1116
1117/*
1118 * Add a new chip to the global chips list, keeping the list of chips sorted
1119 * by base order.
1120 *
1121 * Return -EBUSY if the new chip overlaps with some other chip's integer
1122 * space.
1123 */
1124static int gpiochip_add_to_list(struct gpio_chip *chip)
1125{
1126        struct list_head *pos = &gpio_chips;
1127        struct gpio_chip *_chip;
1128        int err = 0;
1129
1130        /* find where to insert our chip */
1131        list_for_each(pos, &gpio_chips) {
1132                _chip = list_entry(pos, struct gpio_chip, list);
1133                /* shall we insert before _chip? */
1134                if (_chip->base >= chip->base + chip->ngpio)
1135                        break;
1136        }
1137
1138        /* are we stepping on the chip right before? */
1139        if (pos != &gpio_chips && pos->prev != &gpio_chips) {
1140                _chip = list_entry(pos->prev, struct gpio_chip, list);
1141                if (_chip->base + _chip->ngpio > chip->base) {
1142                        dev_err(chip->dev,
1143                               "GPIO integer space overlap, cannot add chip\n");
1144                        err = -EBUSY;
1145                }
1146        }
1147
1148        if (!err)
1149                list_add_tail(&chip->list, pos);
1150
1151        return err;
1152}
1153
1154/**
1155 * gpiochip_add() - register a gpio_chip
1156 * @chip: the chip to register, with chip->base initialized
1157 * Context: potentially before irqs or kmalloc will work
1158 *
1159 * Returns a negative errno if the chip can't be registered, such as
1160 * because the chip->base is invalid or already associated with a
1161 * different chip.  Otherwise it returns zero as a success code.
1162 *
1163 * When gpiochip_add() is called very early during boot, so that GPIOs
1164 * can be freely used, the chip->dev device must be registered before
1165 * the gpio framework's arch_initcall().  Otherwise sysfs initialization
1166 * for GPIOs will fail rudely.
1167 *
1168 * If chip->base is negative, this requests dynamic assignment of
1169 * a range of valid GPIOs.
1170 */
1171int gpiochip_add(struct gpio_chip *chip)
1172{
1173        unsigned long   flags;
1174        int             status = 0;
1175        unsigned        id;
1176        int             base = chip->base;
1177
1178        if ((!gpio_is_valid(base) || !gpio_is_valid(base + chip->ngpio - 1))
1179                        && base >= 0) {
1180                status = -EINVAL;
1181                goto fail;
1182        }
1183
1184        spin_lock_irqsave(&gpio_lock, flags);
1185
1186        if (base < 0) {
1187                base = gpiochip_find_base(chip->ngpio);
1188                if (base < 0) {
1189                        status = base;
1190                        goto unlock;
1191                }
1192                chip->base = base;
1193        }
1194
1195        status = gpiochip_add_to_list(chip);
1196
1197        if (status == 0) {
1198                chip->desc = &gpio_desc[chip->base];
1199
1200                for (id = 0; id < chip->ngpio; id++) {
1201                        struct gpio_desc *desc = &chip->desc[id];
1202                        desc->chip = chip;
1203
1204                        /* REVISIT:  most hardware initializes GPIOs as
1205                         * inputs (often with pullups enabled) so power
1206                         * usage is minimized.  Linux code should set the
1207                         * gpio direction first thing; but until it does,
1208                         * and in case chip->get_direction is not set,
1209                         * we may expose the wrong direction in sysfs.
1210                         */
1211                        desc->flags = !chip->direction_input
1212                                ? (1 << FLAG_IS_OUT)
1213                                : 0;
1214                }
1215        }
1216
1217        spin_unlock_irqrestore(&gpio_lock, flags);
1218
1219#ifdef CONFIG_PINCTRL
1220        INIT_LIST_HEAD(&chip->pin_ranges);
1221#endif
1222
1223        of_gpiochip_add(chip);
1224
1225        if (status)
1226                goto fail;
1227
1228        status = gpiochip_export(chip);
1229        if (status)
1230                goto fail;
1231
1232        pr_debug("gpiochip_add: registered GPIOs %d to %d on device: %s\n",
1233                chip->base, chip->base + chip->ngpio - 1,
1234                chip->label ? : "generic");
1235
1236        return 0;
1237
1238unlock:
1239        spin_unlock_irqrestore(&gpio_lock, flags);
1240fail:
1241        /* failures here can mean systems won't boot... */
1242        pr_err("gpiochip_add: gpios %d..%d (%s) failed to register\n",
1243                chip->base, chip->base + chip->ngpio - 1,
1244                chip->label ? : "generic");
1245        return status;
1246}
1247EXPORT_SYMBOL_GPL(gpiochip_add);
1248
1249/**
1250 * gpiochip_remove() - unregister a gpio_chip
1251 * @chip: the chip to unregister
1252 *
1253 * A gpio_chip with any GPIOs still requested may not be removed.
1254 */
1255int gpiochip_remove(struct gpio_chip *chip)
1256{
1257        unsigned long   flags;
1258        int             status = 0;
1259        unsigned        id;
1260
1261        spin_lock_irqsave(&gpio_lock, flags);
1262
1263        gpiochip_remove_pin_ranges(chip);
1264        of_gpiochip_remove(chip);
1265
1266        for (id = 0; id < chip->ngpio; id++) {
1267                if (test_bit(FLAG_REQUESTED, &chip->desc[id].flags)) {
1268                        status = -EBUSY;
1269                        break;
1270                }
1271        }
1272        if (status == 0) {
1273                for (id = 0; id < chip->ngpio; id++)
1274                        chip->desc[id].chip = NULL;
1275
1276                list_del(&chip->list);
1277        }
1278
1279        spin_unlock_irqrestore(&gpio_lock, flags);
1280
1281        if (status == 0)
1282                gpiochip_unexport(chip);
1283
1284        return status;
1285}
1286EXPORT_SYMBOL_GPL(gpiochip_remove);
1287
1288/**
1289 * gpiochip_find() - iterator for locating a specific gpio_chip
1290 * @data: data to pass to match function
1291 * @callback: Callback function to check gpio_chip
1292 *
1293 * Similar to bus_find_device.  It returns a reference to a gpio_chip as
1294 * determined by a user supplied @match callback.  The callback should return
1295 * 0 if the device doesn't match and non-zero if it does.  If the callback is
1296 * non-zero, this function will return to the caller and not iterate over any
1297 * more gpio_chips.
1298 */
1299struct gpio_chip *gpiochip_find(void *data,
1300                                int (*match)(struct gpio_chip *chip,
1301                                             void *data))
1302{
1303        struct gpio_chip *chip;
1304        unsigned long flags;
1305
1306        spin_lock_irqsave(&gpio_lock, flags);
1307        list_for_each_entry(chip, &gpio_chips, list)
1308                if (match(chip, data))
1309                        break;
1310
1311        /* No match? */
1312        if (&chip->list == &gpio_chips)
1313                chip = NULL;
1314        spin_unlock_irqrestore(&gpio_lock, flags);
1315
1316        return chip;
1317}
1318EXPORT_SYMBOL_GPL(gpiochip_find);
1319
1320#ifdef CONFIG_PINCTRL
1321
1322/**
1323 * gpiochip_add_pin_range() - add a range for GPIO <-> pin mapping
1324 * @chip: the gpiochip to add the range for
1325 * @pinctrl_name: the dev_name() of the pin controller to map to
1326 * @gpio_offset: the start offset in the current gpio_chip number space
1327 * @pin_offset: the start offset in the pin controller number space
1328 * @npins: the number of pins from the offset of each pin space (GPIO and
1329 *      pin controller) to accumulate in this range
1330 */
1331int gpiochip_add_pin_range(struct gpio_chip *chip, const char *pinctl_name,
1332                           unsigned int gpio_offset, unsigned int pin_offset,
1333                           unsigned int npins)
1334{
1335        struct gpio_pin_range *pin_range;
1336        int ret;
1337
1338        pin_range = kzalloc(sizeof(*pin_range), GFP_KERNEL);
1339        if (!pin_range) {
1340                pr_err("%s: GPIO chip: failed to allocate pin ranges\n",
1341                                chip->label);
1342                return -ENOMEM;
1343        }
1344
1345        /* Use local offset as range ID */
1346        pin_range->range.id = gpio_offset;
1347        pin_range->range.gc = chip;
1348        pin_range->range.name = chip->label;
1349        pin_range->range.base = chip->base + gpio_offset;
1350        pin_range->range.pin_base = pin_offset;
1351        pin_range->range.npins = npins;
1352        pin_range->pctldev = pinctrl_find_and_add_gpio_range(pinctl_name,
1353                        &pin_range->range);
1354        if (IS_ERR(pin_range->pctldev)) {
1355                ret = PTR_ERR(pin_range->pctldev);
1356                pr_err("%s: GPIO chip: could not create pin range\n",
1357                       chip->label);
1358                kfree(pin_range);
1359                return ret;
1360        }
1361        pr_debug("GPIO chip %s: created GPIO range %d->%d ==> %s PIN %d->%d\n",
1362                 chip->label, gpio_offset, gpio_offset + npins - 1,
1363                 pinctl_name,
1364                 pin_offset, pin_offset + npins - 1);
1365
1366        list_add_tail(&pin_range->node, &chip->pin_ranges);
1367
1368        return 0;
1369}
1370EXPORT_SYMBOL_GPL(gpiochip_add_pin_range);
1371
1372/**
1373 * gpiochip_remove_pin_ranges() - remove all the GPIO <-> pin mappings
1374 * @chip: the chip to remove all the mappings for
1375 */
1376void gpiochip_remove_pin_ranges(struct gpio_chip *chip)
1377{
1378        struct gpio_pin_range *pin_range, *tmp;
1379
1380        list_for_each_entry_safe(pin_range, tmp, &chip->pin_ranges, node) {
1381                list_del(&pin_range->node);
1382                pinctrl_remove_gpio_range(pin_range->pctldev,
1383                                &pin_range->range);
1384                kfree(pin_range);
1385        }
1386}
1387EXPORT_SYMBOL_GPL(gpiochip_remove_pin_ranges);
1388
1389#endif /* CONFIG_PINCTRL */
1390
1391/* These "optional" allocation calls help prevent drivers from stomping
1392 * on each other, and help provide better diagnostics in debugfs.
1393 * They're called even less than the "set direction" calls.
1394 */
1395static int gpiod_request(struct gpio_desc *desc, const char *label)
1396{
1397        struct gpio_chip        *chip;
1398        int                     status = -EPROBE_DEFER;
1399        unsigned long           flags;
1400
1401        if (!desc) {
1402                pr_warn("%s: invalid GPIO\n", __func__);
1403                return -EINVAL;
1404        }
1405
1406        spin_lock_irqsave(&gpio_lock, flags);
1407
1408        chip = desc->chip;
1409        if (chip == NULL)
1410                goto done;
1411
1412        if (!try_module_get(chip->owner))
1413                goto done;
1414
1415        /* NOTE:  gpio_request() can be called in early boot,
1416         * before IRQs are enabled, for non-sleeping (SOC) GPIOs.
1417         */
1418
1419        if (test_and_set_bit(FLAG_REQUESTED, &desc->flags) == 0) {
1420                desc_set_label(desc, label ? : "?");
1421                status = 0;
1422        } else {
1423                status = -EBUSY;
1424                module_put(chip->owner);
1425                goto done;
1426        }
1427
1428        if (chip->request) {
1429                /* chip->request may sleep */
1430                spin_unlock_irqrestore(&gpio_lock, flags);
1431                status = chip->request(chip, gpio_chip_hwgpio(desc));
1432                spin_lock_irqsave(&gpio_lock, flags);
1433
1434                if (status < 0) {
1435                        desc_set_label(desc, NULL);
1436                        module_put(chip->owner);
1437                        clear_bit(FLAG_REQUESTED, &desc->flags);
1438                        goto done;
1439                }
1440        }
1441        if (chip->get_direction) {
1442                /* chip->get_direction may sleep */
1443                spin_unlock_irqrestore(&gpio_lock, flags);
1444                gpiod_get_direction(desc);
1445                spin_lock_irqsave(&gpio_lock, flags);
1446        }
1447done:
1448        if (status)
1449                pr_debug("_gpio_request: gpio-%d (%s) status %d\n",
1450                         desc_to_gpio(desc), label ? : "?", status);
1451        spin_unlock_irqrestore(&gpio_lock, flags);
1452        return status;
1453}
1454
1455int gpio_request(unsigned gpio, const char *label)
1456{
1457        return gpiod_request(gpio_to_desc(gpio), label);
1458}
1459EXPORT_SYMBOL_GPL(gpio_request);
1460
1461static void gpiod_free(struct gpio_desc *desc)
1462{
1463        unsigned long           flags;
1464        struct gpio_chip        *chip;
1465
1466        might_sleep();
1467
1468        if (!desc) {
1469                WARN_ON(extra_checks);
1470                return;
1471        }
1472
1473        gpiod_unexport(desc);
1474
1475        spin_lock_irqsave(&gpio_lock, flags);
1476
1477        chip = desc->chip;
1478        if (chip && test_bit(FLAG_REQUESTED, &desc->flags)) {
1479                if (chip->free) {
1480                        spin_unlock_irqrestore(&gpio_lock, flags);
1481                        might_sleep_if(chip->can_sleep);
1482                        chip->free(chip, gpio_chip_hwgpio(desc));
1483                        spin_lock_irqsave(&gpio_lock, flags);
1484                }
1485                desc_set_label(desc, NULL);
1486                module_put(desc->chip->owner);
1487                clear_bit(FLAG_ACTIVE_LOW, &desc->flags);
1488                clear_bit(FLAG_REQUESTED, &desc->flags);
1489                clear_bit(FLAG_OPEN_DRAIN, &desc->flags);
1490                clear_bit(FLAG_OPEN_SOURCE, &desc->flags);
1491        } else
1492                WARN_ON(extra_checks);
1493
1494        spin_unlock_irqrestore(&gpio_lock, flags);
1495}
1496
1497void gpio_free(unsigned gpio)
1498{
1499        gpiod_free(gpio_to_desc(gpio));
1500}
1501EXPORT_SYMBOL_GPL(gpio_free);
1502
1503/**
1504 * gpio_request_one - request a single GPIO with initial configuration
1505 * @gpio:       the GPIO number
1506 * @flags:      GPIO configuration as specified by GPIOF_*
1507 * @label:      a literal description string of this GPIO
1508 */
1509int gpio_request_one(unsigned gpio, unsigned long flags, const char *label)
1510{
1511        struct gpio_desc *desc;
1512        int err;
1513
1514        desc = gpio_to_desc(gpio);
1515
1516        err = gpiod_request(desc, label);
1517        if (err)
1518                return err;
1519
1520        if (flags & GPIOF_OPEN_DRAIN)
1521                set_bit(FLAG_OPEN_DRAIN, &desc->flags);
1522
1523        if (flags & GPIOF_OPEN_SOURCE)
1524                set_bit(FLAG_OPEN_SOURCE, &desc->flags);
1525
1526        if (flags & GPIOF_DIR_IN)
1527                err = gpiod_direction_input(desc);
1528        else
1529                err = gpiod_direction_output(desc,
1530                                (flags & GPIOF_INIT_HIGH) ? 1 : 0);
1531
1532        if (err)
1533                goto free_gpio;
1534
1535        if (flags & GPIOF_EXPORT) {
1536                err = gpiod_export(desc, flags & GPIOF_EXPORT_CHANGEABLE);
1537                if (err)
1538                        goto free_gpio;
1539        }
1540
1541        return 0;
1542
1543 free_gpio:
1544        gpiod_free(desc);
1545        return err;
1546}
1547EXPORT_SYMBOL_GPL(gpio_request_one);
1548
1549/**
1550 * gpio_request_array - request multiple GPIOs in a single call
1551 * @array:      array of the 'struct gpio'
1552 * @num:        how many GPIOs in the array
1553 */
1554int gpio_request_array(const struct gpio *array, size_t num)
1555{
1556        int i, err;
1557
1558        for (i = 0; i < num; i++, array++) {
1559                err = gpio_request_one(array->gpio, array->flags, array->label);
1560                if (err)
1561                        goto err_free;
1562        }
1563        return 0;
1564
1565err_free:
1566        while (i--)
1567                gpio_free((--array)->gpio);
1568        return err;
1569}
1570EXPORT_SYMBOL_GPL(gpio_request_array);
1571
1572/**
1573 * gpio_free_array - release multiple GPIOs in a single call
1574 * @array:      array of the 'struct gpio'
1575 * @num:        how many GPIOs in the array
1576 */
1577void gpio_free_array(const struct gpio *array, size_t num)
1578{
1579        while (num--)
1580                gpio_free((array++)->gpio);
1581}
1582EXPORT_SYMBOL_GPL(gpio_free_array);
1583
1584/**
1585 * gpiochip_is_requested - return string iff signal was requested
1586 * @chip: controller managing the signal
1587 * @offset: of signal within controller's 0..(ngpio - 1) range
1588 *
1589 * Returns NULL if the GPIO is not currently requested, else a string.
1590 * If debugfs support is enabled, the string returned is the label passed
1591 * to gpio_request(); otherwise it is a meaningless constant.
1592 *
1593 * This function is for use by GPIO controller drivers.  The label can
1594 * help with diagnostics, and knowing that the signal is used as a GPIO
1595 * can help avoid accidentally multiplexing it to another controller.
1596 */
1597const char *gpiochip_is_requested(struct gpio_chip *chip, unsigned offset)
1598{
1599        struct gpio_desc *desc;
1600
1601        if (!GPIO_OFFSET_VALID(chip, offset))
1602                return NULL;
1603
1604        desc = &chip->desc[offset];
1605
1606        if (test_bit(FLAG_REQUESTED, &desc->flags) == 0)
1607                return NULL;
1608#ifdef CONFIG_DEBUG_FS
1609        return desc->label;
1610#else
1611        return "?";
1612#endif
1613}
1614EXPORT_SYMBOL_GPL(gpiochip_is_requested);
1615
1616
1617/* Drivers MUST set GPIO direction before making get/set calls.  In
1618 * some cases this is done in early boot, before IRQs are enabled.
1619 *
1620 * As a rule these aren't called more than once (except for drivers
1621 * using the open-drain emulation idiom) so these are natural places
1622 * to accumulate extra debugging checks.  Note that we can't (yet)
1623 * rely on gpio_request() having been called beforehand.
1624 */
1625
1626static int gpiod_direction_input(struct gpio_desc *desc)
1627{
1628        unsigned long           flags;
1629        struct gpio_chip        *chip;
1630        int                     status = -EINVAL;
1631        int                     offset;
1632
1633        if (!desc || !desc->chip) {
1634                pr_warn("%s: invalid GPIO\n", __func__);
1635                return -EINVAL;
1636        }
1637
1638        chip = desc->chip;
1639        if (!chip->get || !chip->direction_input) {
1640                pr_warn("%s: missing get() or direction_input() operations\n",
1641                        __func__);
1642                return -EIO;
1643        }
1644
1645        spin_lock_irqsave(&gpio_lock, flags);
1646
1647        status = gpio_ensure_requested(desc);
1648        if (status < 0)
1649                goto fail;
1650
1651        /* now we know the gpio is valid and chip won't vanish */
1652
1653        spin_unlock_irqrestore(&gpio_lock, flags);
1654
1655        might_sleep_if(chip->can_sleep);
1656
1657        offset = gpio_chip_hwgpio(desc);
1658        if (status) {
1659                status = chip->request(chip, offset);
1660                if (status < 0) {
1661                        pr_debug("GPIO-%d: chip request fail, %d\n",
1662                                desc_to_gpio(desc), status);
1663                        /* and it's not available to anyone else ...
1664                         * gpio_request() is the fully clean solution.
1665                         */
1666                        goto lose;
1667                }
1668        }
1669
1670        status = chip->direction_input(chip, offset);
1671        if (status == 0)
1672                clear_bit(FLAG_IS_OUT, &desc->flags);
1673
1674        trace_gpio_direction(desc_to_gpio(desc), 1, status);
1675lose:
1676        return status;
1677fail:
1678        spin_unlock_irqrestore(&gpio_lock, flags);
1679        if (status)
1680                pr_debug("%s: gpio-%d status %d\n", __func__,
1681                         desc_to_gpio(desc), status);
1682        return status;
1683}
1684
1685int gpio_direction_input(unsigned gpio)
1686{
1687        return gpiod_direction_input(gpio_to_desc(gpio));
1688}
1689EXPORT_SYMBOL_GPL(gpio_direction_input);
1690
1691static int gpiod_direction_output(struct gpio_desc *desc, int value)
1692{
1693        unsigned long           flags;
1694        struct gpio_chip        *chip;
1695        int                     status = -EINVAL;
1696        int offset;
1697
1698        if (!desc || !desc->chip) {
1699                pr_warn("%s: invalid GPIO\n", __func__);
1700                return -EINVAL;
1701        }
1702
1703        /* Open drain pin should not be driven to 1 */
1704        if (value && test_bit(FLAG_OPEN_DRAIN,  &desc->flags))
1705                return gpiod_direction_input(desc);
1706
1707        /* Open source pin should not be driven to 0 */
1708        if (!value && test_bit(FLAG_OPEN_SOURCE,  &desc->flags))
1709                return gpiod_direction_input(desc);
1710
1711        chip = desc->chip;
1712        if (!chip->set || !chip->direction_output) {
1713                pr_warn("%s: missing set() or direction_output() operations\n",
1714                        __func__);
1715                return -EIO;
1716        }
1717
1718        spin_lock_irqsave(&gpio_lock, flags);
1719
1720        status = gpio_ensure_requested(desc);
1721        if (status < 0)
1722                goto fail;
1723
1724        /* now we know the gpio is valid and chip won't vanish */
1725
1726        spin_unlock_irqrestore(&gpio_lock, flags);
1727
1728        might_sleep_if(chip->can_sleep);
1729
1730        offset = gpio_chip_hwgpio(desc);
1731        if (status) {
1732                status = chip->request(chip, offset);
1733                if (status < 0) {
1734                        pr_debug("GPIO-%d: chip request fail, %d\n",
1735                                desc_to_gpio(desc), status);
1736                        /* and it's not available to anyone else ...
1737                         * gpio_request() is the fully clean solution.
1738                         */
1739                        goto lose;
1740                }
1741        }
1742
1743        status = chip->direction_output(chip, offset, value);
1744        if (status == 0)
1745                set_bit(FLAG_IS_OUT, &desc->flags);
1746        trace_gpio_value(desc_to_gpio(desc), 0, value);
1747        trace_gpio_direction(desc_to_gpio(desc), 0, status);
1748lose:
1749        return status;
1750fail:
1751        spin_unlock_irqrestore(&gpio_lock, flags);
1752        if (status)
1753                pr_debug("%s: gpio-%d status %d\n", __func__,
1754                         desc_to_gpio(desc), status);
1755        return status;
1756}
1757
1758int gpio_direction_output(unsigned gpio, int value)
1759{
1760        return gpiod_direction_output(gpio_to_desc(gpio), value);
1761}
1762EXPORT_SYMBOL_GPL(gpio_direction_output);
1763
1764/**
1765 * gpio_set_debounce - sets @debounce time for a @gpio
1766 * @gpio: the gpio to set debounce time
1767 * @debounce: debounce time is microseconds
1768 *
1769 * returns -ENOTSUPP if the controller does not support setting
1770 * debounce.
1771 */
1772static int gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce)
1773{
1774        unsigned long           flags;
1775        struct gpio_chip        *chip;
1776        int                     status = -EINVAL;
1777        int                     offset;
1778
1779        if (!desc || !desc->chip) {
1780                pr_warn("%s: invalid GPIO\n", __func__);
1781                return -EINVAL;
1782        }
1783
1784        chip = desc->chip;
1785        if (!chip->set || !chip->set_debounce) {
1786                pr_debug("%s: missing set() or set_debounce() operations\n",
1787                        __func__);
1788                return -ENOTSUPP;
1789        }
1790
1791        spin_lock_irqsave(&gpio_lock, flags);
1792
1793        status = gpio_ensure_requested(desc);
1794        if (status < 0)
1795                goto fail;
1796
1797        /* now we know the gpio is valid and chip won't vanish */
1798
1799        spin_unlock_irqrestore(&gpio_lock, flags);
1800
1801        might_sleep_if(chip->can_sleep);
1802
1803        offset = gpio_chip_hwgpio(desc);
1804        return chip->set_debounce(chip, offset, debounce);
1805
1806fail:
1807        spin_unlock_irqrestore(&gpio_lock, flags);
1808        if (status)
1809                pr_debug("%s: gpio-%d status %d\n", __func__,
1810                         desc_to_gpio(desc), status);
1811
1812        return status;
1813}
1814
1815int gpio_set_debounce(unsigned gpio, unsigned debounce)
1816{
1817        return gpiod_set_debounce(gpio_to_desc(gpio), debounce);
1818}
1819EXPORT_SYMBOL_GPL(gpio_set_debounce);
1820
1821/* I/O calls are only valid after configuration completed; the relevant
1822 * "is this a valid GPIO" error checks should already have been done.
1823 *
1824 * "Get" operations are often inlinable as reading a pin value register,
1825 * and masking the relevant bit in that register.
1826 *
1827 * When "set" operations are inlinable, they involve writing that mask to
1828 * one register to set a low value, or a different register to set it high.
1829 * Otherwise locking is needed, so there may be little value to inlining.
1830 *
1831 *------------------------------------------------------------------------
1832 *
1833 * IMPORTANT!!!  The hot paths -- get/set value -- assume that callers
1834 * have requested the GPIO.  That can include implicit requesting by
1835 * a direction setting call.  Marking a gpio as requested locks its chip
1836 * in memory, guaranteeing that these table lookups need no more locking
1837 * and that gpiochip_remove() will fail.
1838 *
1839 * REVISIT when debugging, consider adding some instrumentation to ensure
1840 * that the GPIO was actually requested.
1841 */
1842
1843/**
1844 * __gpio_get_value() - return a gpio's value
1845 * @gpio: gpio whose value will be returned
1846 * Context: any
1847 *
1848 * This is used directly or indirectly to implement gpio_get_value().
1849 * It returns the zero or nonzero value provided by the associated
1850 * gpio_chip.get() method; or zero if no such method is provided.
1851 */
1852static int gpiod_get_value(const struct gpio_desc *desc)
1853{
1854        struct gpio_chip        *chip;
1855        int value;
1856        int offset;
1857
1858        if (!desc)
1859                return 0;
1860        chip = desc->chip;
1861        offset = gpio_chip_hwgpio(desc);
1862        /* Should be using gpio_get_value_cansleep() */
1863        WARN_ON(chip->can_sleep);
1864        value = chip->get ? chip->get(chip, offset) : 0;
1865        trace_gpio_value(desc_to_gpio(desc), 1, value);
1866        return value;
1867}
1868
1869int __gpio_get_value(unsigned gpio)
1870{
1871        return gpiod_get_value(gpio_to_desc(gpio));
1872}
1873EXPORT_SYMBOL_GPL(__gpio_get_value);
1874
1875/*
1876 *  _gpio_set_open_drain_value() - Set the open drain gpio's value.
1877 * @gpio: Gpio whose state need to be set.
1878 * @chip: Gpio chip.
1879 * @value: Non-zero for setting it HIGH otherise it will set to LOW.
1880 */
1881static void _gpio_set_open_drain_value(struct gpio_desc *desc, int value)
1882{
1883        int err = 0;
1884        struct gpio_chip *chip = desc->chip;
1885        int offset = gpio_chip_hwgpio(desc);
1886
1887        if (value) {
1888                err = chip->direction_input(chip, offset);
1889                if (!err)
1890                        clear_bit(FLAG_IS_OUT, &desc->flags);
1891        } else {
1892                err = chip->direction_output(chip, offset, 0);
1893                if (!err)
1894                        set_bit(FLAG_IS_OUT, &desc->flags);
1895        }
1896        trace_gpio_direction(desc_to_gpio(desc), value, err);
1897        if (err < 0)
1898                pr_err("%s: Error in set_value for open drain gpio%d err %d\n",
1899                                        __func__, desc_to_gpio(desc), err);
1900}
1901
1902/*
1903 *  _gpio_set_open_source() - Set the open source gpio's value.
1904 * @gpio: Gpio whose state need to be set.
1905 * @chip: Gpio chip.
1906 * @value: Non-zero for setting it HIGH otherise it will set to LOW.
1907 */
1908static void _gpio_set_open_source_value(struct gpio_desc *desc, int value)
1909{
1910        int err = 0;
1911        struct gpio_chip *chip = desc->chip;
1912        int offset = gpio_chip_hwgpio(desc);
1913
1914        if (value) {
1915                err = chip->direction_output(chip, offset, 1);
1916                if (!err)
1917                        set_bit(FLAG_IS_OUT, &desc->flags);
1918        } else {
1919                err = chip->direction_input(chip, offset);
1920                if (!err)
1921                        clear_bit(FLAG_IS_OUT, &desc->flags);
1922        }
1923        trace_gpio_direction(desc_to_gpio(desc), !value, err);
1924        if (err < 0)
1925                pr_err("%s: Error in set_value for open source gpio%d err %d\n",
1926                                        __func__, desc_to_gpio(desc), err);
1927}
1928
1929/**
1930 * __gpio_set_value() - assign a gpio's value
1931 * @gpio: gpio whose value will be assigned
1932 * @value: value to assign
1933 * Context: any
1934 *
1935 * This is used directly or indirectly to implement gpio_set_value().
1936 * It invokes the associated gpio_chip.set() method.
1937 */
1938static void gpiod_set_value(struct gpio_desc *desc, int value)
1939{
1940        struct gpio_chip        *chip;
1941
1942        if (!desc)
1943                return;
1944        chip = desc->chip;
1945        /* Should be using gpio_set_value_cansleep() */
1946        WARN_ON(chip->can_sleep);
1947        trace_gpio_value(desc_to_gpio(desc), 0, value);
1948        if (test_bit(FLAG_OPEN_DRAIN, &desc->flags))
1949                _gpio_set_open_drain_value(desc, value);
1950        else if (test_bit(FLAG_OPEN_SOURCE, &desc->flags))
1951                _gpio_set_open_source_value(desc, value);
1952        else
1953                chip->set(chip, gpio_chip_hwgpio(desc), value);
1954}
1955
1956void __gpio_set_value(unsigned gpio, int value)
1957{
1958        return gpiod_set_value(gpio_to_desc(gpio), value);
1959}
1960EXPORT_SYMBOL_GPL(__gpio_set_value);
1961
1962/**
1963 * __gpio_cansleep() - report whether gpio value access will sleep
1964 * @gpio: gpio in question
1965 * Context: any
1966 *
1967 * This is used directly or indirectly to implement gpio_cansleep().  It
1968 * returns nonzero if access reading or writing the GPIO value can sleep.
1969 */
1970static int gpiod_cansleep(const struct gpio_desc *desc)
1971{
1972        if (!desc)
1973                return 0;
1974        /* only call this on GPIOs that are valid! */
1975        return desc->chip->can_sleep;
1976}
1977
1978int __gpio_cansleep(unsigned gpio)
1979{
1980        return gpiod_cansleep(gpio_to_desc(gpio));
1981}
1982EXPORT_SYMBOL_GPL(__gpio_cansleep);
1983
1984/**
1985 * __gpio_to_irq() - return the IRQ corresponding to a GPIO
1986 * @gpio: gpio whose IRQ will be returned (already requested)
1987 * Context: any
1988 *
1989 * This is used directly or indirectly to implement gpio_to_irq().
1990 * It returns the number of the IRQ signaled by this (input) GPIO,
1991 * or a negative errno.
1992 */
1993static int gpiod_to_irq(const struct gpio_desc *desc)
1994{
1995        struct gpio_chip        *chip;
1996        int                     offset;
1997
1998        if (!desc)
1999                return -EINVAL;
2000        chip = desc->chip;
2001        offset = gpio_chip_hwgpio(desc);
2002        return chip->to_irq ? chip->to_irq(chip, offset) : -ENXIO;
2003}
2004
2005int __gpio_to_irq(unsigned gpio)
2006{
2007        return gpiod_to_irq(gpio_to_desc(gpio));
2008}
2009EXPORT_SYMBOL_GPL(__gpio_to_irq);
2010
2011
2012/* There's no value in making it easy to inline GPIO calls that may sleep.
2013 * Common examples include ones connected to I2C or SPI chips.
2014 */
2015
2016static int gpiod_get_value_cansleep(const struct gpio_desc *desc)
2017{
2018        struct gpio_chip        *chip;
2019        int value;
2020        int offset;
2021
2022        might_sleep_if(extra_checks);
2023        if (!desc)
2024                return 0;
2025        chip = desc->chip;
2026        offset = gpio_chip_hwgpio(desc);
2027        value = chip->get ? chip->get(chip, offset) : 0;
2028        trace_gpio_value(desc_to_gpio(desc), 1, value);
2029        return value;
2030}
2031
2032int gpio_get_value_cansleep(unsigned gpio)
2033{
2034        return gpiod_get_value_cansleep(gpio_to_desc(gpio));
2035}
2036EXPORT_SYMBOL_GPL(gpio_get_value_cansleep);
2037
2038static void gpiod_set_value_cansleep(struct gpio_desc *desc, int value)
2039{
2040        struct gpio_chip        *chip;
2041
2042        might_sleep_if(extra_checks);
2043        if (!desc)
2044                return;
2045        chip = desc->chip;
2046        trace_gpio_value(desc_to_gpio(desc), 0, value);
2047        if (test_bit(FLAG_OPEN_DRAIN,  &desc->flags))
2048                _gpio_set_open_drain_value(desc, value);
2049        else if (test_bit(FLAG_OPEN_SOURCE,  &desc->flags))
2050                _gpio_set_open_source_value(desc, value);
2051        else
2052                chip->set(chip, gpio_chip_hwgpio(desc), value);
2053}
2054
2055void gpio_set_value_cansleep(unsigned gpio, int value)
2056{
2057        return gpiod_set_value_cansleep(gpio_to_desc(gpio), value);
2058}
2059EXPORT_SYMBOL_GPL(gpio_set_value_cansleep);
2060
2061#ifdef CONFIG_DEBUG_FS
2062
2063static void gpiolib_dbg_show(struct seq_file *s, struct gpio_chip *chip)
2064{
2065        unsigned                i;
2066        unsigned                gpio = chip->base;
2067        struct gpio_desc        *gdesc = &chip->desc[0];
2068        int                     is_out;
2069
2070        for (i = 0; i < chip->ngpio; i++, gpio++, gdesc++) {
2071                if (!test_bit(FLAG_REQUESTED, &gdesc->flags))
2072                        continue;
2073
2074                gpiod_get_direction(gdesc);
2075                is_out = test_bit(FLAG_IS_OUT, &gdesc->flags);
2076                seq_printf(s, " gpio-%-3d (%-20.20s) %s %s",
2077                        gpio, gdesc->label,
2078                        is_out ? "out" : "in ",
2079                        chip->get
2080                                ? (chip->get(chip, i) ? "hi" : "lo")
2081                                : "?  ");
2082                seq_printf(s, "\n");
2083        }
2084}
2085
2086static void *gpiolib_seq_start(struct seq_file *s, loff_t *pos)
2087{
2088        unsigned long flags;
2089        struct gpio_chip *chip = NULL;
2090        loff_t index = *pos;
2091
2092        s->private = "";
2093
2094        spin_lock_irqsave(&gpio_lock, flags);
2095        list_for_each_entry(chip, &gpio_chips, list)
2096                if (index-- == 0) {
2097                        spin_unlock_irqrestore(&gpio_lock, flags);
2098                        return chip;
2099                }
2100        spin_unlock_irqrestore(&gpio_lock, flags);
2101
2102        return NULL;
2103}
2104
2105static void *gpiolib_seq_next(struct seq_file *s, void *v, loff_t *pos)
2106{
2107        unsigned long flags;
2108        struct gpio_chip *chip = v;
2109        void *ret = NULL;
2110
2111        spin_lock_irqsave(&gpio_lock, flags);
2112        if (list_is_last(&chip->list, &gpio_chips))
2113                ret = NULL;
2114        else
2115                ret = list_entry(chip->list.next, struct gpio_chip, list);
2116        spin_unlock_irqrestore(&gpio_lock, flags);
2117
2118        s->private = "\n";
2119        ++*pos;
2120
2121        return ret;
2122}
2123
2124static void gpiolib_seq_stop(struct seq_file *s, void *v)
2125{
2126}
2127
2128static int gpiolib_seq_show(struct seq_file *s, void *v)
2129{
2130        struct gpio_chip *chip = v;
2131        struct device *dev;
2132
2133        seq_printf(s, "%sGPIOs %d-%d", (char *)s->private,
2134                        chip->base, chip->base + chip->ngpio - 1);
2135        dev = chip->dev;
2136        if (dev)
2137                seq_printf(s, ", %s/%s", dev->bus ? dev->bus->name : "no-bus",
2138                        dev_name(dev));
2139        if (chip->label)
2140                seq_printf(s, ", %s", chip->label);
2141        if (chip->can_sleep)
2142                seq_printf(s, ", can sleep");
2143        seq_printf(s, ":\n");
2144
2145        if (chip->dbg_show)
2146                chip->dbg_show(s, chip);
2147        else
2148                gpiolib_dbg_show(s, chip);
2149
2150        return 0;
2151}
2152
2153static const struct seq_operations gpiolib_seq_ops = {
2154        .start = gpiolib_seq_start,
2155        .next = gpiolib_seq_next,
2156        .stop = gpiolib_seq_stop,
2157        .show = gpiolib_seq_show,
2158};
2159
2160static int gpiolib_open(struct inode *inode, struct file *file)
2161{
2162        return seq_open(file, &gpiolib_seq_ops);
2163}
2164
2165static const struct file_operations gpiolib_operations = {
2166        .owner          = THIS_MODULE,
2167        .open           = gpiolib_open,
2168        .read           = seq_read,
2169        .llseek         = seq_lseek,
2170        .release        = seq_release,
2171};
2172
2173static int __init gpiolib_debugfs_init(void)
2174{
2175        /* /sys/kernel/debug/gpio */
2176        (void) debugfs_create_file("gpio", S_IFREG | S_IRUGO,
2177                                NULL, NULL, &gpiolib_operations);
2178        return 0;
2179}
2180subsys_initcall(gpiolib_debugfs_init);
2181
2182#endif  /* DEBUG_FS */
2183
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.