diff options
Diffstat (limited to 'drivers/cpufreq/sc520_freq.c')
-rw-r--r-- | drivers/cpufreq/sc520_freq.c | 64 |
1 files changed, 6 insertions, 58 deletions
diff --git a/drivers/cpufreq/sc520_freq.c b/drivers/cpufreq/sc520_freq.c index d6f6c6f4efa7..6adb354e359c 100644 --- a/drivers/cpufreq/sc520_freq.c +++ b/drivers/cpufreq/sc520_freq.c | |||
@@ -53,21 +53,11 @@ static unsigned int sc520_freq_get_cpu_frequency(unsigned int cpu) | |||
53 | } | 53 | } |
54 | } | 54 | } |
55 | 55 | ||
56 | static void sc520_freq_set_cpu_state(struct cpufreq_policy *policy, | 56 | static int sc520_freq_target(struct cpufreq_policy *policy, unsigned int state) |
57 | unsigned int state) | ||
58 | { | 57 | { |
59 | 58 | ||
60 | struct cpufreq_freqs freqs; | ||
61 | u8 clockspeed_reg; | 59 | u8 clockspeed_reg; |
62 | 60 | ||
63 | freqs.old = sc520_freq_get_cpu_frequency(0); | ||
64 | freqs.new = sc520_freq_table[state].frequency; | ||
65 | |||
66 | cpufreq_notify_transition(policy, &freqs, CPUFREQ_PRECHANGE); | ||
67 | |||
68 | pr_debug("attempting to set frequency to %i kHz\n", | ||
69 | sc520_freq_table[state].frequency); | ||
70 | |||
71 | local_irq_disable(); | 61 | local_irq_disable(); |
72 | 62 | ||
73 | clockspeed_reg = *cpuctl & ~0x03; | 63 | clockspeed_reg = *cpuctl & ~0x03; |
@@ -75,30 +65,9 @@ static void sc520_freq_set_cpu_state(struct cpufreq_policy *policy, | |||
75 | 65 | ||
76 | local_irq_enable(); | 66 | local_irq_enable(); |
77 | 67 | ||
78 | cpufreq_notify_transition(policy, &freqs, CPUFREQ_POSTCHANGE); | ||
79 | }; | ||
80 | |||
81 | static int sc520_freq_verify(struct cpufreq_policy *policy) | ||
82 | { | ||
83 | return cpufreq_frequency_table_verify(policy, &sc520_freq_table[0]); | ||
84 | } | ||
85 | |||
86 | static int sc520_freq_target(struct cpufreq_policy *policy, | ||
87 | unsigned int target_freq, | ||
88 | unsigned int relation) | ||
89 | { | ||
90 | unsigned int newstate = 0; | ||
91 | |||
92 | if (cpufreq_frequency_table_target(policy, sc520_freq_table, | ||
93 | target_freq, relation, &newstate)) | ||
94 | return -EINVAL; | ||
95 | |||
96 | sc520_freq_set_cpu_state(policy, newstate); | ||
97 | |||
98 | return 0; | 68 | return 0; |
99 | } | 69 | } |
100 | 70 | ||
101 | |||
102 | /* | 71 | /* |
103 | * Module init and exit code | 72 | * Module init and exit code |
104 | */ | 73 | */ |
@@ -106,7 +75,6 @@ static int sc520_freq_target(struct cpufreq_policy *policy, | |||
106 | static int sc520_freq_cpu_init(struct cpufreq_policy *policy) | 75 | static int sc520_freq_cpu_init(struct cpufreq_policy *policy) |
107 | { | 76 | { |
108 | struct cpuinfo_x86 *c = &cpu_data(0); | 77 | struct cpuinfo_x86 *c = &cpu_data(0); |
109 | int result; | ||
110 | 78 | ||
111 | /* capability check */ | 79 | /* capability check */ |
112 | if (c->x86_vendor != X86_VENDOR_AMD || | 80 | if (c->x86_vendor != X86_VENDOR_AMD || |
@@ -115,39 +83,19 @@ static int sc520_freq_cpu_init(struct cpufreq_policy *policy) | |||
115 | 83 | ||
116 | /* cpuinfo and default policy values */ | 84 | /* cpuinfo and default policy values */ |
117 | policy->cpuinfo.transition_latency = 1000000; /* 1ms */ | 85 | policy->cpuinfo.transition_latency = 1000000; /* 1ms */ |
118 | policy->cur = sc520_freq_get_cpu_frequency(0); | ||
119 | |||
120 | result = cpufreq_frequency_table_cpuinfo(policy, sc520_freq_table); | ||
121 | if (result) | ||
122 | return result; | ||
123 | |||
124 | cpufreq_frequency_table_get_attr(sc520_freq_table, policy->cpu); | ||
125 | |||
126 | return 0; | ||
127 | } | ||
128 | 86 | ||
129 | 87 | return cpufreq_table_validate_and_show(policy, sc520_freq_table); | |
130 | static int sc520_freq_cpu_exit(struct cpufreq_policy *policy) | ||
131 | { | ||
132 | cpufreq_frequency_table_put_attr(policy->cpu); | ||
133 | return 0; | ||
134 | } | 88 | } |
135 | 89 | ||
136 | 90 | ||
137 | static struct freq_attr *sc520_freq_attr[] = { | ||
138 | &cpufreq_freq_attr_scaling_available_freqs, | ||
139 | NULL, | ||
140 | }; | ||
141 | |||
142 | |||
143 | static struct cpufreq_driver sc520_freq_driver = { | 91 | static struct cpufreq_driver sc520_freq_driver = { |
144 | .get = sc520_freq_get_cpu_frequency, | 92 | .get = sc520_freq_get_cpu_frequency, |
145 | .verify = sc520_freq_verify, | 93 | .verify = cpufreq_generic_frequency_table_verify, |
146 | .target = sc520_freq_target, | 94 | .target_index = sc520_freq_target, |
147 | .init = sc520_freq_cpu_init, | 95 | .init = sc520_freq_cpu_init, |
148 | .exit = sc520_freq_cpu_exit, | 96 | .exit = cpufreq_generic_exit, |
149 | .name = "sc520_freq", | 97 | .name = "sc520_freq", |
150 | .attr = sc520_freq_attr, | 98 | .attr = cpufreq_generic_attr, |
151 | }; | 99 | }; |
152 | 100 | ||
153 | static const struct x86_cpu_id sc520_ids[] = { | 101 | static const struct x86_cpu_id sc520_ids[] = { |