Commit 19accb69 authored by Dominik Brodowski's avatar Dominik Brodowski Committed by Linus Torvalds

[PATCH] cpufreq: elanfreq cleanup and compile fix

Clean up searching code for best frequency multiplier, and add a
safety check. Also, SAFE_FREQ wasn't used.
parent 627d1004
...@@ -31,8 +31,6 @@ ...@@ -31,8 +31,6 @@
#define REG_CSCIR 0x22 /* Chip Setup and Control Index Register */ #define REG_CSCIR 0x22 /* Chip Setup and Control Index Register */
#define REG_CSCDR 0x23 /* Chip Setup and Control Data Register */ #define REG_CSCDR 0x23 /* Chip Setup and Control Data Register */
#define SAFE_FREQ 33000 /* every Elan CPU can run at 33 MHz */
static struct cpufreq_driver *elanfreq_driver; static struct cpufreq_driver *elanfreq_driver;
/* Module parameter */ /* Module parameter */
...@@ -184,7 +182,7 @@ static int elanfreq_verify (struct cpufreq_policy *policy) ...@@ -184,7 +182,7 @@ static int elanfreq_verify (struct cpufreq_policy *policy)
cpufreq_verify_within_limits(policy, 1000, max_freq); cpufreq_verify_within_limits(policy, 1000, max_freq);
for (i=(sizeof(elan_multiplier)/sizeof(struct s_elan_multiplier) - 1); i>=0; i--) for (i=7; i>=0; i--)
if ((elan_multiplier[i].clock >= policy->min) && if ((elan_multiplier[i].clock >= policy->min) &&
(elan_multiplier[i].clock <= policy->max)) (elan_multiplier[i].clock <= policy->max))
number_states++; number_states++;
...@@ -192,57 +190,46 @@ static int elanfreq_verify (struct cpufreq_policy *policy) ...@@ -192,57 +190,46 @@ static int elanfreq_verify (struct cpufreq_policy *policy)
if (number_states) if (number_states)
return 0; return 0;
for (i=(sizeof(elan_multiplier)/sizeof(struct s_elan_multiplier) - 1); i>=0; i--) for (i=7; i>=0; i--)
if (elan_multiplier[i].clock < policy->max) if (elan_multiplier[i].clock < policy->max)
break; break;
policy->max = elan_multiplier[i+1].clock; policy->max = elan_multiplier[i+1].clock;
cpufreq_verify_within_limits(policy, 1000, max_freq);
return 0; return 0;
} }
static int elanfreq_setpolicy (struct cpufreq_policy *policy) static int elanfreq_setpolicy (struct cpufreq_policy *policy)
{ {
unsigned int number_states = 0; unsigned int i;
unsigned int i, j=4; unsigned int optimal = 8;
if (!elanfreq_driver) if (!elanfreq_driver)
return -EINVAL; return -EINVAL;
for (i=(sizeof(elan_multiplier)/sizeof(struct s_elan_multiplier) - 1); i>=0; i--) for (i=0; i<8; i++) {
if ((elan_multiplier[i].clock >= policy->min) && if ((elan_multiplier[i].clock > policy->max) ||
(elan_multiplier[i].clock <= policy->max)) (elan_multiplier[i].clock < policy->min))
{ continue;
number_states++; switch(policy->policy) {
j = i;
}
if (number_states == 1) {
elanfreq_set_cpu_state(j);
return 0;
}
switch (policy->policy) {
case CPUFREQ_POLICY_POWERSAVE: case CPUFREQ_POLICY_POWERSAVE:
for (i=(sizeof(elan_multiplier)/sizeof(struct s_elan_multiplier) - 1); i>=0; i--) if (optimal == 8)
if ((elan_multiplier[i].clock >= policy->min) && optimal = i;
(elan_multiplier[i].clock <= policy->max))
j = i;
break; break;
case CPUFREQ_POLICY_PERFORMANCE: case CPUFREQ_POLICY_PERFORMANCE:
for (i=0; i<(sizeof(elan_multiplier)/sizeof(struct s_elan_multiplier) - 1); i++) optimal = i;
if ((elan_multiplier[i].clock >= policy->min) &&
(elan_multiplier[i].clock <= policy->max))
j = i;
break; break;
default: default:
return -EINVAL; return -EINVAL;
} }
}
if (elan_multiplier[j].clock > max_freq) if ((optimal == 8) || (elan_multiplier[optimal].clock > max_freq))
return -EINVAL; return -EINVAL;
elanfreq_set_cpu_state(j); elanfreq_set_cpu_state(optimal);
return 0; return 0;
} }
...@@ -307,7 +294,7 @@ static int __init elanfreq_init(void) ...@@ -307,7 +294,7 @@ static int __init elanfreq_init(void)
driver->policy[0].max = max_freq; driver->policy[0].max = max_freq;
driver->policy[0].policy = CPUFREQ_POLICY_PERFORMANCE; driver->policy[0].policy = CPUFREQ_POLICY_PERFORMANCE;
driver->policy[0].cpuinfo.max_freq = max_freq; driver->policy[0].cpuinfo.max_freq = max_freq;
driver->policy[0].cpuinfo.min_freq = min_freq; driver->policy[0].cpuinfo.min_freq = 1000;
driver->policy[0].cpuinfo.transition_latency = CPUFREQ_ETERNAL; driver->policy[0].cpuinfo.transition_latency = CPUFREQ_ETERNAL;
elanfreq_driver = driver; elanfreq_driver = driver;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment