aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/cpufreq/sc520_freq.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/cpufreq/sc520_freq.c')
-rw-r--r--drivers/cpufreq/sc520_freq.c64
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
56static void sc520_freq_set_cpu_state(struct cpufreq_policy *policy, 56static 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
81static int sc520_freq_verify(struct cpufreq_policy *policy)
82{
83 return cpufreq_frequency_table_verify(policy, &sc520_freq_table[0]);
84}
85
86static 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,
106static int sc520_freq_cpu_init(struct cpufreq_policy *policy) 75static 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);
130static 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
137static struct freq_attr *sc520_freq_attr[] = {
138 &cpufreq_freq_attr_scaling_available_freqs,
139 NULL,
140};
141
142
143static struct cpufreq_driver sc520_freq_driver = { 91static 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
153static const struct x86_cpu_id sc520_ids[] = { 101static const struct x86_cpu_id sc520_ids[] = {