diff options
Diffstat (limited to 'include/linux/clk.h')
-rw-r--r-- | include/linux/clk.h | 68 |
1 files changed, 63 insertions, 5 deletions
diff --git a/include/linux/clk.h b/include/linux/clk.h index b9d46fa154b4..b0252726df61 100644 --- a/include/linux/clk.h +++ b/include/linux/clk.h | |||
@@ -3,6 +3,7 @@ | |||
3 | * | 3 | * |
4 | * Copyright (C) 2004 ARM Limited. | 4 | * Copyright (C) 2004 ARM Limited. |
5 | * Written by Deep Blue Solutions Limited. | 5 | * Written by Deep Blue Solutions Limited. |
6 | * Copyright (C) 2011-2012 Linaro Ltd <mturquette@linaro.org> | ||
6 | * | 7 | * |
7 | * This program is free software; you can redistribute it and/or modify | 8 | * This program is free software; you can redistribute it and/or modify |
8 | * it under the terms of the GNU General Public License version 2 as | 9 | * it under the terms of the GNU General Public License version 2 as |
@@ -12,18 +13,75 @@ | |||
12 | #define __LINUX_CLK_H | 13 | #define __LINUX_CLK_H |
13 | 14 | ||
14 | #include <linux/kernel.h> | 15 | #include <linux/kernel.h> |
16 | #include <linux/notifier.h> | ||
15 | 17 | ||
16 | struct device; | 18 | struct device; |
17 | 19 | ||
18 | /* | 20 | struct clk; |
19 | * The base API. | 21 | |
22 | #ifdef CONFIG_COMMON_CLK | ||
23 | |||
24 | /** | ||
25 | * DOC: clk notifier callback types | ||
26 | * | ||
27 | * PRE_RATE_CHANGE - called immediately before the clk rate is changed, | ||
28 | * to indicate that the rate change will proceed. Drivers must | ||
29 | * immediately terminate any operations that will be affected by the | ||
30 | * rate change. Callbacks may either return NOTIFY_DONE or | ||
31 | * NOTIFY_STOP. | ||
32 | * | ||
33 | * ABORT_RATE_CHANGE: called if the rate change failed for some reason | ||
34 | * after PRE_RATE_CHANGE. In this case, all registered notifiers on | ||
35 | * the clk will be called with ABORT_RATE_CHANGE. Callbacks must | ||
36 | * always return NOTIFY_DONE. | ||
37 | * | ||
38 | * POST_RATE_CHANGE - called after the clk rate change has successfully | ||
39 | * completed. Callbacks must always return NOTIFY_DONE. | ||
40 | * | ||
20 | */ | 41 | */ |
42 | #define PRE_RATE_CHANGE BIT(0) | ||
43 | #define POST_RATE_CHANGE BIT(1) | ||
44 | #define ABORT_RATE_CHANGE BIT(2) | ||
21 | 45 | ||
46 | /** | ||
47 | * struct clk_notifier - associate a clk with a notifier | ||
48 | * @clk: struct clk * to associate the notifier with | ||
49 | * @notifier_head: a blocking_notifier_head for this clk | ||
50 | * @node: linked list pointers | ||
51 | * | ||
52 | * A list of struct clk_notifier is maintained by the notifier code. | ||
53 | * An entry is created whenever code registers the first notifier on a | ||
54 | * particular @clk. Future notifiers on that @clk are added to the | ||
55 | * @notifier_head. | ||
56 | */ | ||
57 | struct clk_notifier { | ||
58 | struct clk *clk; | ||
59 | struct srcu_notifier_head notifier_head; | ||
60 | struct list_head node; | ||
61 | }; | ||
22 | 62 | ||
23 | /* | 63 | /** |
24 | * struct clk - an machine class defined object / cookie. | 64 | * struct clk_notifier_data - rate data to pass to the notifier callback |
65 | * @clk: struct clk * being changed | ||
66 | * @old_rate: previous rate of this clk | ||
67 | * @new_rate: new rate of this clk | ||
68 | * | ||
69 | * For a pre-notifier, old_rate is the clk's rate before this rate | ||
70 | * change, and new_rate is what the rate will be in the future. For a | ||
71 | * post-notifier, old_rate and new_rate are both set to the clk's | ||
72 | * current rate (this was done to optimize the implementation). | ||
25 | */ | 73 | */ |
26 | struct clk; | 74 | struct clk_notifier_data { |
75 | struct clk *clk; | ||
76 | unsigned long old_rate; | ||
77 | unsigned long new_rate; | ||
78 | }; | ||
79 | |||
80 | int clk_notifier_register(struct clk *clk, struct notifier_block *nb); | ||
81 | |||
82 | int clk_notifier_unregister(struct clk *clk, struct notifier_block *nb); | ||
83 | |||
84 | #endif /* !CONFIG_COMMON_CLK */ | ||
27 | 85 | ||
28 | /** | 86 | /** |
29 | * clk_get - lookup and obtain a reference to a clock producer. | 87 | * clk_get - lookup and obtain a reference to a clock producer. |