Merge branch 'keys-sig' into keys-next
[deliverable/linux.git] / include / linux / pm_opp.h
CommitLineData
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 20struct dev_pm_opp;
313162d0 21struct device;
e1f60b29 22
47d43ba7 23enum dev_pm_opp_event {
129eec55 24 OPP_EVENT_ADD, OPP_EVENT_REMOVE, OPP_EVENT_ENABLE, OPP_EVENT_DISABLE,
03ca370f
MH
25};
26
e1f60b29
NM
27#if defined(CONFIG_PM_OPP)
28
47d43ba7 29unsigned long dev_pm_opp_get_voltage(struct dev_pm_opp *opp);
e1f60b29 30
47d43ba7 31unsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp);
e1f60b29 32
19445b25
BZ
33bool dev_pm_opp_is_turbo(struct dev_pm_opp *opp);
34
5d4879cd 35int dev_pm_opp_get_opp_count(struct device *dev);
3ca9bb33 36unsigned long dev_pm_opp_get_max_clock_latency(struct device *dev);
655c9df9 37unsigned long dev_pm_opp_get_max_volt_latency(struct device *dev);
21743447 38unsigned long dev_pm_opp_get_max_transition_latency(struct device *dev);
4eafbd15 39struct dev_pm_opp *dev_pm_opp_get_suspend_opp(struct device *dev);
e1f60b29 40
47d43ba7
NM
41struct dev_pm_opp *dev_pm_opp_find_freq_exact(struct device *dev,
42 unsigned long freq,
43 bool available);
e1f60b29 44
47d43ba7
NM
45struct dev_pm_opp *dev_pm_opp_find_freq_floor(struct device *dev,
46 unsigned long *freq);
e1f60b29 47
47d43ba7
NM
48struct dev_pm_opp *dev_pm_opp_find_freq_ceil(struct device *dev,
49 unsigned long *freq);
e1f60b29 50
5d4879cd
NM
51int dev_pm_opp_add(struct device *dev, unsigned long freq,
52 unsigned long u_volt);
129eec55 53void dev_pm_opp_remove(struct device *dev, unsigned long freq);
e1f60b29 54
5d4879cd 55int dev_pm_opp_enable(struct device *dev, unsigned long freq);
e1f60b29 56
5d4879cd 57int dev_pm_opp_disable(struct device *dev, unsigned long freq);
e1f60b29 58
5d4879cd 59struct srcu_notifier_head *dev_pm_opp_get_notifier(struct device *dev);
7de36b0a
VK
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);
01fb4d3c
VK
63int dev_pm_opp_set_prop_name(struct device *dev, const char *name);
64void dev_pm_opp_put_prop_name(struct device *dev);
9f8ea969
VK
65int dev_pm_opp_set_regulator(struct device *dev, const char *name);
66void dev_pm_opp_put_regulator(struct device *dev);
6a0712f6 67int dev_pm_opp_set_rate(struct device *dev, unsigned long target_freq);
e1f60b29 68#else
47d43ba7 69static inline unsigned long dev_pm_opp_get_voltage(struct dev_pm_opp *opp)
e1f60b29
NM
70{
71 return 0;
72}
73
47d43ba7 74static inline unsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp)
e1f60b29
NM
75{
76 return 0;
77}
78
19445b25
BZ
79static inline bool dev_pm_opp_is_turbo(struct dev_pm_opp *opp)
80{
81 return false;
82}
83
5d4879cd 84static inline int dev_pm_opp_get_opp_count(struct device *dev)
e1f60b29
NM
85{
86 return 0;
87}
88
3ca9bb33
VK
89static inline unsigned long dev_pm_opp_get_max_clock_latency(struct device *dev)
90{
91 return 0;
92}
93
655c9df9
VK
94static inline unsigned long dev_pm_opp_get_max_volt_latency(struct device *dev)
95{
96 return 0;
97}
98
21743447
VK
99static inline unsigned long dev_pm_opp_get_max_transition_latency(struct device *dev)
100{
101 return 0;
102}
103
4eafbd15
BZ
104static inline struct dev_pm_opp *dev_pm_opp_get_suspend_opp(struct device *dev)
105{
106 return NULL;
107}
108
47d43ba7 109static inline struct dev_pm_opp *dev_pm_opp_find_freq_exact(struct device *dev,
e1f60b29
NM
110 unsigned long freq, bool available)
111{
112 return ERR_PTR(-EINVAL);
113}
114
47d43ba7 115static inline struct dev_pm_opp *dev_pm_opp_find_freq_floor(struct device *dev,
e1f60b29
NM
116 unsigned long *freq)
117{
118 return ERR_PTR(-EINVAL);
119}
120
47d43ba7 121static inline struct dev_pm_opp *dev_pm_opp_find_freq_ceil(struct device *dev,
e1f60b29
NM
122 unsigned long *freq)
123{
124 return ERR_PTR(-EINVAL);
125}
126
5d4879cd 127static inline int dev_pm_opp_add(struct device *dev, unsigned long freq,
e1f60b29
NM
128 unsigned long u_volt)
129{
130 return -EINVAL;
131}
132
129eec55
VK
133static inline void dev_pm_opp_remove(struct device *dev, unsigned long freq)
134{
135}
136
5d4879cd 137static inline int dev_pm_opp_enable(struct device *dev, unsigned long freq)
e1f60b29
NM
138{
139 return 0;
140}
141
5d4879cd 142static inline int dev_pm_opp_disable(struct device *dev, unsigned long freq)
e1f60b29
NM
143{
144 return 0;
145}
03ca370f 146
5d4879cd
NM
147static inline struct srcu_notifier_head *dev_pm_opp_get_notifier(
148 struct device *dev)
03ca370f
MH
149{
150 return ERR_PTR(-EINVAL);
151}
7de36b0a
VK
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
01fb4d3c
VK
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
9f8ea969
VK
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
6a0712f6
VK
176static inline int dev_pm_opp_set_rate(struct device *dev, unsigned long target_freq)
177{
178 return -EINVAL;
179}
180
a96d69d1 181#endif /* CONFIG_PM_OPP */
e1f60b29 182
d6561bb2 183#if defined(CONFIG_PM_OPP) && defined(CONFIG_OF)
8f8d37b2
VK
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);
d6561bb2 190#else
8f8d37b2 191static inline int dev_pm_opp_of_add_table(struct device *dev)
d6561bb2
SG
192{
193 return -EINVAL;
194}
129eec55 195
8f8d37b2 196static inline void dev_pm_opp_of_remove_table(struct device *dev)
129eec55
VK
197{
198}
8d4d4e98 199
8f8d37b2 200static inline int dev_pm_opp_of_cpumask_add_table(cpumask_var_t cpumask)
8d4d4e98
VK
201{
202 return -ENOSYS;
203}
204
8f8d37b2 205static inline void dev_pm_opp_of_cpumask_remove_table(cpumask_var_t cpumask)
8d4d4e98
VK
206{
207}
208
8f8d37b2 209static inline int dev_pm_opp_of_get_sharing_cpus(struct device *cpu_dev, cpumask_var_t cpumask)
8d4d4e98
VK
210{
211 return -ENOSYS;
212}
213
8f8d37b2 214static inline int dev_pm_opp_set_sharing_cpus(struct device *cpu_dev, cpumask_var_t cpumask)
8d4d4e98
VK
215{
216 return -ENOSYS;
217}
d6561bb2
SG
218#endif
219
e1f60b29 220#endif /* __LINUX_OPP_H__ */
This page took 0.441368 seconds and 5 git commands to generate.