at v4.6 5.7 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); 68#else 69static inline unsigned long dev_pm_opp_get_voltage(struct dev_pm_opp *opp) 70{ 71 return 0; 72} 73 74static inline unsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp) 75{ 76 return 0; 77} 78 79static inline bool dev_pm_opp_is_turbo(struct dev_pm_opp *opp) 80{ 81 return false; 82} 83 84static inline int dev_pm_opp_get_opp_count(struct device *dev) 85{ 86 return 0; 87} 88 89static inline unsigned long dev_pm_opp_get_max_clock_latency(struct device *dev) 90{ 91 return 0; 92} 93 94static inline unsigned long dev_pm_opp_get_max_volt_latency(struct device *dev) 95{ 96 return 0; 97} 98 99static inline unsigned long dev_pm_opp_get_max_transition_latency(struct device *dev) 100{ 101 return 0; 102} 103 104static inline struct dev_pm_opp *dev_pm_opp_get_suspend_opp(struct device *dev) 105{ 106 return NULL; 107} 108 109static inline struct dev_pm_opp *dev_pm_opp_find_freq_exact(struct device *dev, 110 unsigned long freq, bool available) 111{ 112 return ERR_PTR(-EINVAL); 113} 114 115static inline struct dev_pm_opp *dev_pm_opp_find_freq_floor(struct device *dev, 116 unsigned long *freq) 117{ 118 return ERR_PTR(-EINVAL); 119} 120 121static inline struct dev_pm_opp *dev_pm_opp_find_freq_ceil(struct device *dev, 122 unsigned long *freq) 123{ 124 return ERR_PTR(-EINVAL); 125} 126 127static inline int dev_pm_opp_add(struct device *dev, unsigned long freq, 128 unsigned long u_volt) 129{ 130 return -EINVAL; 131} 132 133static inline void dev_pm_opp_remove(struct device *dev, unsigned long freq) 134{ 135} 136 137static inline int dev_pm_opp_enable(struct device *dev, unsigned long freq) 138{ 139 return 0; 140} 141 142static inline int dev_pm_opp_disable(struct device *dev, unsigned long freq) 143{ 144 return 0; 145} 146 147static inline struct srcu_notifier_head *dev_pm_opp_get_notifier( 148 struct device *dev) 149{ 150 return ERR_PTR(-EINVAL); 151} 152 153static inline int dev_pm_opp_set_supported_hw(struct device *dev, 154 const u32 *versions, 155 unsigned int count) 156{ 157 return -EINVAL; 158} 159 160static inline void dev_pm_opp_put_supported_hw(struct device *dev) {} 161 162static inline int dev_pm_opp_set_prop_name(struct device *dev, const char *name) 163{ 164 return -EINVAL; 165} 166 167static inline void dev_pm_opp_put_prop_name(struct device *dev) {} 168 169static inline int dev_pm_opp_set_regulator(struct device *dev, const char *name) 170{ 171 return -EINVAL; 172} 173 174static inline void dev_pm_opp_put_regulator(struct device *dev) {} 175 176static inline int dev_pm_opp_set_rate(struct device *dev, unsigned long target_freq) 177{ 178 return -EINVAL; 179} 180 181#endif /* CONFIG_PM_OPP */ 182 183#if defined(CONFIG_PM_OPP) && defined(CONFIG_OF) 184int dev_pm_opp_of_add_table(struct device *dev); 185void dev_pm_opp_of_remove_table(struct device *dev); 186int dev_pm_opp_of_cpumask_add_table(cpumask_var_t cpumask); 187void dev_pm_opp_of_cpumask_remove_table(cpumask_var_t cpumask); 188int dev_pm_opp_of_get_sharing_cpus(struct device *cpu_dev, cpumask_var_t cpumask); 189int dev_pm_opp_set_sharing_cpus(struct device *cpu_dev, cpumask_var_t cpumask); 190#else 191static inline int dev_pm_opp_of_add_table(struct device *dev) 192{ 193 return -EINVAL; 194} 195 196static inline void dev_pm_opp_of_remove_table(struct device *dev) 197{ 198} 199 200static inline int dev_pm_opp_of_cpumask_add_table(cpumask_var_t cpumask) 201{ 202 return -ENOSYS; 203} 204 205static inline void dev_pm_opp_of_cpumask_remove_table(cpumask_var_t cpumask) 206{ 207} 208 209static inline int dev_pm_opp_of_get_sharing_cpus(struct device *cpu_dev, cpumask_var_t cpumask) 210{ 211 return -ENOSYS; 212} 213 214static inline int dev_pm_opp_set_sharing_cpus(struct device *cpu_dev, cpumask_var_t cpumask) 215{ 216 return -ENOSYS; 217} 218#endif 219 220#endif /* __LINUX_OPP_H__ */