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