Merge tag 'for-linus-5.1a-rc1-tag' of git://git.kernel.org/pub/scm/linux/kernel/git...
[sfrench/cifs-2.6.git] / include / linux / reset.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _LINUX_RESET_H_
3 #define _LINUX_RESET_H_
4
5 #include <linux/types.h>
6
7 struct device;
8 struct device_node;
9 struct reset_control;
10
11 #ifdef CONFIG_RESET_CONTROLLER
12
13 int reset_control_reset(struct reset_control *rstc);
14 int reset_control_assert(struct reset_control *rstc);
15 int reset_control_deassert(struct reset_control *rstc);
16 int reset_control_status(struct reset_control *rstc);
17
18 struct reset_control *__of_reset_control_get(struct device_node *node,
19                                      const char *id, int index, bool shared,
20                                      bool optional);
21 struct reset_control *__reset_control_get(struct device *dev, const char *id,
22                                           int index, bool shared,
23                                           bool optional);
24 void reset_control_put(struct reset_control *rstc);
25 int __device_reset(struct device *dev, bool optional);
26 struct reset_control *__devm_reset_control_get(struct device *dev,
27                                      const char *id, int index, bool shared,
28                                      bool optional);
29
30 struct reset_control *devm_reset_control_array_get(struct device *dev,
31                                                    bool shared, bool optional);
32 struct reset_control *of_reset_control_array_get(struct device_node *np,
33                                                  bool shared, bool optional);
34
35 int reset_control_get_count(struct device *dev);
36
37 #else
38
39 static inline int reset_control_reset(struct reset_control *rstc)
40 {
41         return 0;
42 }
43
44 static inline int reset_control_assert(struct reset_control *rstc)
45 {
46         return 0;
47 }
48
49 static inline int reset_control_deassert(struct reset_control *rstc)
50 {
51         return 0;
52 }
53
54 static inline int reset_control_status(struct reset_control *rstc)
55 {
56         return 0;
57 }
58
59 static inline void reset_control_put(struct reset_control *rstc)
60 {
61 }
62
63 static inline int __device_reset(struct device *dev, bool optional)
64 {
65         return optional ? 0 : -ENOTSUPP;
66 }
67
68 static inline struct reset_control *__of_reset_control_get(
69                                         struct device_node *node,
70                                         const char *id, int index, bool shared,
71                                         bool optional)
72 {
73         return optional ? NULL : ERR_PTR(-ENOTSUPP);
74 }
75
76 static inline struct reset_control *__reset_control_get(
77                                         struct device *dev, const char *id,
78                                         int index, bool shared, bool optional)
79 {
80         return optional ? NULL : ERR_PTR(-ENOTSUPP);
81 }
82
83 static inline struct reset_control *__devm_reset_control_get(
84                                         struct device *dev, const char *id,
85                                         int index, bool shared, bool optional)
86 {
87         return optional ? NULL : ERR_PTR(-ENOTSUPP);
88 }
89
90 static inline struct reset_control *
91 devm_reset_control_array_get(struct device *dev, bool shared, bool optional)
92 {
93         return optional ? NULL : ERR_PTR(-ENOTSUPP);
94 }
95
96 static inline struct reset_control *
97 of_reset_control_array_get(struct device_node *np, bool shared, bool optional)
98 {
99         return optional ? NULL : ERR_PTR(-ENOTSUPP);
100 }
101
102 static inline int reset_control_get_count(struct device *dev)
103 {
104         return -ENOENT;
105 }
106
107 #endif /* CONFIG_RESET_CONTROLLER */
108
109 static inline int __must_check device_reset(struct device *dev)
110 {
111         return __device_reset(dev, false);
112 }
113
114 static inline int device_reset_optional(struct device *dev)
115 {
116         return __device_reset(dev, true);
117 }
118
119 /**
120  * reset_control_get_exclusive - Lookup and obtain an exclusive reference
121  *                               to a reset controller.
122  * @dev: device to be reset by the controller
123  * @id: reset line name
124  *
125  * Returns a struct reset_control or IS_ERR() condition containing errno.
126  * If this function is called more than once for the same reset_control it will
127  * return -EBUSY.
128  *
129  * See reset_control_get_shared for details on shared references to
130  * reset-controls.
131  *
132  * Use of id names is optional.
133  */
134 static inline struct reset_control *
135 __must_check reset_control_get_exclusive(struct device *dev, const char *id)
136 {
137         return __reset_control_get(dev, id, 0, false, false);
138 }
139
140 /**
141  * reset_control_get_shared - Lookup and obtain a shared reference to a
142  *                            reset controller.
143  * @dev: device to be reset by the controller
144  * @id: reset line name
145  *
146  * Returns a struct reset_control or IS_ERR() condition containing errno.
147  * This function is intended for use with reset-controls which are shared
148  * between hardware blocks.
149  *
150  * When a reset-control is shared, the behavior of reset_control_assert /
151  * deassert is changed, the reset-core will keep track of a deassert_count
152  * and only (re-)assert the reset after reset_control_assert has been called
153  * as many times as reset_control_deassert was called. Also see the remark
154  * about shared reset-controls in the reset_control_assert docs.
155  *
156  * Calling reset_control_assert without first calling reset_control_deassert
157  * is not allowed on a shared reset control. Calling reset_control_reset is
158  * also not allowed on a shared reset control.
159  *
160  * Use of id names is optional.
161  */
162 static inline struct reset_control *reset_control_get_shared(
163                                         struct device *dev, const char *id)
164 {
165         return __reset_control_get(dev, id, 0, true, false);
166 }
167
168 static inline struct reset_control *reset_control_get_optional_exclusive(
169                                         struct device *dev, const char *id)
170 {
171         return __reset_control_get(dev, id, 0, false, true);
172 }
173
174 static inline struct reset_control *reset_control_get_optional_shared(
175                                         struct device *dev, const char *id)
176 {
177         return __reset_control_get(dev, id, 0, true, true);
178 }
179
180 /**
181  * of_reset_control_get_exclusive - Lookup and obtain an exclusive reference
182  *                                  to a reset controller.
183  * @node: device to be reset by the controller
184  * @id: reset line name
185  *
186  * Returns a struct reset_control or IS_ERR() condition containing errno.
187  *
188  * Use of id names is optional.
189  */
190 static inline struct reset_control *of_reset_control_get_exclusive(
191                                 struct device_node *node, const char *id)
192 {
193         return __of_reset_control_get(node, id, 0, false, false);
194 }
195
196 /**
197  * of_reset_control_get_shared - Lookup and obtain a shared reference
198  *                               to a reset controller.
199  * @node: device to be reset by the controller
200  * @id: reset line name
201  *
202  * When a reset-control is shared, the behavior of reset_control_assert /
203  * deassert is changed, the reset-core will keep track of a deassert_count
204  * and only (re-)assert the reset after reset_control_assert has been called
205  * as many times as reset_control_deassert was called. Also see the remark
206  * about shared reset-controls in the reset_control_assert docs.
207  *
208  * Calling reset_control_assert without first calling reset_control_deassert
209  * is not allowed on a shared reset control. Calling reset_control_reset is
210  * also not allowed on a shared reset control.
211  * Returns a struct reset_control or IS_ERR() condition containing errno.
212  *
213  * Use of id names is optional.
214  */
215 static inline struct reset_control *of_reset_control_get_shared(
216                                 struct device_node *node, const char *id)
217 {
218         return __of_reset_control_get(node, id, 0, true, false);
219 }
220
221 /**
222  * of_reset_control_get_exclusive_by_index - Lookup and obtain an exclusive
223  *                                           reference to a reset controller
224  *                                           by index.
225  * @node: device to be reset by the controller
226  * @index: index of the reset controller
227  *
228  * This is to be used to perform a list of resets for a device or power domain
229  * in whatever order. Returns a struct reset_control or IS_ERR() condition
230  * containing errno.
231  */
232 static inline struct reset_control *of_reset_control_get_exclusive_by_index(
233                                         struct device_node *node, int index)
234 {
235         return __of_reset_control_get(node, NULL, index, false, false);
236 }
237
238 /**
239  * of_reset_control_get_shared_by_index - Lookup and obtain a shared
240  *                                        reference to a reset controller
241  *                                        by index.
242  * @node: device to be reset by the controller
243  * @index: index of the reset controller
244  *
245  * When a reset-control is shared, the behavior of reset_control_assert /
246  * deassert is changed, the reset-core will keep track of a deassert_count
247  * and only (re-)assert the reset after reset_control_assert has been called
248  * as many times as reset_control_deassert was called. Also see the remark
249  * about shared reset-controls in the reset_control_assert docs.
250  *
251  * Calling reset_control_assert without first calling reset_control_deassert
252  * is not allowed on a shared reset control. Calling reset_control_reset is
253  * also not allowed on a shared reset control.
254  * Returns a struct reset_control or IS_ERR() condition containing errno.
255  *
256  * This is to be used to perform a list of resets for a device or power domain
257  * in whatever order. Returns a struct reset_control or IS_ERR() condition
258  * containing errno.
259  */
260 static inline struct reset_control *of_reset_control_get_shared_by_index(
261                                         struct device_node *node, int index)
262 {
263         return __of_reset_control_get(node, NULL, index, true, false);
264 }
265
266 /**
267  * devm_reset_control_get_exclusive - resource managed
268  *                                    reset_control_get_exclusive()
269  * @dev: device to be reset by the controller
270  * @id: reset line name
271  *
272  * Managed reset_control_get_exclusive(). For reset controllers returned
273  * from this function, reset_control_put() is called automatically on driver
274  * detach.
275  *
276  * See reset_control_get_exclusive() for more information.
277  */
278 static inline struct reset_control *
279 __must_check devm_reset_control_get_exclusive(struct device *dev,
280                                               const char *id)
281 {
282         return __devm_reset_control_get(dev, id, 0, false, false);
283 }
284
285 /**
286  * devm_reset_control_get_shared - resource managed reset_control_get_shared()
287  * @dev: device to be reset by the controller
288  * @id: reset line name
289  *
290  * Managed reset_control_get_shared(). For reset controllers returned from
291  * this function, reset_control_put() is called automatically on driver detach.
292  * See reset_control_get_shared() for more information.
293  */
294 static inline struct reset_control *devm_reset_control_get_shared(
295                                         struct device *dev, const char *id)
296 {
297         return __devm_reset_control_get(dev, id, 0, true, false);
298 }
299
300 static inline struct reset_control *devm_reset_control_get_optional_exclusive(
301                                         struct device *dev, const char *id)
302 {
303         return __devm_reset_control_get(dev, id, 0, false, true);
304 }
305
306 static inline struct reset_control *devm_reset_control_get_optional_shared(
307                                         struct device *dev, const char *id)
308 {
309         return __devm_reset_control_get(dev, id, 0, true, true);
310 }
311
312 /**
313  * devm_reset_control_get_exclusive_by_index - resource managed
314  *                                             reset_control_get_exclusive()
315  * @dev: device to be reset by the controller
316  * @index: index of the reset controller
317  *
318  * Managed reset_control_get_exclusive(). For reset controllers returned from
319  * this function, reset_control_put() is called automatically on driver
320  * detach.
321  *
322  * See reset_control_get_exclusive() for more information.
323  */
324 static inline struct reset_control *
325 devm_reset_control_get_exclusive_by_index(struct device *dev, int index)
326 {
327         return __devm_reset_control_get(dev, NULL, index, false, false);
328 }
329
330 /**
331  * devm_reset_control_get_shared_by_index - resource managed
332  *                                          reset_control_get_shared
333  * @dev: device to be reset by the controller
334  * @index: index of the reset controller
335  *
336  * Managed reset_control_get_shared(). For reset controllers returned from
337  * this function, reset_control_put() is called automatically on driver detach.
338  * See reset_control_get_shared() for more information.
339  */
340 static inline struct reset_control *
341 devm_reset_control_get_shared_by_index(struct device *dev, int index)
342 {
343         return __devm_reset_control_get(dev, NULL, index, true, false);
344 }
345
346 /*
347  * TEMPORARY calls to use during transition:
348  *
349  *   of_reset_control_get() => of_reset_control_get_exclusive()
350  *
351  * These inline function calls will be removed once all consumers
352  * have been moved over to the new explicit API.
353  */
354 static inline struct reset_control *of_reset_control_get(
355                                 struct device_node *node, const char *id)
356 {
357         return of_reset_control_get_exclusive(node, id);
358 }
359
360 static inline struct reset_control *of_reset_control_get_by_index(
361                                 struct device_node *node, int index)
362 {
363         return of_reset_control_get_exclusive_by_index(node, index);
364 }
365
366 static inline struct reset_control *devm_reset_control_get(
367                                 struct device *dev, const char *id)
368 {
369         return devm_reset_control_get_exclusive(dev, id);
370 }
371
372 static inline struct reset_control *devm_reset_control_get_optional(
373                                 struct device *dev, const char *id)
374 {
375         return devm_reset_control_get_optional_exclusive(dev, id);
376
377 }
378
379 static inline struct reset_control *devm_reset_control_get_by_index(
380                                 struct device *dev, int index)
381 {
382         return devm_reset_control_get_exclusive_by_index(dev, index);
383 }
384
385 /*
386  * APIs to manage a list of reset controllers
387  */
388 static inline struct reset_control *
389 devm_reset_control_array_get_exclusive(struct device *dev)
390 {
391         return devm_reset_control_array_get(dev, false, false);
392 }
393
394 static inline struct reset_control *
395 devm_reset_control_array_get_shared(struct device *dev)
396 {
397         return devm_reset_control_array_get(dev, true, false);
398 }
399
400 static inline struct reset_control *
401 devm_reset_control_array_get_optional_exclusive(struct device *dev)
402 {
403         return devm_reset_control_array_get(dev, false, true);
404 }
405
406 static inline struct reset_control *
407 devm_reset_control_array_get_optional_shared(struct device *dev)
408 {
409         return devm_reset_control_array_get(dev, true, true);
410 }
411
412 static inline struct reset_control *
413 of_reset_control_array_get_exclusive(struct device_node *node)
414 {
415         return of_reset_control_array_get(node, false, false);
416 }
417
418 static inline struct reset_control *
419 of_reset_control_array_get_shared(struct device_node *node)
420 {
421         return of_reset_control_array_get(node, true, false);
422 }
423
424 static inline struct reset_control *
425 of_reset_control_array_get_optional_exclusive(struct device_node *node)
426 {
427         return of_reset_control_array_get(node, false, true);
428 }
429
430 static inline struct reset_control *
431 of_reset_control_array_get_optional_shared(struct device_node *node)
432 {
433         return of_reset_control_array_get(node, true, true);
434 }
435 #endif