1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  *  linux/include/linux/cpu_cooling.h
4  *
5  *  Copyright (C) 2012	Samsung Electronics Co., Ltd(http://www.samsung.com)
6  *  Copyright (C) 2012  Amit Daniel <amit.kachhap@linaro.org>
7  *
8  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
9  *
10  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
11  */
12 
13 #ifndef __CPU_COOLING_H__
14 #define __CPU_COOLING_H__
15 
16 #include <linux/of.h>
17 #include <linux/thermal.h>
18 
19 struct cpufreq_policy;
20 
21 #ifdef CONFIG_CPU_FREQ_THERMAL
22 /**
23  * cpufreq_cooling_register - function to create cpufreq cooling device.
24  * @policy: cpufreq policy.
25  */
26 struct thermal_cooling_device *
27 cpufreq_cooling_register(struct cpufreq_policy *policy);
28 
29 /**
30  * cpufreq_cooling_unregister - function to remove cpufreq cooling device.
31  * @cdev: thermal cooling device pointer.
32  */
33 void cpufreq_cooling_unregister(struct thermal_cooling_device *cdev);
34 
35 /**
36  * of_cpufreq_cooling_register - create cpufreq cooling device based on DT.
37  * @policy: cpufreq policy.
38  */
39 struct thermal_cooling_device *
40 of_cpufreq_cooling_register(struct cpufreq_policy *policy);
41 
42 #else /* !CONFIG_CPU_FREQ_THERMAL */
43 static inline struct thermal_cooling_device *
cpufreq_cooling_register(struct cpufreq_policy * policy)44 cpufreq_cooling_register(struct cpufreq_policy *policy)
45 {
46 	return ERR_PTR(-ENOSYS);
47 }
48 
49 static inline
cpufreq_cooling_unregister(struct thermal_cooling_device * cdev)50 void cpufreq_cooling_unregister(struct thermal_cooling_device *cdev)
51 {
52 	return;
53 }
54 
55 static inline struct thermal_cooling_device *
of_cpufreq_cooling_register(struct cpufreq_policy * policy)56 of_cpufreq_cooling_register(struct cpufreq_policy *policy)
57 {
58 	return NULL;
59 }
60 #endif /* CONFIG_CPU_FREQ_THERMAL */
61 
62 struct cpuidle_driver;
63 
64 #ifdef CONFIG_CPU_IDLE_THERMAL
65 void cpuidle_cooling_register(struct cpuidle_driver *drv);
66 #else /* CONFIG_CPU_IDLE_THERMAL */
cpuidle_cooling_register(struct cpuidle_driver * drv)67 static inline void cpuidle_cooling_register(struct cpuidle_driver *drv)
68 {
69 }
70 #endif /* CONFIG_CPU_IDLE_THERMAL */
71 
72 #endif /* __CPU_COOLING_H__ */
73