Lines Matching refs:entry

69 	struct gpio_shared_entry *entry;  in gpio_shared_find_entry()  local
71 list_for_each_entry(entry, &gpio_shared_list, list) { in gpio_shared_find_entry()
72 if (entry->fwnode == controller_node && entry->offset == offset) in gpio_shared_find_entry()
73 return entry; in gpio_shared_find_entry()
105 struct gpio_shared_entry *entry; in gpio_shared_of_traverse() local
170 entry = gpio_shared_find_entry(fwnode, offset); in gpio_shared_of_traverse()
171 if (!entry) { in gpio_shared_of_traverse()
172 entry = kzalloc(sizeof(*entry), GFP_KERNEL); in gpio_shared_of_traverse()
173 if (!entry) in gpio_shared_of_traverse()
176 entry->fwnode = fwnode_handle_get(fwnode); in gpio_shared_of_traverse()
177 entry->offset = offset; in gpio_shared_of_traverse()
178 entry->index = count; in gpio_shared_of_traverse()
179 INIT_LIST_HEAD(&entry->refs); in gpio_shared_of_traverse()
180 mutex_init(&entry->lock); in gpio_shared_of_traverse()
182 list_add_tail(&entry->list, &gpio_shared_list); in gpio_shared_of_traverse()
221 if (!list_empty(&entry->refs)) in gpio_shared_of_traverse()
223 entry->offset, fwnode_get_name(entry->fwnode)); in gpio_shared_of_traverse()
225 list_add_tail(&no_free_ptr(ref)->list, &entry->refs); in gpio_shared_of_traverse()
258 struct gpio_shared_entry *entry, in gpio_shared_make_adev() argument
271 adev->dev.platform_data = entry; in gpio_shared_make_adev()
303 struct gpio_shared_entry *entry, in gpio_shared_dev_is_reset_gpio() argument
327 if (!device_match_fwnode(parent, entry->fwnode)) in gpio_shared_dev_is_reset_gpio()
351 match = ((ref_args.fwnode == entry->fwnode) && in gpio_shared_dev_is_reset_gpio()
352 (aux_args.fwnode == entry->fwnode) && in gpio_shared_dev_is_reset_gpio()
361 struct gpio_shared_entry *entry, in gpio_shared_dev_is_reset_gpio() argument
371 struct gpio_shared_entry *entry; in gpio_shared_add_proxy_lookup() local
379 list_for_each_entry(entry, &gpio_shared_list, list) { in gpio_shared_add_proxy_lookup()
380 list_for_each_entry(ref, &entry->refs, list) { in gpio_shared_add_proxy_lookup()
382 !gpio_shared_dev_is_reset_gpio(consumer, entry, ref)) in gpio_shared_add_proxy_lookup()
425 struct gpio_shared_entry *entry; in gpio_device_setup_shared() local
430 list_for_each_entry(entry, &gpio_shared_list, list) { in gpio_device_setup_shared()
431 list_for_each_entry(ref, &entry->refs, list) { in gpio_device_setup_shared()
448 list_for_each_entry(entry, &gpio_shared_list, list) { in gpio_device_setup_shared()
449 if (!device_match_fwnode(&gdev->dev, entry->fwnode)) in gpio_device_setup_shared()
452 if (list_count_nodes(&entry->refs) <= 1) in gpio_device_setup_shared()
455 flags = &gdev->descs[entry->offset].flags; in gpio_device_setup_shared()
466 entry->offset, gpio_device_get_label(gdev)); in gpio_device_setup_shared()
468 list_for_each_entry(ref, &entry->refs, list) { in gpio_device_setup_shared()
472 ret = gpio_shared_make_adev(gdev, entry, ref); in gpio_device_setup_shared()
483 struct gpio_shared_entry *entry; in gpio_device_teardown_shared() local
486 list_for_each_entry(entry, &gpio_shared_list, list) { in gpio_device_teardown_shared()
487 if (!device_match_fwnode(&gdev->dev, entry->fwnode)) in gpio_device_teardown_shared()
499 list_for_each_entry(ref, &entry->refs, list) { in gpio_device_teardown_shared()
517 struct gpio_shared_entry *entry = in gpio_shared_release() local
521 guard(mutex)(&entry->lock); in gpio_shared_release()
523 shared_desc = entry->shared_desc; in gpio_shared_release()
528 entry->shared_desc = NULL; in gpio_shared_release()
533 struct gpio_shared_entry *entry = data; in gpiod_shared_put() local
535 kref_put(&entry->ref, gpio_shared_release); in gpiod_shared_put()
539 gpiod_shared_desc_create(struct gpio_shared_entry *entry) in gpiod_shared_desc_create() argument
544 lockdep_assert_held(&entry->lock); in gpiod_shared_desc_create()
550 gdev = gpio_device_find_by_fwnode(entry->fwnode); in gpiod_shared_desc_create()
556 shared_desc->desc = &gdev->descs[entry->offset]; in gpiod_shared_desc_create()
569 struct gpio_shared_entry *entry; in devm_gpiod_shared_get() local
572 entry = dev_get_platdata(dev); in devm_gpiod_shared_get()
573 if (WARN_ON(!entry)) in devm_gpiod_shared_get()
577 scoped_guard(mutex, &entry->lock) { in devm_gpiod_shared_get()
578 if (entry->shared_desc) { in devm_gpiod_shared_get()
579 kref_get(&entry->ref); in devm_gpiod_shared_get()
580 shared_desc = entry->shared_desc; in devm_gpiod_shared_get()
582 shared_desc = gpiod_shared_desc_create(entry); in devm_gpiod_shared_get()
586 kref_init(&entry->ref); in devm_gpiod_shared_get()
587 entry->shared_desc = shared_desc; in devm_gpiod_shared_get()
595 ret = devm_add_action_or_reset(dev, gpiod_shared_put, entry); in devm_gpiod_shared_get()
613 static void gpio_shared_drop_entry(struct gpio_shared_entry *entry) in gpio_shared_drop_entry() argument
615 list_del(&entry->list); in gpio_shared_drop_entry()
616 mutex_destroy(&entry->lock); in gpio_shared_drop_entry()
617 fwnode_handle_put(entry->fwnode); in gpio_shared_drop_entry()
618 kfree(entry); in gpio_shared_drop_entry()
627 struct gpio_shared_entry *entry, *epos; in gpio_shared_teardown() local
630 list_for_each_entry_safe(entry, epos, &gpio_shared_list, list) { in gpio_shared_teardown()
631 list_for_each_entry_safe(ref, rpos, &entry->refs, list) in gpio_shared_teardown()
634 gpio_shared_drop_entry(entry); in gpio_shared_teardown()
640 struct gpio_shared_entry *entry, *epos; in gpio_shared_free_exclusive() local
642 list_for_each_entry_safe(entry, epos, &gpio_shared_list, list) { in gpio_shared_free_exclusive()
643 if (list_count_nodes(&entry->refs) > 1) in gpio_shared_free_exclusive()
646 gpio_shared_drop_ref(list_first_entry(&entry->refs, in gpio_shared_free_exclusive()
649 gpio_shared_drop_entry(entry); in gpio_shared_free_exclusive()