Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v5.3-rc4 76 lines 1.8 kB view raw
1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * clock scaling for the UniCore-II 4 * 5 * Code specific to PKUnity SoC and UniCore ISA 6 * 7 * Maintained by GUAN Xue-tao <gxt@mprc.pku.edu.cn> 8 * Copyright (C) 2001-2010 Guan Xuetao 9 */ 10 11#include <linux/err.h> 12#include <linux/kernel.h> 13#include <linux/types.h> 14#include <linux/init.h> 15#include <linux/clk.h> 16#include <linux/cpufreq.h> 17 18#include <mach/hardware.h> 19 20static struct cpufreq_driver ucv2_driver; 21 22/* make sure that only the "userspace" governor is run 23 * -- anything else wouldn't make sense on this platform, anyway. 24 */ 25static int ucv2_verify_speed(struct cpufreq_policy *policy) 26{ 27 if (policy->cpu) 28 return -EINVAL; 29 30 cpufreq_verify_within_cpu_limits(policy); 31 return 0; 32} 33 34static int ucv2_target(struct cpufreq_policy *policy, 35 unsigned int target_freq, 36 unsigned int relation) 37{ 38 struct cpufreq_freqs freqs; 39 int ret; 40 41 freqs.old = policy->cur; 42 freqs.new = target_freq; 43 44 cpufreq_freq_transition_begin(policy, &freqs); 45 ret = clk_set_rate(policy->clk, target_freq * 1000); 46 cpufreq_freq_transition_end(policy, &freqs, ret); 47 48 return ret; 49} 50 51static int __init ucv2_cpu_init(struct cpufreq_policy *policy) 52{ 53 if (policy->cpu != 0) 54 return -EINVAL; 55 56 policy->min = policy->cpuinfo.min_freq = 250000; 57 policy->max = policy->cpuinfo.max_freq = 1000000; 58 policy->clk = clk_get(NULL, "MAIN_CLK"); 59 return PTR_ERR_OR_ZERO(policy->clk); 60} 61 62static struct cpufreq_driver ucv2_driver = { 63 .flags = CPUFREQ_STICKY | CPUFREQ_NO_AUTO_DYNAMIC_SWITCHING, 64 .verify = ucv2_verify_speed, 65 .target = ucv2_target, 66 .get = cpufreq_generic_get, 67 .init = ucv2_cpu_init, 68 .name = "UniCore-II", 69}; 70 71static int __init ucv2_cpufreq_init(void) 72{ 73 return cpufreq_register_driver(&ucv2_driver); 74} 75 76arch_initcall(ucv2_cpufreq_init);