Lines Matching refs:src

665 static void __stm_source_link_drop(struct stm_source_device *src,
671 struct stm_source_device *src, *iter; in stm_unregister_device() local
675 list_for_each_entry_safe(src, iter, &stm->link_list, link_entry) { in stm_unregister_device()
676 __stm_source_link_drop(src, stm); in stm_unregister_device()
707 static int stm_source_link_add(struct stm_source_device *src, in stm_source_link_add() argument
714 spin_lock(&src->link_lock); in stm_source_link_add()
717 rcu_assign_pointer(src->link, stm); in stm_source_link_add()
718 list_add_tail(&src->link_entry, &stm->link_list); in stm_source_link_add()
720 spin_unlock(&src->link_lock); in stm_source_link_add()
723 id = kstrdup(src->data->name, GFP_KERNEL); in stm_source_link_add()
725 src->policy_node = in stm_source_link_add()
731 err = stm_output_assign(stm, src->data->nr_chans, in stm_source_link_add()
732 src->policy_node, &src->output); in stm_source_link_add()
734 if (src->policy_node) in stm_source_link_add()
735 stp_policy_node_put(src->policy_node); in stm_source_link_add()
742 err = stm->data->link(stm->data, src->output.master, in stm_source_link_add()
743 src->output.channel); in stm_source_link_add()
749 if (src->data->link) in stm_source_link_add()
750 src->data->link(src->data); in stm_source_link_add()
755 stm_output_free(stm, &src->output); in stm_source_link_add()
760 spin_lock(&src->link_lock); in stm_source_link_add()
762 rcu_assign_pointer(src->link, NULL); in stm_source_link_add()
763 list_del_init(&src->link_entry); in stm_source_link_add()
765 spin_unlock(&src->link_lock); in stm_source_link_add()
781 static void __stm_source_link_drop(struct stm_source_device *src, in __stm_source_link_drop() argument
786 spin_lock(&src->link_lock); in __stm_source_link_drop()
787 link = srcu_dereference_check(src->link, &stm_source_srcu, 1); in __stm_source_link_drop()
789 spin_unlock(&src->link_lock); in __stm_source_link_drop()
793 stm_output_free(link, &src->output); in __stm_source_link_drop()
795 list_del_init(&src->link_entry); in __stm_source_link_drop()
798 rcu_assign_pointer(src->link, NULL); in __stm_source_link_drop()
800 spin_unlock(&src->link_lock); in __stm_source_link_drop()
813 static void stm_source_link_drop(struct stm_source_device *src) in stm_source_link_drop() argument
819 stm = srcu_dereference(src->link, &stm_source_srcu); in stm_source_link_drop()
822 if (src->data->unlink) in stm_source_link_drop()
823 src->data->unlink(src->data); in stm_source_link_drop()
826 __stm_source_link_drop(src, stm); in stm_source_link_drop()
837 struct stm_source_device *src = to_stm_source_device(dev); in stm_source_link_show() local
842 stm = srcu_dereference(src->link, &stm_source_srcu); in stm_source_link_show()
854 struct stm_source_device *src = to_stm_source_device(dev); in stm_source_link_store() local
858 stm_source_link_drop(src); in stm_source_link_store()
864 err = stm_source_link_add(src, link); in stm_source_link_store()
887 struct stm_source_device *src = to_stm_source_device(dev); in stm_source_device_release() local
889 kfree(src); in stm_source_device_release()
905 struct stm_source_device *src; in stm_source_register_device() local
911 src = kzalloc(sizeof(*src), GFP_KERNEL); in stm_source_register_device()
912 if (!src) in stm_source_register_device()
915 device_initialize(&src->dev); in stm_source_register_device()
916 src->dev.class = &stm_source_class; in stm_source_register_device()
917 src->dev.parent = parent; in stm_source_register_device()
918 src->dev.release = stm_source_device_release; in stm_source_register_device()
920 err = kobject_set_name(&src->dev.kobj, "%s", data->name); in stm_source_register_device()
924 err = device_add(&src->dev); in stm_source_register_device()
928 spin_lock_init(&src->link_lock); in stm_source_register_device()
929 INIT_LIST_HEAD(&src->link_entry); in stm_source_register_device()
930 src->data = data; in stm_source_register_device()
931 data->src = src; in stm_source_register_device()
936 put_device(&src->dev); in stm_source_register_device()
937 kfree(src); in stm_source_register_device()
951 struct stm_source_device *src = data->src; in stm_source_unregister_device() local
953 stm_source_link_drop(src); in stm_source_unregister_device()
955 device_destroy(&stm_source_class, src->dev.devt); in stm_source_unregister_device()
962 struct stm_source_device *src = data->src; in stm_source_write() local
966 if (!src->output.nr_chans) in stm_source_write()
969 if (chan >= src->output.nr_chans) in stm_source_write()
974 stm = srcu_dereference(src->link, &stm_source_srcu); in stm_source_write()
976 stm_write(stm->data, src->output.master, in stm_source_write()
977 src->output.channel + chan, in stm_source_write()