diff --git a/drivers/sh/clk.c b/drivers/sh/clk.c index cede14e34507..b9c57a640c24 100644 --- a/drivers/sh/clk.c +++ b/drivers/sh/clk.c @@ -1,7 +1,7 @@ /* * drivers/sh/clk.c - SuperH clock framework * - * Copyright (C) 2005 - 2009 Paul Mundt + * Copyright (C) 2005 - 2010 Paul Mundt * * This clock framework is derived from the OMAP version by: * @@ -73,14 +73,23 @@ long clk_rate_table_round(struct clk *clk, { unsigned long rate_error, rate_error_prev = ~0UL; unsigned long rate_best_fit = rate; + unsigned long highest, lowest; int i; + highest = 0; + lowest = ~0UL; + for (i = 0; freq_table[i].frequency != CPUFREQ_TABLE_END; i++) { unsigned long freq = freq_table[i].frequency; if (freq == CPUFREQ_ENTRY_INVALID) continue; + if (freq > highest) + highest = freq; + if (freq < lowest) + lowest = freq; + rate_error = abs(freq - rate); if (rate_error < rate_error_prev) { rate_best_fit = freq; @@ -91,6 +100,11 @@ long clk_rate_table_round(struct clk *clk, break; } + if (rate >= highest) + rate_best_fit = highest; + if (rate <= lowest) + rate_best_fit = lowest; + return rate_best_fit; }