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