]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blame - include/linux/pm_opp.h
PM / OPP: Disable OPPs that aren't supported by the regulator
[mirror_ubuntu-artful-kernel.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);
4eafbd15 37struct dev_pm_opp *dev_pm_opp_get_suspend_opp(struct device *dev);
e1f60b29 38
47d43ba7
NM
39struct dev_pm_opp *dev_pm_opp_find_freq_exact(struct device *dev,
40 unsigned long freq,
41 bool available);
e1f60b29 42
47d43ba7
NM
43struct dev_pm_opp *dev_pm_opp_find_freq_floor(struct device *dev,
44 unsigned long *freq);
e1f60b29 45
47d43ba7
NM
46struct dev_pm_opp *dev_pm_opp_find_freq_ceil(struct device *dev,
47 unsigned long *freq);
e1f60b29 48
5d4879cd
NM
49int dev_pm_opp_add(struct device *dev, unsigned long freq,
50 unsigned long u_volt);
129eec55 51void dev_pm_opp_remove(struct device *dev, unsigned long freq);
e1f60b29 52
5d4879cd 53int dev_pm_opp_enable(struct device *dev, unsigned long freq);
e1f60b29 54
5d4879cd 55int dev_pm_opp_disable(struct device *dev, unsigned long freq);
e1f60b29 56
5d4879cd 57struct srcu_notifier_head *dev_pm_opp_get_notifier(struct device *dev);
7de36b0a
VK
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);
01fb4d3c
VK
61int dev_pm_opp_set_prop_name(struct device *dev, const char *name);
62void dev_pm_opp_put_prop_name(struct device *dev);
9f8ea969
VK
63int dev_pm_opp_set_regulator(struct device *dev, const char *name);
64void dev_pm_opp_put_regulator(struct device *dev);
e1f60b29 65#else
47d43ba7 66static inline unsigned long dev_pm_opp_get_voltage(struct dev_pm_opp *opp)
e1f60b29
NM
67{
68 return 0;
69}
70
47d43ba7 71static inline unsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp)
e1f60b29
NM
72{
73 return 0;
74}
75
19445b25
BZ
76static inline bool dev_pm_opp_is_turbo(struct dev_pm_opp *opp)
77{
78 return false;
79}
80
5d4879cd 81static inline int dev_pm_opp_get_opp_count(struct device *dev)
e1f60b29
NM
82{
83 return 0;
84}
85
3ca9bb33
VK
86static inline unsigned long dev_pm_opp_get_max_clock_latency(struct device *dev)
87{
88 return 0;
89}
90
4eafbd15
BZ
91static inline struct dev_pm_opp *dev_pm_opp_get_suspend_opp(struct device *dev)
92{
93 return NULL;
94}
95
47d43ba7 96static inline struct dev_pm_opp *dev_pm_opp_find_freq_exact(struct device *dev,
e1f60b29
NM
97 unsigned long freq, bool available)
98{
99 return ERR_PTR(-EINVAL);
100}
101
47d43ba7 102static inline struct dev_pm_opp *dev_pm_opp_find_freq_floor(struct device *dev,
e1f60b29
NM
103 unsigned long *freq)
104{
105 return ERR_PTR(-EINVAL);
106}
107
47d43ba7 108static inline struct dev_pm_opp *dev_pm_opp_find_freq_ceil(struct device *dev,
e1f60b29
NM
109 unsigned long *freq)
110{
111 return ERR_PTR(-EINVAL);
112}
113
5d4879cd 114static inline int dev_pm_opp_add(struct device *dev, unsigned long freq,
e1f60b29
NM
115 unsigned long u_volt)
116{
117 return -EINVAL;
118}
119
129eec55
VK
120static inline void dev_pm_opp_remove(struct device *dev, unsigned long freq)
121{
122}
123
5d4879cd 124static inline int dev_pm_opp_enable(struct device *dev, unsigned long freq)
e1f60b29
NM
125{
126 return 0;
127}
128
5d4879cd 129static inline int dev_pm_opp_disable(struct device *dev, unsigned long freq)
e1f60b29
NM
130{
131 return 0;
132}
03ca370f 133
5d4879cd
NM
134static inline struct srcu_notifier_head *dev_pm_opp_get_notifier(
135 struct device *dev)
03ca370f
MH
136{
137 return ERR_PTR(-EINVAL);
138}
7de36b0a
VK
139
140static inline int dev_pm_opp_set_supported_hw(struct device *dev,
141 const u32 *versions,
142 unsigned int count)
143{
144 return -EINVAL;
145}
146
147static inline void dev_pm_opp_put_supported_hw(struct device *dev) {}
148
01fb4d3c
VK
149static inline int dev_pm_opp_set_prop_name(struct device *dev, const char *name)
150{
151 return -EINVAL;
152}
153
154static inline void dev_pm_opp_put_prop_name(struct device *dev) {}
155
9f8ea969
VK
156static inline int dev_pm_opp_set_regulator(struct device *dev, const char *name)
157{
158 return -EINVAL;
159}
160
161static inline void dev_pm_opp_put_regulator(struct device *dev) {}
162
a96d69d1 163#endif /* CONFIG_PM_OPP */
e1f60b29 164
d6561bb2 165#if defined(CONFIG_PM_OPP) && defined(CONFIG_OF)
8f8d37b2
VK
166int dev_pm_opp_of_add_table(struct device *dev);
167void dev_pm_opp_of_remove_table(struct device *dev);
168int dev_pm_opp_of_cpumask_add_table(cpumask_var_t cpumask);
169void dev_pm_opp_of_cpumask_remove_table(cpumask_var_t cpumask);
170int dev_pm_opp_of_get_sharing_cpus(struct device *cpu_dev, cpumask_var_t cpumask);
171int dev_pm_opp_set_sharing_cpus(struct device *cpu_dev, cpumask_var_t cpumask);
d6561bb2 172#else
8f8d37b2 173static inline int dev_pm_opp_of_add_table(struct device *dev)
d6561bb2
SG
174{
175 return -EINVAL;
176}
129eec55 177
8f8d37b2 178static inline void dev_pm_opp_of_remove_table(struct device *dev)
129eec55
VK
179{
180}
8d4d4e98 181
8f8d37b2 182static inline int dev_pm_opp_of_cpumask_add_table(cpumask_var_t cpumask)
8d4d4e98
VK
183{
184 return -ENOSYS;
185}
186
8f8d37b2 187static inline void dev_pm_opp_of_cpumask_remove_table(cpumask_var_t cpumask)
8d4d4e98
VK
188{
189}
190
8f8d37b2 191static inline int dev_pm_opp_of_get_sharing_cpus(struct device *cpu_dev, cpumask_var_t cpumask)
8d4d4e98
VK
192{
193 return -ENOSYS;
194}
195
8f8d37b2 196static inline int dev_pm_opp_set_sharing_cpus(struct device *cpu_dev, cpumask_var_t cpumask)
8d4d4e98
VK
197{
198 return -ENOSYS;
199}
d6561bb2
SG
200#endif
201
e1f60b29 202#endif /* __LINUX_OPP_H__ */