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