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