cpufreq.c

来自「优龙2410linux2.6.8内核源代码」· C语言 代码 · 共 108 行

C
108
字号
/* * linux/arch/arm/mach-imx/cpufreq.c * * Copyright (c) 2004 Sascha Hauer <sascha@saschahauer.de> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * */#include <linux/kernel.h>#include <linux/types.h>#include <linux/init.h>#include <linux/cpufreq.h>#include <asm/hardware.h>static int cur_freq = 200000;static struct cpufreq_frequency_table imx_cpu_freqs[] = {	{0x040e200e,	150000},	{0x00321431,	200000},	{0,	CPUFREQ_TABLE_END},};unsigned int imx_getspeed(void){	return cur_freq;}static int imx_target(struct cpufreq_policy *policy,			 unsigned int target_freq,			 unsigned int relation){	unsigned int cur = imx_getspeed();	unsigned int index;	struct cpufreq_freqs freqs;	cpufreq_frequency_table_target(policy, imx_cpu_freqs,                                   target_freq, relation, &index);	switch(relation){	case CPUFREQ_RELATION_L:		break;	case CPUFREQ_RELATION_H:		break;	}	freqs.old = cur;	freqs.new = imx_cpu_freqs[index].frequency;	freqs.cpu = 0;	cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE);	cur_freq = imx_cpu_freqs[index].frequency;	MPCTL0 = imx_cpu_freqs[index].index;	CSCR |= CSCR_MPLL_RESTART;	cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE);	return 0;}static int __init imx_cpu_init(struct cpufreq_policy *policy){	if (policy->cpu != 0)		return -EINVAL;	cpufreq_frequency_table_cpuinfo(policy,imx_cpu_freqs);	policy->governor = CPUFREQ_DEFAULT_GOVERNOR;	policy->cpuinfo.transition_latency = CPUFREQ_ETERNAL;	cur_freq = 200000;	return 0;}int imx_verify_speed(struct cpufreq_policy *policy){	if (policy->cpu)		return -EINVAL;	cpufreq_verify_within_limits(policy, policy->cpuinfo.min_freq, policy->cpuinfo.max_freq);	/* make sure that at least one frequency is within the policy */	cpufreq_frequency_table_verify(policy,imx_cpu_freqs);	cpufreq_verify_within_limits(policy, policy->cpuinfo.min_freq, policy->cpuinfo.max_freq);	return 0;}static struct cpufreq_driver imx_driver = {	.verify		= imx_verify_speed,	.target		= imx_target,	.init		= imx_cpu_init,	.name		= "imx",};static int __init cpufreq_init(void){	cpufreq_gov_userspace_init();	/* FIXME implement checking for correct cpu */	return cpufreq_register_driver(&imx_driver);}arch_initcall(cpufreq_init);

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?