aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips/loongson/lemote-2f/clock.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/mips/loongson/lemote-2f/clock.c')
-rw-r--r--arch/mips/loongson/lemote-2f/clock.c17
1 files changed, 5 insertions, 12 deletions
diff --git a/arch/mips/loongson/lemote-2f/clock.c b/arch/mips/loongson/lemote-2f/clock.c
index 67dd94ef28e6..1eed38e28b1e 100644
--- a/arch/mips/loongson/lemote-2f/clock.c
+++ b/arch/mips/loongson/lemote-2f/clock.c
@@ -91,10 +91,9 @@ EXPORT_SYMBOL(clk_put);
91 91
92int clk_set_rate(struct clk *clk, unsigned long rate) 92int clk_set_rate(struct clk *clk, unsigned long rate)
93{ 93{
94 unsigned int rate_khz = rate / 1000; 94 struct cpufreq_frequency_table *pos;
95 int ret = 0; 95 int ret = 0;
96 int regval; 96 int regval;
97 int i;
98 97
99 if (likely(clk->ops && clk->ops->set_rate)) { 98 if (likely(clk->ops && clk->ops->set_rate)) {
100 unsigned long flags; 99 unsigned long flags;
@@ -107,22 +106,16 @@ int clk_set_rate(struct clk *clk, unsigned long rate)
107 if (unlikely(clk->flags & CLK_RATE_PROPAGATES)) 106 if (unlikely(clk->flags & CLK_RATE_PROPAGATES))
108 propagate_rate(clk); 107 propagate_rate(clk);
109 108
110 for (i = 0; loongson2_clockmod_table[i].frequency != CPUFREQ_TABLE_END; 109 cpufreq_for_each_valid_entry(pos, loongson2_clockmod_table)
111 i++) { 110 if (rate == pos->frequency)
112 if (loongson2_clockmod_table[i].frequency ==
113 CPUFREQ_ENTRY_INVALID)
114 continue;
115 if (rate_khz == loongson2_clockmod_table[i].frequency)
116 break; 111 break;
117 } 112 if (rate != pos->frequency)
118 if (rate_khz != loongson2_clockmod_table[i].frequency)
119 return -ENOTSUPP; 113 return -ENOTSUPP;
120 114
121 clk->rate = rate; 115 clk->rate = rate;
122 116
123 regval = LOONGSON_CHIPCFG0; 117 regval = LOONGSON_CHIPCFG0;
124 regval = (regval & ~0x7) | 118 regval = (regval & ~0x7) | (pos->driver_data - 1);
125 (loongson2_clockmod_table[i].driver_data - 1);
126 LOONGSON_CHIPCFG0 = regval; 119 LOONGSON_CHIPCFG0 = regval;
127 120
128 return ret; 121 return ret;