diff options
Diffstat (limited to 'include/linux/devfreq_cooling.h')
-rw-r--r-- | include/linux/devfreq_cooling.h | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/include/linux/devfreq_cooling.h b/include/linux/devfreq_cooling.h new file mode 100644 index 000000000000..7adf6cc4b305 --- /dev/null +++ b/include/linux/devfreq_cooling.h | |||
@@ -0,0 +1,81 @@ | |||
1 | /* | ||
2 | * devfreq_cooling: Thermal cooling device implementation for devices using | ||
3 | * devfreq | ||
4 | * | ||
5 | * Copyright (C) 2014-2015 ARM Limited | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License version 2 as | ||
9 | * published by the Free Software Foundation. | ||
10 | * | ||
11 | * This program is distributed "as is" WITHOUT ANY WARRANTY of any | ||
12 | * kind, whether express or implied; without even the implied warranty | ||
13 | * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | */ | ||
16 | |||
17 | #ifndef __DEVFREQ_COOLING_H__ | ||
18 | #define __DEVFREQ_COOLING_H__ | ||
19 | |||
20 | #include <linux/devfreq.h> | ||
21 | #include <linux/thermal.h> | ||
22 | |||
23 | #ifdef CONFIG_DEVFREQ_THERMAL | ||
24 | |||
25 | /** | ||
26 | * struct devfreq_cooling_power - Devfreq cooling power ops | ||
27 | * @get_static_power: Take voltage, in mV, and return the static power | ||
28 | * in mW. If NULL, the static power is assumed | ||
29 | * to be 0. | ||
30 | * @get_dynamic_power: Take voltage, in mV, and frequency, in HZ, and | ||
31 | * return the dynamic power draw in mW. If NULL, | ||
32 | * a simple power model is used. | ||
33 | * @dyn_power_coeff: Coefficient for the simple dynamic power model in | ||
34 | * mW/(MHz mV mV). | ||
35 | * If get_dynamic_power() is NULL, then the | ||
36 | * dynamic power is calculated as | ||
37 | * @dyn_power_coeff * frequency * voltage^2 | ||
38 | */ | ||
39 | struct devfreq_cooling_power { | ||
40 | unsigned long (*get_static_power)(unsigned long voltage); | ||
41 | unsigned long (*get_dynamic_power)(unsigned long freq, | ||
42 | unsigned long voltage); | ||
43 | unsigned long dyn_power_coeff; | ||
44 | }; | ||
45 | |||
46 | struct thermal_cooling_device * | ||
47 | of_devfreq_cooling_register_power(struct device_node *np, struct devfreq *df, | ||
48 | struct devfreq_cooling_power *dfc_power); | ||
49 | struct thermal_cooling_device * | ||
50 | of_devfreq_cooling_register(struct device_node *np, struct devfreq *df); | ||
51 | struct thermal_cooling_device *devfreq_cooling_register(struct devfreq *df); | ||
52 | void devfreq_cooling_unregister(struct thermal_cooling_device *dfc); | ||
53 | |||
54 | #else /* !CONFIG_DEVFREQ_THERMAL */ | ||
55 | |||
56 | struct thermal_cooling_device * | ||
57 | of_devfreq_cooling_register_power(struct device_node *np, struct devfreq *df, | ||
58 | struct devfreq_cooling_power *dfc_power) | ||
59 | { | ||
60 | return ERR_PTR(-EINVAL); | ||
61 | } | ||
62 | |||
63 | static inline struct thermal_cooling_device * | ||
64 | of_devfreq_cooling_register(struct device_node *np, struct devfreq *df) | ||
65 | { | ||
66 | return ERR_PTR(-EINVAL); | ||
67 | } | ||
68 | |||
69 | static inline struct thermal_cooling_device * | ||
70 | devfreq_cooling_register(struct devfreq *df) | ||
71 | { | ||
72 | return ERR_PTR(-EINVAL); | ||
73 | } | ||
74 | |||
75 | static inline void | ||
76 | devfreq_cooling_unregister(struct thermal_cooling_device *dfc) | ||
77 | { | ||
78 | } | ||
79 | |||
80 | #endif /* CONFIG_DEVFREQ_THERMAL */ | ||
81 | #endif /* __DEVFREQ_COOLING_H__ */ | ||