Lines Matching refs:clk
102 static void clk_summary_show_one(struct seq_file *s, struct clk *c, int level) in clk_summary_show_one()
114 static void clk_summary_show_subtree(struct seq_file *s, struct clk *c, in clk_summary_show_subtree()
117 struct clk *child; in clk_summary_show_subtree()
130 struct clk *c; in clk_summary_show()
161 static void clk_dump_one(struct seq_file *s, struct clk *c, int level) in clk_dump_one()
172 static void clk_dump_subtree(struct seq_file *s, struct clk *c, int level) in clk_dump_subtree()
174 struct clk *child; in clk_dump_subtree()
191 struct clk *c; in clk_dump()
230 static int clk_debug_create_one(struct clk *clk, struct dentry *pdentry) in clk_debug_create_one() argument
235 if (!clk || !pdentry) { in clk_debug_create_one()
240 d = debugfs_create_dir(clk->name, pdentry); in clk_debug_create_one()
244 clk->dentry = d; in clk_debug_create_one()
246 d = debugfs_create_u32("clk_rate", S_IRUGO, clk->dentry, in clk_debug_create_one()
247 (u32 *)&clk->rate); in clk_debug_create_one()
251 d = debugfs_create_x32("clk_flags", S_IRUGO, clk->dentry, in clk_debug_create_one()
252 (u32 *)&clk->flags); in clk_debug_create_one()
256 d = debugfs_create_u32("clk_prepare_count", S_IRUGO, clk->dentry, in clk_debug_create_one()
257 (u32 *)&clk->prepare_count); in clk_debug_create_one()
261 d = debugfs_create_u32("clk_enable_count", S_IRUGO, clk->dentry, in clk_debug_create_one()
262 (u32 *)&clk->enable_count); in clk_debug_create_one()
266 d = debugfs_create_u32("clk_notifier_count", S_IRUGO, clk->dentry, in clk_debug_create_one()
267 (u32 *)&clk->notifier_count); in clk_debug_create_one()
275 debugfs_remove(clk->dentry); in clk_debug_create_one()
281 static int clk_debug_create_subtree(struct clk *clk, struct dentry *pdentry) in clk_debug_create_subtree() argument
283 struct clk *child; in clk_debug_create_subtree()
286 if (!clk || !pdentry) in clk_debug_create_subtree()
289 ret = clk_debug_create_one(clk, pdentry); in clk_debug_create_subtree()
294 hlist_for_each_entry(child, &clk->children, child_node) in clk_debug_create_subtree()
295 clk_debug_create_subtree(child, clk->dentry); in clk_debug_create_subtree()
313 static int clk_debug_register(struct clk *clk) in clk_debug_register() argument
315 struct clk *parent; in clk_debug_register()
322 parent = clk->parent; in clk_debug_register()
329 if (clk->flags & CLK_IS_ROOT) in clk_debug_register()
339 ret = clk_debug_create_subtree(clk, pdentry); in clk_debug_register()
356 static void clk_debug_reparent(struct clk *clk, struct clk *new_parent) in clk_debug_reparent() argument
369 d = debugfs_rename(clk->dentry->d_parent, clk->dentry, in clk_debug_reparent()
370 new_parent_d, clk->name); in clk_debug_reparent()
372 clk->dentry = d; in clk_debug_reparent()
375 __func__, clk->name); in clk_debug_reparent()
392 struct clk *clk; in clk_debug_init() local
417 hlist_for_each_entry(clk, &clk_root_list, child_node) in clk_debug_init()
418 clk_debug_create_subtree(clk, rootdir); in clk_debug_init()
420 hlist_for_each_entry(clk, &clk_orphan_list, child_node) in clk_debug_init()
421 clk_debug_create_subtree(clk, orphandir); in clk_debug_init()
431 static inline int clk_debug_register(struct clk *clk) { return 0; } in clk_debug_register() argument
432 static inline void clk_debug_reparent(struct clk *clk, struct clk *new_parent) in clk_debug_reparent() argument
438 static void clk_unprepare_unused_subtree(struct clk *clk) in clk_unprepare_unused_subtree() argument
440 struct clk *child; in clk_unprepare_unused_subtree()
442 if (!clk) in clk_unprepare_unused_subtree()
445 hlist_for_each_entry(child, &clk->children, child_node) in clk_unprepare_unused_subtree()
448 if (clk->prepare_count) in clk_unprepare_unused_subtree()
451 if (clk->flags & CLK_IGNORE_UNUSED) in clk_unprepare_unused_subtree()
454 if (__clk_is_prepared(clk)) { in clk_unprepare_unused_subtree()
455 if (clk->ops->unprepare_unused) in clk_unprepare_unused_subtree()
456 clk->ops->unprepare_unused(clk->hw); in clk_unprepare_unused_subtree()
457 else if (clk->ops->unprepare) in clk_unprepare_unused_subtree()
458 clk->ops->unprepare(clk->hw); in clk_unprepare_unused_subtree()
464 static void clk_disable_unused_subtree(struct clk *clk) in clk_disable_unused_subtree() argument
466 struct clk *child; in clk_disable_unused_subtree()
469 if (!clk) in clk_disable_unused_subtree()
472 hlist_for_each_entry(child, &clk->children, child_node) in clk_disable_unused_subtree()
477 if (clk->enable_count) in clk_disable_unused_subtree()
480 if (clk->flags & CLK_IGNORE_UNUSED) in clk_disable_unused_subtree()
488 if (__clk_is_enabled(clk)) { in clk_disable_unused_subtree()
489 if (clk->ops->disable_unused) in clk_disable_unused_subtree()
490 clk->ops->disable_unused(clk->hw); in clk_disable_unused_subtree()
491 else if (clk->ops->disable) in clk_disable_unused_subtree()
492 clk->ops->disable(clk->hw); in clk_disable_unused_subtree()
512 struct clk *clk; in clk_disable_unused() local
521 hlist_for_each_entry(clk, &clk_root_list, child_node) in clk_disable_unused()
522 clk_disable_unused_subtree(clk); in clk_disable_unused()
524 hlist_for_each_entry(clk, &clk_orphan_list, child_node) in clk_disable_unused()
525 clk_disable_unused_subtree(clk); in clk_disable_unused()
527 hlist_for_each_entry(clk, &clk_root_list, child_node) in clk_disable_unused()
528 clk_unprepare_unused_subtree(clk); in clk_disable_unused()
530 hlist_for_each_entry(clk, &clk_orphan_list, child_node) in clk_disable_unused()
531 clk_unprepare_unused_subtree(clk); in clk_disable_unused()
541 const char *__clk_get_name(struct clk *clk) in __clk_get_name() argument
543 return !clk ? NULL : clk->name; in __clk_get_name()
547 struct clk_hw *__clk_get_hw(struct clk *clk) in __clk_get_hw() argument
549 return !clk ? NULL : clk->hw; in __clk_get_hw()
552 u8 __clk_get_num_parents(struct clk *clk) in __clk_get_num_parents() argument
554 return !clk ? 0 : clk->num_parents; in __clk_get_num_parents()
557 struct clk *__clk_get_parent(struct clk *clk) in __clk_get_parent() argument
559 return !clk ? NULL : clk->parent; in __clk_get_parent()
562 unsigned int __clk_get_enable_count(struct clk *clk) in __clk_get_enable_count() argument
564 return !clk ? 0 : clk->enable_count; in __clk_get_enable_count()
567 unsigned int __clk_get_prepare_count(struct clk *clk) in __clk_get_prepare_count() argument
569 return !clk ? 0 : clk->prepare_count; in __clk_get_prepare_count()
572 unsigned long __clk_get_rate(struct clk *clk) in __clk_get_rate() argument
576 if (!clk) { in __clk_get_rate()
581 ret = clk->rate; in __clk_get_rate()
583 if (clk->flags & CLK_IS_ROOT) in __clk_get_rate()
586 if (!clk->parent) in __clk_get_rate()
593 unsigned long __clk_get_flags(struct clk *clk) in __clk_get_flags() argument
595 return !clk ? 0 : clk->flags; in __clk_get_flags()
598 bool __clk_is_prepared(struct clk *clk) in __clk_is_prepared() argument
602 if (!clk) in __clk_is_prepared()
609 if (!clk->ops->is_prepared) { in __clk_is_prepared()
610 ret = clk->prepare_count ? 1 : 0; in __clk_is_prepared()
614 ret = clk->ops->is_prepared(clk->hw); in __clk_is_prepared()
619 bool __clk_is_enabled(struct clk *clk) in __clk_is_enabled() argument
623 if (!clk) in __clk_is_enabled()
630 if (!clk->ops->is_enabled) { in __clk_is_enabled()
631 ret = clk->enable_count ? 1 : 0; in __clk_is_enabled()
635 ret = clk->ops->is_enabled(clk->hw); in __clk_is_enabled()
640 static struct clk *__clk_lookup_subtree(const char *name, struct clk *clk) in __clk_lookup_subtree() argument
642 struct clk *child; in __clk_lookup_subtree()
643 struct clk *ret; in __clk_lookup_subtree()
645 if (!strcmp(clk->name, name)) in __clk_lookup_subtree()
646 return clk; in __clk_lookup_subtree()
648 hlist_for_each_entry(child, &clk->children, child_node) { in __clk_lookup_subtree()
657 struct clk *__clk_lookup(const char *name) in __clk_lookup()
659 struct clk *root_clk; in __clk_lookup()
660 struct clk *ret; in __clk_lookup()
684 void __clk_unprepare(struct clk *clk) in __clk_unprepare() argument
686 if (!clk) in __clk_unprepare()
689 if (WARN_ON(clk->prepare_count == 0)) in __clk_unprepare()
692 if (--clk->prepare_count > 0) in __clk_unprepare()
695 WARN_ON(clk->enable_count > 0); in __clk_unprepare()
697 if (clk->ops->unprepare) in __clk_unprepare()
698 clk->ops->unprepare(clk->hw); in __clk_unprepare()
700 __clk_unprepare(clk->parent); in __clk_unprepare()
714 void clk_unprepare(struct clk *clk) in clk_unprepare() argument
717 __clk_unprepare(clk); in clk_unprepare()
722 int __clk_prepare(struct clk *clk) in __clk_prepare() argument
726 if (!clk) in __clk_prepare()
729 if (clk->prepare_count == 0) { in __clk_prepare()
730 ret = __clk_prepare(clk->parent); in __clk_prepare()
734 if (clk->ops->prepare) { in __clk_prepare()
735 ret = clk->ops->prepare(clk->hw); in __clk_prepare()
737 __clk_unprepare(clk->parent); in __clk_prepare()
743 clk->prepare_count++; in __clk_prepare()
760 int clk_prepare(struct clk *clk) in clk_prepare() argument
765 ret = __clk_prepare(clk); in clk_prepare()
772 static void __clk_disable(struct clk *clk) in __clk_disable() argument
774 if (!clk) in __clk_disable()
777 if (WARN_ON(IS_ERR(clk))) in __clk_disable()
780 if (WARN_ON(clk->enable_count == 0)) in __clk_disable()
783 if (--clk->enable_count > 0) in __clk_disable()
786 if (clk->ops->disable) in __clk_disable()
787 clk->ops->disable(clk->hw); in __clk_disable()
789 __clk_disable(clk->parent); in __clk_disable()
804 void clk_disable(struct clk *clk) in clk_disable() argument
809 __clk_disable(clk); in clk_disable()
814 static int __clk_enable(struct clk *clk) in __clk_enable() argument
818 if (!clk) in __clk_enable()
821 if (WARN_ON(clk->prepare_count == 0)) in __clk_enable()
824 if (clk->enable_count == 0) { in __clk_enable()
825 ret = __clk_enable(clk->parent); in __clk_enable()
830 if (clk->ops->enable) { in __clk_enable()
831 ret = clk->ops->enable(clk->hw); in __clk_enable()
833 __clk_disable(clk->parent); in __clk_enable()
839 clk->enable_count++; in __clk_enable()
856 int clk_enable(struct clk *clk) in clk_enable() argument
862 ret = __clk_enable(clk); in clk_enable()
875 unsigned long __clk_round_rate(struct clk *clk, unsigned long rate) in __clk_round_rate() argument
879 if (!clk) in __clk_round_rate()
882 if (!clk->ops->round_rate) { in __clk_round_rate()
883 if (clk->flags & CLK_SET_RATE_PARENT) in __clk_round_rate()
884 return __clk_round_rate(clk->parent, rate); in __clk_round_rate()
886 return clk->rate; in __clk_round_rate()
889 if (clk->parent) in __clk_round_rate()
890 parent_rate = clk->parent->rate; in __clk_round_rate()
892 return clk->ops->round_rate(clk->hw, rate, &parent_rate); in __clk_round_rate()
904 long clk_round_rate(struct clk *clk, unsigned long rate) in clk_round_rate() argument
909 ret = __clk_round_rate(clk, rate); in clk_round_rate()
930 static int __clk_notify(struct clk *clk, unsigned long msg, in __clk_notify() argument
937 cnd.clk = clk; in __clk_notify()
942 if (cn->clk == clk) { in __clk_notify()
966 static void __clk_recalc_rates(struct clk *clk, unsigned long msg) in __clk_recalc_rates() argument
970 struct clk *child; in __clk_recalc_rates()
972 old_rate = clk->rate; in __clk_recalc_rates()
974 if (clk->parent) in __clk_recalc_rates()
975 parent_rate = clk->parent->rate; in __clk_recalc_rates()
977 if (clk->ops->recalc_rate) in __clk_recalc_rates()
978 clk->rate = clk->ops->recalc_rate(clk->hw, parent_rate); in __clk_recalc_rates()
980 clk->rate = parent_rate; in __clk_recalc_rates()
986 if (clk->notifier_count && msg) in __clk_recalc_rates()
987 __clk_notify(clk, msg, old_rate, clk->rate); in __clk_recalc_rates()
989 hlist_for_each_entry(child, &clk->children, child_node) in __clk_recalc_rates()
1001 unsigned long clk_get_rate(struct clk *clk) in clk_get_rate() argument
1007 if (clk && (clk->flags & CLK_GET_RATE_NOCACHE)) in clk_get_rate()
1008 __clk_recalc_rates(clk, 0); in clk_get_rate()
1010 rate = __clk_get_rate(clk); in clk_get_rate()
1033 static int __clk_speculate_rates(struct clk *clk, unsigned long parent_rate) in __clk_speculate_rates() argument
1035 struct clk *child; in __clk_speculate_rates()
1039 if (clk->ops->recalc_rate) in __clk_speculate_rates()
1040 new_rate = clk->ops->recalc_rate(clk->hw, parent_rate); in __clk_speculate_rates()
1045 if (clk->notifier_count) in __clk_speculate_rates()
1046 ret = __clk_notify(clk, PRE_RATE_CHANGE, clk->rate, new_rate); in __clk_speculate_rates()
1051 hlist_for_each_entry(child, &clk->children, child_node) { in __clk_speculate_rates()
1061 static void clk_calc_subtree(struct clk *clk, unsigned long new_rate) in clk_calc_subtree() argument
1063 struct clk *child; in clk_calc_subtree()
1065 clk->new_rate = new_rate; in clk_calc_subtree()
1067 hlist_for_each_entry(child, &clk->children, child_node) { in clk_calc_subtree()
1080 static struct clk *clk_calc_new_rates(struct clk *clk, unsigned long rate) in clk_calc_new_rates() argument
1082 struct clk *top = clk; in clk_calc_new_rates()
1087 if (IS_ERR_OR_NULL(clk)) in clk_calc_new_rates()
1091 if (clk->parent) in clk_calc_new_rates()
1092 best_parent_rate = clk->parent->rate; in clk_calc_new_rates()
1095 if (!(clk->flags & CLK_SET_RATE_PARENT)) { in clk_calc_new_rates()
1096 if (!clk->ops->round_rate) { in clk_calc_new_rates()
1097 clk->new_rate = clk->rate; in clk_calc_new_rates()
1100 new_rate = clk->ops->round_rate(clk->hw, rate, &best_parent_rate); in clk_calc_new_rates()
1105 if (!clk->parent) { in clk_calc_new_rates()
1106 pr_debug("%s: %s has NULL parent\n", __func__, clk->name); in clk_calc_new_rates()
1110 if (!clk->ops->round_rate) { in clk_calc_new_rates()
1111 top = clk_calc_new_rates(clk->parent, rate); in clk_calc_new_rates()
1112 new_rate = clk->parent->new_rate; in clk_calc_new_rates()
1117 new_rate = clk->ops->round_rate(clk->hw, rate, &best_parent_rate); in clk_calc_new_rates()
1119 if (best_parent_rate != clk->parent->rate) { in clk_calc_new_rates()
1120 top = clk_calc_new_rates(clk->parent, best_parent_rate); in clk_calc_new_rates()
1126 clk_calc_subtree(clk, new_rate); in clk_calc_new_rates()
1136 static struct clk *clk_propagate_rate_change(struct clk *clk, unsigned long event) in clk_propagate_rate_change() argument
1138 struct clk *child, *fail_clk = NULL; in clk_propagate_rate_change()
1141 if (clk->rate == clk->new_rate) in clk_propagate_rate_change()
1144 if (clk->notifier_count) { in clk_propagate_rate_change()
1145 ret = __clk_notify(clk, event, clk->rate, clk->new_rate); in clk_propagate_rate_change()
1147 fail_clk = clk; in clk_propagate_rate_change()
1150 hlist_for_each_entry(child, &clk->children, child_node) { in clk_propagate_rate_change()
1151 clk = clk_propagate_rate_change(child, event); in clk_propagate_rate_change()
1152 if (clk) in clk_propagate_rate_change()
1153 fail_clk = clk; in clk_propagate_rate_change()
1163 static void clk_change_rate(struct clk *clk) in clk_change_rate() argument
1165 struct clk *child; in clk_change_rate()
1169 old_rate = clk->rate; in clk_change_rate()
1171 if (clk->parent) in clk_change_rate()
1172 best_parent_rate = clk->parent->rate; in clk_change_rate()
1174 if (clk->ops->set_rate) in clk_change_rate()
1175 clk->ops->set_rate(clk->hw, clk->new_rate, best_parent_rate); in clk_change_rate()
1177 if (clk->ops->recalc_rate) in clk_change_rate()
1178 clk->rate = clk->ops->recalc_rate(clk->hw, best_parent_rate); in clk_change_rate()
1180 clk->rate = best_parent_rate; in clk_change_rate()
1182 if (clk->notifier_count && old_rate != clk->rate) in clk_change_rate()
1183 __clk_notify(clk, POST_RATE_CHANGE, old_rate, clk->rate); in clk_change_rate()
1185 hlist_for_each_entry(child, &clk->children, child_node) in clk_change_rate()
1210 int clk_set_rate(struct clk *clk, unsigned long rate) in clk_set_rate() argument
1212 struct clk *top, *fail_clk; in clk_set_rate()
1219 if (rate == clk->rate) in clk_set_rate()
1222 if ((clk->flags & CLK_SET_RATE_GATE) && clk->prepare_count) { in clk_set_rate()
1228 top = clk_calc_new_rates(clk, rate); in clk_set_rate()
1260 struct clk *clk_get_parent(struct clk *clk) in clk_get_parent() argument
1262 struct clk *parent; in clk_get_parent()
1265 parent = __clk_get_parent(clk); in clk_get_parent()
1281 static struct clk *__clk_init_parent(struct clk *clk) in __clk_init_parent() argument
1283 struct clk *ret = NULL; in __clk_init_parent()
1288 if (!clk->num_parents) in __clk_init_parent()
1291 if (clk->num_parents == 1) { in __clk_init_parent()
1292 if (IS_ERR_OR_NULL(clk->parent)) in __clk_init_parent()
1293 ret = clk->parent = __clk_lookup(clk->parent_names[0]); in __clk_init_parent()
1294 ret = clk->parent; in __clk_init_parent()
1298 if (!clk->ops->get_parent) { in __clk_init_parent()
1299 WARN(!clk->ops->get_parent, in __clk_init_parent()
1311 index = clk->ops->get_parent(clk->hw); in __clk_init_parent()
1313 if (!clk->parents) in __clk_init_parent()
1314 clk->parents = in __clk_init_parent()
1315 kzalloc((sizeof(struct clk*) * clk->num_parents), in __clk_init_parent()
1318 if (!clk->parents) in __clk_init_parent()
1319 ret = __clk_lookup(clk->parent_names[index]); in __clk_init_parent()
1320 else if (!clk->parents[index]) in __clk_init_parent()
1321 ret = clk->parents[index] = in __clk_init_parent()
1322 __clk_lookup(clk->parent_names[index]); in __clk_init_parent()
1324 ret = clk->parents[index]; in __clk_init_parent()
1330 static void clk_reparent(struct clk *clk, struct clk *new_parent) in clk_reparent() argument
1332 hlist_del(&clk->child_node); in clk_reparent()
1335 hlist_add_head(&clk->child_node, &new_parent->children); in clk_reparent()
1337 hlist_add_head(&clk->child_node, &clk_orphan_list); in clk_reparent()
1339 clk->parent = new_parent; in clk_reparent()
1342 void __clk_reparent(struct clk *clk, struct clk *new_parent) in __clk_reparent() argument
1344 clk_reparent(clk, new_parent); in __clk_reparent()
1345 clk_debug_reparent(clk, new_parent); in __clk_reparent()
1346 __clk_recalc_rates(clk, POST_RATE_CHANGE); in __clk_reparent()
1349 static u8 clk_fetch_parent_index(struct clk *clk, struct clk *parent) in clk_fetch_parent_index() argument
1353 if (!clk->parents) in clk_fetch_parent_index()
1354 clk->parents = kzalloc((sizeof(struct clk*) * clk->num_parents), in clk_fetch_parent_index()
1362 for (i = 0; i < clk->num_parents; i++) { in clk_fetch_parent_index()
1363 if (clk->parents && clk->parents[i] == parent) in clk_fetch_parent_index()
1365 else if (!strcmp(clk->parent_names[i], parent->name)) { in clk_fetch_parent_index()
1366 if (clk->parents) in clk_fetch_parent_index()
1367 clk->parents[i] = __clk_lookup(parent->name); in clk_fetch_parent_index()
1375 static int __clk_set_parent(struct clk *clk, struct clk *parent, u8 p_index) in __clk_set_parent() argument
1379 struct clk *old_parent = clk->parent; in __clk_set_parent()
1383 if (clk->prepare_count) in __clk_set_parent()
1389 if (clk->enable_count) { in __clk_set_parent()
1395 clk_reparent(clk, parent); in __clk_set_parent()
1400 if (parent && clk->ops->set_parent) in __clk_set_parent()
1401 ret = clk->ops->set_parent(clk->hw, p_index); in __clk_set_parent()
1412 clk_reparent(clk, old_parent); in __clk_set_parent()
1414 if (migrated_enable && clk->enable_count) { in __clk_set_parent()
1416 } else if (migrated_enable && (clk->enable_count == 0)) { in __clk_set_parent()
1418 } else if (!migrated_enable && clk->enable_count) { in __clk_set_parent()
1425 if (clk->prepare_count) in __clk_set_parent()
1439 if (clk->prepare_count) in __clk_set_parent()
1443 clk_debug_reparent(clk, parent); in __clk_set_parent()
1459 int clk_set_parent(struct clk *clk, struct clk *parent) in clk_set_parent() argument
1465 if (!clk || !clk->ops) in clk_set_parent()
1469 if ((clk->num_parents > 1) && (!clk->ops->set_parent)) in clk_set_parent()
1475 if (clk->parent == parent) in clk_set_parent()
1479 if ((clk->flags & CLK_SET_PARENT_GATE) && clk->prepare_count) { in clk_set_parent()
1486 p_index = clk_fetch_parent_index(clk, parent); in clk_set_parent()
1488 if (p_index == clk->num_parents) { in clk_set_parent()
1490 __func__, parent->name, clk->name); in clk_set_parent()
1497 if (clk->notifier_count) in clk_set_parent()
1498 ret = __clk_speculate_rates(clk, p_rate); in clk_set_parent()
1505 ret = __clk_set_parent(clk, parent, p_index); in clk_set_parent()
1509 __clk_recalc_rates(clk, ABORT_RATE_CHANGE); in clk_set_parent()
1511 __clk_recalc_rates(clk, POST_RATE_CHANGE); in clk_set_parent()
1528 int __clk_init(struct device *dev, struct clk *clk) in __clk_init() argument
1531 struct clk *orphan; in __clk_init()
1534 if (!clk) in __clk_init()
1540 if (__clk_lookup(clk->name)) { in __clk_init()
1542 __func__, clk->name); in __clk_init()
1548 if (clk->ops->set_rate && in __clk_init()
1549 !(clk->ops->round_rate && clk->ops->recalc_rate)) { in __clk_init()
1551 __func__, clk->name); in __clk_init()
1556 if (clk->ops->set_parent && !clk->ops->get_parent) { in __clk_init()
1558 __func__, clk->name); in __clk_init()
1564 for (i = 0; i < clk->num_parents; i++) in __clk_init()
1565 WARN(!clk->parent_names[i], in __clk_init()
1567 __func__, clk->name); in __clk_init()
1579 if (clk->num_parents > 1 && !clk->parents) { in __clk_init()
1580 clk->parents = kzalloc((sizeof(struct clk*) * clk->num_parents), in __clk_init()
1588 if (clk->parents) in __clk_init()
1589 for (i = 0; i < clk->num_parents; i++) in __clk_init()
1590 clk->parents[i] = in __clk_init()
1591 __clk_lookup(clk->parent_names[i]); in __clk_init()
1594 clk->parent = __clk_init_parent(clk); in __clk_init()
1606 if (clk->parent) in __clk_init()
1607 hlist_add_head(&clk->child_node, in __clk_init()
1608 &clk->parent->children); in __clk_init()
1609 else if (clk->flags & CLK_IS_ROOT) in __clk_init()
1610 hlist_add_head(&clk->child_node, &clk_root_list); in __clk_init()
1612 hlist_add_head(&clk->child_node, &clk_orphan_list); in __clk_init()
1620 if (clk->ops->recalc_rate) in __clk_init()
1621 clk->rate = clk->ops->recalc_rate(clk->hw, in __clk_init()
1622 __clk_get_rate(clk->parent)); in __clk_init()
1623 else if (clk->parent) in __clk_init()
1624 clk->rate = clk->parent->rate; in __clk_init()
1626 clk->rate = 0; in __clk_init()
1635 if (!strcmp(clk->name, orphan->parent_names[i])) in __clk_init()
1636 __clk_reparent(orphan, clk); in __clk_init()
1641 if (!strcmp(clk->name, orphan->parent_names[i])) { in __clk_init()
1642 __clk_reparent(orphan, clk); in __clk_init()
1655 if (clk->ops->init) in __clk_init()
1656 clk->ops->init(clk->hw); in __clk_init()
1658 clk_debug_register(clk); in __clk_init()
1683 struct clk *__clk_register(struct device *dev, struct clk_hw *hw) in __clk_register()
1686 struct clk *clk; in __clk_register() local
1688 clk = hw->clk; in __clk_register()
1689 clk->name = hw->init->name; in __clk_register()
1690 clk->ops = hw->init->ops; in __clk_register()
1691 clk->hw = hw; in __clk_register()
1692 clk->flags = hw->init->flags; in __clk_register()
1693 clk->parent_names = hw->init->parent_names; in __clk_register()
1694 clk->num_parents = hw->init->num_parents; in __clk_register()
1696 ret = __clk_init(dev, clk); in __clk_register()
1700 return clk; in __clk_register()
1704 static int _clk_register(struct device *dev, struct clk_hw *hw, struct clk *clk) in _clk_register() argument
1708 clk->name = kstrdup(hw->init->name, GFP_KERNEL); in _clk_register()
1709 if (!clk->name) { in _clk_register()
1714 clk->ops = hw->init->ops; in _clk_register()
1715 clk->hw = hw; in _clk_register()
1716 clk->flags = hw->init->flags; in _clk_register()
1717 clk->num_parents = hw->init->num_parents; in _clk_register()
1718 hw->clk = clk; in _clk_register()
1721 clk->parent_names = kzalloc((sizeof(char*) * clk->num_parents), in _clk_register()
1724 if (!clk->parent_names) { in _clk_register()
1732 for (i = 0; i < clk->num_parents; i++) { in _clk_register()
1733 clk->parent_names[i] = kstrdup(hw->init->parent_names[i], in _clk_register()
1735 if (!clk->parent_names[i]) { in _clk_register()
1742 ret = __clk_init(dev, clk); in _clk_register()
1748 kfree(clk->parent_names[i]); in _clk_register()
1749 kfree(clk->parent_names); in _clk_register()
1751 kfree(clk->name); in _clk_register()
1767 struct clk *clk_register(struct device *dev, struct clk_hw *hw) in clk_register()
1770 struct clk *clk; in clk_register() local
1772 clk = kzalloc(sizeof(*clk), GFP_KERNEL); in clk_register()
1773 if (!clk) { in clk_register()
1779 ret = _clk_register(dev, hw, clk); in clk_register()
1781 return clk; in clk_register()
1783 kfree(clk); in clk_register()
1795 void clk_unregister(struct clk *clk) {} in clk_unregister() argument
1812 struct clk *devm_clk_register(struct device *dev, struct clk_hw *hw) in devm_clk_register()
1814 struct clk *clk; in devm_clk_register() local
1817 clk = devres_alloc(devm_clk_release, sizeof(*clk), GFP_KERNEL); in devm_clk_register()
1818 if (!clk) in devm_clk_register()
1821 ret = _clk_register(dev, hw, clk); in devm_clk_register()
1823 devres_add(dev, clk); in devm_clk_register()
1825 devres_free(clk); in devm_clk_register()
1826 clk = ERR_PTR(ret); in devm_clk_register()
1829 return clk; in devm_clk_register()
1835 struct clk *c = res; in devm_clk_match()
1849 void devm_clk_unregister(struct device *dev, struct clk *clk) in devm_clk_unregister() argument
1851 WARN_ON(devres_release(dev, devm_clk_release, devm_clk_match, clk)); in devm_clk_unregister()
1887 int clk_notifier_register(struct clk *clk, struct notifier_block *nb) in clk_notifier_register() argument
1892 if (!clk || !nb) in clk_notifier_register()
1899 if (cn->clk == clk) in clk_notifier_register()
1903 if (cn->clk != clk) { in clk_notifier_register()
1908 cn->clk = clk; in clk_notifier_register()
1916 clk->notifier_count++; in clk_notifier_register()
1936 int clk_notifier_unregister(struct clk *clk, struct notifier_block *nb) in clk_notifier_unregister() argument
1941 if (!clk || !nb) in clk_notifier_unregister()
1947 if (cn->clk == clk) in clk_notifier_unregister()
1950 if (cn->clk == clk) { in clk_notifier_unregister()
1953 clk->notifier_count--; in clk_notifier_unregister()
1985 struct clk *(*get)(struct of_phandle_args *clkspec, void *data);
1997 struct clk *of_clk_src_simple_get(struct of_phandle_args *clkspec, in of_clk_src_simple_get()
2004 struct clk *of_clk_src_onecell_get(struct of_phandle_args *clkspec, void *data) in of_clk_src_onecell_get()
2025 struct clk *(*clk_src_get)(struct of_phandle_args *clkspec, in of_clk_add_provider()
2069 struct clk *of_clk_get_from_provider(struct of_phandle_args *clkspec) in of_clk_get_from_provider()
2072 struct clk *clk = ERR_PTR(-ENOENT); in of_clk_get_from_provider() local
2078 clk = provider->get(clkspec, provider->data); in of_clk_get_from_provider()
2079 if (!IS_ERR(clk)) in of_clk_get_from_provider()
2084 return clk; in of_clk_get_from_provider()