diff options
Diffstat (limited to 'drivers/cpufreq/cris-artpec3-cpufreq.c')
-rw-r--r-- | drivers/cpufreq/cris-artpec3-cpufreq.c | 64 |
1 files changed, 6 insertions, 58 deletions
diff --git a/drivers/cpufreq/cris-artpec3-cpufreq.c b/drivers/cpufreq/cris-artpec3-cpufreq.c index cb8276dd19ca..86559040c54c 100644 --- a/drivers/cpufreq/cris-artpec3-cpufreq.c +++ b/drivers/cpufreq/cris-artpec3-cpufreq.c | |||
@@ -27,18 +27,11 @@ static unsigned int cris_freq_get_cpu_frequency(unsigned int cpu) | |||
27 | return clk_ctrl.pll ? 200000 : 6000; | 27 | return clk_ctrl.pll ? 200000 : 6000; |
28 | } | 28 | } |
29 | 29 | ||
30 | static void cris_freq_set_cpu_state(struct cpufreq_policy *policy, | 30 | static int cris_freq_target(struct cpufreq_policy *policy, unsigned int state) |
31 | unsigned int state) | ||
32 | { | 31 | { |
33 | struct cpufreq_freqs freqs; | ||
34 | reg_clkgen_rw_clk_ctrl clk_ctrl; | 32 | reg_clkgen_rw_clk_ctrl clk_ctrl; |
35 | clk_ctrl = REG_RD(clkgen, regi_clkgen, rw_clk_ctrl); | 33 | clk_ctrl = REG_RD(clkgen, regi_clkgen, rw_clk_ctrl); |
36 | 34 | ||
37 | freqs.old = cris_freq_get_cpu_frequency(policy->cpu); | ||
38 | freqs.new = cris_freq_table[state].frequency; | ||
39 | |||
40 | cpufreq_notify_transition(policy, &freqs, CPUFREQ_PRECHANGE); | ||
41 | |||
42 | local_irq_disable(); | 35 | local_irq_disable(); |
43 | 36 | ||
44 | /* Even though we may be SMP they will share the same clock | 37 | /* Even though we may be SMP they will share the same clock |
@@ -51,67 +44,22 @@ static void cris_freq_set_cpu_state(struct cpufreq_policy *policy, | |||
51 | 44 | ||
52 | local_irq_enable(); | 45 | local_irq_enable(); |
53 | 46 | ||
54 | cpufreq_notify_transition(policy, &freqs, CPUFREQ_POSTCHANGE); | ||
55 | }; | ||
56 | |||
57 | static int cris_freq_verify(struct cpufreq_policy *policy) | ||
58 | { | ||
59 | return cpufreq_frequency_table_verify(policy, &cris_freq_table[0]); | ||
60 | } | ||
61 | |||
62 | static int cris_freq_target(struct cpufreq_policy *policy, | ||
63 | unsigned int target_freq, | ||
64 | unsigned int relation) | ||
65 | { | ||
66 | unsigned int newstate = 0; | ||
67 | |||
68 | if (cpufreq_frequency_table_target(policy, cris_freq_table, | ||
69 | target_freq, relation, &newstate)) | ||
70 | return -EINVAL; | ||
71 | |||
72 | cris_freq_set_cpu_state(policy, newstate); | ||
73 | |||
74 | return 0; | 47 | return 0; |
75 | } | 48 | } |
76 | 49 | ||
77 | static int cris_freq_cpu_init(struct cpufreq_policy *policy) | 50 | static int cris_freq_cpu_init(struct cpufreq_policy *policy) |
78 | { | 51 | { |
79 | int result; | 52 | return cpufreq_generic_init(policy, cris_freq_table, 1000000); |
80 | |||
81 | /* cpuinfo and default policy values */ | ||
82 | policy->cpuinfo.transition_latency = 1000000; /* 1ms */ | ||
83 | policy->cur = cris_freq_get_cpu_frequency(0); | ||
84 | |||
85 | result = cpufreq_frequency_table_cpuinfo(policy, cris_freq_table); | ||
86 | if (result) | ||
87 | return (result); | ||
88 | |||
89 | cpufreq_frequency_table_get_attr(cris_freq_table, policy->cpu); | ||
90 | |||
91 | return 0; | ||
92 | } | ||
93 | |||
94 | |||
95 | static int cris_freq_cpu_exit(struct cpufreq_policy *policy) | ||
96 | { | ||
97 | cpufreq_frequency_table_put_attr(policy->cpu); | ||
98 | return 0; | ||
99 | } | 53 | } |
100 | 54 | ||
101 | |||
102 | static struct freq_attr *cris_freq_attr[] = { | ||
103 | &cpufreq_freq_attr_scaling_available_freqs, | ||
104 | NULL, | ||
105 | }; | ||
106 | |||
107 | static struct cpufreq_driver cris_freq_driver = { | 55 | static struct cpufreq_driver cris_freq_driver = { |
108 | .get = cris_freq_get_cpu_frequency, | 56 | .get = cris_freq_get_cpu_frequency, |
109 | .verify = cris_freq_verify, | 57 | .verify = cpufreq_generic_frequency_table_verify, |
110 | .target = cris_freq_target, | 58 | .target_index = cris_freq_target, |
111 | .init = cris_freq_cpu_init, | 59 | .init = cris_freq_cpu_init, |
112 | .exit = cris_freq_cpu_exit, | 60 | .exit = cpufreq_generic_exit, |
113 | .name = "cris_freq", | 61 | .name = "cris_freq", |
114 | .attr = cris_freq_attr, | 62 | .attr = cpufreq_generic_attr, |
115 | }; | 63 | }; |
116 | 64 | ||
117 | static int __init cris_freq_init(void) | 65 | static int __init cris_freq_init(void) |