at v4.5 4.9 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); 37struct dev_pm_opp *dev_pm_opp_get_suspend_opp(struct device *dev); 38 39struct dev_pm_opp *dev_pm_opp_find_freq_exact(struct device *dev, 40 unsigned long freq, 41 bool available); 42 43struct dev_pm_opp *dev_pm_opp_find_freq_floor(struct device *dev, 44 unsigned long *freq); 45 46struct dev_pm_opp *dev_pm_opp_find_freq_ceil(struct device *dev, 47 unsigned long *freq); 48 49int dev_pm_opp_add(struct device *dev, unsigned long freq, 50 unsigned long u_volt); 51void dev_pm_opp_remove(struct device *dev, unsigned long freq); 52 53int dev_pm_opp_enable(struct device *dev, unsigned long freq); 54 55int dev_pm_opp_disable(struct device *dev, unsigned long freq); 56 57struct srcu_notifier_head *dev_pm_opp_get_notifier(struct device *dev); 58int dev_pm_opp_set_supported_hw(struct device *dev, const u32 *versions, 59 unsigned int count); 60void dev_pm_opp_put_supported_hw(struct device *dev); 61int dev_pm_opp_set_prop_name(struct device *dev, const char *name); 62void dev_pm_opp_put_prop_name(struct device *dev); 63#else 64static inline unsigned long dev_pm_opp_get_voltage(struct dev_pm_opp *opp) 65{ 66 return 0; 67} 68 69static inline unsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp) 70{ 71 return 0; 72} 73 74static inline bool dev_pm_opp_is_turbo(struct dev_pm_opp *opp) 75{ 76 return false; 77} 78 79static inline int dev_pm_opp_get_opp_count(struct device *dev) 80{ 81 return 0; 82} 83 84static inline unsigned long dev_pm_opp_get_max_clock_latency(struct device *dev) 85{ 86 return 0; 87} 88 89static inline struct dev_pm_opp *dev_pm_opp_get_suspend_opp(struct device *dev) 90{ 91 return NULL; 92} 93 94static inline struct dev_pm_opp *dev_pm_opp_find_freq_exact(struct device *dev, 95 unsigned long freq, bool available) 96{ 97 return ERR_PTR(-EINVAL); 98} 99 100static inline struct dev_pm_opp *dev_pm_opp_find_freq_floor(struct device *dev, 101 unsigned long *freq) 102{ 103 return ERR_PTR(-EINVAL); 104} 105 106static inline struct dev_pm_opp *dev_pm_opp_find_freq_ceil(struct device *dev, 107 unsigned long *freq) 108{ 109 return ERR_PTR(-EINVAL); 110} 111 112static inline int dev_pm_opp_add(struct device *dev, unsigned long freq, 113 unsigned long u_volt) 114{ 115 return -EINVAL; 116} 117 118static inline void dev_pm_opp_remove(struct device *dev, unsigned long freq) 119{ 120} 121 122static inline int dev_pm_opp_enable(struct device *dev, unsigned long freq) 123{ 124 return 0; 125} 126 127static inline int dev_pm_opp_disable(struct device *dev, unsigned long freq) 128{ 129 return 0; 130} 131 132static inline struct srcu_notifier_head *dev_pm_opp_get_notifier( 133 struct device *dev) 134{ 135 return ERR_PTR(-EINVAL); 136} 137 138static inline int dev_pm_opp_set_supported_hw(struct device *dev, 139 const u32 *versions, 140 unsigned int count) 141{ 142 return -EINVAL; 143} 144 145static inline void dev_pm_opp_put_supported_hw(struct device *dev) {} 146 147static inline int dev_pm_opp_set_prop_name(struct device *dev, const char *name) 148{ 149 return -EINVAL; 150} 151 152static inline void dev_pm_opp_put_prop_name(struct device *dev) {} 153 154#endif /* CONFIG_PM_OPP */ 155 156#if defined(CONFIG_PM_OPP) && defined(CONFIG_OF) 157int dev_pm_opp_of_add_table(struct device *dev); 158void dev_pm_opp_of_remove_table(struct device *dev); 159int dev_pm_opp_of_cpumask_add_table(cpumask_var_t cpumask); 160void dev_pm_opp_of_cpumask_remove_table(cpumask_var_t cpumask); 161int dev_pm_opp_of_get_sharing_cpus(struct device *cpu_dev, cpumask_var_t cpumask); 162int dev_pm_opp_set_sharing_cpus(struct device *cpu_dev, cpumask_var_t cpumask); 163#else 164static inline int dev_pm_opp_of_add_table(struct device *dev) 165{ 166 return -EINVAL; 167} 168 169static inline void dev_pm_opp_of_remove_table(struct device *dev) 170{ 171} 172 173static inline int dev_pm_opp_of_cpumask_add_table(cpumask_var_t cpumask) 174{ 175 return -ENOSYS; 176} 177 178static inline void dev_pm_opp_of_cpumask_remove_table(cpumask_var_t cpumask) 179{ 180} 181 182static inline int dev_pm_opp_of_get_sharing_cpus(struct device *cpu_dev, cpumask_var_t cpumask) 183{ 184 return -ENOSYS; 185} 186 187static inline int dev_pm_opp_set_sharing_cpus(struct device *cpu_dev, cpumask_var_t cpumask) 188{ 189 return -ENOSYS; 190} 191#endif 192 193#endif /* __LINUX_OPP_H__ */