at v4.9 6.2 kB view raw
1/* 2 * Generic OPP Interface 3 * 4 * Copyright (C) 2009-2010 Texas Instruments Incorporated. 5 * Nishanth Menon 6 * Romit Dasgupta 7 * Kevin Hilman 8 * 9 * This program is free software; you can redistribute it and/or modify 10 * it under the terms of the GNU General Public License version 2 as 11 * published by the Free Software Foundation. 12 */ 13 14#ifndef __LINUX_OPP_H__ 15#define __LINUX_OPP_H__ 16 17#include <linux/err.h> 18#include <linux/notifier.h> 19 20struct dev_pm_opp; 21struct device; 22 23enum dev_pm_opp_event { 24 OPP_EVENT_ADD, OPP_EVENT_REMOVE, OPP_EVENT_ENABLE, OPP_EVENT_DISABLE, 25}; 26 27#if defined(CONFIG_PM_OPP) 28 29unsigned long dev_pm_opp_get_voltage(struct dev_pm_opp *opp); 30 31unsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp); 32 33bool dev_pm_opp_is_turbo(struct dev_pm_opp *opp); 34 35int dev_pm_opp_get_opp_count(struct device *dev); 36unsigned long dev_pm_opp_get_max_clock_latency(struct device *dev); 37unsigned long dev_pm_opp_get_max_volt_latency(struct device *dev); 38unsigned long dev_pm_opp_get_max_transition_latency(struct device *dev); 39struct dev_pm_opp *dev_pm_opp_get_suspend_opp(struct device *dev); 40 41struct dev_pm_opp *dev_pm_opp_find_freq_exact(struct device *dev, 42 unsigned long freq, 43 bool available); 44 45struct dev_pm_opp *dev_pm_opp_find_freq_floor(struct device *dev, 46 unsigned long *freq); 47 48struct dev_pm_opp *dev_pm_opp_find_freq_ceil(struct device *dev, 49 unsigned long *freq); 50 51int dev_pm_opp_add(struct device *dev, unsigned long freq, 52 unsigned long u_volt); 53void dev_pm_opp_remove(struct device *dev, unsigned long freq); 54 55int dev_pm_opp_enable(struct device *dev, unsigned long freq); 56 57int dev_pm_opp_disable(struct device *dev, unsigned long freq); 58 59struct srcu_notifier_head *dev_pm_opp_get_notifier(struct device *dev); 60int dev_pm_opp_set_supported_hw(struct device *dev, const u32 *versions, 61 unsigned int count); 62void dev_pm_opp_put_supported_hw(struct device *dev); 63int dev_pm_opp_set_prop_name(struct device *dev, const char *name); 64void dev_pm_opp_put_prop_name(struct device *dev); 65int dev_pm_opp_set_regulator(struct device *dev, const char *name); 66void dev_pm_opp_put_regulator(struct device *dev); 67int dev_pm_opp_set_rate(struct device *dev, unsigned long target_freq); 68int dev_pm_opp_set_sharing_cpus(struct device *cpu_dev, const struct cpumask *cpumask); 69int dev_pm_opp_get_sharing_cpus(struct device *cpu_dev, struct cpumask *cpumask); 70void dev_pm_opp_remove_table(struct device *dev); 71void dev_pm_opp_cpumask_remove_table(const struct cpumask *cpumask); 72#else 73static inline unsigned long dev_pm_opp_get_voltage(struct dev_pm_opp *opp) 74{ 75 return 0; 76} 77 78static inline unsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp) 79{ 80 return 0; 81} 82 83static inline bool dev_pm_opp_is_turbo(struct dev_pm_opp *opp) 84{ 85 return false; 86} 87 88static inline int dev_pm_opp_get_opp_count(struct device *dev) 89{ 90 return 0; 91} 92 93static inline unsigned long dev_pm_opp_get_max_clock_latency(struct device *dev) 94{ 95 return 0; 96} 97 98static inline unsigned long dev_pm_opp_get_max_volt_latency(struct device *dev) 99{ 100 return 0; 101} 102 103static inline unsigned long dev_pm_opp_get_max_transition_latency(struct device *dev) 104{ 105 return 0; 106} 107 108static inline struct dev_pm_opp *dev_pm_opp_get_suspend_opp(struct device *dev) 109{ 110 return NULL; 111} 112 113static inline struct dev_pm_opp *dev_pm_opp_find_freq_exact(struct device *dev, 114 unsigned long freq, bool available) 115{ 116 return ERR_PTR(-ENOTSUPP); 117} 118 119static inline struct dev_pm_opp *dev_pm_opp_find_freq_floor(struct device *dev, 120 unsigned long *freq) 121{ 122 return ERR_PTR(-ENOTSUPP); 123} 124 125static inline struct dev_pm_opp *dev_pm_opp_find_freq_ceil(struct device *dev, 126 unsigned long *freq) 127{ 128 return ERR_PTR(-ENOTSUPP); 129} 130 131static inline int dev_pm_opp_add(struct device *dev, unsigned long freq, 132 unsigned long u_volt) 133{ 134 return -ENOTSUPP; 135} 136 137static inline void dev_pm_opp_remove(struct device *dev, unsigned long freq) 138{ 139} 140 141static inline int dev_pm_opp_enable(struct device *dev, unsigned long freq) 142{ 143 return 0; 144} 145 146static inline int dev_pm_opp_disable(struct device *dev, unsigned long freq) 147{ 148 return 0; 149} 150 151static inline struct srcu_notifier_head *dev_pm_opp_get_notifier( 152 struct device *dev) 153{ 154 return ERR_PTR(-ENOTSUPP); 155} 156 157static inline int dev_pm_opp_set_supported_hw(struct device *dev, 158 const u32 *versions, 159 unsigned int count) 160{ 161 return -ENOTSUPP; 162} 163 164static inline void dev_pm_opp_put_supported_hw(struct device *dev) {} 165 166static inline int dev_pm_opp_set_prop_name(struct device *dev, const char *name) 167{ 168 return -ENOTSUPP; 169} 170 171static inline void dev_pm_opp_put_prop_name(struct device *dev) {} 172 173static inline int dev_pm_opp_set_regulator(struct device *dev, const char *name) 174{ 175 return -ENOTSUPP; 176} 177 178static inline void dev_pm_opp_put_regulator(struct device *dev) {} 179 180static inline int dev_pm_opp_set_rate(struct device *dev, unsigned long target_freq) 181{ 182 return -ENOTSUPP; 183} 184 185static inline int dev_pm_opp_set_sharing_cpus(struct device *cpu_dev, const struct cpumask *cpumask) 186{ 187 return -ENOTSUPP; 188} 189 190static inline int dev_pm_opp_get_sharing_cpus(struct device *cpu_dev, struct cpumask *cpumask) 191{ 192 return -EINVAL; 193} 194 195static inline void dev_pm_opp_remove_table(struct device *dev) 196{ 197} 198 199static inline void dev_pm_opp_cpumask_remove_table(const struct cpumask *cpumask) 200{ 201} 202 203#endif /* CONFIG_PM_OPP */ 204 205#if defined(CONFIG_PM_OPP) && defined(CONFIG_OF) 206int dev_pm_opp_of_add_table(struct device *dev); 207void dev_pm_opp_of_remove_table(struct device *dev); 208int dev_pm_opp_of_cpumask_add_table(const struct cpumask *cpumask); 209void dev_pm_opp_of_cpumask_remove_table(const struct cpumask *cpumask); 210int dev_pm_opp_of_get_sharing_cpus(struct device *cpu_dev, struct cpumask *cpumask); 211#else 212static inline int dev_pm_opp_of_add_table(struct device *dev) 213{ 214 return -ENOTSUPP; 215} 216 217static inline void dev_pm_opp_of_remove_table(struct device *dev) 218{ 219} 220 221static inline int dev_pm_opp_of_cpumask_add_table(const struct cpumask *cpumask) 222{ 223 return -ENOTSUPP; 224} 225 226static inline void dev_pm_opp_of_cpumask_remove_table(const struct cpumask *cpumask) 227{ 228} 229 230static inline int dev_pm_opp_of_get_sharing_cpus(struct device *cpu_dev, struct cpumask *cpumask) 231{ 232 return -ENOTSUPP; 233} 234#endif 235 236#endif /* __LINUX_OPP_H__ */