Commit c2d0c666 authored by Dave Jones's avatar Dave Jones

[CPUFREQ] new cpufreq_driver->resume callback, needed (at least) for speedstep-smi.

parent 4eaf2745
...@@ -64,6 +64,12 @@ And optionally ...@@ -64,6 +64,12 @@ And optionally
cpufreq_driver.exit - A pointer to a per-CPU cleanup function. cpufreq_driver.exit - A pointer to a per-CPU cleanup function.
cpufreq_driver.resume - A pointer to a per-CPU resume function
which is called with interrupts disabled
and _before_ the pre-suspend frequency
and/or policy is restored by a call to
->target or ->setpolicy.
cpufreq_driver.attr - A pointer to a NULL-terminated list of cpufreq_driver.attr - A pointer to a NULL-terminated list of
"struct freq_attr" which allow to "struct freq_attr" which allow to
export values to sysfs. export values to sysfs.
......
...@@ -495,6 +495,13 @@ static int cpufreq_resume(struct sys_device * sysdev) ...@@ -495,6 +495,13 @@ static int cpufreq_resume(struct sys_device * sysdev)
if (!cpu_policy) if (!cpu_policy)
return -EINVAL; return -EINVAL;
if (cpufreq_driver->resume)
ret = cpufreq_driver->resume(cpu_policy);
if (ret) {
printk(KERN_ERR "cpufreq: resume failed in ->resume step on CPU %u\n", cpu_policy->cpu);
goto out;
}
if (cpufreq_driver->setpolicy) if (cpufreq_driver->setpolicy)
ret = cpufreq_driver->setpolicy(cpu_policy); ret = cpufreq_driver->setpolicy(cpu_policy);
else else
...@@ -503,6 +510,12 @@ static int cpufreq_resume(struct sys_device * sysdev) ...@@ -503,6 +510,12 @@ static int cpufreq_resume(struct sys_device * sysdev)
*/ */
ret = cpufreq_driver->target(cpu_policy, cpu_policy->cur, CPUFREQ_RELATION_H); ret = cpufreq_driver->target(cpu_policy, cpu_policy->cur, CPUFREQ_RELATION_H);
if (ret) {
printk(KERN_ERR "cpufreq: resume failed in ->setpolicy/target step on CPU %u\n", cpu_policy->cpu);
goto out;
}
out:
cpufreq_cpu_put(cpu_policy); cpufreq_cpu_put(cpu_policy);
return ret; return ret;
......
...@@ -179,6 +179,7 @@ struct cpufreq_driver { ...@@ -179,6 +179,7 @@ struct cpufreq_driver {
/* optional */ /* optional */
int (*exit) (struct cpufreq_policy *policy); int (*exit) (struct cpufreq_policy *policy);
int (*resume) (struct cpufreq_policy *policy);
struct freq_attr **attr; struct freq_attr **attr;
}; };
......
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