Lines Matching refs:ref

57 	struct kref ref;  member
185 struct gpio_shared_ref *ref __free(kfree) = in gpio_shared_of_traverse()
186 kzalloc(sizeof(*ref), GFP_KERNEL); in gpio_shared_of_traverse()
187 if (!ref) in gpio_shared_of_traverse()
190 ref->fwnode = fwnode_handle_get(of_fwnode_handle(curr)); in gpio_shared_of_traverse()
191 ref->flags = args.args[1]; in gpio_shared_of_traverse()
192 mutex_init(&ref->lock); in gpio_shared_of_traverse()
205 ref->con_id = kstrdup(prop->name, GFP_KERNEL); in gpio_shared_of_traverse()
206 if (!ref->con_id) in gpio_shared_of_traverse()
209 con_id_len = strlen(ref->con_id); in gpio_shared_of_traverse()
212 ref->con_id[con_id_len - suffix_len] = '\0'; in gpio_shared_of_traverse()
215 ref->dev_id = ida_alloc(&gpio_shared_ida, GFP_KERNEL); in gpio_shared_of_traverse()
216 if (ref->dev_id < 0) { in gpio_shared_of_traverse()
217 kfree(ref->con_id); in gpio_shared_of_traverse()
225 list_add_tail(&no_free_ptr(ref)->list, &entry->refs); in gpio_shared_of_traverse()
259 struct gpio_shared_ref *ref) in gpio_shared_make_adev() argument
261 struct auxiliary_device *adev = &ref->adev; in gpio_shared_make_adev()
264 guard(mutex)(&ref->lock); in gpio_shared_make_adev()
268 adev->id = ref->dev_id; in gpio_shared_make_adev()
304 struct gpio_shared_ref *ref) in gpio_shared_dev_is_reset_gpio() argument
339 ret = fwnode_property_get_reference_args(ref->fwnode, "reset-gpios", in gpio_shared_dev_is_reset_gpio()
362 struct gpio_shared_ref *ref) in gpio_shared_dev_is_reset_gpio() argument
372 struct gpio_shared_ref *ref; in gpio_shared_add_proxy_lookup() local
380 list_for_each_entry(ref, &entry->refs, list) { in gpio_shared_add_proxy_lookup()
381 if (!device_match_fwnode(consumer, ref->fwnode) && in gpio_shared_add_proxy_lookup()
382 !gpio_shared_dev_is_reset_gpio(consumer, entry, ref)) in gpio_shared_add_proxy_lookup()
385 guard(mutex)(&ref->lock); in gpio_shared_add_proxy_lookup()
388 if (ref->lookup) in gpio_shared_add_proxy_lookup()
394 ref->adev.id); in gpio_shared_add_proxy_lookup()
399 dev_id, key, ref->con_id ?: "none"); in gpio_shared_add_proxy_lookup()
403 ref->con_id, lflags); in gpio_shared_add_proxy_lookup()
405 ref->lookup = no_free_ptr(lookup); in gpio_shared_add_proxy_lookup()
406 gpiod_add_lookup_table(ref->lookup); in gpio_shared_add_proxy_lookup()
426 struct gpio_shared_ref *ref; in gpio_device_setup_shared() local
431 list_for_each_entry(ref, &entry->refs, list) { in gpio_device_setup_shared()
432 if (gdev->dev.parent == &ref->adev.dev) { in gpio_device_setup_shared()
468 list_for_each_entry(ref, &entry->refs, list) { in gpio_device_setup_shared()
470 fwnode_get_name(ref->fwnode)); in gpio_device_setup_shared()
472 ret = gpio_shared_make_adev(gdev, entry, ref); in gpio_device_setup_shared()
484 struct gpio_shared_ref *ref; in gpio_device_teardown_shared() local
499 list_for_each_entry(ref, &entry->refs, list) { in gpio_device_teardown_shared()
500 guard(mutex)(&ref->lock); in gpio_device_teardown_shared()
502 if (ref->lookup) { in gpio_device_teardown_shared()
503 gpiod_remove_lookup_table(ref->lookup); in gpio_device_teardown_shared()
504 kfree(ref->lookup->table[0].key); in gpio_device_teardown_shared()
505 kfree(ref->lookup); in gpio_device_teardown_shared()
506 ref->lookup = NULL; in gpio_device_teardown_shared()
509 gpio_shared_remove_adev(&ref->adev); in gpio_device_teardown_shared()
518 container_of(kref, struct gpio_shared_entry, ref); in gpio_shared_release()
535 kref_put(&entry->ref, gpio_shared_release); in gpiod_shared_put()
579 kref_get(&entry->ref); in devm_gpiod_shared_get()
586 kref_init(&entry->ref); in devm_gpiod_shared_get()
603 static void gpio_shared_drop_ref(struct gpio_shared_ref *ref) in gpio_shared_drop_ref() argument
605 list_del(&ref->list); in gpio_shared_drop_ref()
606 mutex_destroy(&ref->lock); in gpio_shared_drop_ref()
607 kfree(ref->con_id); in gpio_shared_drop_ref()
608 ida_free(&gpio_shared_ida, ref->dev_id); in gpio_shared_drop_ref()
609 fwnode_handle_put(ref->fwnode); in gpio_shared_drop_ref()
610 kfree(ref); in gpio_shared_drop_ref()
628 struct gpio_shared_ref *ref, *rpos; in gpio_shared_teardown() local
631 list_for_each_entry_safe(ref, rpos, &entry->refs, list) in gpio_shared_teardown()
632 gpio_shared_drop_ref(ref); in gpio_shared_teardown()