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
19struct 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 */
26struct thermal_cooling_device *
27cpufreq_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 */
33void 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 */
39struct thermal_cooling_device *
40of_cpufreq_cooling_register(struct cpufreq_policy *policy);
41
42#else /* !CONFIG_CPU_FREQ_THERMAL */
43static inline struct thermal_cooling_device *
44cpufreq_cooling_register(struct cpufreq_policy *policy)
45{
46 return ERR_PTR(error: -ENOSYS);
47}
48
49static inline
50void cpufreq_cooling_unregister(struct thermal_cooling_device *cdev)
51{
52 return;
53}
54
55static inline struct thermal_cooling_device *
56of_cpufreq_cooling_register(struct cpufreq_policy *policy)
57{
58 return NULL;
59}
60#endif /* CONFIG_CPU_FREQ_THERMAL */
61
62struct cpuidle_driver;
63
64#ifdef CONFIG_CPU_IDLE_THERMAL
65void cpuidle_cooling_register(struct cpuidle_driver *drv);
66#else /* CONFIG_CPU_IDLE_THERMAL */
67static inline void cpuidle_cooling_register(struct cpuidle_driver *drv)
68{
69}
70#endif /* CONFIG_CPU_IDLE_THERMAL */
71
72#endif /* __CPU_COOLING_H__ */
73