Lines Matching refs:dfc
71 struct devfreq_cooling_device *dfc = cdev->devdata;
73 *state = dfc->freq_table_size - 1;
81 struct devfreq_cooling_device *dfc = cdev->devdata;
83 *state = dfc->cooling_state;
91 struct devfreq_cooling_device *dfc = cdev->devdata;
92 struct devfreq *df = dfc->devfreq;
96 if (state == dfc->cooling_state)
101 if (state >= dfc->freq_table_size)
104 freq = dfc->freq_table[state];
106 dev_pm_qos_update_request(&dfc->req_max_freq,
109 dfc->cooling_state = state;
116 * @dfc: Pointer to devfreq cooling device
123 freq_get_state(struct devfreq_cooling_device *dfc, unsigned long freq)
127 for (i = 0; i < dfc->freq_table_size; i++) {
128 if (dfc->freq_table[i] == freq)
165 * @dfc: Pointer to devfreq cooling device
174 get_static_power(struct devfreq_cooling_device *dfc, unsigned long freq)
176 struct devfreq *df = dfc->devfreq;
179 if (!dfc->power_ops->get_static_power)
187 return dfc->power_ops->get_static_power(df, voltage);
192 * @dfc: Pointer to devfreq cooling device
203 get_dynamic_power(struct devfreq_cooling_device *dfc, unsigned long freq,
208 struct devfreq_cooling_power *dfc_power = dfc->power_ops;
211 return dfc_power->get_dynamic_power(dfc->devfreq, freq,
222 static inline unsigned long get_total_power(struct devfreq_cooling_device *dfc,
226 return get_static_power(dfc, freq) + get_dynamic_power(dfc, freq,
234 struct devfreq_cooling_device *dfc = cdev->devdata;
235 struct devfreq *df = dfc->devfreq;
244 state = freq_get_state(dfc, freq);
250 if (dfc->power_ops->get_real_power) {
257 res = dfc->power_ops->get_real_power(df, power, freq, voltage);
259 state = dfc->capped_state;
260 dfc->res_util = dfc->power_table[state];
261 dfc->res_util *= SCALE_ERROR_MITIGATION;
264 dfc->res_util /= *power;
269 dyn_power = dfc->power_table[state];
275 static_power = get_static_power(dfc, freq);
286 dfc->res_util = SCALE_ERROR_MITIGATION;
294 struct devfreq_cooling_device *dfc = cdev->devdata;
298 if (state >= dfc->freq_table_size)
301 freq = dfc->freq_table[state];
302 static_power = get_static_power(dfc, freq);
304 *power = dfc->power_table[state] + static_power;
311 struct devfreq_cooling_device *dfc = cdev->devdata;
312 struct devfreq *df = dfc->devfreq;
321 if (dfc->power_ops->get_real_power) {
323 est_power = power * dfc->res_util;
326 static_power = get_static_power(dfc, freq);
340 for (i = 0; i < dfc->freq_table_size - 1; i++)
341 if (est_power >= dfc->power_table[i])
345 dfc->capped_state = i;
358 * @dfc: Pointer to devfreq cooling device.
369 * The tables are malloced, and pointers put in dfc. They must be
374 static int devfreq_cooling_gen_tables(struct devfreq_cooling_device *dfc)
376 struct devfreq *df = dfc->devfreq;
386 if (dfc->power_ops) {
413 if (dfc->power_ops) {
414 if (dfc->power_ops->get_real_power)
415 power = get_total_power(dfc, freq, voltage);
417 power = get_dynamic_power(dfc, freq, voltage);
428 if (dfc->power_ops)
429 dfc->power_table = power_table;
431 dfc->freq_table = freq_table;
432 dfc->freq_table_size = num_opps;
464 struct devfreq_cooling_device *dfc;
468 dfc = kzalloc(sizeof(*dfc), GFP_KERNEL);
469 if (!dfc)
472 dfc->devfreq = df;
475 dfc->power_ops = dfc_power;
483 err = devfreq_cooling_gen_tables(dfc);
487 err = dev_pm_qos_add_request(df->dev.parent, &dfc->req_max_freq,
496 dfc->id = err;
498 snprintf(dev_name, sizeof(dev_name), "thermal-devfreq-%d", dfc->id);
500 cdev = thermal_of_cooling_device_register(np, dev_name, dfc,
510 dfc->cdev = cdev;
515 ida_simple_remove(&devfreq_ida, dfc->id);
518 dev_pm_qos_remove_request(&dfc->req_max_freq);
521 kfree(dfc->power_table);
522 kfree(dfc->freq_table);
524 kfree(dfc);
559 struct devfreq_cooling_device *dfc;
564 dfc = cdev->devdata;
566 thermal_cooling_device_unregister(dfc->cdev);
567 ida_simple_remove(&devfreq_ida, dfc->id);
568 dev_pm_qos_remove_request(&dfc->req_max_freq);
569 kfree(dfc->power_table);
570 kfree(dfc->freq_table);
572 kfree(dfc);