]>
Commit | Line | Data |
---|---|---|
e1f60b29 NM |
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> | |
03ca370f | 18 | #include <linux/notifier.h> |
e1f60b29 | 19 | |
47d43ba7 | 20 | struct dev_pm_opp; |
313162d0 | 21 | struct device; |
91291d9a | 22 | struct opp_table; |
e1f60b29 | 23 | |
47d43ba7 | 24 | enum dev_pm_opp_event { |
129eec55 | 25 | OPP_EVENT_ADD, OPP_EVENT_REMOVE, OPP_EVENT_ENABLE, OPP_EVENT_DISABLE, |
03ca370f MH |
26 | }; |
27 | ||
e1f60b29 NM |
28 | #if defined(CONFIG_PM_OPP) |
29 | ||
47d43ba7 | 30 | unsigned long dev_pm_opp_get_voltage(struct dev_pm_opp *opp); |
e1f60b29 | 31 | |
47d43ba7 | 32 | unsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp); |
e1f60b29 | 33 | |
19445b25 BZ |
34 | bool dev_pm_opp_is_turbo(struct dev_pm_opp *opp); |
35 | ||
5d4879cd | 36 | int dev_pm_opp_get_opp_count(struct device *dev); |
3ca9bb33 | 37 | unsigned long dev_pm_opp_get_max_clock_latency(struct device *dev); |
655c9df9 | 38 | unsigned long dev_pm_opp_get_max_volt_latency(struct device *dev); |
21743447 | 39 | unsigned long dev_pm_opp_get_max_transition_latency(struct device *dev); |
4eafbd15 | 40 | struct dev_pm_opp *dev_pm_opp_get_suspend_opp(struct device *dev); |
e1f60b29 | 41 | |
47d43ba7 NM |
42 | struct dev_pm_opp *dev_pm_opp_find_freq_exact(struct device *dev, |
43 | unsigned long freq, | |
44 | bool available); | |
e1f60b29 | 45 | |
47d43ba7 NM |
46 | struct dev_pm_opp *dev_pm_opp_find_freq_floor(struct device *dev, |
47 | unsigned long *freq); | |
e1f60b29 | 48 | |
47d43ba7 NM |
49 | struct dev_pm_opp *dev_pm_opp_find_freq_ceil(struct device *dev, |
50 | unsigned long *freq); | |
e1f60b29 | 51 | |
5d4879cd NM |
52 | int dev_pm_opp_add(struct device *dev, unsigned long freq, |
53 | unsigned long u_volt); | |
129eec55 | 54 | void dev_pm_opp_remove(struct device *dev, unsigned long freq); |
e1f60b29 | 55 | |
5d4879cd | 56 | int dev_pm_opp_enable(struct device *dev, unsigned long freq); |
e1f60b29 | 57 | |
5d4879cd | 58 | int dev_pm_opp_disable(struct device *dev, unsigned long freq); |
e1f60b29 | 59 | |
5d4879cd | 60 | struct srcu_notifier_head *dev_pm_opp_get_notifier(struct device *dev); |
7de36b0a VK |
61 | int dev_pm_opp_set_supported_hw(struct device *dev, const u32 *versions, |
62 | unsigned int count); | |
63 | void dev_pm_opp_put_supported_hw(struct device *dev); | |
01fb4d3c VK |
64 | int dev_pm_opp_set_prop_name(struct device *dev, const char *name); |
65 | void dev_pm_opp_put_prop_name(struct device *dev); | |
91291d9a SB |
66 | struct opp_table *dev_pm_opp_set_regulator(struct device *dev, const char *name); |
67 | void dev_pm_opp_put_regulator(struct opp_table *opp_table); | |
6a0712f6 | 68 | int dev_pm_opp_set_rate(struct device *dev, unsigned long target_freq); |
ddbb74bc AB |
69 | int dev_pm_opp_set_sharing_cpus(struct device *cpu_dev, const struct cpumask *cpumask); |
70 | int dev_pm_opp_get_sharing_cpus(struct device *cpu_dev, struct cpumask *cpumask); | |
411466c5 SH |
71 | void dev_pm_opp_remove_table(struct device *dev); |
72 | void dev_pm_opp_cpumask_remove_table(const struct cpumask *cpumask); | |
e1f60b29 | 73 | #else |
47d43ba7 | 74 | static inline unsigned long dev_pm_opp_get_voltage(struct dev_pm_opp *opp) |
e1f60b29 NM |
75 | { |
76 | return 0; | |
77 | } | |
78 | ||
47d43ba7 | 79 | static inline unsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp) |
e1f60b29 NM |
80 | { |
81 | return 0; | |
82 | } | |
83 | ||
19445b25 BZ |
84 | static inline bool dev_pm_opp_is_turbo(struct dev_pm_opp *opp) |
85 | { | |
86 | return false; | |
87 | } | |
88 | ||
5d4879cd | 89 | static inline int dev_pm_opp_get_opp_count(struct device *dev) |
e1f60b29 NM |
90 | { |
91 | return 0; | |
92 | } | |
93 | ||
3ca9bb33 VK |
94 | static inline unsigned long dev_pm_opp_get_max_clock_latency(struct device *dev) |
95 | { | |
96 | return 0; | |
97 | } | |
98 | ||
655c9df9 VK |
99 | static inline unsigned long dev_pm_opp_get_max_volt_latency(struct device *dev) |
100 | { | |
101 | return 0; | |
102 | } | |
103 | ||
21743447 VK |
104 | static inline unsigned long dev_pm_opp_get_max_transition_latency(struct device *dev) |
105 | { | |
106 | return 0; | |
107 | } | |
108 | ||
4eafbd15 BZ |
109 | static inline struct dev_pm_opp *dev_pm_opp_get_suspend_opp(struct device *dev) |
110 | { | |
111 | return NULL; | |
112 | } | |
113 | ||
47d43ba7 | 114 | static inline struct dev_pm_opp *dev_pm_opp_find_freq_exact(struct device *dev, |
e1f60b29 NM |
115 | unsigned long freq, bool available) |
116 | { | |
d708b384 | 117 | return ERR_PTR(-ENOTSUPP); |
e1f60b29 NM |
118 | } |
119 | ||
47d43ba7 | 120 | static inline struct dev_pm_opp *dev_pm_opp_find_freq_floor(struct device *dev, |
e1f60b29 NM |
121 | unsigned long *freq) |
122 | { | |
d708b384 | 123 | return ERR_PTR(-ENOTSUPP); |
e1f60b29 NM |
124 | } |
125 | ||
47d43ba7 | 126 | static inline struct dev_pm_opp *dev_pm_opp_find_freq_ceil(struct device *dev, |
e1f60b29 NM |
127 | unsigned long *freq) |
128 | { | |
d708b384 | 129 | return ERR_PTR(-ENOTSUPP); |
e1f60b29 NM |
130 | } |
131 | ||
5d4879cd | 132 | static inline int dev_pm_opp_add(struct device *dev, unsigned long freq, |
e1f60b29 NM |
133 | unsigned long u_volt) |
134 | { | |
d708b384 | 135 | return -ENOTSUPP; |
e1f60b29 NM |
136 | } |
137 | ||
129eec55 VK |
138 | static inline void dev_pm_opp_remove(struct device *dev, unsigned long freq) |
139 | { | |
140 | } | |
141 | ||
5d4879cd | 142 | static inline int dev_pm_opp_enable(struct device *dev, unsigned long freq) |
e1f60b29 NM |
143 | { |
144 | return 0; | |
145 | } | |
146 | ||
5d4879cd | 147 | static inline int dev_pm_opp_disable(struct device *dev, unsigned long freq) |
e1f60b29 NM |
148 | { |
149 | return 0; | |
150 | } | |
03ca370f | 151 | |
5d4879cd NM |
152 | static inline struct srcu_notifier_head *dev_pm_opp_get_notifier( |
153 | struct device *dev) | |
03ca370f | 154 | { |
d708b384 | 155 | return ERR_PTR(-ENOTSUPP); |
03ca370f | 156 | } |
7de36b0a VK |
157 | |
158 | static inline int dev_pm_opp_set_supported_hw(struct device *dev, | |
159 | const u32 *versions, | |
160 | unsigned int count) | |
161 | { | |
d708b384 | 162 | return -ENOTSUPP; |
7de36b0a VK |
163 | } |
164 | ||
165 | static inline void dev_pm_opp_put_supported_hw(struct device *dev) {} | |
166 | ||
01fb4d3c VK |
167 | static inline int dev_pm_opp_set_prop_name(struct device *dev, const char *name) |
168 | { | |
d708b384 | 169 | return -ENOTSUPP; |
01fb4d3c VK |
170 | } |
171 | ||
172 | static inline void dev_pm_opp_put_prop_name(struct device *dev) {} | |
173 | ||
91291d9a | 174 | static inline struct opp_table *dev_pm_opp_set_regulator(struct device *dev, const char *name) |
9f8ea969 | 175 | { |
91291d9a | 176 | return ERR_PTR(-ENOTSUPP); |
9f8ea969 VK |
177 | } |
178 | ||
91291d9a | 179 | static inline void dev_pm_opp_put_regulator(struct opp_table *opp_table) {} |
9f8ea969 | 180 | |
6a0712f6 VK |
181 | static inline int dev_pm_opp_set_rate(struct device *dev, unsigned long target_freq) |
182 | { | |
d708b384 | 183 | return -ENOTSUPP; |
6a0712f6 VK |
184 | } |
185 | ||
ddbb74bc | 186 | static inline int dev_pm_opp_set_sharing_cpus(struct device *cpu_dev, const struct cpumask *cpumask) |
642aa8ce | 187 | { |
d708b384 | 188 | return -ENOTSUPP; |
642aa8ce VK |
189 | } |
190 | ||
ddbb74bc | 191 | static inline int dev_pm_opp_get_sharing_cpus(struct device *cpu_dev, struct cpumask *cpumask) |
6f707daa VK |
192 | { |
193 | return -EINVAL; | |
194 | } | |
195 | ||
411466c5 SH |
196 | static inline void dev_pm_opp_remove_table(struct device *dev) |
197 | { | |
198 | } | |
199 | ||
200 | static inline void dev_pm_opp_cpumask_remove_table(const struct cpumask *cpumask) | |
201 | { | |
202 | } | |
203 | ||
a96d69d1 | 204 | #endif /* CONFIG_PM_OPP */ |
e1f60b29 | 205 | |
d6561bb2 | 206 | #if defined(CONFIG_PM_OPP) && defined(CONFIG_OF) |
8f8d37b2 VK |
207 | int dev_pm_opp_of_add_table(struct device *dev); |
208 | void dev_pm_opp_of_remove_table(struct device *dev); | |
ddbb74bc AB |
209 | int dev_pm_opp_of_cpumask_add_table(const struct cpumask *cpumask); |
210 | void dev_pm_opp_of_cpumask_remove_table(const struct cpumask *cpumask); | |
211 | int dev_pm_opp_of_get_sharing_cpus(struct device *cpu_dev, struct cpumask *cpumask); | |
d6561bb2 | 212 | #else |
8f8d37b2 | 213 | static inline int dev_pm_opp_of_add_table(struct device *dev) |
d6561bb2 | 214 | { |
d708b384 | 215 | return -ENOTSUPP; |
d6561bb2 | 216 | } |
129eec55 | 217 | |
8f8d37b2 | 218 | static inline void dev_pm_opp_of_remove_table(struct device *dev) |
129eec55 VK |
219 | { |
220 | } | |
8d4d4e98 | 221 | |
ddbb74bc | 222 | static inline int dev_pm_opp_of_cpumask_add_table(const struct cpumask *cpumask) |
8d4d4e98 | 223 | { |
d708b384 | 224 | return -ENOTSUPP; |
8d4d4e98 VK |
225 | } |
226 | ||
ddbb74bc | 227 | static inline void dev_pm_opp_of_cpumask_remove_table(const struct cpumask *cpumask) |
8d4d4e98 VK |
228 | { |
229 | } | |
230 | ||
ddbb74bc | 231 | static inline int dev_pm_opp_of_get_sharing_cpus(struct device *cpu_dev, struct cpumask *cpumask) |
8d4d4e98 | 232 | { |
d708b384 | 233 | return -ENOTSUPP; |
8d4d4e98 | 234 | } |
d6561bb2 SG |
235 | #endif |
236 | ||
e1f60b29 | 237 | #endif /* __LINUX_OPP_H__ */ |