at v4.12 4.0 kB view raw
1/* 2 * linux/include/linux/cpu_cooling.h 3 * 4 * Copyright (C) 2012 Samsung Electronics Co., Ltd(http://www.samsung.com) 5 * Copyright (C) 2012 Amit Daniel <amit.kachhap@linaro.org> 6 * 7 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 8 * This program is free software; you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation; version 2 of the License. 11 * 12 * This program is distributed in the hope that it will be useful, but 13 * WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License along 18 * with this program; if not, write to the Free Software Foundation, Inc., 19 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. 20 * 21 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 22 */ 23 24#ifndef __CPU_COOLING_H__ 25#define __CPU_COOLING_H__ 26 27#include <linux/of.h> 28#include <linux/thermal.h> 29#include <linux/cpumask.h> 30 31typedef int (*get_static_t)(cpumask_t *cpumask, int interval, 32 unsigned long voltage, u32 *power); 33 34#ifdef CONFIG_CPU_THERMAL 35/** 36 * cpufreq_cooling_register - function to create cpufreq cooling device. 37 * @clip_cpus: cpumask of cpus where the frequency constraints will happen 38 */ 39struct thermal_cooling_device * 40cpufreq_cooling_register(const struct cpumask *clip_cpus); 41 42struct thermal_cooling_device * 43cpufreq_power_cooling_register(const struct cpumask *clip_cpus, 44 u32 capacitance, get_static_t plat_static_func); 45 46/** 47 * of_cpufreq_cooling_register - create cpufreq cooling device based on DT. 48 * @np: a valid struct device_node to the cooling device device tree node. 49 * @clip_cpus: cpumask of cpus where the frequency constraints will happen 50 */ 51#ifdef CONFIG_THERMAL_OF 52struct thermal_cooling_device * 53of_cpufreq_cooling_register(struct device_node *np, 54 const struct cpumask *clip_cpus); 55 56struct thermal_cooling_device * 57of_cpufreq_power_cooling_register(struct device_node *np, 58 const struct cpumask *clip_cpus, 59 u32 capacitance, 60 get_static_t plat_static_func); 61#else 62static inline struct thermal_cooling_device * 63of_cpufreq_cooling_register(struct device_node *np, 64 const struct cpumask *clip_cpus) 65{ 66 return ERR_PTR(-ENOSYS); 67} 68 69static inline struct thermal_cooling_device * 70of_cpufreq_power_cooling_register(struct device_node *np, 71 const struct cpumask *clip_cpus, 72 u32 capacitance, 73 get_static_t plat_static_func) 74{ 75 return NULL; 76} 77#endif 78 79/** 80 * cpufreq_cooling_unregister - function to remove cpufreq cooling device. 81 * @cdev: thermal cooling device pointer. 82 */ 83void cpufreq_cooling_unregister(struct thermal_cooling_device *cdev); 84 85unsigned long cpufreq_cooling_get_level(unsigned int cpu, unsigned int freq); 86#else /* !CONFIG_CPU_THERMAL */ 87static inline struct thermal_cooling_device * 88cpufreq_cooling_register(const struct cpumask *clip_cpus) 89{ 90 return ERR_PTR(-ENOSYS); 91} 92static inline struct thermal_cooling_device * 93cpufreq_power_cooling_register(const struct cpumask *clip_cpus, 94 u32 capacitance, get_static_t plat_static_func) 95{ 96 return NULL; 97} 98 99static inline struct thermal_cooling_device * 100of_cpufreq_cooling_register(struct device_node *np, 101 const struct cpumask *clip_cpus) 102{ 103 return ERR_PTR(-ENOSYS); 104} 105 106static inline struct thermal_cooling_device * 107of_cpufreq_power_cooling_register(struct device_node *np, 108 const struct cpumask *clip_cpus, 109 u32 capacitance, 110 get_static_t plat_static_func) 111{ 112 return NULL; 113} 114 115static inline 116void cpufreq_cooling_unregister(struct thermal_cooling_device *cdev) 117{ 118 return; 119} 120static inline 121unsigned long cpufreq_cooling_get_level(unsigned int cpu, unsigned int freq) 122{ 123 return THERMAL_CSTATE_INVALID; 124} 125#endif /* CONFIG_CPU_THERMAL */ 126 127#endif /* __CPU_COOLING_H__ */