diff options
author | Stephen Boyd <sboyd@codeaurora.org> | 2015-07-30 20:20:57 -0400 |
---|---|---|
committer | Michael Turquette <mturquette@baylibre.com> | 2015-08-24 19:48:49 -0400 |
commit | aef28cb6b3b22fb5a6718650340d2efcfe10dd20 (patch) | |
tree | 09cb717f6ac8b7f1b48612ea5ba5aa40f907e141 | |
parent | 2f508a955a671e095d5c8a629de1c8c32bc420c2 (diff) |
clk: mmp: Convert to clk_hw based provider APIs
We're removing struct clk from the clk provider API, so switch
this code to using the clk_hw based provider APIs.
Cc: Chao Xie <chao.xie@marvell.com>
Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
-rw-r--r-- | drivers/clk/mmp/clk-gate.c | 3 | ||||
-rw-r--r-- | drivers/clk/mmp/clk-mix.c | 35 |
2 files changed, 17 insertions, 21 deletions
diff --git a/drivers/clk/mmp/clk-gate.c b/drivers/clk/mmp/clk-gate.c index adbd9d64ded2..d20cd3431ac2 100644 --- a/drivers/clk/mmp/clk-gate.c +++ b/drivers/clk/mmp/clk-gate.c | |||
@@ -27,7 +27,6 @@ | |||
27 | static int mmp_clk_gate_enable(struct clk_hw *hw) | 27 | static int mmp_clk_gate_enable(struct clk_hw *hw) |
28 | { | 28 | { |
29 | struct mmp_clk_gate *gate = to_clk_mmp_gate(hw); | 29 | struct mmp_clk_gate *gate = to_clk_mmp_gate(hw); |
30 | struct clk *clk = hw->clk; | ||
31 | unsigned long flags = 0; | 30 | unsigned long flags = 0; |
32 | unsigned long rate; | 31 | unsigned long rate; |
33 | u32 tmp; | 32 | u32 tmp; |
@@ -44,7 +43,7 @@ static int mmp_clk_gate_enable(struct clk_hw *hw) | |||
44 | spin_unlock_irqrestore(gate->lock, flags); | 43 | spin_unlock_irqrestore(gate->lock, flags); |
45 | 44 | ||
46 | if (gate->flags & MMP_CLK_GATE_NEED_DELAY) { | 45 | if (gate->flags & MMP_CLK_GATE_NEED_DELAY) { |
47 | rate = __clk_get_rate(clk); | 46 | rate = clk_hw_get_rate(hw); |
48 | /* Need delay 2 cycles. */ | 47 | /* Need delay 2 cycles. */ |
49 | udelay(2000000/rate); | 48 | udelay(2000000/rate); |
50 | } | 49 | } |
diff --git a/drivers/clk/mmp/clk-mix.c b/drivers/clk/mmp/clk-mix.c index 264882180bd3..c554833cffc5 100644 --- a/drivers/clk/mmp/clk-mix.c +++ b/drivers/clk/mmp/clk-mix.c | |||
@@ -113,15 +113,15 @@ static void _filter_clk_table(struct mmp_clk_mix *mix, | |||
113 | { | 113 | { |
114 | int i; | 114 | int i; |
115 | struct mmp_clk_mix_clk_table *item; | 115 | struct mmp_clk_mix_clk_table *item; |
116 | struct clk *parent, *clk; | 116 | struct clk_hw *parent, *hw; |
117 | unsigned long parent_rate; | 117 | unsigned long parent_rate; |
118 | 118 | ||
119 | clk = mix->hw.clk; | 119 | hw = &mix->hw; |
120 | 120 | ||
121 | for (i = 0; i < table_size; i++) { | 121 | for (i = 0; i < table_size; i++) { |
122 | item = &table[i]; | 122 | item = &table[i]; |
123 | parent = clk_get_parent_by_index(clk, item->parent_index); | 123 | parent = clk_hw_get_parent_by_index(hw, item->parent_index); |
124 | parent_rate = __clk_get_rate(parent); | 124 | parent_rate = clk_hw_get_rate(parent); |
125 | if (parent_rate % item->rate) { | 125 | if (parent_rate % item->rate) { |
126 | item->valid = 0; | 126 | item->valid = 0; |
127 | } else { | 127 | } else { |
@@ -181,7 +181,7 @@ static int _set_rate(struct mmp_clk_mix *mix, u32 mux_val, u32 div_val, | |||
181 | 181 | ||
182 | if (timeout == 0) { | 182 | if (timeout == 0) { |
183 | pr_err("%s:%s cannot do frequency change\n", | 183 | pr_err("%s:%s cannot do frequency change\n", |
184 | __func__, __clk_get_name(mix->hw.clk)); | 184 | __func__, clk_hw_get_name(&mix->hw)); |
185 | ret = -EBUSY; | 185 | ret = -EBUSY; |
186 | goto error; | 186 | goto error; |
187 | } | 187 | } |
@@ -206,16 +206,14 @@ static int mmp_clk_mix_determine_rate(struct clk_hw *hw, | |||
206 | { | 206 | { |
207 | struct mmp_clk_mix *mix = to_clk_mix(hw); | 207 | struct mmp_clk_mix *mix = to_clk_mix(hw); |
208 | struct mmp_clk_mix_clk_table *item; | 208 | struct mmp_clk_mix_clk_table *item; |
209 | struct clk *parent, *parent_best, *mix_clk; | 209 | struct clk_hw *parent, *parent_best; |
210 | unsigned long parent_rate, mix_rate, mix_rate_best, parent_rate_best; | 210 | unsigned long parent_rate, mix_rate, mix_rate_best, parent_rate_best; |
211 | unsigned long gap, gap_best; | 211 | unsigned long gap, gap_best; |
212 | u32 div_val_max; | 212 | u32 div_val_max; |
213 | unsigned int div; | 213 | unsigned int div; |
214 | int i, j; | 214 | int i, j; |
215 | 215 | ||
216 | mix_clk = hw->clk; | ||
217 | 216 | ||
218 | parent = NULL; | ||
219 | mix_rate_best = 0; | 217 | mix_rate_best = 0; |
220 | parent_rate_best = 0; | 218 | parent_rate_best = 0; |
221 | gap_best = ULONG_MAX; | 219 | gap_best = ULONG_MAX; |
@@ -226,9 +224,9 @@ static int mmp_clk_mix_determine_rate(struct clk_hw *hw, | |||
226 | item = &mix->table[i]; | 224 | item = &mix->table[i]; |
227 | if (item->valid == 0) | 225 | if (item->valid == 0) |
228 | continue; | 226 | continue; |
229 | parent = clk_get_parent_by_index(mix_clk, | 227 | parent = clk_hw_get_parent_by_index(hw, |
230 | item->parent_index); | 228 | item->parent_index); |
231 | parent_rate = __clk_get_rate(parent); | 229 | parent_rate = clk_hw_get_rate(parent); |
232 | mix_rate = parent_rate / item->divisor; | 230 | mix_rate = parent_rate / item->divisor; |
233 | gap = abs(mix_rate - req->rate); | 231 | gap = abs(mix_rate - req->rate); |
234 | if (parent_best == NULL || gap < gap_best) { | 232 | if (parent_best == NULL || gap < gap_best) { |
@@ -242,8 +240,8 @@ static int mmp_clk_mix_determine_rate(struct clk_hw *hw, | |||
242 | } | 240 | } |
243 | } else { | 241 | } else { |
244 | for (i = 0; i < clk_hw_get_num_parents(hw); i++) { | 242 | for (i = 0; i < clk_hw_get_num_parents(hw); i++) { |
245 | parent = clk_get_parent_by_index(mix_clk, i); | 243 | parent = clk_hw_get_parent_by_index(hw, i); |
246 | parent_rate = __clk_get_rate(parent); | 244 | parent_rate = clk_hw_get_rate(parent); |
247 | div_val_max = _get_maxdiv(mix); | 245 | div_val_max = _get_maxdiv(mix); |
248 | for (j = 0; j < div_val_max; j++) { | 246 | for (j = 0; j < div_val_max; j++) { |
249 | div = _get_div(mix, j); | 247 | div = _get_div(mix, j); |
@@ -266,7 +264,7 @@ found: | |||
266 | return -EINVAL; | 264 | return -EINVAL; |
267 | 265 | ||
268 | req->best_parent_rate = parent_rate_best; | 266 | req->best_parent_rate = parent_rate_best; |
269 | req->best_parent_hw = __clk_get_hw(parent_best); | 267 | req->best_parent_hw = parent_best; |
270 | req->rate = mix_rate_best; | 268 | req->rate = mix_rate_best; |
271 | 269 | ||
272 | return 0; | 270 | return 0; |
@@ -382,20 +380,19 @@ static int mmp_clk_set_rate(struct clk_hw *hw, unsigned long rate, | |||
382 | struct mmp_clk_mix_clk_table *item; | 380 | struct mmp_clk_mix_clk_table *item; |
383 | unsigned long parent_rate; | 381 | unsigned long parent_rate; |
384 | unsigned int best_divisor; | 382 | unsigned int best_divisor; |
385 | struct clk *mix_clk, *parent; | 383 | struct clk_hw *parent; |
386 | int i; | 384 | int i; |
387 | 385 | ||
388 | best_divisor = best_parent_rate / rate; | 386 | best_divisor = best_parent_rate / rate; |
389 | 387 | ||
390 | mix_clk = hw->clk; | ||
391 | if (mix->table) { | 388 | if (mix->table) { |
392 | for (i = 0; i < mix->table_size; i++) { | 389 | for (i = 0; i < mix->table_size; i++) { |
393 | item = &mix->table[i]; | 390 | item = &mix->table[i]; |
394 | if (item->valid == 0) | 391 | if (item->valid == 0) |
395 | continue; | 392 | continue; |
396 | parent = clk_get_parent_by_index(mix_clk, | 393 | parent = clk_hw_get_parent_by_index(hw, |
397 | item->parent_index); | 394 | item->parent_index); |
398 | parent_rate = __clk_get_rate(parent); | 395 | parent_rate = clk_hw_get_rate(parent); |
399 | if (parent_rate == best_parent_rate | 396 | if (parent_rate == best_parent_rate |
400 | && item->divisor == best_divisor) | 397 | && item->divisor == best_divisor) |
401 | break; | 398 | break; |
@@ -409,8 +406,8 @@ static int mmp_clk_set_rate(struct clk_hw *hw, unsigned long rate, | |||
409 | return -EINVAL; | 406 | return -EINVAL; |
410 | } else { | 407 | } else { |
411 | for (i = 0; i < clk_hw_get_num_parents(hw); i++) { | 408 | for (i = 0; i < clk_hw_get_num_parents(hw); i++) { |
412 | parent = clk_get_parent_by_index(mix_clk, i); | 409 | parent = clk_hw_get_parent_by_index(hw, i); |
413 | parent_rate = __clk_get_rate(parent); | 410 | parent_rate = clk_hw_get_rate(parent); |
414 | if (parent_rate == best_parent_rate) | 411 | if (parent_rate == best_parent_rate) |
415 | break; | 412 | break; |
416 | } | 413 | } |