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