]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - drivers/clk/clk.c
9955ad7e786e5a3eabcff56ebc8516100db46928
[karo-tx-linux.git] / drivers / clk / clk.c
1 /*
2  * Copyright (C) 2010-2011 Canonical Ltd <jeremy.kerr@canonical.com>
3  * Copyright (C) 2011-2012 Linaro Ltd <mturquette@linaro.org>
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation.
8  *
9  * Standard functionality for the common clock API.  See Documentation/clk.txt
10  */
11
12 #include <linux/clk-private.h>
13 #include <linux/module.h>
14 #include <linux/mutex.h>
15 #include <linux/spinlock.h>
16 #include <linux/err.h>
17 #include <linux/list.h>
18 #include <linux/slab.h>
19 #include <linux/of.h>
20 #include <linux/device.h>
21
22 static DEFINE_SPINLOCK(enable_lock);
23 static DEFINE_MUTEX(prepare_lock);
24
25 static HLIST_HEAD(clk_root_list);
26 static HLIST_HEAD(clk_orphan_list);
27 static LIST_HEAD(clk_notifier_list);
28
29 /***        debugfs support        ***/
30
31 #ifdef CONFIG_COMMON_CLK_DEBUG
32 #include <linux/debugfs.h>
33
34 static struct dentry *rootdir;
35 static struct dentry *orphandir;
36 static int inited = 0;
37
38 /* caller must hold prepare_lock */
39 static int clk_debug_create_one(struct clk *clk, struct dentry *pdentry)
40 {
41         struct dentry *d;
42         int ret = -ENOMEM;
43
44         if (!clk || !pdentry) {
45                 ret = -EINVAL;
46                 goto out;
47         }
48
49         d = debugfs_create_dir(clk->name, pdentry);
50         if (!d)
51                 goto out;
52
53         clk->dentry = d;
54
55         d = debugfs_create_u32("clk_rate", S_IRUGO, clk->dentry,
56                         (u32 *)&clk->rate);
57         if (!d)
58                 goto err_out;
59
60         d = debugfs_create_x32("clk_flags", S_IRUGO, clk->dentry,
61                         (u32 *)&clk->flags);
62         if (!d)
63                 goto err_out;
64
65         d = debugfs_create_u32("clk_prepare_count", S_IRUGO, clk->dentry,
66                         (u32 *)&clk->prepare_count);
67         if (!d)
68                 goto err_out;
69
70         d = debugfs_create_u32("clk_enable_count", S_IRUGO, clk->dentry,
71                         (u32 *)&clk->enable_count);
72         if (!d)
73                 goto err_out;
74
75         d = debugfs_create_u32("clk_notifier_count", S_IRUGO, clk->dentry,
76                         (u32 *)&clk->notifier_count);
77         if (!d)
78                 goto err_out;
79
80         ret = 0;
81         goto out;
82
83 err_out:
84         debugfs_remove(clk->dentry);
85 out:
86         return ret;
87 }
88
89 /* caller must hold prepare_lock */
90 static int clk_debug_create_subtree(struct clk *clk, struct dentry *pdentry)
91 {
92         struct clk *child;
93         struct hlist_node *tmp;
94         int ret = -EINVAL;;
95
96         if (!clk || !pdentry)
97                 goto out;
98
99         ret = clk_debug_create_one(clk, pdentry);
100
101         if (ret)
102                 goto out;
103
104         hlist_for_each_entry(child, tmp, &clk->children, child_node)
105                 clk_debug_create_subtree(child, clk->dentry);
106
107         ret = 0;
108 out:
109         return ret;
110 }
111
112 /**
113  * clk_debug_register - add a clk node to the debugfs clk tree
114  * @clk: the clk being added to the debugfs clk tree
115  *
116  * Dynamically adds a clk to the debugfs clk tree if debugfs has been
117  * initialized.  Otherwise it bails out early since the debugfs clk tree
118  * will be created lazily by clk_debug_init as part of a late_initcall.
119  *
120  * Caller must hold prepare_lock.  Only clk_init calls this function (so
121  * far) so this is taken care.
122  */
123 static int clk_debug_register(struct clk *clk)
124 {
125         struct clk *parent;
126         struct dentry *pdentry;
127         int ret = 0;
128
129         if (!inited)
130                 goto out;
131
132         parent = clk->parent;
133
134         /*
135          * Check to see if a clk is a root clk.  Also check that it is
136          * safe to add this clk to debugfs
137          */
138         if (!parent)
139                 if (clk->flags & CLK_IS_ROOT)
140                         pdentry = rootdir;
141                 else
142                         pdentry = orphandir;
143         else
144                 if (parent->dentry)
145                         pdentry = parent->dentry;
146                 else
147                         goto out;
148
149         ret = clk_debug_create_subtree(clk, pdentry);
150
151 out:
152         return ret;
153 }
154
155 /**
156  * clk_debug_init - lazily create the debugfs clk tree visualization
157  *
158  * clks are often initialized very early during boot before memory can
159  * be dynamically allocated and well before debugfs is setup.
160  * clk_debug_init walks the clk tree hierarchy while holding
161  * prepare_lock and creates the topology as part of a late_initcall,
162  * thus insuring that clks initialized very early will still be
163  * represented in the debugfs clk tree.  This function should only be
164  * called once at boot-time, and all other clks added dynamically will
165  * be done so with clk_debug_register.
166  */
167 static int __init clk_debug_init(void)
168 {
169         struct clk *clk;
170         struct hlist_node *tmp;
171
172         rootdir = debugfs_create_dir("clk", NULL);
173
174         if (!rootdir)
175                 return -ENOMEM;
176
177         orphandir = debugfs_create_dir("orphans", rootdir);
178
179         if (!orphandir)
180                 return -ENOMEM;
181
182         mutex_lock(&prepare_lock);
183
184         hlist_for_each_entry(clk, tmp, &clk_root_list, child_node)
185                 clk_debug_create_subtree(clk, rootdir);
186
187         hlist_for_each_entry(clk, tmp, &clk_orphan_list, child_node)
188                 clk_debug_create_subtree(clk, orphandir);
189
190         inited = 1;
191
192         mutex_unlock(&prepare_lock);
193
194         return 0;
195 }
196 late_initcall(clk_debug_init);
197 #else
198 static inline int clk_debug_register(struct clk *clk) { return 0; }
199 #endif
200
201 /* caller must hold prepare_lock */
202 static void clk_disable_unused_subtree(struct clk *clk)
203 {
204         struct clk *child;
205         struct hlist_node *tmp;
206         unsigned long flags;
207
208         if (!clk)
209                 goto out;
210
211         hlist_for_each_entry(child, tmp, &clk->children, child_node)
212                 clk_disable_unused_subtree(child);
213
214         spin_lock_irqsave(&enable_lock, flags);
215
216         if (clk->enable_count)
217                 goto unlock_out;
218
219         if (clk->flags & CLK_IGNORE_UNUSED)
220                 goto unlock_out;
221
222         if (__clk_is_enabled(clk) && clk->ops->disable)
223                 clk->ops->disable(clk->hw);
224
225 unlock_out:
226         spin_unlock_irqrestore(&enable_lock, flags);
227
228 out:
229         return;
230 }
231
232 static int clk_disable_unused(void)
233 {
234         struct clk *clk;
235         struct hlist_node *tmp;
236
237         mutex_lock(&prepare_lock);
238
239         hlist_for_each_entry(clk, tmp, &clk_root_list, child_node)
240                 clk_disable_unused_subtree(clk);
241
242         hlist_for_each_entry(clk, tmp, &clk_orphan_list, child_node)
243                 clk_disable_unused_subtree(clk);
244
245         mutex_unlock(&prepare_lock);
246
247         return 0;
248 }
249 late_initcall(clk_disable_unused);
250
251 /***    helper functions   ***/
252
253 inline const char *__clk_get_name(struct clk *clk)
254 {
255         return !clk ? NULL : clk->name;
256 }
257
258 inline struct clk_hw *__clk_get_hw(struct clk *clk)
259 {
260         return !clk ? NULL : clk->hw;
261 }
262
263 inline u8 __clk_get_num_parents(struct clk *clk)
264 {
265         return !clk ? 0 : clk->num_parents;
266 }
267
268 inline struct clk *__clk_get_parent(struct clk *clk)
269 {
270         return !clk ? NULL : clk->parent;
271 }
272
273 inline unsigned int __clk_get_enable_count(struct clk *clk)
274 {
275         return !clk ? 0 : clk->enable_count;
276 }
277
278 inline unsigned int __clk_get_prepare_count(struct clk *clk)
279 {
280         return !clk ? 0 : clk->prepare_count;
281 }
282
283 unsigned long __clk_get_rate(struct clk *clk)
284 {
285         unsigned long ret;
286
287         if (!clk) {
288                 ret = 0;
289                 goto out;
290         }
291
292         ret = clk->rate;
293
294         if (clk->flags & CLK_IS_ROOT)
295                 goto out;
296
297         if (!clk->parent)
298                 ret = 0;
299
300 out:
301         return ret;
302 }
303
304 inline unsigned long __clk_get_flags(struct clk *clk)
305 {
306         return !clk ? 0 : clk->flags;
307 }
308
309 bool __clk_is_enabled(struct clk *clk)
310 {
311         int ret;
312
313         if (!clk)
314                 return false;
315
316         /*
317          * .is_enabled is only mandatory for clocks that gate
318          * fall back to software usage counter if .is_enabled is missing
319          */
320         if (!clk->ops->is_enabled) {
321                 ret = clk->enable_count ? 1 : 0;
322                 goto out;
323         }
324
325         ret = clk->ops->is_enabled(clk->hw);
326 out:
327         return !!ret;
328 }
329
330 static struct clk *__clk_lookup_subtree(const char *name, struct clk *clk)
331 {
332         struct clk *child;
333         struct clk *ret;
334         struct hlist_node *tmp;
335
336         if (!strcmp(clk->name, name))
337                 return clk;
338
339         hlist_for_each_entry(child, tmp, &clk->children, child_node) {
340                 ret = __clk_lookup_subtree(name, child);
341                 if (ret)
342                         return ret;
343         }
344
345         return NULL;
346 }
347
348 struct clk *__clk_lookup(const char *name)
349 {
350         struct clk *root_clk;
351         struct clk *ret;
352         struct hlist_node *tmp;
353
354         if (!name)
355                 return NULL;
356
357         /* search the 'proper' clk tree first */
358         hlist_for_each_entry(root_clk, tmp, &clk_root_list, child_node) {
359                 ret = __clk_lookup_subtree(name, root_clk);
360                 if (ret)
361                         return ret;
362         }
363
364         /* if not found, then search the orphan tree */
365         hlist_for_each_entry(root_clk, tmp, &clk_orphan_list, child_node) {
366                 ret = __clk_lookup_subtree(name, root_clk);
367                 if (ret)
368                         return ret;
369         }
370
371         return NULL;
372 }
373
374 /***        clk api        ***/
375
376 void __clk_unprepare(struct clk *clk)
377 {
378         if (!clk)
379                 return;
380
381         if (WARN_ON(clk->prepare_count == 0))
382                 return;
383
384         if (--clk->prepare_count > 0)
385                 return;
386
387         WARN_ON(clk->enable_count > 0);
388
389         if (clk->ops->unprepare)
390                 clk->ops->unprepare(clk->hw);
391
392         __clk_unprepare(clk->parent);
393 }
394
395 /**
396  * clk_unprepare - undo preparation of a clock source
397  * @clk: the clk being unprepare
398  *
399  * clk_unprepare may sleep, which differentiates it from clk_disable.  In a
400  * simple case, clk_unprepare can be used instead of clk_disable to gate a clk
401  * if the operation may sleep.  One example is a clk which is accessed over
402  * I2c.  In the complex case a clk gate operation may require a fast and a slow
403  * part.  It is this reason that clk_unprepare and clk_disable are not mutually
404  * exclusive.  In fact clk_disable must be called before clk_unprepare.
405  */
406 void clk_unprepare(struct clk *clk)
407 {
408         mutex_lock(&prepare_lock);
409         __clk_unprepare(clk);
410         mutex_unlock(&prepare_lock);
411 }
412 EXPORT_SYMBOL_GPL(clk_unprepare);
413
414 int __clk_prepare(struct clk *clk)
415 {
416         int ret = 0;
417
418         if (!clk)
419                 return 0;
420
421         if (clk->prepare_count == 0) {
422                 ret = __clk_prepare(clk->parent);
423                 if (ret)
424                         return ret;
425
426                 if (clk->ops->prepare) {
427                         ret = clk->ops->prepare(clk->hw);
428                         if (ret) {
429                                 __clk_unprepare(clk->parent);
430                                 return ret;
431                         }
432                 }
433         }
434
435         clk->prepare_count++;
436
437         return 0;
438 }
439
440 /**
441  * clk_prepare - prepare a clock source
442  * @clk: the clk being prepared
443  *
444  * clk_prepare may sleep, which differentiates it from clk_enable.  In a simple
445  * case, clk_prepare can be used instead of clk_enable to ungate a clk if the
446  * operation may sleep.  One example is a clk which is accessed over I2c.  In
447  * the complex case a clk ungate operation may require a fast and a slow part.
448  * It is this reason that clk_prepare and clk_enable are not mutually
449  * exclusive.  In fact clk_prepare must be called before clk_enable.
450  * Returns 0 on success, -EERROR otherwise.
451  */
452 int clk_prepare(struct clk *clk)
453 {
454         int ret;
455
456         mutex_lock(&prepare_lock);
457         ret = __clk_prepare(clk);
458         mutex_unlock(&prepare_lock);
459
460         return ret;
461 }
462 EXPORT_SYMBOL_GPL(clk_prepare);
463
464 static void __clk_disable(struct clk *clk)
465 {
466         if (!clk)
467                 return;
468
469         if (WARN_ON(IS_ERR(clk)))
470                 return;
471
472         if (WARN_ON(clk->enable_count == 0))
473                 return;
474
475         if (--clk->enable_count > 0)
476                 return;
477
478         if (clk->ops->disable)
479                 clk->ops->disable(clk->hw);
480
481         __clk_disable(clk->parent);
482 }
483
484 /**
485  * clk_disable - gate a clock
486  * @clk: the clk being gated
487  *
488  * clk_disable must not sleep, which differentiates it from clk_unprepare.  In
489  * a simple case, clk_disable can be used instead of clk_unprepare to gate a
490  * clk if the operation is fast and will never sleep.  One example is a
491  * SoC-internal clk which is controlled via simple register writes.  In the
492  * complex case a clk gate operation may require a fast and a slow part.  It is
493  * this reason that clk_unprepare and clk_disable are not mutually exclusive.
494  * In fact clk_disable must be called before clk_unprepare.
495  */
496 void clk_disable(struct clk *clk)
497 {
498         unsigned long flags;
499
500         spin_lock_irqsave(&enable_lock, flags);
501         __clk_disable(clk);
502         spin_unlock_irqrestore(&enable_lock, flags);
503 }
504 EXPORT_SYMBOL_GPL(clk_disable);
505
506 static int __clk_enable(struct clk *clk)
507 {
508         int ret = 0;
509
510         if (!clk)
511                 return 0;
512
513         if (WARN_ON(clk->prepare_count == 0))
514                 return -ESHUTDOWN;
515
516         if (clk->enable_count == 0) {
517                 ret = __clk_enable(clk->parent);
518
519                 if (ret)
520                         return ret;
521
522                 if (clk->ops->enable) {
523                         ret = clk->ops->enable(clk->hw);
524                         if (ret) {
525                                 __clk_disable(clk->parent);
526                                 return ret;
527                         }
528                 }
529         }
530
531         clk->enable_count++;
532         return 0;
533 }
534
535 /**
536  * clk_enable - ungate a clock
537  * @clk: the clk being ungated
538  *
539  * clk_enable must not sleep, which differentiates it from clk_prepare.  In a
540  * simple case, clk_enable can be used instead of clk_prepare to ungate a clk
541  * if the operation will never sleep.  One example is a SoC-internal clk which
542  * is controlled via simple register writes.  In the complex case a clk ungate
543  * operation may require a fast and a slow part.  It is this reason that
544  * clk_enable and clk_prepare are not mutually exclusive.  In fact clk_prepare
545  * must be called before clk_enable.  Returns 0 on success, -EERROR
546  * otherwise.
547  */
548 int clk_enable(struct clk *clk)
549 {
550         unsigned long flags;
551         int ret;
552
553         spin_lock_irqsave(&enable_lock, flags);
554         ret = __clk_enable(clk);
555         spin_unlock_irqrestore(&enable_lock, flags);
556
557         return ret;
558 }
559 EXPORT_SYMBOL_GPL(clk_enable);
560
561 /**
562  * __clk_round_rate - round the given rate for a clk
563  * @clk: round the rate of this clock
564  *
565  * Caller must hold prepare_lock.  Useful for clk_ops such as .set_rate
566  */
567 unsigned long __clk_round_rate(struct clk *clk, unsigned long rate)
568 {
569         unsigned long parent_rate = 0;
570
571         if (!clk)
572                 return 0;
573
574         if (!clk->ops->round_rate) {
575                 if (clk->flags & CLK_SET_RATE_PARENT)
576                         return __clk_round_rate(clk->parent, rate);
577                 else
578                         return clk->rate;
579         }
580
581         if (clk->parent)
582                 parent_rate = clk->parent->rate;
583
584         return clk->ops->round_rate(clk->hw, rate, &parent_rate);
585 }
586
587 /**
588  * clk_round_rate - round the given rate for a clk
589  * @clk: the clk for which we are rounding a rate
590  * @rate: the rate which is to be rounded
591  *
592  * Takes in a rate as input and rounds it to a rate that the clk can actually
593  * use which is then returned.  If clk doesn't support round_rate operation
594  * then the parent rate is returned.
595  */
596 long clk_round_rate(struct clk *clk, unsigned long rate)
597 {
598         unsigned long ret;
599
600         mutex_lock(&prepare_lock);
601         ret = __clk_round_rate(clk, rate);
602         mutex_unlock(&prepare_lock);
603
604         return ret;
605 }
606 EXPORT_SYMBOL_GPL(clk_round_rate);
607
608 /**
609  * __clk_notify - call clk notifier chain
610  * @clk: struct clk * that is changing rate
611  * @msg: clk notifier type (see include/linux/clk.h)
612  * @old_rate: old clk rate
613  * @new_rate: new clk rate
614  *
615  * Triggers a notifier call chain on the clk rate-change notification
616  * for 'clk'.  Passes a pointer to the struct clk and the previous
617  * and current rates to the notifier callback.  Intended to be called by
618  * internal clock code only.  Returns NOTIFY_DONE from the last driver
619  * called if all went well, or NOTIFY_STOP or NOTIFY_BAD immediately if
620  * a driver returns that.
621  */
622 static int __clk_notify(struct clk *clk, unsigned long msg,
623                 unsigned long old_rate, unsigned long new_rate)
624 {
625         struct clk_notifier *cn;
626         struct clk_notifier_data cnd;
627         int ret = NOTIFY_DONE;
628
629         cnd.clk = clk;
630         cnd.old_rate = old_rate;
631         cnd.new_rate = new_rate;
632
633         list_for_each_entry(cn, &clk_notifier_list, node) {
634                 if (cn->clk == clk) {
635                         ret = srcu_notifier_call_chain(&cn->notifier_head, msg,
636                                         &cnd);
637                         break;
638                 }
639         }
640
641         return ret;
642 }
643
644 /**
645  * __clk_recalc_rates
646  * @clk: first clk in the subtree
647  * @msg: notification type (see include/linux/clk.h)
648  *
649  * Walks the subtree of clks starting with clk and recalculates rates as it
650  * goes.  Note that if a clk does not implement the .recalc_rate callback then
651  * it is assumed that the clock will take on the rate of it's parent.
652  *
653  * clk_recalc_rates also propagates the POST_RATE_CHANGE notification,
654  * if necessary.
655  *
656  * Caller must hold prepare_lock.
657  */
658 static void __clk_recalc_rates(struct clk *clk, unsigned long msg)
659 {
660         unsigned long old_rate;
661         unsigned long parent_rate = 0;
662         struct hlist_node *tmp;
663         struct clk *child;
664
665         old_rate = clk->rate;
666
667         if (clk->parent)
668                 parent_rate = clk->parent->rate;
669
670         if (clk->ops->recalc_rate)
671                 clk->rate = clk->ops->recalc_rate(clk->hw, parent_rate);
672         else
673                 clk->rate = parent_rate;
674
675         /*
676          * ignore NOTIFY_STOP and NOTIFY_BAD return values for POST_RATE_CHANGE
677          * & ABORT_RATE_CHANGE notifiers
678          */
679         if (clk->notifier_count && msg)
680                 __clk_notify(clk, msg, old_rate, clk->rate);
681
682         hlist_for_each_entry(child, tmp, &clk->children, child_node)
683                 __clk_recalc_rates(child, msg);
684 }
685
686 /**
687  * clk_get_rate - return the rate of clk
688  * @clk: the clk whose rate is being returned
689  *
690  * Simply returns the cached rate of the clk, unless CLK_GET_RATE_NOCACHE flag
691  * is set, which means a recalc_rate will be issued.
692  * If clk is NULL then returns 0.
693  */
694 unsigned long clk_get_rate(struct clk *clk)
695 {
696         unsigned long rate;
697
698         mutex_lock(&prepare_lock);
699
700         if (clk && (clk->flags & CLK_GET_RATE_NOCACHE))
701                 __clk_recalc_rates(clk, 0);
702
703         rate = __clk_get_rate(clk);
704         mutex_unlock(&prepare_lock);
705
706         return rate;
707 }
708 EXPORT_SYMBOL_GPL(clk_get_rate);
709
710 /**
711  * __clk_speculate_rates
712  * @clk: first clk in the subtree
713  * @parent_rate: the "future" rate of clk's parent
714  *
715  * Walks the subtree of clks starting with clk, speculating rates as it
716  * goes and firing off PRE_RATE_CHANGE notifications as necessary.
717  *
718  * Unlike clk_recalc_rates, clk_speculate_rates exists only for sending
719  * pre-rate change notifications and returns early if no clks in the
720  * subtree have subscribed to the notifications.  Note that if a clk does not
721  * implement the .recalc_rate callback then it is assumed that the clock will
722  * take on the rate of it's parent.
723  *
724  * Caller must hold prepare_lock.
725  */
726 static int __clk_speculate_rates(struct clk *clk, unsigned long parent_rate)
727 {
728         struct hlist_node *tmp;
729         struct clk *child;
730         unsigned long new_rate;
731         int ret = NOTIFY_DONE;
732
733         if (clk->ops->recalc_rate)
734                 new_rate = clk->ops->recalc_rate(clk->hw, parent_rate);
735         else
736                 new_rate = parent_rate;
737
738         /* abort the rate change if a driver returns NOTIFY_BAD */
739         if (clk->notifier_count)
740                 ret = __clk_notify(clk, PRE_RATE_CHANGE, clk->rate, new_rate);
741
742         if (ret == NOTIFY_BAD)
743                 goto out;
744
745         hlist_for_each_entry(child, tmp, &clk->children, child_node) {
746                 ret = __clk_speculate_rates(child, new_rate);
747                 if (ret == NOTIFY_BAD)
748                         break;
749         }
750
751 out:
752         return ret;
753 }
754
755 static void clk_calc_subtree(struct clk *clk, unsigned long new_rate)
756 {
757         struct clk *child;
758         struct hlist_node *tmp;
759
760         clk->new_rate = new_rate;
761
762         hlist_for_each_entry(child, tmp, &clk->children, child_node) {
763                 if (child->ops->recalc_rate)
764                         child->new_rate = child->ops->recalc_rate(child->hw, new_rate);
765                 else
766                         child->new_rate = new_rate;
767                 clk_calc_subtree(child, child->new_rate);
768         }
769 }
770
771 /*
772  * calculate the new rates returning the topmost clock that has to be
773  * changed.
774  */
775 static struct clk *clk_calc_new_rates(struct clk *clk, unsigned long rate)
776 {
777         struct clk *top = clk;
778         unsigned long best_parent_rate = 0;
779         unsigned long new_rate;
780
781         /* sanity */
782         if (IS_ERR_OR_NULL(clk))
783                 return NULL;
784
785         /* save parent rate, if it exists */
786         if (clk->parent)
787                 best_parent_rate = clk->parent->rate;
788
789         /* never propagate up to the parent */
790         if (!(clk->flags & CLK_SET_RATE_PARENT)) {
791                 if (!clk->ops->round_rate) {
792                         clk->new_rate = clk->rate;
793                         return NULL;
794                 }
795                 new_rate = clk->ops->round_rate(clk->hw, rate, &best_parent_rate);
796                 goto out;
797         }
798
799         /* need clk->parent from here on out */
800         if (!clk->parent) {
801                 pr_debug("%s: %s has NULL parent\n", __func__, clk->name);
802                 return NULL;
803         }
804
805         if (!clk->ops->round_rate) {
806                 top = clk_calc_new_rates(clk->parent, rate);
807                 new_rate = clk->parent->new_rate;
808
809                 goto out;
810         }
811
812         new_rate = clk->ops->round_rate(clk->hw, rate, &best_parent_rate);
813
814         if (best_parent_rate != clk->parent->rate) {
815                 top = clk_calc_new_rates(clk->parent, best_parent_rate);
816
817                 goto out;
818         }
819
820 out:
821         clk_calc_subtree(clk, new_rate);
822
823         return top;
824 }
825
826 /*
827  * Notify about rate changes in a subtree. Always walk down the whole tree
828  * so that in case of an error we can walk down the whole tree again and
829  * abort the change.
830  */
831 static struct clk *clk_propagate_rate_change(struct clk *clk, unsigned long event)
832 {
833         struct hlist_node *tmp;
834         struct clk *child, *fail_clk = NULL;
835         int ret = NOTIFY_DONE;
836
837         if (clk->rate == clk->new_rate)
838                 return 0;
839
840         if (clk->notifier_count) {
841                 ret = __clk_notify(clk, event, clk->rate, clk->new_rate);
842                 if (ret == NOTIFY_BAD)
843                         fail_clk = clk;
844         }
845
846         hlist_for_each_entry(child, tmp, &clk->children, child_node) {
847                 clk = clk_propagate_rate_change(child, event);
848                 if (clk)
849                         fail_clk = clk;
850         }
851
852         return fail_clk;
853 }
854
855 /*
856  * walk down a subtree and set the new rates notifying the rate
857  * change on the way
858  */
859 static void clk_change_rate(struct clk *clk)
860 {
861         struct clk *child;
862         unsigned long old_rate;
863         unsigned long best_parent_rate = 0;
864         struct hlist_node *tmp;
865
866         old_rate = clk->rate;
867
868         if (clk->parent)
869                 best_parent_rate = clk->parent->rate;
870
871         if (clk->ops->set_rate)
872                 clk->ops->set_rate(clk->hw, clk->new_rate, best_parent_rate);
873
874         if (clk->ops->recalc_rate)
875                 clk->rate = clk->ops->recalc_rate(clk->hw, best_parent_rate);
876         else
877                 clk->rate = best_parent_rate;
878
879         if (clk->notifier_count && old_rate != clk->rate)
880                 __clk_notify(clk, POST_RATE_CHANGE, old_rate, clk->rate);
881
882         hlist_for_each_entry(child, tmp, &clk->children, child_node)
883                 clk_change_rate(child);
884 }
885
886 /**
887  * clk_set_rate - specify a new rate for clk
888  * @clk: the clk whose rate is being changed
889  * @rate: the new rate for clk
890  *
891  * In the simplest case clk_set_rate will only adjust the rate of clk.
892  *
893  * Setting the CLK_SET_RATE_PARENT flag allows the rate change operation to
894  * propagate up to clk's parent; whether or not this happens depends on the
895  * outcome of clk's .round_rate implementation.  If *parent_rate is unchanged
896  * after calling .round_rate then upstream parent propagation is ignored.  If
897  * *parent_rate comes back with a new rate for clk's parent then we propagate
898  * up to clk's parent and set it's rate.  Upward propagation will continue
899  * until either a clk does not support the CLK_SET_RATE_PARENT flag or
900  * .round_rate stops requesting changes to clk's parent_rate.
901  *
902  * Rate changes are accomplished via tree traversal that also recalculates the
903  * rates for the clocks and fires off POST_RATE_CHANGE notifiers.
904  *
905  * Returns 0 on success, -EERROR otherwise.
906  */
907 int clk_set_rate(struct clk *clk, unsigned long rate)
908 {
909         struct clk *top, *fail_clk;
910         int ret = 0;
911
912         /* prevent racing with updates to the clock topology */
913         mutex_lock(&prepare_lock);
914
915         /* bail early if nothing to do */
916         if (rate == clk->rate)
917                 goto out;
918
919         if ((clk->flags & CLK_SET_RATE_GATE) && clk->prepare_count) {
920                 ret = -EBUSY;
921                 goto out;
922         }
923
924         /* calculate new rates and get the topmost changed clock */
925         top = clk_calc_new_rates(clk, rate);
926         if (!top) {
927                 ret = -EINVAL;
928                 goto out;
929         }
930
931         /* notify that we are about to change rates */
932         fail_clk = clk_propagate_rate_change(top, PRE_RATE_CHANGE);
933         if (fail_clk) {
934                 pr_warn("%s: failed to set %s rate\n", __func__,
935                                 fail_clk->name);
936                 clk_propagate_rate_change(top, ABORT_RATE_CHANGE);
937                 ret = -EBUSY;
938                 goto out;
939         }
940
941         /* change the rates */
942         clk_change_rate(top);
943
944         mutex_unlock(&prepare_lock);
945
946         return 0;
947 out:
948         mutex_unlock(&prepare_lock);
949
950         return ret;
951 }
952 EXPORT_SYMBOL_GPL(clk_set_rate);
953
954 /**
955  * clk_get_parent - return the parent of a clk
956  * @clk: the clk whose parent gets returned
957  *
958  * Simply returns clk->parent.  Returns NULL if clk is NULL.
959  */
960 struct clk *clk_get_parent(struct clk *clk)
961 {
962         struct clk *parent;
963
964         mutex_lock(&prepare_lock);
965         parent = __clk_get_parent(clk);
966         mutex_unlock(&prepare_lock);
967
968         return parent;
969 }
970 EXPORT_SYMBOL_GPL(clk_get_parent);
971
972 /*
973  * .get_parent is mandatory for clocks with multiple possible parents.  It is
974  * optional for single-parent clocks.  Always call .get_parent if it is
975  * available and WARN if it is missing for multi-parent clocks.
976  *
977  * For single-parent clocks without .get_parent, first check to see if the
978  * .parents array exists, and if so use it to avoid an expensive tree
979  * traversal.  If .parents does not exist then walk the tree with __clk_lookup.
980  */
981 static struct clk *__clk_init_parent(struct clk *clk)
982 {
983         struct clk *ret = NULL;
984         u8 index;
985
986         /* handle the trivial cases */
987
988         if (!clk->num_parents)
989                 goto out;
990
991         if (clk->num_parents == 1) {
992                 if (IS_ERR_OR_NULL(clk->parent))
993                         ret = clk->parent = __clk_lookup(clk->parent_names[0]);
994                 ret = clk->parent;
995                 goto out;
996         }
997
998         if (!clk->ops->get_parent) {
999                 WARN(!clk->ops->get_parent,
1000                         "%s: multi-parent clocks must implement .get_parent\n",
1001                         __func__);
1002                 goto out;
1003         };
1004
1005         /*
1006          * Do our best to cache parent clocks in clk->parents.  This prevents
1007          * unnecessary and expensive calls to __clk_lookup.  We don't set
1008          * clk->parent here; that is done by the calling function
1009          */
1010
1011         index = clk->ops->get_parent(clk->hw);
1012
1013         if (!clk->parents)
1014                 clk->parents =
1015                         kzalloc((sizeof(struct clk*) * clk->num_parents),
1016                                         GFP_KERNEL);
1017
1018         if (!clk->parents)
1019                 ret = __clk_lookup(clk->parent_names[index]);
1020         else if (!clk->parents[index])
1021                 ret = clk->parents[index] =
1022                         __clk_lookup(clk->parent_names[index]);
1023         else
1024                 ret = clk->parents[index];
1025
1026 out:
1027         return ret;
1028 }
1029
1030 void __clk_reparent(struct clk *clk, struct clk *new_parent)
1031 {
1032 #ifdef CONFIG_COMMON_CLK_DEBUG
1033         struct dentry *d;
1034         struct dentry *new_parent_d;
1035 #endif
1036
1037         if (!clk || !new_parent)
1038                 return;
1039
1040         hlist_del(&clk->child_node);
1041
1042         if (new_parent)
1043                 hlist_add_head(&clk->child_node, &new_parent->children);
1044         else
1045                 hlist_add_head(&clk->child_node, &clk_orphan_list);
1046
1047 #ifdef CONFIG_COMMON_CLK_DEBUG
1048         if (!inited)
1049                 goto out;
1050
1051         if (new_parent)
1052                 new_parent_d = new_parent->dentry;
1053         else
1054                 new_parent_d = orphandir;
1055
1056         d = debugfs_rename(clk->dentry->d_parent, clk->dentry,
1057                         new_parent_d, clk->name);
1058         if (d)
1059                 clk->dentry = d;
1060         else
1061                 pr_debug("%s: failed to rename debugfs entry for %s\n",
1062                                 __func__, clk->name);
1063 out:
1064 #endif
1065
1066         clk->parent = new_parent;
1067
1068         __clk_recalc_rates(clk, POST_RATE_CHANGE);
1069 }
1070
1071 static int __clk_set_parent(struct clk *clk, struct clk *parent)
1072 {
1073         struct clk *old_parent;
1074         unsigned long flags;
1075         int ret = -EINVAL;
1076         u8 i;
1077
1078         old_parent = clk->parent;
1079
1080         if (!clk->parents)
1081                 clk->parents = kzalloc((sizeof(struct clk*) * clk->num_parents),
1082                                                                 GFP_KERNEL);
1083
1084         /*
1085          * find index of new parent clock using cached parent ptrs,
1086          * or if not yet cached, use string name comparison and cache
1087          * them now to avoid future calls to __clk_lookup.
1088          */
1089         for (i = 0; i < clk->num_parents; i++) {
1090                 if (clk->parents && clk->parents[i] == parent)
1091                         break;
1092                 else if (!strcmp(clk->parent_names[i], parent->name)) {
1093                         if (clk->parents)
1094                                 clk->parents[i] = __clk_lookup(parent->name);
1095                         break;
1096                 }
1097         }
1098
1099         if (i == clk->num_parents) {
1100                 pr_debug("%s: clock %s is not a possible parent of clock %s\n",
1101                                 __func__, parent->name, clk->name);
1102                 goto out;
1103         }
1104
1105         /* migrate prepare and enable */
1106         if (clk->prepare_count)
1107                 __clk_prepare(parent);
1108
1109         /* FIXME replace with clk_is_enabled(clk) someday */
1110         spin_lock_irqsave(&enable_lock, flags);
1111         if (clk->enable_count)
1112                 __clk_enable(parent);
1113         spin_unlock_irqrestore(&enable_lock, flags);
1114
1115         /* change clock input source */
1116         ret = clk->ops->set_parent(clk->hw, i);
1117
1118         /* clean up old prepare and enable */
1119         spin_lock_irqsave(&enable_lock, flags);
1120         if (clk->enable_count)
1121                 __clk_disable(old_parent);
1122         spin_unlock_irqrestore(&enable_lock, flags);
1123
1124         if (clk->prepare_count)
1125                 __clk_unprepare(old_parent);
1126
1127 out:
1128         return ret;
1129 }
1130
1131 /**
1132  * clk_set_parent - switch the parent of a mux clk
1133  * @clk: the mux clk whose input we are switching
1134  * @parent: the new input to clk
1135  *
1136  * Re-parent clk to use parent as it's new input source.  If clk has the
1137  * CLK_SET_PARENT_GATE flag set then clk must be gated for this
1138  * operation to succeed.  After successfully changing clk's parent
1139  * clk_set_parent will update the clk topology, sysfs topology and
1140  * propagate rate recalculation via __clk_recalc_rates.  Returns 0 on
1141  * success, -EERROR otherwise.
1142  */
1143 int clk_set_parent(struct clk *clk, struct clk *parent)
1144 {
1145         int ret = 0;
1146
1147         if (!clk || !clk->ops)
1148                 return -EINVAL;
1149
1150         if (!clk->ops->set_parent)
1151                 return -ENOSYS;
1152
1153         /* prevent racing with updates to the clock topology */
1154         mutex_lock(&prepare_lock);
1155
1156         if (clk->parent == parent)
1157                 goto out;
1158
1159         /* propagate PRE_RATE_CHANGE notifications */
1160         if (clk->notifier_count)
1161                 ret = __clk_speculate_rates(clk, parent->rate);
1162
1163         /* abort if a driver objects */
1164         if (ret == NOTIFY_STOP)
1165                 goto out;
1166
1167         /* only re-parent if the clock is not in use */
1168         if ((clk->flags & CLK_SET_PARENT_GATE) && clk->prepare_count)
1169                 ret = -EBUSY;
1170         else
1171                 ret = __clk_set_parent(clk, parent);
1172
1173         /* propagate ABORT_RATE_CHANGE if .set_parent failed */
1174         if (ret) {
1175                 __clk_recalc_rates(clk, ABORT_RATE_CHANGE);
1176                 goto out;
1177         }
1178
1179         /* propagate rate recalculation downstream */
1180         __clk_reparent(clk, parent);
1181
1182 out:
1183         mutex_unlock(&prepare_lock);
1184
1185         return ret;
1186 }
1187 EXPORT_SYMBOL_GPL(clk_set_parent);
1188
1189 /**
1190  * __clk_init - initialize the data structures in a struct clk
1191  * @dev:        device initializing this clk, placeholder for now
1192  * @clk:        clk being initialized
1193  *
1194  * Initializes the lists in struct clk, queries the hardware for the
1195  * parent and rate and sets them both.
1196  */
1197 int __clk_init(struct device *dev, struct clk *clk)
1198 {
1199         int i, ret = 0;
1200         struct clk *orphan;
1201         struct hlist_node *tmp, *tmp2;
1202
1203         if (!clk)
1204                 return -EINVAL;
1205
1206         mutex_lock(&prepare_lock);
1207
1208         /* check to see if a clock with this name is already registered */
1209         if (__clk_lookup(clk->name)) {
1210                 pr_debug("%s: clk %s already initialized\n",
1211                                 __func__, clk->name);
1212                 ret = -EEXIST;
1213                 goto out;
1214         }
1215
1216         /* check that clk_ops are sane.  See Documentation/clk.txt */
1217         if (clk->ops->set_rate &&
1218                         !(clk->ops->round_rate && clk->ops->recalc_rate)) {
1219                 pr_warning("%s: %s must implement .round_rate & .recalc_rate\n",
1220                                 __func__, clk->name);
1221                 ret = -EINVAL;
1222                 goto out;
1223         }
1224
1225         if (clk->ops->set_parent && !clk->ops->get_parent) {
1226                 pr_warning("%s: %s must implement .get_parent & .set_parent\n",
1227                                 __func__, clk->name);
1228                 ret = -EINVAL;
1229                 goto out;
1230         }
1231
1232         /* throw a WARN if any entries in parent_names are NULL */
1233         for (i = 0; i < clk->num_parents; i++)
1234                 WARN(!clk->parent_names[i],
1235                                 "%s: invalid NULL in %s's .parent_names\n",
1236                                 __func__, clk->name);
1237
1238         /*
1239          * Allocate an array of struct clk *'s to avoid unnecessary string
1240          * look-ups of clk's possible parents.  This can fail for clocks passed
1241          * in to clk_init during early boot; thus any access to clk->parents[]
1242          * must always check for a NULL pointer and try to populate it if
1243          * necessary.
1244          *
1245          * If clk->parents is not NULL we skip this entire block.  This allows
1246          * for clock drivers to statically initialize clk->parents.
1247          */
1248         if (clk->num_parents > 1 && !clk->parents) {
1249                 clk->parents = kzalloc((sizeof(struct clk*) * clk->num_parents),
1250                                 GFP_KERNEL);
1251                 /*
1252                  * __clk_lookup returns NULL for parents that have not been
1253                  * clk_init'd; thus any access to clk->parents[] must check
1254                  * for a NULL pointer.  We can always perform lazy lookups for
1255                  * missing parents later on.
1256                  */
1257                 if (clk->parents)
1258                         for (i = 0; i < clk->num_parents; i++)
1259                                 clk->parents[i] =
1260                                         __clk_lookup(clk->parent_names[i]);
1261         }
1262
1263         clk->parent = __clk_init_parent(clk);
1264
1265         /*
1266          * Populate clk->parent if parent has already been __clk_init'd.  If
1267          * parent has not yet been __clk_init'd then place clk in the orphan
1268          * list.  If clk has set the CLK_IS_ROOT flag then place it in the root
1269          * clk list.
1270          *
1271          * Every time a new clk is clk_init'd then we walk the list of orphan
1272          * clocks and re-parent any that are children of the clock currently
1273          * being clk_init'd.
1274          */
1275         if (clk->parent)
1276                 hlist_add_head(&clk->child_node,
1277                                 &clk->parent->children);
1278         else if (clk->flags & CLK_IS_ROOT)
1279                 hlist_add_head(&clk->child_node, &clk_root_list);
1280         else
1281                 hlist_add_head(&clk->child_node, &clk_orphan_list);
1282
1283         /*
1284          * Set clk's rate.  The preferred method is to use .recalc_rate.  For
1285          * simple clocks and lazy developers the default fallback is to use the
1286          * parent's rate.  If a clock doesn't have a parent (or is orphaned)
1287          * then rate is set to zero.
1288          */
1289         if (clk->ops->recalc_rate)
1290                 clk->rate = clk->ops->recalc_rate(clk->hw,
1291                                 __clk_get_rate(clk->parent));
1292         else if (clk->parent)
1293                 clk->rate = clk->parent->rate;
1294         else
1295                 clk->rate = 0;
1296
1297         /*
1298          * walk the list of orphan clocks and reparent any that are children of
1299          * this clock
1300          */
1301         hlist_for_each_entry_safe(orphan, tmp, tmp2, &clk_orphan_list, child_node) {
1302                 if (orphan->ops->get_parent) {
1303                         i = orphan->ops->get_parent(orphan->hw);
1304                         if (!strcmp(clk->name, orphan->parent_names[i]))
1305                                 __clk_reparent(orphan, clk);
1306                         continue;
1307                 }
1308
1309                 for (i = 0; i < orphan->num_parents; i++)
1310                         if (!strcmp(clk->name, orphan->parent_names[i])) {
1311                                 __clk_reparent(orphan, clk);
1312                                 break;
1313                         }
1314          }
1315
1316         /*
1317          * optional platform-specific magic
1318          *
1319          * The .init callback is not used by any of the basic clock types, but
1320          * exists for weird hardware that must perform initialization magic.
1321          * Please consider other ways of solving initialization problems before
1322          * using this callback, as it's use is discouraged.
1323          */
1324         if (clk->ops->init)
1325                 clk->ops->init(clk->hw);
1326
1327         clk_debug_register(clk);
1328
1329 out:
1330         mutex_unlock(&prepare_lock);
1331
1332         return ret;
1333 }
1334
1335 /**
1336  * __clk_register - register a clock and return a cookie.
1337  *
1338  * Same as clk_register, except that the .clk field inside hw shall point to a
1339  * preallocated (generally statically allocated) struct clk. None of the fields
1340  * of the struct clk need to be initialized.
1341  *
1342  * The data pointed to by .init and .clk field shall NOT be marked as init
1343  * data.
1344  *
1345  * __clk_register is only exposed via clk-private.h and is intended for use with
1346  * very large numbers of clocks that need to be statically initialized.  It is
1347  * a layering violation to include clk-private.h from any code which implements
1348  * a clock's .ops; as such any statically initialized clock data MUST be in a
1349  * separate C file from the logic that implements it's operations.  Returns 0
1350  * on success, otherwise an error code.
1351  */
1352 struct clk *__clk_register(struct device *dev, struct clk_hw *hw)
1353 {
1354         int ret;
1355         struct clk *clk;
1356
1357         clk = hw->clk;
1358         clk->name = hw->init->name;
1359         clk->ops = hw->init->ops;
1360         clk->hw = hw;
1361         clk->flags = hw->init->flags;
1362         clk->parent_names = hw->init->parent_names;
1363         clk->num_parents = hw->init->num_parents;
1364
1365         ret = __clk_init(dev, clk);
1366         if (ret)
1367                 return ERR_PTR(ret);
1368
1369         return clk;
1370 }
1371 EXPORT_SYMBOL_GPL(__clk_register);
1372
1373 static int _clk_register(struct device *dev, struct clk_hw *hw, struct clk *clk)
1374 {
1375         int i, ret;
1376
1377         clk->name = kstrdup(hw->init->name, GFP_KERNEL);
1378         if (!clk->name) {
1379                 pr_err("%s: could not allocate clk->name\n", __func__);
1380                 ret = -ENOMEM;
1381                 goto fail_name;
1382         }
1383         clk->ops = hw->init->ops;
1384         clk->hw = hw;
1385         clk->flags = hw->init->flags;
1386         clk->num_parents = hw->init->num_parents;
1387         hw->clk = clk;
1388
1389         /* allocate local copy in case parent_names is __initdata */
1390         clk->parent_names = kzalloc((sizeof(char*) * clk->num_parents),
1391                         GFP_KERNEL);
1392
1393         if (!clk->parent_names) {
1394                 pr_err("%s: could not allocate clk->parent_names\n", __func__);
1395                 ret = -ENOMEM;
1396                 goto fail_parent_names;
1397         }
1398
1399
1400         /* copy each string name in case parent_names is __initdata */
1401         for (i = 0; i < clk->num_parents; i++) {
1402                 clk->parent_names[i] = kstrdup(hw->init->parent_names[i],
1403                                                 GFP_KERNEL);
1404                 if (!clk->parent_names[i]) {
1405                         pr_err("%s: could not copy parent_names\n", __func__);
1406                         ret = -ENOMEM;
1407                         goto fail_parent_names_copy;
1408                 }
1409         }
1410
1411         ret = __clk_init(dev, clk);
1412         if (!ret)
1413                 return 0;
1414
1415 fail_parent_names_copy:
1416         while (--i >= 0)
1417                 kfree(clk->parent_names[i]);
1418         kfree(clk->parent_names);
1419 fail_parent_names:
1420         kfree(clk->name);
1421 fail_name:
1422         return ret;
1423 }
1424
1425 /**
1426  * clk_register - allocate a new clock, register it and return an opaque cookie
1427  * @dev: device that is registering this clock
1428  * @hw: link to hardware-specific clock data
1429  *
1430  * clk_register is the primary interface for populating the clock tree with new
1431  * clock nodes.  It returns a pointer to the newly allocated struct clk which
1432  * cannot be dereferenced by driver code but may be used in conjuction with the
1433  * rest of the clock API.  In the event of an error clk_register will return an
1434  * error code; drivers must test for an error code after calling clk_register.
1435  */
1436 struct clk *clk_register(struct device *dev, struct clk_hw *hw)
1437 {
1438         int ret;
1439         struct clk *clk;
1440
1441         clk = kzalloc(sizeof(*clk), GFP_KERNEL);
1442         if (!clk) {
1443                 pr_err("%s: could not allocate clk\n", __func__);
1444                 ret = -ENOMEM;
1445                 goto fail_out;
1446         }
1447
1448         ret = _clk_register(dev, hw, clk);
1449         if (!ret)
1450                 return clk;
1451
1452         kfree(clk);
1453 fail_out:
1454         return ERR_PTR(ret);
1455 }
1456 EXPORT_SYMBOL_GPL(clk_register);
1457
1458 /**
1459  * clk_unregister - unregister a currently registered clock
1460  * @clk: clock to unregister
1461  *
1462  * Currently unimplemented.
1463  */
1464 void clk_unregister(struct clk *clk) {}
1465 EXPORT_SYMBOL_GPL(clk_unregister);
1466
1467 static void devm_clk_release(struct device *dev, void *res)
1468 {
1469         clk_unregister(res);
1470 }
1471
1472 /**
1473  * devm_clk_register - resource managed clk_register()
1474  * @dev: device that is registering this clock
1475  * @hw: link to hardware-specific clock data
1476  *
1477  * Managed clk_register(). Clocks returned from this function are
1478  * automatically clk_unregister()ed on driver detach. See clk_register() for
1479  * more information.
1480  */
1481 struct clk *devm_clk_register(struct device *dev, struct clk_hw *hw)
1482 {
1483         struct clk *clk;
1484         int ret;
1485
1486         clk = devres_alloc(devm_clk_release, sizeof(*clk), GFP_KERNEL);
1487         if (!clk)
1488                 return ERR_PTR(-ENOMEM);
1489
1490         ret = _clk_register(dev, hw, clk);
1491         if (!ret) {
1492                 devres_add(dev, clk);
1493         } else {
1494                 devres_free(clk);
1495                 clk = ERR_PTR(ret);
1496         }
1497
1498         return clk;
1499 }
1500 EXPORT_SYMBOL_GPL(devm_clk_register);
1501
1502 static int devm_clk_match(struct device *dev, void *res, void *data)
1503 {
1504         struct clk *c = res;
1505         if (WARN_ON(!c))
1506                 return 0;
1507         return c == data;
1508 }
1509
1510 /**
1511  * devm_clk_unregister - resource managed clk_unregister()
1512  * @clk: clock to unregister
1513  *
1514  * Deallocate a clock allocated with devm_clk_register(). Normally
1515  * this function will not need to be called and the resource management
1516  * code will ensure that the resource is freed.
1517  */
1518 void devm_clk_unregister(struct device *dev, struct clk *clk)
1519 {
1520         WARN_ON(devres_release(dev, devm_clk_release, devm_clk_match, clk));
1521 }
1522 EXPORT_SYMBOL_GPL(devm_clk_unregister);
1523
1524 /***        clk rate change notifiers        ***/
1525
1526 /**
1527  * clk_notifier_register - add a clk rate change notifier
1528  * @clk: struct clk * to watch
1529  * @nb: struct notifier_block * with callback info
1530  *
1531  * Request notification when clk's rate changes.  This uses an SRCU
1532  * notifier because we want it to block and notifier unregistrations are
1533  * uncommon.  The callbacks associated with the notifier must not
1534  * re-enter into the clk framework by calling any top-level clk APIs;
1535  * this will cause a nested prepare_lock mutex.
1536  *
1537  * Pre-change notifier callbacks will be passed the current, pre-change
1538  * rate of the clk via struct clk_notifier_data.old_rate.  The new,
1539  * post-change rate of the clk is passed via struct
1540  * clk_notifier_data.new_rate.
1541  *
1542  * Post-change notifiers will pass the now-current, post-change rate of
1543  * the clk in both struct clk_notifier_data.old_rate and struct
1544  * clk_notifier_data.new_rate.
1545  *
1546  * Abort-change notifiers are effectively the opposite of pre-change
1547  * notifiers: the original pre-change clk rate is passed in via struct
1548  * clk_notifier_data.new_rate and the failed post-change rate is passed
1549  * in via struct clk_notifier_data.old_rate.
1550  *
1551  * clk_notifier_register() must be called from non-atomic context.
1552  * Returns -EINVAL if called with null arguments, -ENOMEM upon
1553  * allocation failure; otherwise, passes along the return value of
1554  * srcu_notifier_chain_register().
1555  */
1556 int clk_notifier_register(struct clk *clk, struct notifier_block *nb)
1557 {
1558         struct clk_notifier *cn;
1559         int ret = -ENOMEM;
1560
1561         if (!clk || !nb)
1562                 return -EINVAL;
1563
1564         mutex_lock(&prepare_lock);
1565
1566         /* search the list of notifiers for this clk */
1567         list_for_each_entry(cn, &clk_notifier_list, node)
1568                 if (cn->clk == clk)
1569                         break;
1570
1571         /* if clk wasn't in the notifier list, allocate new clk_notifier */
1572         if (cn->clk != clk) {
1573                 cn = kzalloc(sizeof(struct clk_notifier), GFP_KERNEL);
1574                 if (!cn)
1575                         goto out;
1576
1577                 cn->clk = clk;
1578                 srcu_init_notifier_head(&cn->notifier_head);
1579
1580                 list_add(&cn->node, &clk_notifier_list);
1581         }
1582
1583         ret = srcu_notifier_chain_register(&cn->notifier_head, nb);
1584
1585         clk->notifier_count++;
1586
1587 out:
1588         mutex_unlock(&prepare_lock);
1589
1590         return ret;
1591 }
1592 EXPORT_SYMBOL_GPL(clk_notifier_register);
1593
1594 /**
1595  * clk_notifier_unregister - remove a clk rate change notifier
1596  * @clk: struct clk *
1597  * @nb: struct notifier_block * with callback info
1598  *
1599  * Request no further notification for changes to 'clk' and frees memory
1600  * allocated in clk_notifier_register.
1601  *
1602  * Returns -EINVAL if called with null arguments; otherwise, passes
1603  * along the return value of srcu_notifier_chain_unregister().
1604  */
1605 int clk_notifier_unregister(struct clk *clk, struct notifier_block *nb)
1606 {
1607         struct clk_notifier *cn = NULL;
1608         int ret = -EINVAL;
1609
1610         if (!clk || !nb)
1611                 return -EINVAL;
1612
1613         mutex_lock(&prepare_lock);
1614
1615         list_for_each_entry(cn, &clk_notifier_list, node)
1616                 if (cn->clk == clk)
1617                         break;
1618
1619         if (cn->clk == clk) {
1620                 ret = srcu_notifier_chain_unregister(&cn->notifier_head, nb);
1621
1622                 clk->notifier_count--;
1623
1624                 /* XXX the notifier code should handle this better */
1625                 if (!cn->notifier_head.head) {
1626                         srcu_cleanup_notifier_head(&cn->notifier_head);
1627                         kfree(cn);
1628                 }
1629
1630         } else {
1631                 ret = -ENOENT;
1632         }
1633
1634         mutex_unlock(&prepare_lock);
1635
1636         return ret;
1637 }
1638 EXPORT_SYMBOL_GPL(clk_notifier_unregister);
1639
1640 #ifdef CONFIG_OF
1641 /**
1642  * struct of_clk_provider - Clock provider registration structure
1643  * @link: Entry in global list of clock providers
1644  * @node: Pointer to device tree node of clock provider
1645  * @get: Get clock callback.  Returns NULL or a struct clk for the
1646  *       given clock specifier
1647  * @data: context pointer to be passed into @get callback
1648  */
1649 struct of_clk_provider {
1650         struct list_head link;
1651
1652         struct device_node *node;
1653         struct clk *(*get)(struct of_phandle_args *clkspec, void *data);
1654         void *data;
1655 };
1656
1657 static LIST_HEAD(of_clk_providers);
1658 static DEFINE_MUTEX(of_clk_lock);
1659
1660 struct clk *of_clk_src_simple_get(struct of_phandle_args *clkspec,
1661                                      void *data)
1662 {
1663         return data;
1664 }
1665 EXPORT_SYMBOL_GPL(of_clk_src_simple_get);
1666
1667 struct clk *of_clk_src_onecell_get(struct of_phandle_args *clkspec, void *data)
1668 {
1669         struct clk_onecell_data *clk_data = data;
1670         unsigned int idx = clkspec->args[0];
1671
1672         if (idx >= clk_data->clk_num) {
1673                 pr_err("%s: invalid clock index %d\n", __func__, idx);
1674                 return ERR_PTR(-EINVAL);
1675         }
1676
1677         return clk_data->clks[idx];
1678 }
1679 EXPORT_SYMBOL_GPL(of_clk_src_onecell_get);
1680
1681 /**
1682  * of_clk_add_provider() - Register a clock provider for a node
1683  * @np: Device node pointer associated with clock provider
1684  * @clk_src_get: callback for decoding clock
1685  * @data: context pointer for @clk_src_get callback.
1686  */
1687 int of_clk_add_provider(struct device_node *np,
1688                         struct clk *(*clk_src_get)(struct of_phandle_args *clkspec,
1689                                                    void *data),
1690                         void *data)
1691 {
1692         struct of_clk_provider *cp;
1693
1694         cp = kzalloc(sizeof(struct of_clk_provider), GFP_KERNEL);
1695         if (!cp)
1696                 return -ENOMEM;
1697
1698         cp->node = of_node_get(np);
1699         cp->data = data;
1700         cp->get = clk_src_get;
1701
1702         mutex_lock(&of_clk_lock);
1703         list_add(&cp->link, &of_clk_providers);
1704         mutex_unlock(&of_clk_lock);
1705         pr_debug("Added clock from %s\n", np->full_name);
1706
1707         return 0;
1708 }
1709 EXPORT_SYMBOL_GPL(of_clk_add_provider);
1710
1711 /**
1712  * of_clk_del_provider() - Remove a previously registered clock provider
1713  * @np: Device node pointer associated with clock provider
1714  */
1715 void of_clk_del_provider(struct device_node *np)
1716 {
1717         struct of_clk_provider *cp;
1718
1719         mutex_lock(&of_clk_lock);
1720         list_for_each_entry(cp, &of_clk_providers, link) {
1721                 if (cp->node == np) {
1722                         list_del(&cp->link);
1723                         of_node_put(cp->node);
1724                         kfree(cp);
1725                         break;
1726                 }
1727         }
1728         mutex_unlock(&of_clk_lock);
1729 }
1730 EXPORT_SYMBOL_GPL(of_clk_del_provider);
1731
1732 struct clk *of_clk_get_from_provider(struct of_phandle_args *clkspec)
1733 {
1734         struct of_clk_provider *provider;
1735         struct clk *clk = ERR_PTR(-ENOENT);
1736
1737         /* Check if we have such a provider in our array */
1738         mutex_lock(&of_clk_lock);
1739         list_for_each_entry(provider, &of_clk_providers, link) {
1740                 if (provider->node == clkspec->np)
1741                         clk = provider->get(clkspec, provider->data);
1742                 if (!IS_ERR(clk))
1743                         break;
1744         }
1745         mutex_unlock(&of_clk_lock);
1746
1747         return clk;
1748 }
1749
1750 const char *of_clk_get_parent_name(struct device_node *np, int index)
1751 {
1752         struct of_phandle_args clkspec;
1753         const char *clk_name;
1754         int rc;
1755
1756         if (index < 0)
1757                 return NULL;
1758
1759         rc = of_parse_phandle_with_args(np, "clocks", "#clock-cells", index,
1760                                         &clkspec);
1761         if (rc)
1762                 return NULL;
1763
1764         if (of_property_read_string_index(clkspec.np, "clock-output-names",
1765                                           clkspec.args_count ? clkspec.args[0] : 0,
1766                                           &clk_name) < 0)
1767                 clk_name = clkspec.np->name;
1768
1769         of_node_put(clkspec.np);
1770         return clk_name;
1771 }
1772 EXPORT_SYMBOL_GPL(of_clk_get_parent_name);
1773
1774 /**
1775  * of_clk_init() - Scan and init clock providers from the DT
1776  * @matches: array of compatible values and init functions for providers.
1777  *
1778  * This function scans the device tree for matching clock providers and
1779  * calls their initialization functions
1780  */
1781 void __init of_clk_init(const struct of_device_id *matches)
1782 {
1783         struct device_node *np;
1784
1785         for_each_matching_node(np, matches) {
1786                 const struct of_device_id *match = of_match_node(matches, np);
1787                 of_clk_init_cb_t clk_init_cb = match->data;
1788                 clk_init_cb(np);
1789         }
1790 }
1791 #endif