aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/sh/clk.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/sh/clk.c')
-rw-r--r--drivers/sh/clk.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/drivers/sh/clk.c b/drivers/sh/clk.c
index 3ac6fa0005b9..018be37ef339 100644
--- a/drivers/sh/clk.c
+++ b/drivers/sh/clk.c
@@ -76,7 +76,7 @@ struct clk_rate_round_data;
76struct clk_rate_round_data { 76struct clk_rate_round_data {
77 unsigned long rate; 77 unsigned long rate;
78 unsigned int min, max; 78 unsigned int min, max;
79 long (*func)(unsigned int pos, struct clk_rate_round_data *arg); 79 long (*func)(unsigned int, struct clk_rate_round_data *);
80 void *arg; 80 void *arg;
81}; 81};
82 82
@@ -148,6 +148,26 @@ long clk_rate_table_round(struct clk *clk,
148 return clk_rate_round_helper(&table_round); 148 return clk_rate_round_helper(&table_round);
149} 149}
150 150
151static long clk_rate_div_range_iter(unsigned int pos,
152 struct clk_rate_round_data *rounder)
153{
154 return clk_get_rate(rounder->arg) / pos;
155}
156
157long clk_rate_div_range_round(struct clk *clk, unsigned int div_min,
158 unsigned int div_max, unsigned long rate)
159{
160 struct clk_rate_round_data div_range_round = {
161 .min = div_min,
162 .max = div_max,
163 .func = clk_rate_div_range_iter,
164 .arg = clk_get_parent(clk),
165 .rate = rate,
166 };
167
168 return clk_rate_round_helper(&div_range_round);
169}
170
151int clk_rate_table_find(struct clk *clk, 171int clk_rate_table_find(struct clk *clk,
152 struct cpufreq_frequency_table *freq_table, 172 struct cpufreq_frequency_table *freq_table,
153 unsigned long rate) 173 unsigned long rate)