/* cpufreq_suspend - let the low level driver prepare for suspend  */
static int cpufreq_suspend(struct sys_device *sysdev, pm_message_t pmsg)
/* cpufreq_suspend - let the low level driver prepare for suspend  */
static int cpufreq_suspend(struct sys_device *sysdev, pm_message_t pmsg)
{
	int ret = 0;
	int cpu = sysdev->id;
	struct cpufreq_policy *cpu_policy;
	dprintk("suspending cpu %u\n", cpu);
	if (!cpu_online(cpu))
		return 0;
	cpu_policy = cpufreq_cpu_get(cpu);
	if (!cpu_policy)
		return -EINVAL;
	if (unlikely(cpu_policy->cpu != cpu))
		goto out;
	if (cpufreq_driver->suspend) {
		ret = cpufreq_driver->suspend(cpu_policy, pmsg);
		if (ret)
			printk(KERN_ERR "cpufreq: suspend failed in ->suspend "
					"step on CPU %u\n", cpu_policy->cpu);
	}
out:
	cpufreq_cpu_put(cpu_policy);
	return ret;
}