This source file includes following definitions.
- _of_init_opp_table
- _of_clear_opp_table
- _managed_opp
- _of_opp_free_required_opps
- opp_debug_remove_one
- opp_debug_create_one
- opp_debug_register
- opp_debug_unregister
1
2
3
4
5
6
7
8
9
10
11 #ifndef __DRIVER_OPP_H__
12 #define __DRIVER_OPP_H__
13
14 #include <linux/device.h>
15 #include <linux/kernel.h>
16 #include <linux/kref.h>
17 #include <linux/list.h>
18 #include <linux/limits.h>
19 #include <linux/pm_opp.h>
20 #include <linux/notifier.h>
21
22 struct clk;
23 struct regulator;
24
25
26 extern struct mutex opp_table_lock;
27
28 extern struct list_head opp_tables;
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71 struct dev_pm_opp {
72 struct list_head node;
73 struct kref kref;
74
75 bool available;
76 bool dynamic;
77 bool turbo;
78 bool suspend;
79 unsigned int pstate;
80 unsigned long rate;
81 unsigned int level;
82
83 struct dev_pm_opp_supply *supplies;
84
85 unsigned long clock_latency_ns;
86
87 struct dev_pm_opp **required_opps;
88 struct opp_table *opp_table;
89
90 struct device_node *np;
91
92 #ifdef CONFIG_DEBUG_FS
93 struct dentry *dentry;
94 #endif
95 };
96
97
98
99
100
101
102
103
104
105
106 struct opp_device {
107 struct list_head node;
108 const struct device *dev;
109
110 #ifdef CONFIG_DEBUG_FS
111 struct dentry *dentry;
112 #endif
113 };
114
115 enum opp_table_access {
116 OPP_TABLE_ACCESS_UNKNOWN = 0,
117 OPP_TABLE_ACCESS_EXCLUSIVE = 1,
118 OPP_TABLE_ACCESS_SHARED = 2,
119 };
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163 struct opp_table {
164 struct list_head node;
165
166 struct blocking_notifier_head head;
167 struct list_head dev_list;
168 struct list_head opp_list;
169 struct kref kref;
170 struct kref list_kref;
171 struct mutex lock;
172
173 struct device_node *np;
174 unsigned long clock_latency_ns_max;
175
176
177 unsigned int voltage_tolerance_v1;
178
179 bool parsed_static_opps;
180 enum opp_table_access shared_opp;
181 struct dev_pm_opp *suspend_opp;
182
183 struct mutex genpd_virt_dev_lock;
184 struct device **genpd_virt_devs;
185 struct opp_table **required_opp_tables;
186 unsigned int required_opp_count;
187
188 unsigned int *supported_hw;
189 unsigned int supported_hw_count;
190 const char *prop_name;
191 struct clk *clk;
192 struct regulator **regulators;
193 int regulator_count;
194 bool genpd_performance_state;
195 bool is_genpd;
196
197 int (*set_opp)(struct dev_pm_set_opp_data *data);
198 struct dev_pm_set_opp_data *set_opp_data;
199
200 #ifdef CONFIG_DEBUG_FS
201 struct dentry *dentry;
202 char dentry_name[NAME_MAX];
203 #endif
204 };
205
206
207 void dev_pm_opp_get(struct dev_pm_opp *opp);
208 void _opp_remove_all_static(struct opp_table *opp_table);
209 void _get_opp_table_kref(struct opp_table *opp_table);
210 int _get_opp_count(struct opp_table *opp_table);
211 struct opp_table *_find_opp_table(struct device *dev);
212 struct opp_device *_add_opp_dev(const struct device *dev, struct opp_table *opp_table);
213 void _dev_pm_opp_find_and_remove_table(struct device *dev);
214 struct dev_pm_opp *_opp_allocate(struct opp_table *opp_table);
215 void _opp_free(struct dev_pm_opp *opp);
216 int _opp_add(struct device *dev, struct dev_pm_opp *new_opp, struct opp_table *opp_table, bool rate_not_available);
217 int _opp_add_v1(struct opp_table *opp_table, struct device *dev, unsigned long freq, long u_volt, bool dynamic);
218 void _dev_pm_opp_cpumask_remove_table(const struct cpumask *cpumask, int last_cpu);
219 struct opp_table *_add_opp_table(struct device *dev);
220 void _put_opp_list_kref(struct opp_table *opp_table);
221
222 #ifdef CONFIG_OF
223 void _of_init_opp_table(struct opp_table *opp_table, struct device *dev, int index);
224 void _of_clear_opp_table(struct opp_table *opp_table);
225 struct opp_table *_managed_opp(struct device *dev, int index);
226 void _of_opp_free_required_opps(struct opp_table *opp_table,
227 struct dev_pm_opp *opp);
228 #else
229 static inline void _of_init_opp_table(struct opp_table *opp_table, struct device *dev, int index) {}
230 static inline void _of_clear_opp_table(struct opp_table *opp_table) {}
231 static inline struct opp_table *_managed_opp(struct device *dev, int index) { return NULL; }
232 static inline void _of_opp_free_required_opps(struct opp_table *opp_table,
233 struct dev_pm_opp *opp) {}
234 #endif
235
236 #ifdef CONFIG_DEBUG_FS
237 void opp_debug_remove_one(struct dev_pm_opp *opp);
238 void opp_debug_create_one(struct dev_pm_opp *opp, struct opp_table *opp_table);
239 void opp_debug_register(struct opp_device *opp_dev, struct opp_table *opp_table);
240 void opp_debug_unregister(struct opp_device *opp_dev, struct opp_table *opp_table);
241 #else
242 static inline void opp_debug_remove_one(struct dev_pm_opp *opp) {}
243
244 static inline void opp_debug_create_one(struct dev_pm_opp *opp,
245 struct opp_table *opp_table) { }
246
247 static inline void opp_debug_register(struct opp_device *opp_dev,
248 struct opp_table *opp_table) { }
249
250 static inline void opp_debug_unregister(struct opp_device *opp_dev,
251 struct opp_table *opp_table)
252 { }
253 #endif
254
255 #endif