Lines Matching refs:domain

40 static void dm_power_domain_init(struct rt_dm_power_domain *domain)  in dm_power_domain_init()  argument
43 rt_strncpy(domain->parent.name, RT_POWER_DOMAIN_OBJ_NAME, RT_NAME_MAX); in dm_power_domain_init()
45 domain->parent.name = RT_POWER_DOMAIN_OBJ_NAME; in dm_power_domain_init()
48 domain->parent_domain = RT_NULL; in dm_power_domain_init()
50 rt_list_init(&domain->list); in dm_power_domain_init()
51 rt_list_init(&domain->child_nodes); in dm_power_domain_init()
52 rt_list_init(&domain->unit_nodes); in dm_power_domain_init()
54 rt_ref_init(&domain->ref); in dm_power_domain_init()
55 rt_spin_lock_init(&domain->lock); in dm_power_domain_init()
58 static rt_bool_t dm_power_domain_is_free(struct rt_dm_power_domain *domain) in dm_power_domain_is_free() argument
60 return rt_ref_read(&domain->ref) == 1 && !rt_list_isempty(&domain->child_nodes); in dm_power_domain_is_free()
63 rt_err_t rt_dm_power_domain_register(struct rt_dm_power_domain *domain) in rt_dm_power_domain_register() argument
65 if (!domain) in rt_dm_power_domain_register()
70 dm_power_domain_init(domain); in rt_dm_power_domain_register()
75 rt_err_t rt_dm_power_domain_unregister(struct rt_dm_power_domain *domain) in rt_dm_power_domain_unregister() argument
79 if (!domain) in rt_dm_power_domain_unregister()
84 if (!dm_power_domain_is_free(domain)) in rt_dm_power_domain_unregister()
89 if (domain->parent_domain) in rt_dm_power_domain_unregister()
91 err = rt_dm_power_domain_unregister_child(domain->parent_domain, domain); in rt_dm_power_domain_unregister()
97 rt_err_t rt_dm_power_domain_register_child(struct rt_dm_power_domain *domain, in rt_dm_power_domain_register_child() argument
100 if (!domain || !child_domain) in rt_dm_power_domain_register_child()
106 child_domain->parent_domain = domain; in rt_dm_power_domain_register_child()
111 rt_err_t rt_dm_power_domain_unregister_child(struct rt_dm_power_domain *domain, in rt_dm_power_domain_unregister_child() argument
116 if (!domain || !child_domain) in rt_dm_power_domain_unregister_child()
121 rt_hw_spin_lock(&domain->lock.lock); in rt_dm_power_domain_unregister_child()
123 if (dm_power_domain_is_free(domain)) in rt_dm_power_domain_unregister_child()
132 rt_hw_spin_unlock(&domain->lock.lock); in rt_dm_power_domain_unregister_child()
137 rt_err_t rt_dm_power_domain_power_on(struct rt_dm_power_domain *domain) in rt_dm_power_domain_power_on() argument
142 if (!domain) in rt_dm_power_domain_power_on()
147 rt_hw_spin_lock(&domain->lock.lock); in rt_dm_power_domain_power_on()
149 if (rt_ref_read(&domain->ref) == 1) in rt_dm_power_domain_power_on()
151 err = domain->power_on(domain); in rt_dm_power_domain_power_on()
158 rt_list_for_each_entry(child_domain, &domain->child_nodes, list) in rt_dm_power_domain_power_on()
171 rt_list_for_each_entry(child_domain, &domain->child_nodes, list) in rt_dm_power_domain_power_on()
183 rt_hw_spin_unlock(&domain->lock.lock); in rt_dm_power_domain_power_on()
187 rt_ref_get(&domain->ref); in rt_dm_power_domain_power_on()
195 struct rt_dm_power_domain *domain = rt_container_of(r, struct rt_dm_power_domain, ref); in dm_power_domain_release() local
197 if (domain->dev) in dm_power_domain_release()
199 LOG_E("%s power domain is release", rt_dm_dev_get_name(domain->dev)); in dm_power_domain_release()
205 rt_err_t rt_dm_power_domain_power_off(struct rt_dm_power_domain *domain) in rt_dm_power_domain_power_off() argument
210 if (!domain) in rt_dm_power_domain_power_off()
215 rt_ref_put(&domain->ref, dm_power_domain_release); in rt_dm_power_domain_power_off()
217 rt_hw_spin_lock(&domain->lock.lock); in rt_dm_power_domain_power_off()
219 if (rt_ref_read(&domain->ref) == 1) in rt_dm_power_domain_power_off()
221 err = domain->power_off(domain); in rt_dm_power_domain_power_off()
232 rt_list_for_each_entry(child_domain, &domain->child_nodes, list) in rt_dm_power_domain_power_off()
245 rt_list_for_each_entry(child_domain, &domain->child_nodes, list) in rt_dm_power_domain_power_off()
257 rt_hw_spin_unlock(&domain->lock.lock); in rt_dm_power_domain_power_off()
261 rt_ref_get(&domain->ref); in rt_dm_power_domain_power_off()
273 struct rt_dm_power_domain *domain = RT_NULL; in ofw_find_power_domain() local
286 domain = proxy->ofw_parse(proxy, args); in ofw_find_power_domain()
290 domain = rt_container_of(obj, struct rt_dm_power_domain, parent); in ofw_find_power_domain()
296 domain = proxy->ofw_parse(proxy, args); in ofw_find_power_domain()
301 domain = rt_container_of(obj, struct rt_dm_power_domain, parent); in ofw_find_power_domain()
308 return domain; in ofw_find_power_domain()
322 struct rt_dm_power_domain *domain; in rt_dm_power_domain_get_by_index() local
329 if ((domain = ofw_find_power_domain(dev, index, &args))) in rt_dm_power_domain_get_by_index()
335 return domain; in rt_dm_power_domain_get_by_index()
358 rt_err_t rt_dm_power_domain_put(struct rt_dm_power_domain *domain) in rt_dm_power_domain_put() argument
360 if (!domain) in rt_dm_power_domain_put()
373 struct rt_dm_power_domain *domain; in rt_dm_power_domain_attach() local
382 if ((domain = ofw_find_power_domain(dev, 0, &args))) in rt_dm_power_domain_attach()
387 if (!domain) in rt_dm_power_domain_attach()
401 unit->domain = domain; in rt_dm_power_domain_attach()
405 rt_hw_spin_lock(&domain->lock.lock); in rt_dm_power_domain_attach()
407 if (domain->attach_dev) in rt_dm_power_domain_attach()
409 err = domain->attach_dev(domain, dev); in rt_dm_power_domain_attach()
414 rt_list_insert_before(&domain->unit_nodes, &unit->list); in rt_dm_power_domain_attach()
417 rt_hw_spin_unlock(&domain->lock.lock); in rt_dm_power_domain_attach()
429 err = rt_dm_power_domain_power_on(domain); in rt_dm_power_domain_attach()
438 struct rt_dm_power_domain *domain; in rt_dm_power_domain_detach() local
447 domain = unit->domain; in rt_dm_power_domain_detach()
449 rt_hw_spin_lock(&domain->lock.lock); in rt_dm_power_domain_detach()
451 if (domain->detach_dev) in rt_dm_power_domain_detach()
453 err = domain->detach_dev(domain, dev); in rt_dm_power_domain_detach()
461 rt_hw_spin_unlock(&domain->lock.lock); in rt_dm_power_domain_detach()
473 err = rt_dm_power_domain_power_off(domain); in rt_dm_power_domain_detach()