diff options
Diffstat (limited to 'include/linux/clk-private.h')
-rw-r--r-- | include/linux/clk-private.h | 99 |
1 files changed, 48 insertions, 51 deletions
diff --git a/include/linux/clk-private.h b/include/linux/clk-private.h index 5e4312b6f5cc..eb3f84bc5325 100644 --- a/include/linux/clk-private.h +++ b/include/linux/clk-private.h | |||
@@ -30,7 +30,7 @@ struct clk { | |||
30 | const struct clk_ops *ops; | 30 | const struct clk_ops *ops; |
31 | struct clk_hw *hw; | 31 | struct clk_hw *hw; |
32 | struct clk *parent; | 32 | struct clk *parent; |
33 | char **parent_names; | 33 | const char **parent_names; |
34 | struct clk **parents; | 34 | struct clk **parents; |
35 | u8 num_parents; | 35 | u8 num_parents; |
36 | unsigned long rate; | 36 | unsigned long rate; |
@@ -55,12 +55,22 @@ struct clk { | |||
55 | * alternative macro for static initialization | 55 | * alternative macro for static initialization |
56 | */ | 56 | */ |
57 | 57 | ||
58 | extern struct clk_ops clk_fixed_rate_ops; | 58 | #define DEFINE_CLK(_name, _ops, _flags, _parent_names, \ |
59 | _parents) \ | ||
60 | static struct clk _name = { \ | ||
61 | .name = #_name, \ | ||
62 | .ops = &_ops, \ | ||
63 | .hw = &_name##_hw.hw, \ | ||
64 | .parent_names = _parent_names, \ | ||
65 | .num_parents = ARRAY_SIZE(_parent_names), \ | ||
66 | .parents = _parents, \ | ||
67 | .flags = _flags, \ | ||
68 | } | ||
59 | 69 | ||
60 | #define DEFINE_CLK_FIXED_RATE(_name, _flags, _rate, \ | 70 | #define DEFINE_CLK_FIXED_RATE(_name, _flags, _rate, \ |
61 | _fixed_rate_flags) \ | 71 | _fixed_rate_flags) \ |
62 | static struct clk _name; \ | 72 | static struct clk _name; \ |
63 | static char *_name##_parent_names[] = {}; \ | 73 | static const char *_name##_parent_names[] = {}; \ |
64 | static struct clk_fixed_rate _name##_hw = { \ | 74 | static struct clk_fixed_rate _name##_hw = { \ |
65 | .hw = { \ | 75 | .hw = { \ |
66 | .clk = &_name, \ | 76 | .clk = &_name, \ |
@@ -68,23 +78,14 @@ extern struct clk_ops clk_fixed_rate_ops; | |||
68 | .fixed_rate = _rate, \ | 78 | .fixed_rate = _rate, \ |
69 | .flags = _fixed_rate_flags, \ | 79 | .flags = _fixed_rate_flags, \ |
70 | }; \ | 80 | }; \ |
71 | static struct clk _name = { \ | 81 | DEFINE_CLK(_name, clk_fixed_rate_ops, _flags, \ |
72 | .name = #_name, \ | 82 | _name##_parent_names, NULL); |
73 | .ops = &clk_fixed_rate_ops, \ | ||
74 | .hw = &_name##_hw.hw, \ | ||
75 | .parent_names = _name##_parent_names, \ | ||
76 | .num_parents = \ | ||
77 | ARRAY_SIZE(_name##_parent_names), \ | ||
78 | .flags = _flags, \ | ||
79 | }; | ||
80 | |||
81 | extern struct clk_ops clk_gate_ops; | ||
82 | 83 | ||
83 | #define DEFINE_CLK_GATE(_name, _parent_name, _parent_ptr, \ | 84 | #define DEFINE_CLK_GATE(_name, _parent_name, _parent_ptr, \ |
84 | _flags, _reg, _bit_idx, \ | 85 | _flags, _reg, _bit_idx, \ |
85 | _gate_flags, _lock) \ | 86 | _gate_flags, _lock) \ |
86 | static struct clk _name; \ | 87 | static struct clk _name; \ |
87 | static char *_name##_parent_names[] = { \ | 88 | static const char *_name##_parent_names[] = { \ |
88 | _parent_name, \ | 89 | _parent_name, \ |
89 | }; \ | 90 | }; \ |
90 | static struct clk *_name##_parents[] = { \ | 91 | static struct clk *_name##_parents[] = { \ |
@@ -99,24 +100,14 @@ extern struct clk_ops clk_gate_ops; | |||
99 | .flags = _gate_flags, \ | 100 | .flags = _gate_flags, \ |
100 | .lock = _lock, \ | 101 | .lock = _lock, \ |
101 | }; \ | 102 | }; \ |
102 | static struct clk _name = { \ | 103 | DEFINE_CLK(_name, clk_gate_ops, _flags, \ |
103 | .name = #_name, \ | 104 | _name##_parent_names, _name##_parents); |
104 | .ops = &clk_gate_ops, \ | ||
105 | .hw = &_name##_hw.hw, \ | ||
106 | .parent_names = _name##_parent_names, \ | ||
107 | .num_parents = \ | ||
108 | ARRAY_SIZE(_name##_parent_names), \ | ||
109 | .parents = _name##_parents, \ | ||
110 | .flags = _flags, \ | ||
111 | }; | ||
112 | |||
113 | extern struct clk_ops clk_divider_ops; | ||
114 | 105 | ||
115 | #define DEFINE_CLK_DIVIDER(_name, _parent_name, _parent_ptr, \ | 106 | #define DEFINE_CLK_DIVIDER(_name, _parent_name, _parent_ptr, \ |
116 | _flags, _reg, _shift, _width, \ | 107 | _flags, _reg, _shift, _width, \ |
117 | _divider_flags, _lock) \ | 108 | _divider_flags, _lock) \ |
118 | static struct clk _name; \ | 109 | static struct clk _name; \ |
119 | static char *_name##_parent_names[] = { \ | 110 | static const char *_name##_parent_names[] = { \ |
120 | _parent_name, \ | 111 | _parent_name, \ |
121 | }; \ | 112 | }; \ |
122 | static struct clk *_name##_parents[] = { \ | 113 | static struct clk *_name##_parents[] = { \ |
@@ -132,18 +123,8 @@ extern struct clk_ops clk_divider_ops; | |||
132 | .flags = _divider_flags, \ | 123 | .flags = _divider_flags, \ |
133 | .lock = _lock, \ | 124 | .lock = _lock, \ |
134 | }; \ | 125 | }; \ |
135 | static struct clk _name = { \ | 126 | DEFINE_CLK(_name, clk_divider_ops, _flags, \ |
136 | .name = #_name, \ | 127 | _name##_parent_names, _name##_parents); |
137 | .ops = &clk_divider_ops, \ | ||
138 | .hw = &_name##_hw.hw, \ | ||
139 | .parent_names = _name##_parent_names, \ | ||
140 | .num_parents = \ | ||
141 | ARRAY_SIZE(_name##_parent_names), \ | ||
142 | .parents = _name##_parents, \ | ||
143 | .flags = _flags, \ | ||
144 | }; | ||
145 | |||
146 | extern struct clk_ops clk_mux_ops; | ||
147 | 128 | ||
148 | #define DEFINE_CLK_MUX(_name, _parent_names, _parents, _flags, \ | 129 | #define DEFINE_CLK_MUX(_name, _parent_names, _parents, _flags, \ |
149 | _reg, _shift, _width, \ | 130 | _reg, _shift, _width, \ |
@@ -159,16 +140,28 @@ extern struct clk_ops clk_mux_ops; | |||
159 | .flags = _mux_flags, \ | 140 | .flags = _mux_flags, \ |
160 | .lock = _lock, \ | 141 | .lock = _lock, \ |
161 | }; \ | 142 | }; \ |
162 | static struct clk _name = { \ | 143 | DEFINE_CLK(_name, clk_mux_ops, _flags, _parent_names, \ |
163 | .name = #_name, \ | 144 | _parents); |
164 | .ops = &clk_mux_ops, \ | 145 | |
165 | .hw = &_name##_hw.hw, \ | 146 | #define DEFINE_CLK_FIXED_FACTOR(_name, _parent_name, \ |
166 | .parent_names = _parent_names, \ | 147 | _parent_ptr, _flags, \ |
167 | .num_parents = \ | 148 | _mult, _div) \ |
168 | ARRAY_SIZE(_parent_names), \ | 149 | static struct clk _name; \ |
169 | .parents = _parents, \ | 150 | static const char *_name##_parent_names[] = { \ |
170 | .flags = _flags, \ | 151 | _parent_name, \ |
171 | }; | 152 | }; \ |
153 | static struct clk *_name##_parents[] = { \ | ||
154 | _parent_ptr, \ | ||
155 | }; \ | ||
156 | static struct clk_fixed_factor _name##_hw = { \ | ||
157 | .hw = { \ | ||
158 | .clk = &_name, \ | ||
159 | }, \ | ||
160 | .mult = _mult, \ | ||
161 | .div = _div, \ | ||
162 | }; \ | ||
163 | DEFINE_CLK(_name, clk_fixed_factor_ops, _flags, \ | ||
164 | _name##_parent_names, _name##_parents); | ||
172 | 165 | ||
173 | /** | 166 | /** |
174 | * __clk_init - initialize the data structures in a struct clk | 167 | * __clk_init - initialize the data structures in a struct clk |
@@ -189,8 +182,12 @@ extern struct clk_ops clk_mux_ops; | |||
189 | * | 182 | * |
190 | * It is not necessary to call clk_register if __clk_init is used directly with | 183 | * It is not necessary to call clk_register if __clk_init is used directly with |
191 | * statically initialized clock data. | 184 | * statically initialized clock data. |
185 | * | ||
186 | * Returns 0 on success, otherwise an error code. | ||
192 | */ | 187 | */ |
193 | void __clk_init(struct device *dev, struct clk *clk); | 188 | int __clk_init(struct device *dev, struct clk *clk); |
189 | |||
190 | struct clk *__clk_register(struct device *dev, struct clk_hw *hw); | ||
194 | 191 | ||
195 | #endif /* CONFIG_COMMON_CLK */ | 192 | #endif /* CONFIG_COMMON_CLK */ |
196 | #endif /* CLK_PRIVATE_H */ | 193 | #endif /* CLK_PRIVATE_H */ |