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