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