Lines Matching +full:required +full:- +full:opps
28 #include "cpufreq-dt.h"
40 NULL, /* Extra space for boost-attr if required */
46 struct private_data *priv = policy->driver_data; in set_target()
47 unsigned long freq = policy->freq_table[index].frequency; in set_target()
50 ret = dev_pm_opp_set_rate(priv->cpu_dev, freq * 1000); in set_target()
53 arch_set_freq_scale(policy->related_cpus, freq, in set_target()
54 policy->cpuinfo.max_freq); in set_target()
61 * An earlier version of opp-v1 bindings used to name the regulator
62 * "cpu0-supply", we still need to handle that for backwards compatibility.
68 int cpu = dev->id; in find_supply_name()
71 np = of_node_get(dev->of_node); in find_supply_name()
79 pp = of_find_property(np, "cpu0-supply", NULL); in find_supply_name()
86 pp = of_find_property(np, "cpu-supply", NULL); in find_supply_name()
109 return -ENODEV; in resources_available()
119 if (ret == -EPROBE_DEFER) in resources_available()
141 if (ret == -EPROBE_DEFER) in resources_available()
165 cpu_dev = get_cpu_device(policy->cpu); in cpufreq_init()
167 pr_err("failed to get cpu%d device\n", policy->cpu); in cpufreq_init()
168 return -ENODEV; in cpufreq_init()
178 /* Get OPP-sharing information from "operating-points-v2" bindings */ in cpufreq_init()
179 ret = dev_pm_opp_of_get_sharing_cpus(cpu_dev, policy->cpus); in cpufreq_init()
181 if (ret != -ENOENT) in cpufreq_init()
185 * operating-points-v2 not supported, fallback to old method of in cpufreq_init()
186 * finding shared-OPPs for backward compatibility if the in cpufreq_init()
189 if (dev_pm_opp_get_sharing_cpus(cpu_dev, policy->cpus)) in cpufreq_init()
203 policy->cpu, ret); in cpufreq_init()
210 ret = -ENOMEM; in cpufreq_init()
214 priv->reg_name = name; in cpufreq_init()
215 priv->opp_table = opp_table; in cpufreq_init()
218 * Initialize OPP tables for all policy->cpus. They will be shared by in cpufreq_init()
221 * For platforms not using operating-points-v2 bindings, we do this in cpufreq_init()
222 * before updating policy->cpus. Otherwise, we will end up creating in cpufreq_init()
223 * duplicate OPPs for policy->cpus. in cpufreq_init()
225 * OPPs might be populated at runtime, don't check for error here in cpufreq_init()
227 if (!dev_pm_opp_of_cpumask_add_table(policy->cpus)) in cpufreq_init()
228 priv->have_static_opps = true; in cpufreq_init()
237 ret = -EPROBE_DEFER; in cpufreq_init()
242 cpumask_setall(policy->cpus); in cpufreq_init()
245 * OPP tables are initialized only for policy->cpu, do it for in cpufreq_init()
248 ret = dev_pm_opp_set_sharing_cpus(cpu_dev, policy->cpus); in cpufreq_init()
250 dev_err(cpu_dev, "%s: failed to mark OPPs as shared: %d\n", in cpufreq_init()
260 priv->cpu_dev = cpu_dev; in cpufreq_init()
261 policy->driver_data = priv; in cpufreq_init()
262 policy->clk = cpu_clk; in cpufreq_init()
263 policy->freq_table = freq_table; in cpufreq_init()
265 policy->suspend_freq = dev_pm_opp_get_suspend_opp_freq(cpu_dev) / 1000; in cpufreq_init()
280 policy->cpuinfo.transition_latency = transition_latency; in cpufreq_init()
281 policy->dvfs_possible_from_any_cpu = true; in cpufreq_init()
288 if (priv->have_static_opps) in cpufreq_init()
289 dev_pm_opp_of_cpumask_remove_table(policy->cpus); in cpufreq_init()
302 struct private_data *priv = policy->driver_data; in cpufreq_exit()
304 cpufreq_cooling_unregister(priv->cdev); in cpufreq_exit()
305 dev_pm_opp_free_cpufreq_table(priv->cpu_dev, &policy->freq_table); in cpufreq_exit()
306 if (priv->have_static_opps) in cpufreq_exit()
307 dev_pm_opp_of_cpumask_remove_table(policy->related_cpus); in cpufreq_exit()
308 if (priv->reg_name) in cpufreq_exit()
309 dev_pm_opp_put_regulators(priv->opp_table); in cpufreq_exit()
311 clk_put(policy->clk); in cpufreq_exit()
319 struct private_data *priv = policy->driver_data; in cpufreq_ready()
321 priv->cdev = of_cpufreq_cooling_register(policy); in cpufreq_ready()
332 .name = "cpufreq-dt",
339 struct cpufreq_dt_platform_data *data = dev_get_platdata(&pdev->dev); in dt_cpufreq_probe()
343 * All per-cluster (CPUs sharing clock/voltages) initialization is done in dt_cpufreq_probe()
344 * from ->init(). In probe(), we just need to make sure that clk and in dt_cpufreq_probe()
354 if (data->have_governor_per_policy) in dt_cpufreq_probe()
357 dt_cpufreq_driver.resume = data->resume; in dt_cpufreq_probe()
358 if (data->suspend) in dt_cpufreq_probe()
359 dt_cpufreq_driver.suspend = data->suspend; in dt_cpufreq_probe()
364 dev_err(&pdev->dev, "failed register driver: %d\n", ret); in dt_cpufreq_probe()
377 .name = "cpufreq-dt",
384 MODULE_ALIAS("platform:cpufreq-dt");