linux/drivers/gpio/gpiolib-acpi.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * ACPI helpers for GPIO API
   4 *
   5 * Copyright (C) 2012, Intel Corporation
   6 * Authors: Mathias Nyman <mathias.nyman@linux.intel.com>
   7 *          Mika Westerberg <mika.westerberg@linux.intel.com>
   8 */
   9
  10#include <linux/dmi.h>
  11#include <linux/errno.h>
  12#include <linux/gpio/consumer.h>
  13#include <linux/gpio/driver.h>
  14#include <linux/gpio/machine.h>
  15#include <linux/export.h>
  16#include <linux/acpi.h>
  17#include <linux/interrupt.h>
  18#include <linux/mutex.h>
  19#include <linux/pinctrl/pinctrl.h>
  20
  21#include "gpiolib.h"
  22#include "gpiolib-acpi.h"
  23
  24static int run_edge_events_on_boot = -1;
  25module_param(run_edge_events_on_boot, int, 0444);
  26MODULE_PARM_DESC(run_edge_events_on_boot,
  27                 "Run edge _AEI event-handlers at boot: 0=no, 1=yes, -1=auto");
  28
  29static char *ignore_wake;
  30module_param(ignore_wake, charp, 0444);
  31MODULE_PARM_DESC(ignore_wake,
  32                 "controller@pin combos on which to ignore the ACPI wake flag "
  33                 "ignore_wake=controller@pin[,controller@pin[,...]]");
  34
  35struct acpi_gpiolib_dmi_quirk {
  36        bool no_edge_events_on_boot;
  37        char *ignore_wake;
  38};
  39
  40/**
  41 * struct acpi_gpio_event - ACPI GPIO event handler data
  42 *
  43 * @node:         list-entry of the events list of the struct acpi_gpio_chip
  44 * @handle:       handle of ACPI method to execute when the IRQ triggers
  45 * @handler:      handler function to pass to request_irq() when requesting the IRQ
  46 * @pin:          GPIO pin number on the struct gpio_chip
  47 * @irq:          Linux IRQ number for the event, for request_irq() / free_irq()
  48 * @irqflags:     flags to pass to request_irq() when requesting the IRQ
  49 * @irq_is_wake:  If the ACPI flags indicate the IRQ is a wakeup source
  50 * @irq_requested:True if request_irq() has been done
  51 * @desc:         struct gpio_desc for the GPIO pin for this event
  52 */
  53struct acpi_gpio_event {
  54        struct list_head node;
  55        acpi_handle handle;
  56        irq_handler_t handler;
  57        unsigned int pin;
  58        unsigned int irq;
  59        unsigned long irqflags;
  60        bool irq_is_wake;
  61        bool irq_requested;
  62        struct gpio_desc *desc;
  63};
  64
  65struct acpi_gpio_connection {
  66        struct list_head node;
  67        unsigned int pin;
  68        struct gpio_desc *desc;
  69};
  70
  71struct acpi_gpio_chip {
  72        /*
  73         * ACPICA requires that the first field of the context parameter
  74         * passed to acpi_install_address_space_handler() is large enough
  75         * to hold struct acpi_connection_info.
  76         */
  77        struct acpi_connection_info conn_info;
  78        struct list_head conns;
  79        struct mutex conn_lock;
  80        struct gpio_chip *chip;
  81        struct list_head events;
  82        struct list_head deferred_req_irqs_list_entry;
  83};
  84
  85/*
  86 * For GPIO chips which call acpi_gpiochip_request_interrupts() before late_init
  87 * (so builtin drivers) we register the ACPI GpioInt IRQ handlers from a
  88 * late_initcall_sync() handler, so that other builtin drivers can register their
  89 * OpRegions before the event handlers can run. This list contains GPIO chips
  90 * for which the acpi_gpiochip_request_irqs() call has been deferred.
  91 */
  92static DEFINE_MUTEX(acpi_gpio_deferred_req_irqs_lock);
  93static LIST_HEAD(acpi_gpio_deferred_req_irqs_list);
  94static bool acpi_gpio_deferred_req_irqs_done;
  95
  96static int acpi_gpiochip_find(struct gpio_chip *gc, void *data)
  97{
  98        if (!gc->parent)
  99                return false;
 100
 101        return ACPI_HANDLE(gc->parent) == data;
 102}
 103
 104/**
 105 * acpi_get_gpiod() - Translate ACPI GPIO pin to GPIO descriptor usable with GPIO API
 106 * @path:       ACPI GPIO controller full path name, (e.g. "\\_SB.GPO1")
 107 * @pin:        ACPI GPIO pin number (0-based, controller-relative)
 108 *
 109 * Return: GPIO descriptor to use with Linux generic GPIO API, or ERR_PTR
 110 * error value. Specifically returns %-EPROBE_DEFER if the referenced GPIO
 111 * controller does not have GPIO chip registered at the moment. This is to
 112 * support probe deferral.
 113 */
 114static struct gpio_desc *acpi_get_gpiod(char *path, int pin)
 115{
 116        struct gpio_chip *chip;
 117        acpi_handle handle;
 118        acpi_status status;
 119
 120        status = acpi_get_handle(NULL, path, &handle);
 121        if (ACPI_FAILURE(status))
 122                return ERR_PTR(-ENODEV);
 123
 124        chip = gpiochip_find(handle, acpi_gpiochip_find);
 125        if (!chip)
 126                return ERR_PTR(-EPROBE_DEFER);
 127
 128        return gpiochip_get_desc(chip, pin);
 129}
 130
 131static irqreturn_t acpi_gpio_irq_handler(int irq, void *data)
 132{
 133        struct acpi_gpio_event *event = data;
 134
 135        acpi_evaluate_object(event->handle, NULL, NULL, NULL);
 136
 137        return IRQ_HANDLED;
 138}
 139
 140static irqreturn_t acpi_gpio_irq_handler_evt(int irq, void *data)
 141{
 142        struct acpi_gpio_event *event = data;
 143
 144        acpi_execute_simple_method(event->handle, NULL, event->pin);
 145
 146        return IRQ_HANDLED;
 147}
 148
 149static void acpi_gpio_chip_dh(acpi_handle handle, void *data)
 150{
 151        /* The address of this function is used as a key. */
 152}
 153
 154bool acpi_gpio_get_irq_resource(struct acpi_resource *ares,
 155                                struct acpi_resource_gpio **agpio)
 156{
 157        struct acpi_resource_gpio *gpio;
 158
 159        if (ares->type != ACPI_RESOURCE_TYPE_GPIO)
 160                return false;
 161
 162        gpio = &ares->data.gpio;
 163        if (gpio->connection_type != ACPI_RESOURCE_GPIO_TYPE_INT)
 164                return false;
 165
 166        *agpio = gpio;
 167        return true;
 168}
 169EXPORT_SYMBOL_GPL(acpi_gpio_get_irq_resource);
 170
 171static void acpi_gpiochip_request_irq(struct acpi_gpio_chip *acpi_gpio,
 172                                      struct acpi_gpio_event *event)
 173{
 174        int ret, value;
 175
 176        ret = request_threaded_irq(event->irq, NULL, event->handler,
 177                                   event->irqflags, "ACPI:Event", event);
 178        if (ret) {
 179                dev_err(acpi_gpio->chip->parent,
 180                        "Failed to setup interrupt handler for %d\n",
 181                        event->irq);
 182                return;
 183        }
 184
 185        if (event->irq_is_wake)
 186                enable_irq_wake(event->irq);
 187
 188        event->irq_requested = true;
 189
 190        /* Make sure we trigger the initial state of edge-triggered IRQs */
 191        if (run_edge_events_on_boot &&
 192            (event->irqflags & (IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING))) {
 193                value = gpiod_get_raw_value_cansleep(event->desc);
 194                if (((event->irqflags & IRQF_TRIGGER_RISING) && value == 1) ||
 195                    ((event->irqflags & IRQF_TRIGGER_FALLING) && value == 0))
 196                        event->handler(event->irq, event);
 197        }
 198}
 199
 200static void acpi_gpiochip_request_irqs(struct acpi_gpio_chip *acpi_gpio)
 201{
 202        struct acpi_gpio_event *event;
 203
 204        list_for_each_entry(event, &acpi_gpio->events, node)
 205                acpi_gpiochip_request_irq(acpi_gpio, event);
 206}
 207
 208static enum gpiod_flags
 209acpi_gpio_to_gpiod_flags(const struct acpi_resource_gpio *agpio, int polarity)
 210{
 211        /* GpioInt() implies input configuration */
 212        if (agpio->connection_type == ACPI_RESOURCE_GPIO_TYPE_INT)
 213                return GPIOD_IN;
 214
 215        switch (agpio->io_restriction) {
 216        case ACPI_IO_RESTRICT_INPUT:
 217                return GPIOD_IN;
 218        case ACPI_IO_RESTRICT_OUTPUT:
 219                /*
 220                 * ACPI GPIO resources don't contain an initial value for the
 221                 * GPIO. Therefore we deduce that value from the pull field
 222                 * and the polarity instead. If the pin is pulled up we assume
 223                 * default to be high, if it is pulled down we assume default
 224                 * to be low, otherwise we leave pin untouched. For active low
 225                 * polarity values will be switched. See also
 226                 * Documentation/firmware-guide/acpi/gpio-properties.rst.
 227                 */
 228                switch (agpio->pin_config) {
 229                case ACPI_PIN_CONFIG_PULLUP:
 230                        return polarity == GPIO_ACTIVE_LOW ? GPIOD_OUT_LOW : GPIOD_OUT_HIGH;
 231                case ACPI_PIN_CONFIG_PULLDOWN:
 232                        return polarity == GPIO_ACTIVE_LOW ? GPIOD_OUT_HIGH : GPIOD_OUT_LOW;
 233                default:
 234                        break;
 235                }
 236                break;
 237        default:
 238                break;
 239        }
 240
 241        /*
 242         * Assume that the BIOS has configured the direction and pull
 243         * accordingly.
 244         */
 245        return GPIOD_ASIS;
 246}
 247
 248static struct gpio_desc *acpi_request_own_gpiod(struct gpio_chip *chip,
 249                                                struct acpi_resource_gpio *agpio,
 250                                                unsigned int index,
 251                                                const char *label)
 252{
 253        int polarity = GPIO_ACTIVE_HIGH;
 254        enum gpiod_flags flags = acpi_gpio_to_gpiod_flags(agpio, polarity);
 255        unsigned int pin = agpio->pin_table[index];
 256        struct gpio_desc *desc;
 257        int ret;
 258
 259        desc = gpiochip_request_own_desc(chip, pin, label, polarity, flags);
 260        if (IS_ERR(desc))
 261                return desc;
 262
 263        ret = gpio_set_debounce_timeout(desc, agpio->debounce_timeout);
 264        if (ret)
 265                gpiochip_free_own_desc(desc);
 266
 267        return ret ? ERR_PTR(ret) : desc;
 268}
 269
 270static bool acpi_gpio_in_ignore_list(const char *controller_in, int pin_in)
 271{
 272        const char *controller, *pin_str;
 273        int len, pin;
 274        char *endp;
 275
 276        controller = ignore_wake;
 277        while (controller) {
 278                pin_str = strchr(controller, '@');
 279                if (!pin_str)
 280                        goto err;
 281
 282                len = pin_str - controller;
 283                if (len == strlen(controller_in) &&
 284                    strncmp(controller, controller_in, len) == 0) {
 285                        pin = simple_strtoul(pin_str + 1, &endp, 10);
 286                        if (*endp != 0 && *endp != ',')
 287                                goto err;
 288
 289                        if (pin == pin_in)
 290                                return true;
 291                }
 292
 293                controller = strchr(controller, ',');
 294                if (controller)
 295                        controller++;
 296        }
 297
 298        return false;
 299err:
 300        pr_err_once("Error invalid value for gpiolib_acpi.ignore_wake: %s\n",
 301                    ignore_wake);
 302        return false;
 303}
 304
 305static bool acpi_gpio_irq_is_wake(struct device *parent,
 306                                  struct acpi_resource_gpio *agpio)
 307{
 308        int pin = agpio->pin_table[0];
 309
 310        if (agpio->wake_capable != ACPI_WAKE_CAPABLE)
 311                return false;
 312
 313        if (acpi_gpio_in_ignore_list(dev_name(parent), pin)) {
 314                dev_info(parent, "Ignoring wakeup on pin %d\n", pin);
 315                return false;
 316        }
 317
 318        return true;
 319}
 320
 321/* Always returns AE_OK so that we keep looping over the resources */
 322static acpi_status acpi_gpiochip_alloc_event(struct acpi_resource *ares,
 323                                             void *context)
 324{
 325        struct acpi_gpio_chip *acpi_gpio = context;
 326        struct gpio_chip *chip = acpi_gpio->chip;
 327        struct acpi_resource_gpio *agpio;
 328        acpi_handle handle, evt_handle;
 329        struct acpi_gpio_event *event;
 330        irq_handler_t handler = NULL;
 331        struct gpio_desc *desc;
 332        int ret, pin, irq;
 333
 334        if (!acpi_gpio_get_irq_resource(ares, &agpio))
 335                return AE_OK;
 336
 337        handle = ACPI_HANDLE(chip->parent);
 338        pin = agpio->pin_table[0];
 339
 340        if (pin <= 255) {
 341                char ev_name[5];
 342                sprintf(ev_name, "_%c%02hhX",
 343                        agpio->triggering == ACPI_EDGE_SENSITIVE ? 'E' : 'L',
 344                        pin);
 345                if (ACPI_SUCCESS(acpi_get_handle(handle, ev_name, &evt_handle)))
 346                        handler = acpi_gpio_irq_handler;
 347        }
 348        if (!handler) {
 349                if (ACPI_SUCCESS(acpi_get_handle(handle, "_EVT", &evt_handle)))
 350                        handler = acpi_gpio_irq_handler_evt;
 351        }
 352        if (!handler)
 353                return AE_OK;
 354
 355        desc = acpi_request_own_gpiod(chip, agpio, 0, "ACPI:Event");
 356        if (IS_ERR(desc)) {
 357                dev_err(chip->parent,
 358                        "Failed to request GPIO for pin 0x%04X, err %ld\n",
 359                        pin, PTR_ERR(desc));
 360                return AE_OK;
 361        }
 362
 363        ret = gpiochip_lock_as_irq(chip, pin);
 364        if (ret) {
 365                dev_err(chip->parent,
 366                        "Failed to lock GPIO pin 0x%04X as interrupt, err %d\n",
 367                        pin, ret);
 368                goto fail_free_desc;
 369        }
 370
 371        irq = gpiod_to_irq(desc);
 372        if (irq < 0) {
 373                dev_err(chip->parent,
 374                        "Failed to translate GPIO pin 0x%04X to IRQ, err %d\n",
 375                        pin, irq);
 376                goto fail_unlock_irq;
 377        }
 378
 379        event = kzalloc(sizeof(*event), GFP_KERNEL);
 380        if (!event)
 381                goto fail_unlock_irq;
 382
 383        event->irqflags = IRQF_ONESHOT;
 384        if (agpio->triggering == ACPI_LEVEL_SENSITIVE) {
 385                if (agpio->polarity == ACPI_ACTIVE_HIGH)
 386                        event->irqflags |= IRQF_TRIGGER_HIGH;
 387                else
 388                        event->irqflags |= IRQF_TRIGGER_LOW;
 389        } else {
 390                switch (agpio->polarity) {
 391                case ACPI_ACTIVE_HIGH:
 392                        event->irqflags |= IRQF_TRIGGER_RISING;
 393                        break;
 394                case ACPI_ACTIVE_LOW:
 395                        event->irqflags |= IRQF_TRIGGER_FALLING;
 396                        break;
 397                default:
 398                        event->irqflags |= IRQF_TRIGGER_RISING |
 399                                           IRQF_TRIGGER_FALLING;
 400                        break;
 401                }
 402        }
 403
 404        event->handle = evt_handle;
 405        event->handler = handler;
 406        event->irq = irq;
 407        event->irq_is_wake = acpi_gpio_irq_is_wake(chip->parent, agpio);
 408        event->pin = pin;
 409        event->desc = desc;
 410
 411        list_add_tail(&event->node, &acpi_gpio->events);
 412
 413        return AE_OK;
 414
 415fail_unlock_irq:
 416        gpiochip_unlock_as_irq(chip, pin);
 417fail_free_desc:
 418        gpiochip_free_own_desc(desc);
 419
 420        return AE_OK;
 421}
 422
 423/**
 424 * acpi_gpiochip_request_interrupts() - Register isr for gpio chip ACPI events
 425 * @chip:      GPIO chip
 426 *
 427 * ACPI5 platforms can use GPIO signaled ACPI events. These GPIO interrupts are
 428 * handled by ACPI event methods which need to be called from the GPIO
 429 * chip's interrupt handler. acpi_gpiochip_request_interrupts() finds out which
 430 * GPIO pins have ACPI event methods and assigns interrupt handlers that calls
 431 * the ACPI event methods for those pins.
 432 */
 433void acpi_gpiochip_request_interrupts(struct gpio_chip *chip)
 434{
 435        struct acpi_gpio_chip *acpi_gpio;
 436        acpi_handle handle;
 437        acpi_status status;
 438        bool defer;
 439
 440        if (!chip->parent || !chip->to_irq)
 441                return;
 442
 443        handle = ACPI_HANDLE(chip->parent);
 444        if (!handle)
 445                return;
 446
 447        status = acpi_get_data(handle, acpi_gpio_chip_dh, (void **)&acpi_gpio);
 448        if (ACPI_FAILURE(status))
 449                return;
 450
 451        acpi_walk_resources(handle, "_AEI",
 452                            acpi_gpiochip_alloc_event, acpi_gpio);
 453
 454        mutex_lock(&acpi_gpio_deferred_req_irqs_lock);
 455        defer = !acpi_gpio_deferred_req_irqs_done;
 456        if (defer)
 457                list_add(&acpi_gpio->deferred_req_irqs_list_entry,
 458                         &acpi_gpio_deferred_req_irqs_list);
 459        mutex_unlock(&acpi_gpio_deferred_req_irqs_lock);
 460
 461        if (defer)
 462                return;
 463
 464        acpi_gpiochip_request_irqs(acpi_gpio);
 465}
 466EXPORT_SYMBOL_GPL(acpi_gpiochip_request_interrupts);
 467
 468/**
 469 * acpi_gpiochip_free_interrupts() - Free GPIO ACPI event interrupts.
 470 * @chip:      GPIO chip
 471 *
 472 * Free interrupts associated with GPIO ACPI event method for the given
 473 * GPIO chip.
 474 */
 475void acpi_gpiochip_free_interrupts(struct gpio_chip *chip)
 476{
 477        struct acpi_gpio_chip *acpi_gpio;
 478        struct acpi_gpio_event *event, *ep;
 479        acpi_handle handle;
 480        acpi_status status;
 481
 482        if (!chip->parent || !chip->to_irq)
 483                return;
 484
 485        handle = ACPI_HANDLE(chip->parent);
 486        if (!handle)
 487                return;
 488
 489        status = acpi_get_data(handle, acpi_gpio_chip_dh, (void **)&acpi_gpio);
 490        if (ACPI_FAILURE(status))
 491                return;
 492
 493        mutex_lock(&acpi_gpio_deferred_req_irqs_lock);
 494        if (!list_empty(&acpi_gpio->deferred_req_irqs_list_entry))
 495                list_del_init(&acpi_gpio->deferred_req_irqs_list_entry);
 496        mutex_unlock(&acpi_gpio_deferred_req_irqs_lock);
 497
 498        list_for_each_entry_safe_reverse(event, ep, &acpi_gpio->events, node) {
 499                if (event->irq_requested) {
 500                        if (event->irq_is_wake)
 501                                disable_irq_wake(event->irq);
 502
 503                        free_irq(event->irq, event);
 504                }
 505
 506                gpiochip_unlock_as_irq(chip, event->pin);
 507                gpiochip_free_own_desc(event->desc);
 508                list_del(&event->node);
 509                kfree(event);
 510        }
 511}
 512EXPORT_SYMBOL_GPL(acpi_gpiochip_free_interrupts);
 513
 514int acpi_dev_add_driver_gpios(struct acpi_device *adev,
 515                              const struct acpi_gpio_mapping *gpios)
 516{
 517        if (adev && gpios) {
 518                adev->driver_gpios = gpios;
 519                return 0;
 520        }
 521        return -EINVAL;
 522}
 523EXPORT_SYMBOL_GPL(acpi_dev_add_driver_gpios);
 524
 525void acpi_dev_remove_driver_gpios(struct acpi_device *adev)
 526{
 527        if (adev)
 528                adev->driver_gpios = NULL;
 529}
 530EXPORT_SYMBOL_GPL(acpi_dev_remove_driver_gpios);
 531
 532static void devm_acpi_dev_release_driver_gpios(struct device *dev, void *res)
 533{
 534        acpi_dev_remove_driver_gpios(ACPI_COMPANION(dev));
 535}
 536
 537int devm_acpi_dev_add_driver_gpios(struct device *dev,
 538                                   const struct acpi_gpio_mapping *gpios)
 539{
 540        void *res;
 541        int ret;
 542
 543        res = devres_alloc(devm_acpi_dev_release_driver_gpios, 0, GFP_KERNEL);
 544        if (!res)
 545                return -ENOMEM;
 546
 547        ret = acpi_dev_add_driver_gpios(ACPI_COMPANION(dev), gpios);
 548        if (ret) {
 549                devres_free(res);
 550                return ret;
 551        }
 552        devres_add(dev, res);
 553        return 0;
 554}
 555EXPORT_SYMBOL_GPL(devm_acpi_dev_add_driver_gpios);
 556
 557void devm_acpi_dev_remove_driver_gpios(struct device *dev)
 558{
 559        WARN_ON(devres_release(dev, devm_acpi_dev_release_driver_gpios, NULL, NULL));
 560}
 561EXPORT_SYMBOL_GPL(devm_acpi_dev_remove_driver_gpios);
 562
 563static bool acpi_get_driver_gpio_data(struct acpi_device *adev,
 564                                      const char *name, int index,
 565                                      struct fwnode_reference_args *args,
 566                                      unsigned int *quirks)
 567{
 568        const struct acpi_gpio_mapping *gm;
 569
 570        if (!adev->driver_gpios)
 571                return false;
 572
 573        for (gm = adev->driver_gpios; gm->name; gm++)
 574                if (!strcmp(name, gm->name) && gm->data && index < gm->size) {
 575                        const struct acpi_gpio_params *par = gm->data + index;
 576
 577                        args->fwnode = acpi_fwnode_handle(adev);
 578                        args->args[0] = par->crs_entry_index;
 579                        args->args[1] = par->line_index;
 580                        args->args[2] = par->active_low;
 581                        args->nargs = 3;
 582
 583                        *quirks = gm->quirks;
 584                        return true;
 585                }
 586
 587        return false;
 588}
 589
 590static int
 591__acpi_gpio_update_gpiod_flags(enum gpiod_flags *flags, enum gpiod_flags update)
 592{
 593        const enum gpiod_flags mask =
 594                GPIOD_FLAGS_BIT_DIR_SET | GPIOD_FLAGS_BIT_DIR_OUT |
 595                GPIOD_FLAGS_BIT_DIR_VAL;
 596        int ret = 0;
 597
 598        /*
 599         * Check if the BIOS has IoRestriction with explicitly set direction
 600         * and update @flags accordingly. Otherwise use whatever caller asked
 601         * for.
 602         */
 603        if (update & GPIOD_FLAGS_BIT_DIR_SET) {
 604                enum gpiod_flags diff = *flags ^ update;
 605
 606                /*
 607                 * Check if caller supplied incompatible GPIO initialization
 608                 * flags.
 609                 *
 610                 * Return %-EINVAL to notify that firmware has different
 611                 * settings and we are going to use them.
 612                 */
 613                if (((*flags & GPIOD_FLAGS_BIT_DIR_SET) && (diff & GPIOD_FLAGS_BIT_DIR_OUT)) ||
 614                    ((*flags & GPIOD_FLAGS_BIT_DIR_OUT) && (diff & GPIOD_FLAGS_BIT_DIR_VAL)))
 615                        ret = -EINVAL;
 616                *flags = (*flags & ~mask) | (update & mask);
 617        }
 618        return ret;
 619}
 620
 621int
 622acpi_gpio_update_gpiod_flags(enum gpiod_flags *flags, struct acpi_gpio_info *info)
 623{
 624        struct device *dev = &info->adev->dev;
 625        enum gpiod_flags old = *flags;
 626        int ret;
 627
 628        ret = __acpi_gpio_update_gpiod_flags(&old, info->flags);
 629        if (info->quirks & ACPI_GPIO_QUIRK_NO_IO_RESTRICTION) {
 630                if (ret)
 631                        dev_warn(dev, FW_BUG "GPIO not in correct mode, fixing\n");
 632        } else {
 633                if (ret)
 634                        dev_dbg(dev, "Override GPIO initialization flags\n");
 635                *flags = old;
 636        }
 637
 638        return ret;
 639}
 640
 641int acpi_gpio_update_gpiod_lookup_flags(unsigned long *lookupflags,
 642                                        struct acpi_gpio_info *info)
 643{
 644        switch (info->pin_config) {
 645        case ACPI_PIN_CONFIG_PULLUP:
 646                *lookupflags |= GPIO_PULL_UP;
 647                break;
 648        case ACPI_PIN_CONFIG_PULLDOWN:
 649                *lookupflags |= GPIO_PULL_DOWN;
 650                break;
 651        default:
 652                break;
 653        }
 654
 655        if (info->polarity == GPIO_ACTIVE_LOW)
 656                *lookupflags |= GPIO_ACTIVE_LOW;
 657
 658        return 0;
 659}
 660
 661struct acpi_gpio_lookup {
 662        struct acpi_gpio_info info;
 663        int index;
 664        u16 pin_index;
 665        bool active_low;
 666        struct gpio_desc *desc;
 667        int n;
 668};
 669
 670static int acpi_populate_gpio_lookup(struct acpi_resource *ares, void *data)
 671{
 672        struct acpi_gpio_lookup *lookup = data;
 673
 674        if (ares->type != ACPI_RESOURCE_TYPE_GPIO)
 675                return 1;
 676
 677        if (!lookup->desc) {
 678                const struct acpi_resource_gpio *agpio = &ares->data.gpio;
 679                bool gpioint = agpio->connection_type == ACPI_RESOURCE_GPIO_TYPE_INT;
 680                u16 pin_index;
 681
 682                if (lookup->info.quirks & ACPI_GPIO_QUIRK_ONLY_GPIOIO && gpioint)
 683                        lookup->index++;
 684
 685                if (lookup->n++ != lookup->index)
 686                        return 1;
 687
 688                pin_index = lookup->pin_index;
 689                if (pin_index >= agpio->pin_table_length)
 690                        return 1;
 691
 692                lookup->desc = acpi_get_gpiod(agpio->resource_source.string_ptr,
 693                                              agpio->pin_table[pin_index]);
 694                lookup->info.pin_config = agpio->pin_config;
 695                lookup->info.debounce = agpio->debounce_timeout;
 696                lookup->info.gpioint = gpioint;
 697
 698                /*
 699                 * Polarity and triggering are only specified for GpioInt
 700                 * resource.
 701                 * Note: we expect here:
 702                 * - ACPI_ACTIVE_LOW == GPIO_ACTIVE_LOW
 703                 * - ACPI_ACTIVE_HIGH == GPIO_ACTIVE_HIGH
 704                 */
 705                if (lookup->info.gpioint) {
 706                        lookup->info.polarity = agpio->polarity;
 707                        lookup->info.triggering = agpio->triggering;
 708                } else {
 709                        lookup->info.polarity = lookup->active_low;
 710                }
 711
 712                lookup->info.flags = acpi_gpio_to_gpiod_flags(agpio, lookup->info.polarity);
 713        }
 714
 715        return 1;
 716}
 717
 718static int acpi_gpio_resource_lookup(struct acpi_gpio_lookup *lookup,
 719                                     struct acpi_gpio_info *info)
 720{
 721        struct acpi_device *adev = lookup->info.adev;
 722        struct list_head res_list;
 723        int ret;
 724
 725        INIT_LIST_HEAD(&res_list);
 726
 727        ret = acpi_dev_get_resources(adev, &res_list,
 728                                     acpi_populate_gpio_lookup,
 729                                     lookup);
 730        if (ret < 0)
 731                return ret;
 732
 733        acpi_dev_free_resource_list(&res_list);
 734
 735        if (!lookup->desc)
 736                return -ENOENT;
 737
 738        if (info)
 739                *info = lookup->info;
 740        return 0;
 741}
 742
 743static int acpi_gpio_property_lookup(struct fwnode_handle *fwnode,
 744                                     const char *propname, int index,
 745                                     struct acpi_gpio_lookup *lookup)
 746{
 747        struct fwnode_reference_args args;
 748        unsigned int quirks = 0;
 749        int ret;
 750
 751        memset(&args, 0, sizeof(args));
 752        ret = __acpi_node_get_property_reference(fwnode, propname, index, 3,
 753                                                 &args);
 754        if (ret) {
 755                struct acpi_device *adev = to_acpi_device_node(fwnode);
 756
 757                if (!adev)
 758                        return ret;
 759
 760                if (!acpi_get_driver_gpio_data(adev, propname, index, &args,
 761                                               &quirks))
 762                        return ret;
 763        }
 764        /*
 765         * The property was found and resolved, so need to lookup the GPIO based
 766         * on returned args.
 767         */
 768        if (!to_acpi_device_node(args.fwnode))
 769                return -EINVAL;
 770        if (args.nargs != 3)
 771                return -EPROTO;
 772
 773        lookup->index = args.args[0];
 774        lookup->pin_index = args.args[1];
 775        lookup->active_low = !!args.args[2];
 776
 777        lookup->info.adev = to_acpi_device_node(args.fwnode);
 778        lookup->info.quirks = quirks;
 779
 780        return 0;
 781}
 782
 783/**
 784 * acpi_get_gpiod_by_index() - get a GPIO descriptor from device resources
 785 * @adev: pointer to a ACPI device to get GPIO from
 786 * @propname: Property name of the GPIO (optional)
 787 * @index: index of GpioIo/GpioInt resource (starting from %0)
 788 * @info: info pointer to fill in (optional)
 789 *
 790 * Function goes through ACPI resources for @adev and based on @index looks
 791 * up a GpioIo/GpioInt resource, translates it to the Linux GPIO descriptor,
 792 * and returns it. @index matches GpioIo/GpioInt resources only so if there
 793 * are total %3 GPIO resources, the index goes from %0 to %2.
 794 *
 795 * If @propname is specified the GPIO is looked using device property. In
 796 * that case @index is used to select the GPIO entry in the property value
 797 * (in case of multiple).
 798 *
 799 * If the GPIO cannot be translated or there is an error, an ERR_PTR is
 800 * returned.
 801 *
 802 * Note: if the GPIO resource has multiple entries in the pin list, this
 803 * function only returns the first.
 804 */
 805static struct gpio_desc *acpi_get_gpiod_by_index(struct acpi_device *adev,
 806                                          const char *propname, int index,
 807                                          struct acpi_gpio_info *info)
 808{
 809        struct acpi_gpio_lookup lookup;
 810        int ret;
 811
 812        if (!adev)
 813                return ERR_PTR(-ENODEV);
 814
 815        memset(&lookup, 0, sizeof(lookup));
 816        lookup.index = index;
 817
 818        if (propname) {
 819                dev_dbg(&adev->dev, "GPIO: looking up %s\n", propname);
 820
 821                ret = acpi_gpio_property_lookup(acpi_fwnode_handle(adev),
 822                                                propname, index, &lookup);
 823                if (ret)
 824                        return ERR_PTR(ret);
 825
 826                dev_dbg(&adev->dev, "GPIO: _DSD returned %s %d %u %u\n",
 827                        dev_name(&lookup.info.adev->dev), lookup.index,
 828                        lookup.pin_index, lookup.active_low);
 829        } else {
 830                dev_dbg(&adev->dev, "GPIO: looking up %d in _CRS\n", index);
 831                lookup.info.adev = adev;
 832        }
 833
 834        ret = acpi_gpio_resource_lookup(&lookup, info);
 835        return ret ? ERR_PTR(ret) : lookup.desc;
 836}
 837
 838static bool acpi_can_fallback_to_crs(struct acpi_device *adev,
 839                                     const char *con_id)
 840{
 841        /* Never allow fallback if the device has properties */
 842        if (acpi_dev_has_props(adev) || adev->driver_gpios)
 843                return false;
 844
 845        return con_id == NULL;
 846}
 847
 848struct gpio_desc *acpi_find_gpio(struct device *dev,
 849                                 const char *con_id,
 850                                 unsigned int idx,
 851                                 enum gpiod_flags *dflags,
 852                                 unsigned long *lookupflags)
 853{
 854        struct acpi_device *adev = ACPI_COMPANION(dev);
 855        struct acpi_gpio_info info;
 856        struct gpio_desc *desc;
 857        char propname[32];
 858        int i;
 859
 860        /* Try first from _DSD */
 861        for (i = 0; i < ARRAY_SIZE(gpio_suffixes); i++) {
 862                if (con_id) {
 863                        snprintf(propname, sizeof(propname), "%s-%s",
 864                                 con_id, gpio_suffixes[i]);
 865                } else {
 866                        snprintf(propname, sizeof(propname), "%s",
 867                                 gpio_suffixes[i]);
 868                }
 869
 870                desc = acpi_get_gpiod_by_index(adev, propname, idx, &info);
 871                if (!IS_ERR(desc))
 872                        break;
 873                if (PTR_ERR(desc) == -EPROBE_DEFER)
 874                        return ERR_CAST(desc);
 875        }
 876
 877        /* Then from plain _CRS GPIOs */
 878        if (IS_ERR(desc)) {
 879                if (!acpi_can_fallback_to_crs(adev, con_id))
 880                        return ERR_PTR(-ENOENT);
 881
 882                desc = acpi_get_gpiod_by_index(adev, NULL, idx, &info);
 883                if (IS_ERR(desc))
 884                        return desc;
 885        }
 886
 887        if (info.gpioint &&
 888            (*dflags == GPIOD_OUT_LOW || *dflags == GPIOD_OUT_HIGH)) {
 889                dev_dbg(dev, "refusing GpioInt() entry when doing GPIOD_OUT_* lookup\n");
 890                return ERR_PTR(-ENOENT);
 891        }
 892
 893        acpi_gpio_update_gpiod_flags(dflags, &info);
 894        acpi_gpio_update_gpiod_lookup_flags(lookupflags, &info);
 895        return desc;
 896}
 897
 898/**
 899 * acpi_node_get_gpiod() - get a GPIO descriptor from ACPI resources
 900 * @fwnode: pointer to an ACPI firmware node to get the GPIO information from
 901 * @propname: Property name of the GPIO
 902 * @index: index of GpioIo/GpioInt resource (starting from %0)
 903 * @info: info pointer to fill in (optional)
 904 *
 905 * If @fwnode is an ACPI device object, call acpi_get_gpiod_by_index() for it.
 906 * Otherwise (i.e. it is a data-only non-device object), use the property-based
 907 * GPIO lookup to get to the GPIO resource with the relevant information and use
 908 * that to obtain the GPIO descriptor to return.
 909 *
 910 * If the GPIO cannot be translated or there is an error an ERR_PTR is
 911 * returned.
 912 */
 913struct gpio_desc *acpi_node_get_gpiod(struct fwnode_handle *fwnode,
 914                                      const char *propname, int index,
 915                                      struct acpi_gpio_info *info)
 916{
 917        struct acpi_gpio_lookup lookup;
 918        struct acpi_device *adev;
 919        int ret;
 920
 921        adev = to_acpi_device_node(fwnode);
 922        if (adev)
 923                return acpi_get_gpiod_by_index(adev, propname, index, info);
 924
 925        if (!is_acpi_data_node(fwnode))
 926                return ERR_PTR(-ENODEV);
 927
 928        if (!propname)
 929                return ERR_PTR(-EINVAL);
 930
 931        memset(&lookup, 0, sizeof(lookup));
 932        lookup.index = index;
 933
 934        ret = acpi_gpio_property_lookup(fwnode, propname, index, &lookup);
 935        if (ret)
 936                return ERR_PTR(ret);
 937
 938        ret = acpi_gpio_resource_lookup(&lookup, info);
 939        return ret ? ERR_PTR(ret) : lookup.desc;
 940}
 941
 942/**
 943 * acpi_dev_gpio_irq_get() - Find GpioInt and translate it to Linux IRQ number
 944 * @adev: pointer to a ACPI device to get IRQ from
 945 * @index: index of GpioInt resource (starting from %0)
 946 *
 947 * If the device has one or more GpioInt resources, this function can be
 948 * used to translate from the GPIO offset in the resource to the Linux IRQ
 949 * number.
 950 *
 951 * The function is idempotent, though each time it runs it will configure GPIO
 952 * pin direction according to the flags in GpioInt resource.
 953 *
 954 * Return: Linux IRQ number (> %0) on success, negative errno on failure.
 955 */
 956int acpi_dev_gpio_irq_get(struct acpi_device *adev, int index)
 957{
 958        int idx, i;
 959        unsigned int irq_flags;
 960        int ret;
 961
 962        for (i = 0, idx = 0; idx <= index; i++) {
 963                struct acpi_gpio_info info;
 964                struct gpio_desc *desc;
 965
 966                desc = acpi_get_gpiod_by_index(adev, NULL, i, &info);
 967
 968                /* Ignore -EPROBE_DEFER, it only matters if idx matches */
 969                if (IS_ERR(desc) && PTR_ERR(desc) != -EPROBE_DEFER)
 970                        return PTR_ERR(desc);
 971
 972                if (info.gpioint && idx++ == index) {
 973                        unsigned long lflags = GPIO_LOOKUP_FLAGS_DEFAULT;
 974                        enum gpiod_flags dflags = GPIOD_ASIS;
 975                        char label[32];
 976                        int irq;
 977
 978                        if (IS_ERR(desc))
 979                                return PTR_ERR(desc);
 980
 981                        irq = gpiod_to_irq(desc);
 982                        if (irq < 0)
 983                                return irq;
 984
 985                        acpi_gpio_update_gpiod_flags(&dflags, &info);
 986                        acpi_gpio_update_gpiod_lookup_flags(&lflags, &info);
 987
 988                        snprintf(label, sizeof(label), "GpioInt() %d", index);
 989                        ret = gpiod_configure_flags(desc, label, lflags, dflags);
 990                        if (ret < 0)
 991                                return ret;
 992
 993                        ret = gpio_set_debounce_timeout(desc, info.debounce);
 994                        if (ret)
 995                                return ret;
 996
 997                        irq_flags = acpi_dev_get_irq_type(info.triggering,
 998                                                          info.polarity);
 999
1000                        /* Set type if specified and different than the current one */
1001                        if (irq_flags != IRQ_TYPE_NONE &&
1002                            irq_flags != irq_get_trigger_type(irq))
1003                                irq_set_irq_type(irq, irq_flags);
1004
1005                        return irq;
1006                }
1007
1008        }
1009        return -ENOENT;
1010}
1011EXPORT_SYMBOL_GPL(acpi_dev_gpio_irq_get);
1012
1013static acpi_status
1014acpi_gpio_adr_space_handler(u32 function, acpi_physical_address address,
1015                            u32 bits, u64 *value, void *handler_context,
1016                            void *region_context)
1017{
1018        struct acpi_gpio_chip *achip = region_context;
1019        struct gpio_chip *chip = achip->chip;
1020        struct acpi_resource_gpio *agpio;
1021        struct acpi_resource *ares;
1022        u16 pin_index = address;
1023        acpi_status status;
1024        int length;
1025        int i;
1026
1027        status = acpi_buffer_to_resource(achip->conn_info.connection,
1028                                         achip->conn_info.length, &ares);
1029        if (ACPI_FAILURE(status))
1030                return status;
1031
1032        if (WARN_ON(ares->type != ACPI_RESOURCE_TYPE_GPIO)) {
1033                ACPI_FREE(ares);
1034                return AE_BAD_PARAMETER;
1035        }
1036
1037        agpio = &ares->data.gpio;
1038
1039        if (WARN_ON(agpio->io_restriction == ACPI_IO_RESTRICT_INPUT &&
1040            function == ACPI_WRITE)) {
1041                ACPI_FREE(ares);
1042                return AE_BAD_PARAMETER;
1043        }
1044
1045        length = min_t(u16, agpio->pin_table_length, pin_index + bits);
1046        for (i = pin_index; i < length; ++i) {
1047                int pin = agpio->pin_table[i];
1048                struct acpi_gpio_connection *conn;
1049                struct gpio_desc *desc;
1050                bool found;
1051
1052                mutex_lock(&achip->conn_lock);
1053
1054                found = false;
1055                list_for_each_entry(conn, &achip->conns, node) {
1056                        if (conn->pin == pin) {
1057                                found = true;
1058                                desc = conn->desc;
1059                                break;
1060                        }
1061                }
1062
1063                /*
1064                 * The same GPIO can be shared between operation region and
1065                 * event but only if the access here is ACPI_READ. In that
1066                 * case we "borrow" the event GPIO instead.
1067                 */
1068                if (!found && agpio->shareable == ACPI_SHARED &&
1069                     function == ACPI_READ) {
1070                        struct acpi_gpio_event *event;
1071
1072                        list_for_each_entry(event, &achip->events, node) {
1073                                if (event->pin == pin) {
1074                                        desc = event->desc;
1075                                        found = true;
1076                                        break;
1077                                }
1078                        }
1079                }
1080
1081                if (!found) {
1082                        desc = acpi_request_own_gpiod(chip, agpio, i, "ACPI:OpRegion");
1083                        if (IS_ERR(desc)) {
1084                                mutex_unlock(&achip->conn_lock);
1085                                status = AE_ERROR;
1086                                goto out;
1087                        }
1088
1089                        conn = kzalloc(sizeof(*conn), GFP_KERNEL);
1090                        if (!conn) {
1091                                gpiochip_free_own_desc(desc);
1092                                mutex_unlock(&achip->conn_lock);
1093                                status = AE_NO_MEMORY;
1094                                goto out;
1095                        }
1096
1097                        conn->pin = pin;
1098                        conn->desc = desc;
1099                        list_add_tail(&conn->node, &achip->conns);
1100                }
1101
1102                mutex_unlock(&achip->conn_lock);
1103
1104                if (function == ACPI_WRITE)
1105                        gpiod_set_raw_value_cansleep(desc, !!(*value & BIT(i)));
1106                else
1107                        *value |= (u64)gpiod_get_raw_value_cansleep(desc) << i;
1108        }
1109
1110out:
1111        ACPI_FREE(ares);
1112        return status;
1113}
1114
1115static void acpi_gpiochip_request_regions(struct acpi_gpio_chip *achip)
1116{
1117        struct gpio_chip *chip = achip->chip;
1118        acpi_handle handle = ACPI_HANDLE(chip->parent);
1119        acpi_status status;
1120
1121        INIT_LIST_HEAD(&achip->conns);
1122        mutex_init(&achip->conn_lock);
1123        status = acpi_install_address_space_handler(handle, ACPI_ADR_SPACE_GPIO,
1124                                                    acpi_gpio_adr_space_handler,
1125                                                    NULL, achip);
1126        if (ACPI_FAILURE(status))
1127                dev_err(chip->parent,
1128                        "Failed to install GPIO OpRegion handler\n");
1129}
1130
1131static void acpi_gpiochip_free_regions(struct acpi_gpio_chip *achip)
1132{
1133        struct gpio_chip *chip = achip->chip;
1134        acpi_handle handle = ACPI_HANDLE(chip->parent);
1135        struct acpi_gpio_connection *conn, *tmp;
1136        acpi_status status;
1137
1138        status = acpi_remove_address_space_handler(handle, ACPI_ADR_SPACE_GPIO,
1139                                                   acpi_gpio_adr_space_handler);
1140        if (ACPI_FAILURE(status)) {
1141                dev_err(chip->parent,
1142                        "Failed to remove GPIO OpRegion handler\n");
1143                return;
1144        }
1145
1146        list_for_each_entry_safe_reverse(conn, tmp, &achip->conns, node) {
1147                gpiochip_free_own_desc(conn->desc);
1148                list_del(&conn->node);
1149                kfree(conn);
1150        }
1151}
1152
1153static struct gpio_desc *
1154acpi_gpiochip_parse_own_gpio(struct acpi_gpio_chip *achip,
1155                             struct fwnode_handle *fwnode,
1156                             const char **name,
1157                             unsigned long *lflags,
1158                             enum gpiod_flags *dflags)
1159{
1160        struct gpio_chip *chip = achip->chip;
1161        struct gpio_desc *desc;
1162        u32 gpios[2];
1163        int ret;
1164
1165        *lflags = GPIO_LOOKUP_FLAGS_DEFAULT;
1166        *dflags = GPIOD_ASIS;
1167        *name = NULL;
1168
1169        ret = fwnode_property_read_u32_array(fwnode, "gpios", gpios,
1170                                             ARRAY_SIZE(gpios));
1171        if (ret < 0)
1172                return ERR_PTR(ret);
1173
1174        desc = gpiochip_get_desc(chip, gpios[0]);
1175        if (IS_ERR(desc))
1176                return desc;
1177
1178        if (gpios[1])
1179                *lflags |= GPIO_ACTIVE_LOW;
1180
1181        if (fwnode_property_present(fwnode, "input"))
1182                *dflags |= GPIOD_IN;
1183        else if (fwnode_property_present(fwnode, "output-low"))
1184                *dflags |= GPIOD_OUT_LOW;
1185        else if (fwnode_property_present(fwnode, "output-high"))
1186                *dflags |= GPIOD_OUT_HIGH;
1187        else
1188                return ERR_PTR(-EINVAL);
1189
1190        fwnode_property_read_string(fwnode, "line-name", name);
1191
1192        return desc;
1193}
1194
1195static void acpi_gpiochip_scan_gpios(struct acpi_gpio_chip *achip)
1196{
1197        struct gpio_chip *chip = achip->chip;
1198        struct fwnode_handle *fwnode;
1199
1200        device_for_each_child_node(chip->parent, fwnode) {
1201                unsigned long lflags;
1202                enum gpiod_flags dflags;
1203                struct gpio_desc *desc;
1204                const char *name;
1205                int ret;
1206
1207                if (!fwnode_property_present(fwnode, "gpio-hog"))
1208                        continue;
1209
1210                desc = acpi_gpiochip_parse_own_gpio(achip, fwnode, &name,
1211                                                    &lflags, &dflags);
1212                if (IS_ERR(desc))
1213                        continue;
1214
1215                ret = gpiod_hog(desc, name, lflags, dflags);
1216                if (ret) {
1217                        dev_err(chip->parent, "Failed to hog GPIO\n");
1218                        fwnode_handle_put(fwnode);
1219                        return;
1220                }
1221        }
1222}
1223
1224void acpi_gpiochip_add(struct gpio_chip *chip)
1225{
1226        struct acpi_gpio_chip *acpi_gpio;
1227        acpi_handle handle;
1228        acpi_status status;
1229
1230        if (!chip || !chip->parent)
1231                return;
1232
1233        handle = ACPI_HANDLE(chip->parent);
1234        if (!handle)
1235                return;
1236
1237        acpi_gpio = kzalloc(sizeof(*acpi_gpio), GFP_KERNEL);
1238        if (!acpi_gpio) {
1239                dev_err(chip->parent,
1240                        "Failed to allocate memory for ACPI GPIO chip\n");
1241                return;
1242        }
1243
1244        acpi_gpio->chip = chip;
1245        INIT_LIST_HEAD(&acpi_gpio->events);
1246        INIT_LIST_HEAD(&acpi_gpio->deferred_req_irqs_list_entry);
1247
1248        status = acpi_attach_data(handle, acpi_gpio_chip_dh, acpi_gpio);
1249        if (ACPI_FAILURE(status)) {
1250                dev_err(chip->parent, "Failed to attach ACPI GPIO chip\n");
1251                kfree(acpi_gpio);
1252                return;
1253        }
1254
1255        acpi_gpiochip_request_regions(acpi_gpio);
1256        acpi_gpiochip_scan_gpios(acpi_gpio);
1257        acpi_walk_dep_device_list(handle);
1258}
1259
1260void acpi_gpiochip_remove(struct gpio_chip *chip)
1261{
1262        struct acpi_gpio_chip *acpi_gpio;
1263        acpi_handle handle;
1264        acpi_status status;
1265
1266        if (!chip || !chip->parent)
1267                return;
1268
1269        handle = ACPI_HANDLE(chip->parent);
1270        if (!handle)
1271                return;
1272
1273        status = acpi_get_data(handle, acpi_gpio_chip_dh, (void **)&acpi_gpio);
1274        if (ACPI_FAILURE(status)) {
1275                dev_warn(chip->parent, "Failed to retrieve ACPI GPIO chip\n");
1276                return;
1277        }
1278
1279        acpi_gpiochip_free_regions(acpi_gpio);
1280
1281        acpi_detach_data(handle, acpi_gpio_chip_dh);
1282        kfree(acpi_gpio);
1283}
1284
1285static int acpi_gpio_package_count(const union acpi_object *obj)
1286{
1287        const union acpi_object *element = obj->package.elements;
1288        const union acpi_object *end = element + obj->package.count;
1289        unsigned int count = 0;
1290
1291        while (element < end) {
1292                switch (element->type) {
1293                case ACPI_TYPE_LOCAL_REFERENCE:
1294                        element += 3;
1295                        fallthrough;
1296                case ACPI_TYPE_INTEGER:
1297                        element++;
1298                        count++;
1299                        break;
1300
1301                default:
1302                        return -EPROTO;
1303                }
1304        }
1305
1306        return count;
1307}
1308
1309static int acpi_find_gpio_count(struct acpi_resource *ares, void *data)
1310{
1311        unsigned int *count = data;
1312
1313        if (ares->type == ACPI_RESOURCE_TYPE_GPIO)
1314                *count += ares->data.gpio.pin_table_length;
1315
1316        return 1;
1317}
1318
1319/**
1320 * acpi_gpio_count - count the GPIOs associated with a device / function
1321 * @dev:        GPIO consumer, can be %NULL for system-global GPIOs
1322 * @con_id:     function within the GPIO consumer
1323 *
1324 * Return:
1325 * The number of GPIOs associated with a device / function or %-ENOENT,
1326 * if no GPIO has been assigned to the requested function.
1327 */
1328int acpi_gpio_count(struct device *dev, const char *con_id)
1329{
1330        struct acpi_device *adev = ACPI_COMPANION(dev);
1331        const union acpi_object *obj;
1332        const struct acpi_gpio_mapping *gm;
1333        int count = -ENOENT;
1334        int ret;
1335        char propname[32];
1336        unsigned int i;
1337
1338        /* Try first from _DSD */
1339        for (i = 0; i < ARRAY_SIZE(gpio_suffixes); i++) {
1340                if (con_id)
1341                        snprintf(propname, sizeof(propname), "%s-%s",
1342                                 con_id, gpio_suffixes[i]);
1343                else
1344                        snprintf(propname, sizeof(propname), "%s",
1345                                 gpio_suffixes[i]);
1346
1347                ret = acpi_dev_get_property(adev, propname, ACPI_TYPE_ANY,
1348                                            &obj);
1349                if (ret == 0) {
1350                        if (obj->type == ACPI_TYPE_LOCAL_REFERENCE)
1351                                count = 1;
1352                        else if (obj->type == ACPI_TYPE_PACKAGE)
1353                                count = acpi_gpio_package_count(obj);
1354                } else if (adev->driver_gpios) {
1355                        for (gm = adev->driver_gpios; gm->name; gm++)
1356                                if (strcmp(propname, gm->name) == 0) {
1357                                        count = gm->size;
1358                                        break;
1359                                }
1360                }
1361                if (count > 0)
1362                        break;
1363        }
1364
1365        /* Then from plain _CRS GPIOs */
1366        if (count < 0) {
1367                struct list_head resource_list;
1368                unsigned int crs_count = 0;
1369
1370                if (!acpi_can_fallback_to_crs(adev, con_id))
1371                        return count;
1372
1373                INIT_LIST_HEAD(&resource_list);
1374                acpi_dev_get_resources(adev, &resource_list,
1375                                       acpi_find_gpio_count, &crs_count);
1376                acpi_dev_free_resource_list(&resource_list);
1377                if (crs_count > 0)
1378                        count = crs_count;
1379        }
1380        return count ? count : -ENOENT;
1381}
1382
1383/* Run deferred acpi_gpiochip_request_irqs() */
1384static int __init acpi_gpio_handle_deferred_request_irqs(void)
1385{
1386        struct acpi_gpio_chip *acpi_gpio, *tmp;
1387
1388        mutex_lock(&acpi_gpio_deferred_req_irqs_lock);
1389        list_for_each_entry_safe(acpi_gpio, tmp,
1390                                 &acpi_gpio_deferred_req_irqs_list,
1391                                 deferred_req_irqs_list_entry)
1392                acpi_gpiochip_request_irqs(acpi_gpio);
1393
1394        acpi_gpio_deferred_req_irqs_done = true;
1395        mutex_unlock(&acpi_gpio_deferred_req_irqs_lock);
1396
1397        return 0;
1398}
1399/* We must use _sync so that this runs after the first deferred_probe run */
1400late_initcall_sync(acpi_gpio_handle_deferred_request_irqs);
1401
1402static const struct dmi_system_id gpiolib_acpi_quirks[] __initconst = {
1403        {
1404                /*
1405                 * The Minix Neo Z83-4 has a micro-USB-B id-pin handler for
1406                 * a non existing micro-USB-B connector which puts the HDMI
1407                 * DDC pins in GPIO mode, breaking HDMI support.
1408                 */
1409                .matches = {
1410                        DMI_MATCH(DMI_SYS_VENDOR, "MINIX"),
1411                        DMI_MATCH(DMI_PRODUCT_NAME, "Z83-4"),
1412                },
1413                .driver_data = &(struct acpi_gpiolib_dmi_quirk) {
1414                        .no_edge_events_on_boot = true,
1415                },
1416        },
1417        {
1418                /*
1419                 * The Terra Pad 1061 has a micro-USB-B id-pin handler, which
1420                 * instead of controlling the actual micro-USB-B turns the 5V
1421                 * boost for its USB-A connector off. The actual micro-USB-B
1422                 * connector is wired for charging only.
1423                 */
1424                .matches = {
1425                        DMI_MATCH(DMI_SYS_VENDOR, "Wortmann_AG"),
1426                        DMI_MATCH(DMI_PRODUCT_NAME, "TERRA_PAD_1061"),
1427                },
1428                .driver_data = &(struct acpi_gpiolib_dmi_quirk) {
1429                        .no_edge_events_on_boot = true,
1430                },
1431        },
1432        {
1433                /*
1434                 * HP X2 10 models with Cherry Trail SoC + TI PMIC use an
1435                 * external embedded-controller connected via I2C + an ACPI GPIO
1436                 * event handler on INT33FF:01 pin 0, causing spurious wakeups.
1437                 * When suspending by closing the LID, the power to the USB
1438                 * keyboard is turned off, causing INT0002 ACPI events to
1439                 * trigger once the XHCI controller notices the keyboard is
1440                 * gone. So INT0002 events cause spurious wakeups too. Ignoring
1441                 * EC wakes breaks wakeup when opening the lid, the user needs
1442                 * to press the power-button to wakeup the system. The
1443                 * alternative is suspend simply not working, which is worse.
1444                 */
1445                .matches = {
1446                        DMI_MATCH(DMI_SYS_VENDOR, "HP"),
1447                        DMI_MATCH(DMI_PRODUCT_NAME, "HP x2 Detachable 10-p0XX"),
1448                },
1449                .driver_data = &(struct acpi_gpiolib_dmi_quirk) {
1450                        .ignore_wake = "INT33FF:01@0,INT0002:00@2",
1451                },
1452        },
1453        {
1454                /*
1455                 * HP X2 10 models with Bay Trail SoC + AXP288 PMIC use an
1456                 * external embedded-controller connected via I2C + an ACPI GPIO
1457                 * event handler on INT33FC:02 pin 28, causing spurious wakeups.
1458                 */
1459                .matches = {
1460                        DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
1461                        DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion x2 Detachable"),
1462                        DMI_MATCH(DMI_BOARD_NAME, "815D"),
1463                },
1464                .driver_data = &(struct acpi_gpiolib_dmi_quirk) {
1465                        .ignore_wake = "INT33FC:02@28",
1466                },
1467        },
1468        {
1469                /*
1470                 * HP X2 10 models with Cherry Trail SoC + AXP288 PMIC use an
1471                 * external embedded-controller connected via I2C + an ACPI GPIO
1472                 * event handler on INT33FF:01 pin 0, causing spurious wakeups.
1473                 */
1474                .matches = {
1475                        DMI_MATCH(DMI_SYS_VENDOR, "HP"),
1476                        DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion x2 Detachable"),
1477                        DMI_MATCH(DMI_BOARD_NAME, "813E"),
1478                },
1479                .driver_data = &(struct acpi_gpiolib_dmi_quirk) {
1480                        .ignore_wake = "INT33FF:01@0",
1481                },
1482        },
1483        {} /* Terminating entry */
1484};
1485
1486static int __init acpi_gpio_setup_params(void)
1487{
1488        const struct acpi_gpiolib_dmi_quirk *quirk = NULL;
1489        const struct dmi_system_id *id;
1490
1491        id = dmi_first_match(gpiolib_acpi_quirks);
1492        if (id)
1493                quirk = id->driver_data;
1494
1495        if (run_edge_events_on_boot < 0) {
1496                if (quirk && quirk->no_edge_events_on_boot)
1497                        run_edge_events_on_boot = 0;
1498                else
1499                        run_edge_events_on_boot = 1;
1500        }
1501
1502        if (ignore_wake == NULL && quirk && quirk->ignore_wake)
1503                ignore_wake = quirk->ignore_wake;
1504
1505        return 0;
1506}
1507
1508/* Directly after dmi_setup() which runs as core_initcall() */
1509postcore_initcall(acpi_gpio_setup_params);
1510