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