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