1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Copyright (C) 2025 Linaro Ltd. 4 */ 5 6 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 7 8 #include <linux/auxiliary_bus.h> 9 #include <linux/cleanup.h> 10 #include <linux/device.h> 11 #include <linux/fwnode.h> 12 #include <linux/gpio/consumer.h> 13 #include <linux/gpio/machine.h> 14 #include <linux/idr.h> 15 #include <linux/kref.h> 16 #include <linux/list.h> 17 #include <linux/lockdep.h> 18 #include <linux/module.h> 19 #include <linux/mutex.h> 20 #include <linux/of.h> 21 #include <linux/overflow.h> 22 #include <linux/printk.h> 23 #include <linux/property.h> 24 #include <linux/slab.h> 25 #include <linux/string.h> 26 27 #include "gpiolib.h" 28 #include "gpiolib-shared.h" 29 30 /* Represents a single reference to a GPIO pin. */ 31 struct gpio_shared_ref { 32 struct list_head list; 33 /* Firmware node associated with this GPIO's consumer. */ 34 struct fwnode_handle *fwnode; 35 /* GPIO flags this consumer uses for the request. */ 36 enum gpiod_flags flags; 37 char *con_id; 38 int dev_id; 39 /* Protects the auxiliary device struct and the lookup table. */ 40 struct mutex lock; 41 struct lock_class_key lock_key; 42 struct auxiliary_device adev; 43 struct gpiod_lookup_table *lookup; 44 bool is_reset_gpio; 45 }; 46 47 /* Represents a single GPIO pin. */ 48 struct gpio_shared_entry { 49 struct list_head list; 50 /* Firmware node associated with the GPIO controller. */ 51 struct fwnode_handle *fwnode; 52 /* Hardware offset of the GPIO within its chip. */ 53 unsigned int offset; 54 /* Index in the property value array. */ 55 size_t index; 56 /* Synchronizes the modification of shared_desc. */ 57 struct mutex lock; 58 struct gpio_shared_desc *shared_desc; 59 struct kref ref; 60 struct list_head refs; 61 }; 62 63 static LIST_HEAD(gpio_shared_list); 64 static DEFINE_IDA(gpio_shared_ida); 65 66 #if IS_ENABLED(CONFIG_OF) 67 static struct gpio_shared_entry * 68 gpio_shared_find_entry(struct fwnode_handle *controller_node, 69 unsigned int offset) 70 { 71 struct gpio_shared_entry *entry; 72 73 list_for_each_entry(entry, &gpio_shared_list, list) { 74 if (entry->fwnode == controller_node && entry->offset == offset) 75 return entry; 76 } 77 78 return NULL; 79 } 80 81 static struct gpio_shared_ref *gpio_shared_make_ref(struct fwnode_handle *fwnode, 82 const char *con_id, 83 enum gpiod_flags flags) 84 { 85 char *con_id_cpy __free(kfree) = NULL; 86 87 struct gpio_shared_ref *ref __free(kfree) = kzalloc_obj(*ref, 88 GFP_KERNEL); 89 if (!ref) 90 return NULL; 91 92 if (con_id) { 93 con_id_cpy = kstrdup(con_id, GFP_KERNEL); 94 if (!con_id_cpy) 95 return NULL; 96 } 97 98 ref->dev_id = ida_alloc(&gpio_shared_ida, GFP_KERNEL); 99 if (ref->dev_id < 0) 100 return NULL; 101 102 ref->flags = flags; 103 ref->con_id = no_free_ptr(con_id_cpy); 104 ref->fwnode = fwnode; 105 lockdep_register_key(&ref->lock_key); 106 mutex_init_with_key(&ref->lock, &ref->lock_key); 107 108 return no_free_ptr(ref); 109 } 110 111 static int gpio_shared_setup_reset_proxy(struct gpio_shared_entry *entry, 112 enum gpiod_flags flags) 113 { 114 struct gpio_shared_ref *ref; 115 116 list_for_each_entry(ref, &entry->refs, list) { 117 if (ref->is_reset_gpio) 118 /* Already set-up. */ 119 return 0; 120 } 121 122 ref = gpio_shared_make_ref(NULL, "reset", flags); 123 if (!ref) 124 return -ENOMEM; 125 126 ref->is_reset_gpio = true; 127 128 list_add_tail(&ref->list, &entry->refs); 129 130 pr_debug("Created a secondary shared GPIO reference for potential reset-gpio device for GPIO %u at %s\n", 131 entry->offset, fwnode_get_name(entry->fwnode)); 132 133 return 0; 134 } 135 136 /* Handle all special nodes that we should ignore. */ 137 static bool gpio_shared_of_node_ignore(struct device_node *node) 138 { 139 /* Ignore disabled devices. */ 140 if (!of_device_is_available(node)) 141 return true; 142 143 /* 144 * __symbols__ is a special, internal node and should not be considered 145 * when scanning for shared GPIOs. 146 */ 147 if (of_node_name_eq(node, "__symbols__")) 148 return true; 149 150 /* 151 * GPIO hogs have a "gpios" property which is not a phandle and can't 152 * possibly refer to a shared GPIO. 153 */ 154 if (of_property_present(node, "gpio-hog")) 155 return true; 156 157 return false; 158 } 159 160 static int gpio_shared_of_traverse(struct device_node *curr) 161 { 162 struct gpio_shared_entry *entry; 163 size_t con_id_len, suffix_len; 164 struct fwnode_handle *fwnode; 165 struct of_phandle_args args; 166 struct gpio_shared_ref *ref; 167 struct property *prop; 168 unsigned int offset; 169 const char *suffix; 170 int ret, count, i; 171 172 if (gpio_shared_of_node_ignore(curr)) 173 return 0; 174 175 for_each_property_of_node(curr, prop) { 176 /* 177 * The standard name for a GPIO property is "foo-gpios" 178 * or "foo-gpio". Some bindings also use "gpios" or "gpio". 179 * There are some legacy device-trees which have a different 180 * naming convention and for which we have rename quirks in 181 * place in gpiolib-of.c. I don't think any of them require 182 * support for shared GPIOs so for now let's just ignore 183 * them. We can always just export the quirk list and 184 * iterate over it here. 185 */ 186 if (!strends(prop->name, "-gpios") && 187 !strends(prop->name, "-gpio") && 188 strcmp(prop->name, "gpios") != 0 && 189 strcmp(prop->name, "gpio") != 0) 190 continue; 191 192 count = of_count_phandle_with_args(curr, prop->name, 193 "#gpio-cells"); 194 if (count <= 0) 195 continue; 196 197 for (i = 0; i < count; i++) { 198 struct device_node *np __free(device_node) = NULL; 199 char *con_id __free(kfree) = NULL; 200 201 ret = of_parse_phandle_with_args(curr, prop->name, 202 "#gpio-cells", i, 203 &args); 204 if (ret) 205 continue; 206 207 np = args.np; 208 209 if (!of_property_present(np, "gpio-controller")) 210 continue; 211 212 /* 213 * We support 1, 2 and 3 cell GPIO bindings in the 214 * kernel currently. There's only one old MIPS dts that 215 * has a one-cell binding but there's no associated 216 * consumer so it may as well be an error. There don't 217 * seem to be any 3-cell users of non-exclusive GPIOs, 218 * so we can skip this as well. Let's occupy ourselves 219 * with the predominant 2-cell binding with the first 220 * cell indicating the hardware offset of the GPIO and 221 * the second defining the GPIO flags of the request. 222 */ 223 if (args.args_count != 2) 224 continue; 225 226 fwnode = of_fwnode_handle(args.np); 227 offset = args.args[0]; 228 229 entry = gpio_shared_find_entry(fwnode, offset); 230 if (!entry) { 231 entry = kzalloc_obj(*entry, GFP_KERNEL); 232 if (!entry) 233 return -ENOMEM; 234 235 entry->fwnode = fwnode_handle_get(fwnode); 236 entry->offset = offset; 237 entry->index = count; 238 INIT_LIST_HEAD(&entry->refs); 239 mutex_init(&entry->lock); 240 241 list_add_tail(&entry->list, &gpio_shared_list); 242 } 243 244 if (strends(prop->name, "gpios")) 245 suffix = "-gpios"; 246 else if (strends(prop->name, "gpio")) 247 suffix = "-gpio"; 248 else 249 suffix = NULL; 250 if (!suffix) 251 continue; 252 253 /* We only set con_id if there's actually one. */ 254 if (strcmp(prop->name, "gpios") && strcmp(prop->name, "gpio")) { 255 con_id = kstrdup(prop->name, GFP_KERNEL); 256 if (!con_id) 257 return -ENOMEM; 258 259 con_id_len = strlen(con_id); 260 suffix_len = strlen(suffix); 261 262 con_id[con_id_len - suffix_len] = '\0'; 263 } 264 265 ref = gpio_shared_make_ref(fwnode_handle_get(of_fwnode_handle(curr)), 266 con_id, args.args[1]); 267 if (!ref) 268 return -ENOMEM; 269 270 if (!list_empty(&entry->refs)) 271 pr_debug("GPIO %u at %s is shared by multiple firmware nodes\n", 272 entry->offset, fwnode_get_name(entry->fwnode)); 273 274 list_add_tail(&ref->list, &entry->refs); 275 276 if (strcmp(prop->name, "reset-gpios") == 0) { 277 ret = gpio_shared_setup_reset_proxy(entry, args.args[1]); 278 if (ret) 279 return ret; 280 } 281 } 282 } 283 284 for_each_child_of_node_scoped(curr, child) { 285 ret = gpio_shared_of_traverse(child); 286 if (ret) 287 return ret; 288 } 289 290 return 0; 291 } 292 293 static int gpio_shared_of_scan(void) 294 { 295 if (of_root) 296 return gpio_shared_of_traverse(of_root); 297 298 return 0; 299 } 300 #else 301 static int gpio_shared_of_scan(void) 302 { 303 return 0; 304 } 305 #endif /* CONFIG_OF */ 306 307 static void gpio_shared_adev_release(struct device *dev) 308 { 309 310 } 311 312 static int gpio_shared_make_adev(struct gpio_device *gdev, 313 struct gpio_shared_entry *entry, 314 struct gpio_shared_ref *ref) 315 { 316 struct auxiliary_device *adev = &ref->adev; 317 int ret; 318 319 guard(mutex)(&ref->lock); 320 321 memset(adev, 0, sizeof(*adev)); 322 323 adev->id = ref->dev_id; 324 adev->name = "proxy"; 325 adev->dev.parent = gdev->dev.parent; 326 adev->dev.platform_data = entry; 327 adev->dev.release = gpio_shared_adev_release; 328 329 ret = auxiliary_device_init(adev); 330 if (ret) 331 return ret; 332 333 ret = auxiliary_device_add(adev); 334 if (ret) { 335 auxiliary_device_uninit(adev); 336 return ret; 337 } 338 339 pr_debug("Created an auxiliary GPIO proxy %s for GPIO device %s\n", 340 dev_name(&adev->dev), gpio_device_get_label(gdev)); 341 342 return 0; 343 } 344 345 #if IS_ENABLED(CONFIG_RESET_GPIO) 346 /* 347 * Special case: reset-gpio is an auxiliary device that's created dynamically 348 * and put in between the GPIO controller and consumers of shared GPIOs 349 * referred to by the "reset-gpios" property. 350 * 351 * If the supposed consumer of a shared GPIO didn't match any of the mappings 352 * we created when scanning the firmware nodes, it's still possible that it's 353 * the reset-gpio device which didn't exist at the time of the scan. 354 * 355 * This function verifies it an return true if it's the case. 356 */ 357 static bool gpio_shared_dev_is_reset_gpio(struct device *consumer, 358 struct gpio_shared_entry *entry, 359 struct gpio_shared_ref *ref) 360 { 361 struct fwnode_handle *reset_fwnode = dev_fwnode(consumer); 362 struct fwnode_reference_args ref_args, aux_args; 363 struct device *parent = consumer->parent; 364 struct gpio_shared_ref *real_ref; 365 bool match; 366 int ret; 367 368 lockdep_assert_held(&ref->lock); 369 370 /* The reset-gpio device must have a parent AND a firmware node. */ 371 if (!parent || !reset_fwnode) 372 return false; 373 374 /* 375 * Parent of the reset-gpio auxiliary device is the GPIO chip whose 376 * fwnode we stored in the entry structure. 377 */ 378 if (!device_match_fwnode(parent, entry->fwnode)) 379 return false; 380 381 /* 382 * Now we need to find the actual pin we want to assign to this 383 * reset-gpio device. To that end: iterate over the list of references 384 * of this entry and see if there's one, whose reset-gpios property's 385 * arguments match the ones from this consumer's node. 386 */ 387 list_for_each_entry(real_ref, &entry->refs, list) { 388 if (real_ref == ref) 389 continue; 390 391 guard(mutex)(&real_ref->lock); 392 393 if (!real_ref->fwnode) 394 continue; 395 396 /* 397 * The device associated with the shared reference's firmware 398 * node is the consumer of the reset control exposed by the 399 * reset-gpio device. It must have a "reset-gpios" property 400 * that's referencing the entry's firmware node. 401 * 402 * The reference args must agree between the real consumer and 403 * the auxiliary reset-gpio device. 404 */ 405 ret = fwnode_property_get_reference_args(real_ref->fwnode, 406 "reset-gpios", 407 NULL, 2, 0, &ref_args); 408 if (ret) 409 continue; 410 411 ret = fwnode_property_get_reference_args(reset_fwnode, "reset-gpios", 412 NULL, 2, 0, &aux_args); 413 if (ret) { 414 fwnode_handle_put(ref_args.fwnode); 415 continue; 416 } 417 418 match = ((ref_args.fwnode == entry->fwnode) && 419 (aux_args.fwnode == entry->fwnode) && 420 (ref_args.args[0] == aux_args.args[0])); 421 422 fwnode_handle_put(ref_args.fwnode); 423 fwnode_handle_put(aux_args.fwnode); 424 425 if (!match) 426 continue; 427 428 /* 429 * Reuse the fwnode of the real device, next time we'll use it 430 * in the normal path. 431 */ 432 ref->fwnode = fwnode_handle_get(reset_fwnode); 433 return true; 434 } 435 436 return false; 437 } 438 #else 439 static bool gpio_shared_dev_is_reset_gpio(struct device *consumer, 440 struct gpio_shared_entry *entry, 441 struct gpio_shared_ref *ref) 442 { 443 return false; 444 } 445 #endif /* CONFIG_RESET_GPIO */ 446 447 int gpio_shared_add_proxy_lookup(struct device *consumer, const char *con_id, 448 unsigned long lflags) 449 { 450 const char *dev_id = dev_name(consumer); 451 struct gpiod_lookup_table *lookup; 452 struct gpio_shared_entry *entry; 453 struct gpio_shared_ref *ref; 454 455 list_for_each_entry(entry, &gpio_shared_list, list) { 456 list_for_each_entry(ref, &entry->refs, list) { 457 guard(mutex)(&ref->lock); 458 459 if (!ref->fwnode && device_is_compatible(consumer, "reset-gpio")) { 460 if (!gpio_shared_dev_is_reset_gpio(consumer, entry, ref)) 461 continue; 462 } else if (!device_match_fwnode(consumer, ref->fwnode)) { 463 continue; 464 } 465 466 if ((!con_id && ref->con_id) || (con_id && !ref->con_id) || 467 (con_id && ref->con_id && strcmp(con_id, ref->con_id) != 0)) 468 continue; 469 470 /* We've already done that on a previous request. */ 471 if (ref->lookup) 472 return 0; 473 474 char *key __free(kfree) = 475 kasprintf(GFP_KERNEL, 476 KBUILD_MODNAME ".proxy.%u", 477 ref->adev.id); 478 if (!key) 479 return -ENOMEM; 480 481 lookup = kzalloc_flex(*lookup, table, 2, GFP_KERNEL); 482 if (!lookup) 483 return -ENOMEM; 484 485 pr_debug("Adding machine lookup entry for a shared GPIO for consumer %s, with key '%s' and con_id '%s'\n", 486 dev_id, key, ref->con_id ?: "none"); 487 488 lookup->dev_id = dev_id; 489 lookup->table[0] = GPIO_LOOKUP(no_free_ptr(key), 0, 490 ref->con_id, lflags); 491 492 ref->lookup = lookup; 493 gpiod_add_lookup_table(ref->lookup); 494 495 return 0; 496 } 497 } 498 499 /* We warn here because this can only happen if the programmer borked. */ 500 WARN_ON(1); 501 return -ENOENT; 502 } 503 504 static void gpio_shared_remove_adev(struct auxiliary_device *adev) 505 { 506 auxiliary_device_delete(adev); 507 auxiliary_device_uninit(adev); 508 } 509 510 int gpio_device_setup_shared(struct gpio_device *gdev) 511 { 512 struct gpio_shared_entry *entry; 513 struct gpio_shared_ref *ref; 514 struct gpio_desc *desc; 515 int ret; 516 517 list_for_each_entry(entry, &gpio_shared_list, list) { 518 list_for_each_entry(ref, &entry->refs, list) { 519 if (gdev->dev.parent == &ref->adev.dev) { 520 /* 521 * This is a shared GPIO proxy. Mark its 522 * descriptor as such and return here. 523 */ 524 __set_bit(GPIOD_FLAG_SHARED_PROXY, 525 &gdev->descs[0].flags); 526 return 0; 527 } 528 } 529 } 530 531 /* 532 * This is not a shared GPIO proxy but it still may be the device 533 * exposing shared pins. Find them and create the proxy devices. 534 */ 535 list_for_each_entry(entry, &gpio_shared_list, list) { 536 if (!device_match_fwnode(&gdev->dev, entry->fwnode)) 537 continue; 538 539 if (list_count_nodes(&entry->refs) <= 1) 540 continue; 541 542 desc = &gdev->descs[entry->offset]; 543 544 __set_bit(GPIOD_FLAG_SHARED, &desc->flags); 545 /* 546 * Shared GPIOs are not requested via the normal path. Make 547 * them inaccessible to anyone even before we register the 548 * chip. 549 */ 550 ret = gpiod_request_commit(desc, "shared"); 551 if (ret) 552 return ret; 553 554 pr_debug("GPIO %u owned by %s is shared by multiple consumers\n", 555 entry->offset, gpio_device_get_label(gdev)); 556 557 list_for_each_entry(ref, &entry->refs, list) { 558 pr_debug("Setting up a shared GPIO entry for %s (con_id: '%s')\n", 559 fwnode_get_name(ref->fwnode) ?: "(no fwnode)", 560 ref->con_id ?: "(none)"); 561 562 ret = gpio_shared_make_adev(gdev, entry, ref); 563 if (ret) { 564 gpiod_free_commit(desc); 565 return ret; 566 } 567 } 568 } 569 570 return 0; 571 } 572 573 void gpio_device_teardown_shared(struct gpio_device *gdev) 574 { 575 struct gpio_shared_entry *entry; 576 struct gpio_shared_ref *ref; 577 578 list_for_each_entry(entry, &gpio_shared_list, list) { 579 if (!device_match_fwnode(&gdev->dev, entry->fwnode)) 580 continue; 581 582 gpiod_free_commit(&gdev->descs[entry->offset]); 583 584 list_for_each_entry(ref, &entry->refs, list) { 585 guard(mutex)(&ref->lock); 586 587 if (ref->lookup) { 588 gpiod_remove_lookup_table(ref->lookup); 589 kfree(ref->lookup->table[0].key); 590 kfree(ref->lookup); 591 ref->lookup = NULL; 592 } 593 594 gpio_shared_remove_adev(&ref->adev); 595 } 596 } 597 } 598 599 static void gpio_shared_release(struct kref *kref) 600 { 601 struct gpio_shared_entry *entry = 602 container_of(kref, struct gpio_shared_entry, ref); 603 struct gpio_shared_desc *shared_desc; 604 605 guard(mutex)(&entry->lock); 606 607 shared_desc = entry->shared_desc; 608 gpio_device_put(shared_desc->desc->gdev); 609 if (shared_desc->can_sleep) 610 mutex_destroy(&shared_desc->mutex); 611 kfree(shared_desc); 612 entry->shared_desc = NULL; 613 } 614 615 static void gpiod_shared_put(void *data) 616 { 617 struct gpio_shared_entry *entry = data; 618 619 kref_put(&entry->ref, gpio_shared_release); 620 } 621 622 static struct gpio_shared_desc * 623 gpiod_shared_desc_create(struct gpio_shared_entry *entry) 624 { 625 struct gpio_shared_desc *shared_desc; 626 struct gpio_device *gdev; 627 628 lockdep_assert_held(&entry->lock); 629 630 shared_desc = kzalloc_obj(*shared_desc, GFP_KERNEL); 631 if (!shared_desc) 632 return ERR_PTR(-ENOMEM); 633 634 gdev = gpio_device_find_by_fwnode(entry->fwnode); 635 if (!gdev) { 636 kfree(shared_desc); 637 return ERR_PTR(-EPROBE_DEFER); 638 } 639 640 shared_desc->desc = &gdev->descs[entry->offset]; 641 shared_desc->can_sleep = gpiod_cansleep(shared_desc->desc); 642 if (shared_desc->can_sleep) 643 mutex_init(&shared_desc->mutex); 644 else 645 spin_lock_init(&shared_desc->spinlock); 646 647 return shared_desc; 648 } 649 650 struct gpio_shared_desc *devm_gpiod_shared_get(struct device *dev) 651 { 652 struct gpio_shared_desc *shared_desc; 653 struct gpio_shared_entry *entry; 654 int ret; 655 656 entry = dev_get_platdata(dev); 657 if (WARN_ON(!entry)) 658 /* Programmer bug */ 659 return ERR_PTR(-ENOENT); 660 661 scoped_guard(mutex, &entry->lock) { 662 if (entry->shared_desc) { 663 kref_get(&entry->ref); 664 shared_desc = entry->shared_desc; 665 } else { 666 shared_desc = gpiod_shared_desc_create(entry); 667 if (IS_ERR(shared_desc)) 668 return ERR_CAST(shared_desc); 669 670 kref_init(&entry->ref); 671 entry->shared_desc = shared_desc; 672 } 673 674 pr_debug("Device %s acquired a reference to the shared GPIO %u owned by %s\n", 675 dev_name(dev), gpiod_hwgpio(shared_desc->desc), 676 gpio_device_get_label(shared_desc->desc->gdev)); 677 } 678 679 ret = devm_add_action_or_reset(dev, gpiod_shared_put, entry); 680 if (ret) 681 return ERR_PTR(ret); 682 683 return shared_desc; 684 } 685 EXPORT_SYMBOL_GPL(devm_gpiod_shared_get); 686 687 static void gpio_shared_drop_ref(struct gpio_shared_ref *ref) 688 { 689 list_del(&ref->list); 690 mutex_destroy(&ref->lock); 691 lockdep_unregister_key(&ref->lock_key); 692 kfree(ref->con_id); 693 ida_free(&gpio_shared_ida, ref->dev_id); 694 fwnode_handle_put(ref->fwnode); 695 kfree(ref); 696 } 697 698 static void gpio_shared_drop_entry(struct gpio_shared_entry *entry) 699 { 700 list_del(&entry->list); 701 mutex_destroy(&entry->lock); 702 fwnode_handle_put(entry->fwnode); 703 kfree(entry); 704 } 705 706 /* 707 * This is only called if gpio_shared_init() fails so it's in fact __init and 708 * not __exit. 709 */ 710 static void __init gpio_shared_teardown(void) 711 { 712 struct gpio_shared_entry *entry, *epos; 713 struct gpio_shared_ref *ref, *rpos; 714 715 list_for_each_entry_safe(entry, epos, &gpio_shared_list, list) { 716 list_for_each_entry_safe(ref, rpos, &entry->refs, list) 717 gpio_shared_drop_ref(ref); 718 719 gpio_shared_drop_entry(entry); 720 } 721 } 722 723 static bool gpio_shared_entry_is_really_shared(struct gpio_shared_entry *entry) 724 { 725 size_t num_nodes = list_count_nodes(&entry->refs); 726 struct gpio_shared_ref *ref; 727 728 if (num_nodes <= 1) 729 return false; 730 731 if (num_nodes > 2) 732 return true; 733 734 /* Exactly two references: */ 735 list_for_each_entry(ref, &entry->refs, list) { 736 /* 737 * Corner-case: the second reference comes from the potential 738 * reset-gpio instance. However, this pin is not really shared 739 * as it would have three references in this case. Avoid 740 * creating unnecessary proxies. 741 */ 742 if (ref->is_reset_gpio) 743 return false; 744 } 745 746 return true; 747 } 748 749 static void gpio_shared_free_exclusive(void) 750 { 751 struct gpio_shared_entry *entry, *epos; 752 753 list_for_each_entry_safe(entry, epos, &gpio_shared_list, list) { 754 if (gpio_shared_entry_is_really_shared(entry)) 755 continue; 756 757 gpio_shared_drop_ref(list_first_entry(&entry->refs, 758 struct gpio_shared_ref, 759 list)); 760 gpio_shared_drop_entry(entry); 761 } 762 } 763 764 static int __init gpio_shared_init(void) 765 { 766 int ret; 767 768 /* Right now, we only support OF-based systems. */ 769 ret = gpio_shared_of_scan(); 770 if (ret) { 771 gpio_shared_teardown(); 772 pr_err("Failed to scan OF nodes for shared GPIOs: %d\n", ret); 773 return ret; 774 } 775 776 gpio_shared_free_exclusive(); 777 778 pr_debug("Finished scanning firmware nodes for shared GPIOs\n"); 779 return 0; 780 } 781 postcore_initcall(gpio_shared_init); 782