]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blame - include/linux/pm_opp.h
PM / OPP: pass cpumask by reference
[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);
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);
ddbb74bc
AB
68int dev_pm_opp_set_sharing_cpus(struct device *cpu_dev, const struct cpumask *cpumask);
69int dev_pm_opp_get_sharing_cpus(struct device *cpu_dev, struct cpumask *cpumask);
e1f60b29 70#else
47d43ba7 71static inline unsigned long dev_pm_opp_get_voltage(struct dev_pm_opp *opp)
e1f60b29
NM
72{
73 return 0;
74}
75
47d43ba7 76static inline unsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp)
e1f60b29
NM
77{
78 return 0;
79}
80
19445b25
BZ
81static inline bool dev_pm_opp_is_turbo(struct dev_pm_opp *opp)
82{
83 return false;
84}
85
5d4879cd 86static inline int dev_pm_opp_get_opp_count(struct device *dev)
e1f60b29
NM
87{
88 return 0;
89}
90
3ca9bb33
VK
91static inline unsigned long dev_pm_opp_get_max_clock_latency(struct device *dev)
92{
93 return 0;
94}
95
655c9df9
VK
96static inline unsigned long dev_pm_opp_get_max_volt_latency(struct device *dev)
97{
98 return 0;
99}
100
21743447
VK
101static inline unsigned long dev_pm_opp_get_max_transition_latency(struct device *dev)
102{
103 return 0;
104}
105
4eafbd15
BZ
106static inline struct dev_pm_opp *dev_pm_opp_get_suspend_opp(struct device *dev)
107{
108 return NULL;
109}
110
47d43ba7 111static inline struct dev_pm_opp *dev_pm_opp_find_freq_exact(struct device *dev,
e1f60b29
NM
112 unsigned long freq, bool available)
113{
d708b384 114 return ERR_PTR(-ENOTSUPP);
e1f60b29
NM
115}
116
47d43ba7 117static inline struct dev_pm_opp *dev_pm_opp_find_freq_floor(struct device *dev,
e1f60b29
NM
118 unsigned long *freq)
119{
d708b384 120 return ERR_PTR(-ENOTSUPP);
e1f60b29
NM
121}
122
47d43ba7 123static inline struct dev_pm_opp *dev_pm_opp_find_freq_ceil(struct device *dev,
e1f60b29
NM
124 unsigned long *freq)
125{
d708b384 126 return ERR_PTR(-ENOTSUPP);
e1f60b29
NM
127}
128
5d4879cd 129static inline int dev_pm_opp_add(struct device *dev, unsigned long freq,
e1f60b29
NM
130 unsigned long u_volt)
131{
d708b384 132 return -ENOTSUPP;
e1f60b29
NM
133}
134
129eec55
VK
135static inline void dev_pm_opp_remove(struct device *dev, unsigned long freq)
136{
137}
138
5d4879cd 139static inline int dev_pm_opp_enable(struct device *dev, unsigned long freq)
e1f60b29
NM
140{
141 return 0;
142}
143
5d4879cd 144static inline int dev_pm_opp_disable(struct device *dev, unsigned long freq)
e1f60b29
NM
145{
146 return 0;
147}
03ca370f 148
5d4879cd
NM
149static inline struct srcu_notifier_head *dev_pm_opp_get_notifier(
150 struct device *dev)
03ca370f 151{
d708b384 152 return ERR_PTR(-ENOTSUPP);
03ca370f 153}
7de36b0a
VK
154
155static inline int dev_pm_opp_set_supported_hw(struct device *dev,
156 const u32 *versions,
157 unsigned int count)
158{
d708b384 159 return -ENOTSUPP;
7de36b0a
VK
160}
161
162static inline void dev_pm_opp_put_supported_hw(struct device *dev) {}
163
01fb4d3c
VK
164static inline int dev_pm_opp_set_prop_name(struct device *dev, const char *name)
165{
d708b384 166 return -ENOTSUPP;
01fb4d3c
VK
167}
168
169static inline void dev_pm_opp_put_prop_name(struct device *dev) {}
170
9f8ea969
VK
171static inline int dev_pm_opp_set_regulator(struct device *dev, const char *name)
172{
d708b384 173 return -ENOTSUPP;
9f8ea969
VK
174}
175
176static inline void dev_pm_opp_put_regulator(struct device *dev) {}
177
6a0712f6
VK
178static inline int dev_pm_opp_set_rate(struct device *dev, unsigned long target_freq)
179{
d708b384 180 return -ENOTSUPP;
6a0712f6
VK
181}
182
ddbb74bc 183static inline int dev_pm_opp_set_sharing_cpus(struct device *cpu_dev, const struct cpumask *cpumask)
642aa8ce 184{
d708b384 185 return -ENOTSUPP;
642aa8ce
VK
186}
187
ddbb74bc 188static inline int dev_pm_opp_get_sharing_cpus(struct device *cpu_dev, struct cpumask *cpumask)
6f707daa
VK
189{
190 return -EINVAL;
191}
192
a96d69d1 193#endif /* CONFIG_PM_OPP */
e1f60b29 194
d6561bb2 195#if defined(CONFIG_PM_OPP) && defined(CONFIG_OF)
8f8d37b2
VK
196int dev_pm_opp_of_add_table(struct device *dev);
197void dev_pm_opp_of_remove_table(struct device *dev);
ddbb74bc
AB
198int dev_pm_opp_of_cpumask_add_table(const struct cpumask *cpumask);
199void dev_pm_opp_of_cpumask_remove_table(const struct cpumask *cpumask);
200int dev_pm_opp_of_get_sharing_cpus(struct device *cpu_dev, struct cpumask *cpumask);
d6561bb2 201#else
8f8d37b2 202static inline int dev_pm_opp_of_add_table(struct device *dev)
d6561bb2 203{
d708b384 204 return -ENOTSUPP;
d6561bb2 205}
129eec55 206
8f8d37b2 207static inline void dev_pm_opp_of_remove_table(struct device *dev)
129eec55
VK
208{
209}
8d4d4e98 210
ddbb74bc 211static inline int dev_pm_opp_of_cpumask_add_table(const struct cpumask *cpumask)
8d4d4e98 212{
d708b384 213 return -ENOTSUPP;
8d4d4e98
VK
214}
215
ddbb74bc 216static inline void dev_pm_opp_of_cpumask_remove_table(const struct cpumask *cpumask)
8d4d4e98
VK
217{
218}
219
ddbb74bc 220static inline int dev_pm_opp_of_get_sharing_cpus(struct device *cpu_dev, struct cpumask *cpumask)
8d4d4e98 221{
d708b384 222 return -ENOTSUPP;
8d4d4e98 223}
d6561bb2
SG
224#endif
225
e1f60b29 226#endif /* __LINUX_OPP_H__ */