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 + -
显示快捷键?