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