Lines Matching refs:cpufreq_cdev

86  * @cpufreq_cdev: cpufreq_cdev for which the property is required
91 static unsigned long get_level(struct cpufreq_cooling_device *cpufreq_cdev,
96 for (i = cpufreq_cdev->max_level - 1; i >= 0; i--) {
97 if (freq > cpufreq_cdev->em->table[i].frequency)
101 return cpufreq_cdev->max_level - i - 1;
104 static u32 cpu_freq_to_power(struct cpufreq_cooling_device *cpufreq_cdev,
110 for (i = cpufreq_cdev->max_level - 1; i >= 0; i--) {
111 if (freq > cpufreq_cdev->em->table[i].frequency)
115 power_mw = cpufreq_cdev->em->table[i + 1].power;
121 static u32 cpu_power_to_freq(struct cpufreq_cooling_device *cpufreq_cdev,
127 for (i = cpufreq_cdev->max_level; i > 0; i--) {
129 em_power_mw = cpufreq_cdev->em->table[i].power;
135 return cpufreq_cdev->em->table[i].frequency;
140 * @cpufreq_cdev: struct cpufreq_cooling_device for the cpu
148 static u32 get_load(struct cpufreq_cooling_device *cpufreq_cdev, int cpu,
156 static u32 get_load(struct cpufreq_cooling_device *cpufreq_cdev, int cpu,
161 struct time_in_idle *idle_time = &cpufreq_cdev->idle_time[cpu_idx];
181 * @cpufreq_cdev: &cpufreq_cooling_device for this cdev
185 * @cpufreq_cdev.
187 static u32 get_dynamic_power(struct cpufreq_cooling_device *cpufreq_cdev,
192 raw_cpu_power = cpu_freq_to_power(cpufreq_cdev, freq);
193 return (raw_cpu_power * cpufreq_cdev->last_load) / 100;
224 struct cpufreq_cooling_device *cpufreq_cdev = cdev->devdata;
225 struct cpufreq_policy *policy = cpufreq_cdev->policy;
233 load = get_load(cpufreq_cdev, cpu, i);
240 cpufreq_cdev->last_load = total_load;
242 *power = get_dynamic_power(cpufreq_cdev, freq);
266 struct cpufreq_cooling_device *cpufreq_cdev = cdev->devdata;
269 if (state > cpufreq_cdev->max_level)
272 num_cpus = cpumask_weight(cpufreq_cdev->policy->cpus);
274 idx = cpufreq_cdev->max_level - state;
275 freq = cpufreq_cdev->em->table[idx].frequency;
276 *power = cpu_freq_to_power(cpufreq_cdev, freq) * num_cpus;
301 struct cpufreq_cooling_device *cpufreq_cdev = cdev->devdata;
302 struct cpufreq_policy *policy = cpufreq_cdev->policy;
304 last_load = cpufreq_cdev->last_load ?: 1;
306 target_freq = cpu_power_to_freq(cpufreq_cdev, normalised_power);
308 *state = get_level(cpufreq_cdev, target_freq);
314 static inline bool em_is_sane(struct cpufreq_cooling_device *cpufreq_cdev,
322 policy = cpufreq_cdev->policy;
330 nr_levels = cpufreq_cdev->max_level + 1;
343 static inline int allocate_idle_time(struct cpufreq_cooling_device *cpufreq_cdev)
348 static inline void free_idle_time(struct cpufreq_cooling_device *cpufreq_cdev)
352 static int allocate_idle_time(struct cpufreq_cooling_device *cpufreq_cdev)
354 unsigned int num_cpus = cpumask_weight(cpufreq_cdev->policy->related_cpus);
356 cpufreq_cdev->idle_time = kcalloc(num_cpus,
357 sizeof(*cpufreq_cdev->idle_time),
359 if (!cpufreq_cdev->idle_time)
365 static void free_idle_time(struct cpufreq_cooling_device *cpufreq_cdev)
367 kfree(cpufreq_cdev->idle_time);
368 cpufreq_cdev->idle_time = NULL;
372 static unsigned int get_state_freq(struct cpufreq_cooling_device *cpufreq_cdev,
380 if (cpufreq_cdev->em) {
381 idx = cpufreq_cdev->max_level - state;
382 return cpufreq_cdev->em->table[idx].frequency;
387 policy = cpufreq_cdev->policy;
389 idx = cpufreq_cdev->max_level - state;
411 struct cpufreq_cooling_device *cpufreq_cdev = cdev->devdata;
413 *state = cpufreq_cdev->max_level;
430 struct cpufreq_cooling_device *cpufreq_cdev = cdev->devdata;
432 *state = cpufreq_cdev->cpufreq_state;
450 struct cpufreq_cooling_device *cpufreq_cdev = cdev->devdata;
456 if (state > cpufreq_cdev->max_level)
460 if (cpufreq_cdev->cpufreq_state == state)
463 frequency = get_state_freq(cpufreq_cdev, state);
465 ret = freq_qos_update_request(&cpufreq_cdev->qos_req, frequency);
467 cpufreq_cdev->cpufreq_state = state;
468 cpus = cpufreq_cdev->policy->related_cpus;
497 struct cpufreq_cooling_device *cpufreq_cdev;
522 cpufreq_cdev = kzalloc(sizeof(*cpufreq_cdev), GFP_KERNEL);
523 if (!cpufreq_cdev)
526 cpufreq_cdev->policy = policy;
528 ret = allocate_idle_time(cpufreq_cdev);
535 cpufreq_cdev->max_level = i - 1;
537 cooling_ops = &cpufreq_cdev->cooling_ops;
543 if (em_is_sane(cpufreq_cdev, em)) {
544 cpufreq_cdev->em = em;
558 &cpufreq_cdev->qos_req, FREQ_QOS_MAX,
559 get_state_freq(cpufreq_cdev, 0));
572 cdev = thermal_of_cooling_device_register(np, name, cpufreq_cdev,
582 freq_qos_remove_request(&cpufreq_cdev->qos_req);
584 free_idle_time(cpufreq_cdev);
586 kfree(cpufreq_cdev);
660 struct cpufreq_cooling_device *cpufreq_cdev;
665 cpufreq_cdev = cdev->devdata;
668 freq_qos_remove_request(&cpufreq_cdev->qos_req);
669 free_idle_time(cpufreq_cdev);
670 kfree(cpufreq_cdev);