Lines Matching +full:max +full:- +full:freq

1 // SPDX-License-Identifier: GPL-2.0-only
7 * (C) 2002 - 2004 Dominik Brodowski <linux@brodo.de>
25 * cpufreq_set - set the CPU frequency
26 * @policy: pointer to policy struct where freq is being set
27 * @freq: target frequency in kHz
29 * Sets the CPU frequency to freq.
31 static int cpufreq_set(struct cpufreq_policy *policy, unsigned int freq) in cpufreq_set() argument
33 int ret = -EINVAL; in cpufreq_set()
34 struct userspace_policy *userspace = policy->governor_data; in cpufreq_set()
36 pr_debug("cpufreq_set for cpu %u, freq %u kHz\n", policy->cpu, freq); in cpufreq_set()
38 mutex_lock(&userspace->mutex); in cpufreq_set()
39 if (!userspace->is_managed) in cpufreq_set()
42 userspace->setspeed = freq; in cpufreq_set()
44 ret = __cpufreq_driver_target(policy, freq, CPUFREQ_RELATION_L); in cpufreq_set()
46 mutex_unlock(&userspace->mutex); in cpufreq_set()
52 return sprintf(buf, "%u\n", policy->cur); in show_speed()
61 return -ENOMEM; in cpufreq_userspace_policy_init()
63 mutex_init(&userspace->mutex); in cpufreq_userspace_policy_init()
65 policy->governor_data = userspace; in cpufreq_userspace_policy_init()
75 kfree(policy->governor_data); in cpufreq_userspace_policy_exit()
76 policy->governor_data = NULL; in cpufreq_userspace_policy_exit()
81 struct userspace_policy *userspace = policy->governor_data; in cpufreq_userspace_policy_start()
83 BUG_ON(!policy->cur); in cpufreq_userspace_policy_start()
84 pr_debug("started managing cpu %u\n", policy->cpu); in cpufreq_userspace_policy_start()
86 mutex_lock(&userspace->mutex); in cpufreq_userspace_policy_start()
87 userspace->is_managed = 1; in cpufreq_userspace_policy_start()
88 userspace->setspeed = policy->cur; in cpufreq_userspace_policy_start()
89 mutex_unlock(&userspace->mutex); in cpufreq_userspace_policy_start()
95 struct userspace_policy *userspace = policy->governor_data; in cpufreq_userspace_policy_stop()
97 pr_debug("managing cpu %u stopped\n", policy->cpu); in cpufreq_userspace_policy_stop()
99 mutex_lock(&userspace->mutex); in cpufreq_userspace_policy_stop()
100 userspace->is_managed = 0; in cpufreq_userspace_policy_stop()
101 userspace->setspeed = 0; in cpufreq_userspace_policy_stop()
102 mutex_unlock(&userspace->mutex); in cpufreq_userspace_policy_stop()
107 struct userspace_policy *userspace = policy->governor_data; in cpufreq_userspace_policy_limits()
109 mutex_lock(&userspace->mutex); in cpufreq_userspace_policy_limits()
111 pr_debug("limit event for cpu %u: %u - %u kHz, currently %u kHz, last set to %u kHz\n", in cpufreq_userspace_policy_limits()
112 policy->cpu, policy->min, policy->max, policy->cur, userspace->setspeed); in cpufreq_userspace_policy_limits()
114 if (policy->max < userspace->setspeed) in cpufreq_userspace_policy_limits()
115 __cpufreq_driver_target(policy, policy->max, in cpufreq_userspace_policy_limits()
117 else if (policy->min > userspace->setspeed) in cpufreq_userspace_policy_limits()
118 __cpufreq_driver_target(policy, policy->min, in cpufreq_userspace_policy_limits()
121 __cpufreq_driver_target(policy, userspace->setspeed, in cpufreq_userspace_policy_limits()
124 mutex_unlock(&userspace->mutex); in cpufreq_userspace_policy_limits()