cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

gpiolib-acpi.c (42501B)


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