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