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