diff options
author | Magnus Damm <damm@igel.co.jp> | 2008-10-31 07:14:03 -0400 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2008-12-22 04:42:50 -0500 |
commit | d902d04f5410176bdec77bfefa032516326eb542 (patch) | |
tree | f4df267261340dc504510a210e072a55b9290682 /arch | |
parent | d12cfac146d2b512496bf974b83ee1210032065f (diff) |
sh: sh_mobile clock divider index fix
Use divider index value instead of divider value.
Signed-off-by: Magnus Damm <damm@igel.co.jp>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/sh/kernel/cpu/sh4a/clock-sh7722.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/arch/sh/kernel/cpu/sh4a/clock-sh7722.c b/arch/sh/kernel/cpu/sh4a/clock-sh7722.c index db913855c2fd..ebf1e1d7de00 100644 --- a/arch/sh/kernel/cpu/sh4a/clock-sh7722.c +++ b/arch/sh/kernel/cpu/sh4a/clock-sh7722.c | |||
@@ -229,7 +229,7 @@ struct frqcr_context sh7722_get_clk_context(const char *name) | |||
229 | } | 229 | } |
230 | 230 | ||
231 | /** | 231 | /** |
232 | * sh7722_find_divisors - find divisor for setting rate | 232 | * sh7722_find_div_index - find divisor for setting rate |
233 | * | 233 | * |
234 | * All sh7722 clocks use the same set of multipliers/divisors. This function | 234 | * All sh7722 clocks use the same set of multipliers/divisors. This function |
235 | * chooses correct divisor to set the rate of clock with parent clock that | 235 | * chooses correct divisor to set the rate of clock with parent clock that |
@@ -238,7 +238,7 @@ struct frqcr_context sh7722_get_clk_context(const char *name) | |||
238 | * @parent_rate: rate of parent clock | 238 | * @parent_rate: rate of parent clock |
239 | * @rate: requested rate to be set | 239 | * @rate: requested rate to be set |
240 | */ | 240 | */ |
241 | static int sh7722_find_divisors(unsigned long parent_rate, unsigned rate) | 241 | static int sh7722_find_div_index(unsigned long parent_rate, unsigned rate) |
242 | { | 242 | { |
243 | unsigned div2 = parent_rate * 2 / rate; | 243 | unsigned div2 = parent_rate * 2 / rate; |
244 | int index; | 244 | int index; |
@@ -247,12 +247,12 @@ static int sh7722_find_divisors(unsigned long parent_rate, unsigned rate) | |||
247 | return -EINVAL; | 247 | return -EINVAL; |
248 | 248 | ||
249 | for (index = 1; index < ARRAY_SIZE(divisors2); index++) { | 249 | for (index = 1; index < ARRAY_SIZE(divisors2); index++) { |
250 | if (div2 > divisors2[index] && div2 <= divisors2[index]) | 250 | if (div2 > divisors2[index - 1] && div2 <= divisors2[index]) |
251 | break; | 251 | break; |
252 | } | 252 | } |
253 | if (index >= ARRAY_SIZE(divisors2)) | 253 | if (index >= ARRAY_SIZE(divisors2)) |
254 | index = ARRAY_SIZE(divisors2) - 1; | 254 | index = ARRAY_SIZE(divisors2) - 1; |
255 | return divisors2[index]; | 255 | return index; |
256 | } | 256 | } |
257 | 257 | ||
258 | static void sh7722_frqcr_recalc(struct clk *clk) | 258 | static void sh7722_frqcr_recalc(struct clk *clk) |
@@ -279,12 +279,12 @@ static int sh7722_frqcr_set_rate(struct clk *clk, unsigned long rate, | |||
279 | return -EINVAL; | 279 | return -EINVAL; |
280 | 280 | ||
281 | /* look for multiplier/divisor pair */ | 281 | /* look for multiplier/divisor pair */ |
282 | div = sh7722_find_divisors(parent_rate, rate); | 282 | div = sh7722_find_div_index(parent_rate, rate); |
283 | if (div<0) | 283 | if (div<0) |
284 | return div; | 284 | return div; |
285 | 285 | ||
286 | /* calculate new value of clock rate */ | 286 | /* calculate new value of clock rate */ |
287 | clk->rate = parent_rate * 2 / div; | 287 | clk->rate = parent_rate * 2 / divisors2[div]; |
288 | frqcr = ctrl_inl(FRQCR); | 288 | frqcr = ctrl_inl(FRQCR); |
289 | 289 | ||
290 | /* FIXME: adjust as algo_id specifies */ | 290 | /* FIXME: adjust as algo_id specifies */ |
@@ -353,7 +353,7 @@ static int sh7722_frqcr_set_rate(struct clk *clk, unsigned long rate, | |||
353 | int part_div; | 353 | int part_div; |
354 | 354 | ||
355 | if (likely(!err)) { | 355 | if (likely(!err)) { |
356 | part_div = sh7722_find_divisors(parent_rate, | 356 | part_div = sh7722_find_div_index(parent_rate, |
357 | rate); | 357 | rate); |
358 | if (part_div > 0) { | 358 | if (part_div > 0) { |
359 | part_ctx = sh7722_get_clk_context( | 359 | part_ctx = sh7722_get_clk_context( |
@@ -394,12 +394,12 @@ static long sh7722_frqcr_round_rate(struct clk *clk, unsigned long rate) | |||
394 | int div; | 394 | int div; |
395 | 395 | ||
396 | /* look for multiplier/divisor pair */ | 396 | /* look for multiplier/divisor pair */ |
397 | div = sh7722_find_divisors(parent_rate, rate); | 397 | div = sh7722_find_div_index(parent_rate, rate); |
398 | if (div < 0) | 398 | if (div < 0) |
399 | return clk->rate; | 399 | return clk->rate; |
400 | 400 | ||
401 | /* calculate new value of clock rate */ | 401 | /* calculate new value of clock rate */ |
402 | return parent_rate * 2 / div; | 402 | return parent_rate * 2 / divisors2[div]; |
403 | } | 403 | } |
404 | 404 | ||
405 | static struct clk_ops sh7722_frqcr_clk_ops = { | 405 | static struct clk_ops sh7722_frqcr_clk_ops = { |
@@ -421,7 +421,7 @@ static int sh7722_siu_set_rate(struct clk *clk, unsigned long rate, int algo_id) | |||
421 | int div; | 421 | int div; |
422 | 422 | ||
423 | r = ctrl_inl(clk->arch_flags); | 423 | r = ctrl_inl(clk->arch_flags); |
424 | div = sh7722_find_divisors(clk->parent->rate, rate); | 424 | div = sh7722_find_div_index(clk->parent->rate, rate); |
425 | if (div < 0) | 425 | if (div < 0) |
426 | return div; | 426 | return div; |
427 | r = (r & ~0xF) | div; | 427 | r = (r & ~0xF) | div; |