xref: /linux-6.15/include/linux/reset.h (revision f1f99adf)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _LINUX_RESET_H_
3 #define _LINUX_RESET_H_
4 
5 #include <linux/err.h>
6 #include <linux/errno.h>
7 #include <linux/types.h>
8 
9 struct device;
10 struct device_node;
11 struct reset_control;
12 
13 /**
14  * struct reset_control_bulk_data - Data used for bulk reset control operations.
15  *
16  * @id: reset control consumer ID
17  * @rstc: struct reset_control * to store the associated reset control
18  *
19  * The reset APIs provide a series of reset_control_bulk_*() API calls as
20  * a convenience to consumers which require multiple reset controls.
21  * This structure is used to manage data for these calls.
22  */
23 struct reset_control_bulk_data {
24 	const char			*id;
25 	struct reset_control		*rstc;
26 };
27 
28 #ifdef CONFIG_RESET_CONTROLLER
29 
30 int reset_control_reset(struct reset_control *rstc);
31 int reset_control_rearm(struct reset_control *rstc);
32 int reset_control_assert(struct reset_control *rstc);
33 int reset_control_deassert(struct reset_control *rstc);
34 int reset_control_status(struct reset_control *rstc);
35 int reset_control_acquire(struct reset_control *rstc);
36 void reset_control_release(struct reset_control *rstc);
37 
38 int reset_control_bulk_reset(int num_rstcs, struct reset_control_bulk_data *rstcs);
39 int reset_control_bulk_assert(int num_rstcs, struct reset_control_bulk_data *rstcs);
40 int reset_control_bulk_deassert(int num_rstcs, struct reset_control_bulk_data *rstcs);
41 int reset_control_bulk_acquire(int num_rstcs, struct reset_control_bulk_data *rstcs);
42 void reset_control_bulk_release(int num_rstcs, struct reset_control_bulk_data *rstcs);
43 
44 struct reset_control *__of_reset_control_get(struct device_node *node,
45 				     const char *id, int index, bool shared,
46 				     bool optional, bool acquired);
47 struct reset_control *__reset_control_get(struct device *dev, const char *id,
48 					  int index, bool shared,
49 					  bool optional, bool acquired);
50 void reset_control_put(struct reset_control *rstc);
51 int __reset_control_bulk_get(struct device *dev, int num_rstcs,
52 			     struct reset_control_bulk_data *rstcs,
53 			     bool shared, bool optional, bool acquired);
54 void reset_control_bulk_put(int num_rstcs, struct reset_control_bulk_data *rstcs);
55 
56 int __device_reset(struct device *dev, bool optional);
57 struct reset_control *__devm_reset_control_get(struct device *dev,
58 				     const char *id, int index, bool shared,
59 				     bool optional, bool acquired);
60 int __devm_reset_control_bulk_get(struct device *dev, int num_rstcs,
61 				  struct reset_control_bulk_data *rstcs,
62 				  bool shared, bool optional, bool acquired);
63 
64 struct reset_control *devm_reset_control_array_get(struct device *dev,
65 						   bool shared, bool optional);
66 struct reset_control *of_reset_control_array_get(struct device_node *np,
67 						 bool shared, bool optional,
68 						 bool acquired);
69 
70 int reset_control_get_count(struct device *dev);
71 
72 #else
73 
74 static inline int reset_control_reset(struct reset_control *rstc)
75 {
76 	return 0;
77 }
78 
79 static inline int reset_control_assert(struct reset_control *rstc)
80 {
81 	return 0;
82 }
83 
84 static inline int reset_control_deassert(struct reset_control *rstc)
85 {
86 	return 0;
87 }
88 
89 static inline int reset_control_status(struct reset_control *rstc)
90 {
91 	return 0;
92 }
93 
94 static inline int reset_control_acquire(struct reset_control *rstc)
95 {
96 	return 0;
97 }
98 
99 static inline void reset_control_release(struct reset_control *rstc)
100 {
101 }
102 
103 static inline void reset_control_put(struct reset_control *rstc)
104 {
105 }
106 
107 static inline int __device_reset(struct device *dev, bool optional)
108 {
109 	return optional ? 0 : -ENOTSUPP;
110 }
111 
112 static inline struct reset_control *__of_reset_control_get(
113 					struct device_node *node,
114 					const char *id, int index, bool shared,
115 					bool optional, bool acquired)
116 {
117 	return optional ? NULL : ERR_PTR(-ENOTSUPP);
118 }
119 
120 static inline struct reset_control *__reset_control_get(
121 					struct device *dev, const char *id,
122 					int index, bool shared, bool optional,
123 					bool acquired)
124 {
125 	return optional ? NULL : ERR_PTR(-ENOTSUPP);
126 }
127 
128 static inline int
129 reset_control_bulk_reset(int num_rstcs, struct reset_control_bulk_data *rstcs)
130 {
131 	return 0;
132 }
133 
134 static inline int
135 reset_control_bulk_assert(int num_rstcs, struct reset_control_bulk_data *rstcs)
136 {
137 	return 0;
138 }
139 
140 static inline int
141 reset_control_bulk_deassert(int num_rstcs, struct reset_control_bulk_data *rstcs)
142 {
143 	return 0;
144 }
145 
146 static inline int
147 reset_control_bulk_acquire(int num_rstcs, struct reset_control_bulk_data *rstcs)
148 {
149 	return 0;
150 }
151 
152 static inline void
153 reset_control_bulk_release(int num_rstcs, struct reset_control_bulk_data *rstcs)
154 {
155 }
156 
157 static inline int
158 __reset_control_bulk_get(struct device *dev, int num_rstcs,
159 			 struct reset_control_bulk_data *rstcs,
160 			 bool shared, bool optional, bool acquired)
161 {
162 	return optional ? 0 : -EOPNOTSUPP;
163 }
164 
165 static inline void
166 reset_control_bulk_put(int num_rstcs, struct reset_control_bulk_data *rstcs)
167 {
168 }
169 
170 static inline struct reset_control *__devm_reset_control_get(
171 					struct device *dev, const char *id,
172 					int index, bool shared, bool optional,
173 					bool acquired)
174 {
175 	return optional ? NULL : ERR_PTR(-ENOTSUPP);
176 }
177 
178 static inline int
179 __devm_reset_control_bulk_get(struct device *dev, int num_rstcs,
180 			      struct reset_control_bulk_data *rstcs,
181 			      bool shared, bool optional, bool acquired)
182 {
183 	return optional ? 0 : -EOPNOTSUPP;
184 }
185 
186 static inline struct reset_control *
187 devm_reset_control_array_get(struct device *dev, bool shared, bool optional)
188 {
189 	return optional ? NULL : ERR_PTR(-ENOTSUPP);
190 }
191 
192 static inline struct reset_control *
193 of_reset_control_array_get(struct device_node *np, bool shared, bool optional,
194 			   bool acquired)
195 {
196 	return optional ? NULL : ERR_PTR(-ENOTSUPP);
197 }
198 
199 static inline int reset_control_get_count(struct device *dev)
200 {
201 	return -ENOENT;
202 }
203 
204 #endif /* CONFIG_RESET_CONTROLLER */
205 
206 static inline int __must_check device_reset(struct device *dev)
207 {
208 	return __device_reset(dev, false);
209 }
210 
211 static inline int device_reset_optional(struct device *dev)
212 {
213 	return __device_reset(dev, true);
214 }
215 
216 /**
217  * reset_control_get_exclusive - Lookup and obtain an exclusive reference
218  *                               to a reset controller.
219  * @dev: device to be reset by the controller
220  * @id: reset line name
221  *
222  * Returns a struct reset_control or IS_ERR() condition containing errno.
223  * If this function is called more than once for the same reset_control it will
224  * return -EBUSY.
225  *
226  * See reset_control_get_shared() for details on shared references to
227  * reset-controls.
228  *
229  * Use of id names is optional.
230  */
231 static inline struct reset_control *
232 __must_check reset_control_get_exclusive(struct device *dev, const char *id)
233 {
234 	return __reset_control_get(dev, id, 0, false, false, true);
235 }
236 
237 /**
238  * reset_control_bulk_get_exclusive - Lookup and obtain exclusive references to
239  *                                    multiple reset controllers.
240  * @dev: device to be reset by the controller
241  * @num_rstcs: number of entries in rstcs array
242  * @rstcs: array of struct reset_control_bulk_data with reset line names set
243  *
244  * Fills the rstcs array with pointers to exclusive reset controls and
245  * returns 0, or an IS_ERR() condition containing errno.
246  */
247 static inline int __must_check
248 reset_control_bulk_get_exclusive(struct device *dev, int num_rstcs,
249 				 struct reset_control_bulk_data *rstcs)
250 {
251 	return __reset_control_bulk_get(dev, num_rstcs, rstcs, false, false, true);
252 }
253 
254 /**
255  * reset_control_get_exclusive_released - Lookup and obtain a temoprarily
256  *                                        exclusive reference to a reset
257  *                                        controller.
258  * @dev: device to be reset by the controller
259  * @id: reset line name
260  *
261  * Returns a struct reset_control or IS_ERR() condition containing errno.
262  * reset-controls returned by this function must be acquired via
263  * reset_control_acquire() before they can be used and should be released
264  * via reset_control_release() afterwards.
265  *
266  * Use of id names is optional.
267  */
268 static inline struct reset_control *
269 __must_check reset_control_get_exclusive_released(struct device *dev,
270 						  const char *id)
271 {
272 	return __reset_control_get(dev, id, 0, false, false, false);
273 }
274 
275 /**
276  * reset_control_bulk_get_exclusive_released - Lookup and obtain temporarily
277  *                                    exclusive references to multiple reset
278  *                                    controllers.
279  * @dev: device to be reset by the controller
280  * @num_rstcs: number of entries in rstcs array
281  * @rstcs: array of struct reset_control_bulk_data with reset line names set
282  *
283  * Fills the rstcs array with pointers to exclusive reset controls and
284  * returns 0, or an IS_ERR() condition containing errno.
285  * reset-controls returned by this function must be acquired via
286  * reset_control_bulk_acquire() before they can be used and should be released
287  * via reset_control_bulk_release() afterwards.
288  */
289 static inline int __must_check
290 reset_control_bulk_get_exclusive_released(struct device *dev, int num_rstcs,
291 					  struct reset_control_bulk_data *rstcs)
292 {
293 	return __reset_control_bulk_get(dev, num_rstcs, rstcs, false, false, false);
294 }
295 
296 /**
297  * reset_control_bulk_get_optional_exclusive_released - Lookup and obtain optional
298  *                                    temporarily exclusive references to multiple
299  *                                    reset controllers.
300  * @dev: device to be reset by the controller
301  * @num_rstcs: number of entries in rstcs array
302  * @rstcs: array of struct reset_control_bulk_data with reset line names set
303  *
304  * Optional variant of reset_control_bulk_get_exclusive_released(). If the
305  * requested reset is not specified in the device tree, this function returns 0
306  * instead of an error and missing rtsc is set to NULL.
307  *
308  * See reset_control_bulk_get_exclusive_released() for more information.
309  */
310 static inline int __must_check
311 reset_control_bulk_get_optional_exclusive_released(struct device *dev, int num_rstcs,
312 						   struct reset_control_bulk_data *rstcs)
313 {
314 	return __reset_control_bulk_get(dev, num_rstcs, rstcs, false, true, false);
315 }
316 
317 /**
318  * reset_control_get_shared - Lookup and obtain a shared reference to a
319  *                            reset controller.
320  * @dev: device to be reset by the controller
321  * @id: reset line name
322  *
323  * Returns a struct reset_control or IS_ERR() condition containing errno.
324  * This function is intended for use with reset-controls which are shared
325  * between hardware blocks.
326  *
327  * When a reset-control is shared, the behavior of reset_control_assert /
328  * deassert is changed, the reset-core will keep track of a deassert_count
329  * and only (re-)assert the reset after reset_control_assert has been called
330  * as many times as reset_control_deassert was called. Also see the remark
331  * about shared reset-controls in the reset_control_assert docs.
332  *
333  * Calling reset_control_assert without first calling reset_control_deassert
334  * is not allowed on a shared reset control. Calling reset_control_reset is
335  * also not allowed on a shared reset control.
336  *
337  * Use of id names is optional.
338  */
339 static inline struct reset_control *reset_control_get_shared(
340 					struct device *dev, const char *id)
341 {
342 	return __reset_control_get(dev, id, 0, true, false, false);
343 }
344 
345 /**
346  * reset_control_bulk_get_shared - Lookup and obtain shared references to
347  *                                 multiple reset controllers.
348  * @dev: device to be reset by the controller
349  * @num_rstcs: number of entries in rstcs array
350  * @rstcs: array of struct reset_control_bulk_data with reset line names set
351  *
352  * Fills the rstcs array with pointers to shared reset controls and
353  * returns 0, or an IS_ERR() condition containing errno.
354  */
355 static inline int __must_check
356 reset_control_bulk_get_shared(struct device *dev, int num_rstcs,
357 			      struct reset_control_bulk_data *rstcs)
358 {
359 	return __reset_control_bulk_get(dev, num_rstcs, rstcs, true, false, false);
360 }
361 
362 /**
363  * reset_control_get_optional_exclusive - optional reset_control_get_exclusive()
364  * @dev: device to be reset by the controller
365  * @id: reset line name
366  *
367  * Optional variant of reset_control_get_exclusive(). If the requested reset
368  * is not specified in the device tree, this function returns NULL instead of
369  * an error.
370  *
371  * See reset_control_get_exclusive() for more information.
372  */
373 static inline struct reset_control *reset_control_get_optional_exclusive(
374 					struct device *dev, const char *id)
375 {
376 	return __reset_control_get(dev, id, 0, false, true, true);
377 }
378 
379 /**
380  * reset_control_bulk_get_optional_exclusive - optional
381  *                                             reset_control_bulk_get_exclusive()
382  * @dev: device to be reset by the controller
383  * @num_rstcs: number of entries in rstcs array
384  * @rstcs: array of struct reset_control_bulk_data with reset line names set
385  *
386  * Optional variant of reset_control_bulk_get_exclusive(). If any of the
387  * requested resets are not specified in the device tree, this function sets
388  * them to NULL instead of returning an error.
389  *
390  * See reset_control_bulk_get_exclusive() for more information.
391  */
392 static inline int __must_check
393 reset_control_bulk_get_optional_exclusive(struct device *dev, int num_rstcs,
394 					  struct reset_control_bulk_data *rstcs)
395 {
396 	return __reset_control_bulk_get(dev, num_rstcs, rstcs, false, true, true);
397 }
398 
399 /**
400  * reset_control_get_optional_shared - optional reset_control_get_shared()
401  * @dev: device to be reset by the controller
402  * @id: reset line name
403  *
404  * Optional variant of reset_control_get_shared(). If the requested reset
405  * is not specified in the device tree, this function returns NULL instead of
406  * an error.
407  *
408  * See reset_control_get_shared() for more information.
409  */
410 static inline struct reset_control *reset_control_get_optional_shared(
411 					struct device *dev, const char *id)
412 {
413 	return __reset_control_get(dev, id, 0, true, true, false);
414 }
415 
416 /**
417  * reset_control_bulk_get_optional_shared - optional
418  *                                             reset_control_bulk_get_shared()
419  * @dev: device to be reset by the controller
420  * @num_rstcs: number of entries in rstcs array
421  * @rstcs: array of struct reset_control_bulk_data with reset line names set
422  *
423  * Optional variant of reset_control_bulk_get_shared(). If the requested resets
424  * are not specified in the device tree, this function sets them to NULL
425  * instead of returning an error.
426  *
427  * See reset_control_bulk_get_shared() for more information.
428  */
429 static inline int __must_check
430 reset_control_bulk_get_optional_shared(struct device *dev, int num_rstcs,
431 				       struct reset_control_bulk_data *rstcs)
432 {
433 	return __reset_control_bulk_get(dev, num_rstcs, rstcs, true, true, false);
434 }
435 
436 /**
437  * of_reset_control_get_exclusive - Lookup and obtain an exclusive reference
438  *                                  to a reset controller.
439  * @node: device to be reset by the controller
440  * @id: reset line name
441  *
442  * Returns a struct reset_control or IS_ERR() condition containing errno.
443  *
444  * Use of id names is optional.
445  */
446 static inline struct reset_control *of_reset_control_get_exclusive(
447 				struct device_node *node, const char *id)
448 {
449 	return __of_reset_control_get(node, id, 0, false, false, true);
450 }
451 
452 /**
453  * of_reset_control_get_shared - Lookup and obtain a shared reference
454  *                               to a reset controller.
455  * @node: device to be reset by the controller
456  * @id: reset line name
457  *
458  * When a reset-control is shared, the behavior of reset_control_assert /
459  * deassert is changed, the reset-core will keep track of a deassert_count
460  * and only (re-)assert the reset after reset_control_assert has been called
461  * as many times as reset_control_deassert was called. Also see the remark
462  * about shared reset-controls in the reset_control_assert docs.
463  *
464  * Calling reset_control_assert without first calling reset_control_deassert
465  * is not allowed on a shared reset control. Calling reset_control_reset is
466  * also not allowed on a shared reset control.
467  * Returns a struct reset_control or IS_ERR() condition containing errno.
468  *
469  * Use of id names is optional.
470  */
471 static inline struct reset_control *of_reset_control_get_shared(
472 				struct device_node *node, const char *id)
473 {
474 	return __of_reset_control_get(node, id, 0, true, false, false);
475 }
476 
477 /**
478  * of_reset_control_get_exclusive_by_index - Lookup and obtain an exclusive
479  *                                           reference to a reset controller
480  *                                           by index.
481  * @node: device to be reset by the controller
482  * @index: index of the reset controller
483  *
484  * This is to be used to perform a list of resets for a device or power domain
485  * in whatever order. Returns a struct reset_control or IS_ERR() condition
486  * containing errno.
487  */
488 static inline struct reset_control *of_reset_control_get_exclusive_by_index(
489 					struct device_node *node, int index)
490 {
491 	return __of_reset_control_get(node, NULL, index, false, false, true);
492 }
493 
494 /**
495  * of_reset_control_get_shared_by_index - Lookup and obtain a shared
496  *                                        reference to a reset controller
497  *                                        by index.
498  * @node: device to be reset by the controller
499  * @index: index of the reset controller
500  *
501  * When a reset-control is shared, the behavior of reset_control_assert /
502  * deassert is changed, the reset-core will keep track of a deassert_count
503  * and only (re-)assert the reset after reset_control_assert has been called
504  * as many times as reset_control_deassert was called. Also see the remark
505  * about shared reset-controls in the reset_control_assert docs.
506  *
507  * Calling reset_control_assert without first calling reset_control_deassert
508  * is not allowed on a shared reset control. Calling reset_control_reset is
509  * also not allowed on a shared reset control.
510  * Returns a struct reset_control or IS_ERR() condition containing errno.
511  *
512  * This is to be used to perform a list of resets for a device or power domain
513  * in whatever order. Returns a struct reset_control or IS_ERR() condition
514  * containing errno.
515  */
516 static inline struct reset_control *of_reset_control_get_shared_by_index(
517 					struct device_node *node, int index)
518 {
519 	return __of_reset_control_get(node, NULL, index, true, false, false);
520 }
521 
522 /**
523  * devm_reset_control_get_exclusive - resource managed
524  *                                    reset_control_get_exclusive()
525  * @dev: device to be reset by the controller
526  * @id: reset line name
527  *
528  * Managed reset_control_get_exclusive(). For reset controllers returned
529  * from this function, reset_control_put() is called automatically on driver
530  * detach.
531  *
532  * See reset_control_get_exclusive() for more information.
533  */
534 static inline struct reset_control *
535 __must_check devm_reset_control_get_exclusive(struct device *dev,
536 					      const char *id)
537 {
538 	return __devm_reset_control_get(dev, id, 0, false, false, true);
539 }
540 
541 /**
542  * devm_reset_control_bulk_get_exclusive - resource managed
543  *                                         reset_control_bulk_get_exclusive()
544  * @dev: device to be reset by the controller
545  * @num_rstcs: number of entries in rstcs array
546  * @rstcs: array of struct reset_control_bulk_data with reset line names set
547  *
548  * Managed reset_control_bulk_get_exclusive(). For reset controllers returned
549  * from this function, reset_control_put() is called automatically on driver
550  * detach.
551  *
552  * See reset_control_bulk_get_exclusive() for more information.
553  */
554 static inline int __must_check
555 devm_reset_control_bulk_get_exclusive(struct device *dev, int num_rstcs,
556 				      struct reset_control_bulk_data *rstcs)
557 {
558 	return __devm_reset_control_bulk_get(dev, num_rstcs, rstcs, false, false, true);
559 }
560 
561 /**
562  * devm_reset_control_get_exclusive_released - resource managed
563  *                                             reset_control_get_exclusive_released()
564  * @dev: device to be reset by the controller
565  * @id: reset line name
566  *
567  * Managed reset_control_get_exclusive_released(). For reset controllers
568  * returned from this function, reset_control_put() is called automatically on
569  * driver detach.
570  *
571  * See reset_control_get_exclusive_released() for more information.
572  */
573 static inline struct reset_control *
574 __must_check devm_reset_control_get_exclusive_released(struct device *dev,
575 						       const char *id)
576 {
577 	return __devm_reset_control_get(dev, id, 0, false, false, false);
578 }
579 
580 /**
581  * devm_reset_control_bulk_get_exclusive_released - resource managed
582  *                                                  reset_control_bulk_get_exclusive_released()
583  * @dev: device to be reset by the controller
584  * @num_rstcs: number of entries in rstcs array
585  * @rstcs: array of struct reset_control_bulk_data with reset line names set
586  *
587  * Managed reset_control_bulk_get_exclusive_released(). For reset controllers
588  * returned from this function, reset_control_put() is called automatically on
589  * driver detach.
590  *
591  * See reset_control_bulk_get_exclusive_released() for more information.
592  */
593 static inline int __must_check
594 devm_reset_control_bulk_get_exclusive_released(struct device *dev, int num_rstcs,
595 					       struct reset_control_bulk_data *rstcs)
596 {
597 	return __devm_reset_control_bulk_get(dev, num_rstcs, rstcs, false, false, false);
598 }
599 
600 /**
601  * devm_reset_control_get_optional_exclusive_released - resource managed
602  *                                                      reset_control_get_optional_exclusive_released()
603  * @dev: device to be reset by the controller
604  * @id: reset line name
605  *
606  * Managed-and-optional variant of reset_control_get_exclusive_released(). For
607  * reset controllers returned from this function, reset_control_put() is called
608  * automatically on driver detach.
609  *
610  * See reset_control_get_exclusive_released() for more information.
611  */
612 static inline struct reset_control *
613 __must_check devm_reset_control_get_optional_exclusive_released(struct device *dev,
614 								const char *id)
615 {
616 	return __devm_reset_control_get(dev, id, 0, false, true, false);
617 }
618 
619 /**
620  * devm_reset_control_bulk_get_optional_exclusive_released - resource managed
621  *                                                           reset_control_bulk_optional_get_exclusive_released()
622  * @dev: device to be reset by the controller
623  * @num_rstcs: number of entries in rstcs array
624  * @rstcs: array of struct reset_control_bulk_data with reset line names set
625  *
626  * Managed reset_control_bulk_optional_get_exclusive_released(). For reset
627  * controllers returned from this function, reset_control_put() is called
628  * automatically on driver detach.
629  *
630  * See reset_control_bulk_optional_get_exclusive_released() for more information.
631  */
632 static inline int __must_check
633 devm_reset_control_bulk_get_optional_exclusive_released(struct device *dev, int num_rstcs,
634 							struct reset_control_bulk_data *rstcs)
635 {
636 	return __devm_reset_control_bulk_get(dev, num_rstcs, rstcs, false, true, false);
637 }
638 
639 /**
640  * devm_reset_control_get_shared - resource managed reset_control_get_shared()
641  * @dev: device to be reset by the controller
642  * @id: reset line name
643  *
644  * Managed reset_control_get_shared(). For reset controllers returned from
645  * this function, reset_control_put() is called automatically on driver detach.
646  * See reset_control_get_shared() for more information.
647  */
648 static inline struct reset_control *devm_reset_control_get_shared(
649 					struct device *dev, const char *id)
650 {
651 	return __devm_reset_control_get(dev, id, 0, true, false, false);
652 }
653 
654 /**
655  * devm_reset_control_bulk_get_shared - resource managed
656  *                                      reset_control_bulk_get_shared()
657  * @dev: device to be reset by the controller
658  * @num_rstcs: number of entries in rstcs array
659  * @rstcs: array of struct reset_control_bulk_data with reset line names set
660  *
661  * Managed reset_control_bulk_get_shared(). For reset controllers returned
662  * from this function, reset_control_put() is called automatically on driver
663  * detach.
664  *
665  * See reset_control_bulk_get_shared() for more information.
666  */
667 static inline int __must_check
668 devm_reset_control_bulk_get_shared(struct device *dev, int num_rstcs,
669 				   struct reset_control_bulk_data *rstcs)
670 {
671 	return __devm_reset_control_bulk_get(dev, num_rstcs, rstcs, true, false, false);
672 }
673 
674 /**
675  * devm_reset_control_get_optional_exclusive - resource managed
676  *                                             reset_control_get_optional_exclusive()
677  * @dev: device to be reset by the controller
678  * @id: reset line name
679  *
680  * Managed reset_control_get_optional_exclusive(). For reset controllers
681  * returned from this function, reset_control_put() is called automatically on
682  * driver detach.
683  *
684  * See reset_control_get_optional_exclusive() for more information.
685  */
686 static inline struct reset_control *devm_reset_control_get_optional_exclusive(
687 					struct device *dev, const char *id)
688 {
689 	return __devm_reset_control_get(dev, id, 0, false, true, true);
690 }
691 
692 /**
693  * devm_reset_control_bulk_get_optional_exclusive - resource managed
694  *                                                  reset_control_bulk_get_optional_exclusive()
695  * @dev: device to be reset by the controller
696  * @num_rstcs: number of entries in rstcs array
697  * @rstcs: array of struct reset_control_bulk_data with reset line names set
698  *
699  * Managed reset_control_bulk_get_optional_exclusive(). For reset controllers
700  * returned from this function, reset_control_put() is called automatically on
701  * driver detach.
702  *
703  * See reset_control_bulk_get_optional_exclusive() for more information.
704  */
705 static inline int __must_check
706 devm_reset_control_bulk_get_optional_exclusive(struct device *dev, int num_rstcs,
707 					       struct reset_control_bulk_data *rstcs)
708 {
709 	return __devm_reset_control_bulk_get(dev, num_rstcs, rstcs, true, false, true);
710 }
711 
712 /**
713  * devm_reset_control_get_optional_shared - resource managed
714  *                                          reset_control_get_optional_shared()
715  * @dev: device to be reset by the controller
716  * @id: reset line name
717  *
718  * Managed reset_control_get_optional_shared(). For reset controllers returned
719  * from this function, reset_control_put() is called automatically on driver
720  * detach.
721  *
722  * See reset_control_get_optional_shared() for more information.
723  */
724 static inline struct reset_control *devm_reset_control_get_optional_shared(
725 					struct device *dev, const char *id)
726 {
727 	return __devm_reset_control_get(dev, id, 0, true, true, false);
728 }
729 
730 /**
731  * devm_reset_control_bulk_get_optional_shared - resource managed
732  *                                               reset_control_bulk_get_optional_shared()
733  * @dev: device to be reset by the controller
734  * @num_rstcs: number of entries in rstcs array
735  * @rstcs: array of struct reset_control_bulk_data with reset line names set
736  *
737  * Managed reset_control_bulk_get_optional_shared(). For reset controllers
738  * returned from this function, reset_control_put() is called automatically on
739  * driver detach.
740  *
741  * See reset_control_bulk_get_optional_shared() for more information.
742  */
743 static inline int __must_check
744 devm_reset_control_bulk_get_optional_shared(struct device *dev, int num_rstcs,
745 					    struct reset_control_bulk_data *rstcs)
746 {
747 	return __devm_reset_control_bulk_get(dev, num_rstcs, rstcs, true, true, false);
748 }
749 
750 /**
751  * devm_reset_control_get_exclusive_by_index - resource managed
752  *                                             reset_control_get_exclusive()
753  * @dev: device to be reset by the controller
754  * @index: index of the reset controller
755  *
756  * Managed reset_control_get_exclusive(). For reset controllers returned from
757  * this function, reset_control_put() is called automatically on driver
758  * detach.
759  *
760  * See reset_control_get_exclusive() for more information.
761  */
762 static inline struct reset_control *
763 devm_reset_control_get_exclusive_by_index(struct device *dev, int index)
764 {
765 	return __devm_reset_control_get(dev, NULL, index, false, false, true);
766 }
767 
768 /**
769  * devm_reset_control_get_shared_by_index - resource managed
770  *                                          reset_control_get_shared
771  * @dev: device to be reset by the controller
772  * @index: index of the reset controller
773  *
774  * Managed reset_control_get_shared(). For reset controllers returned from
775  * this function, reset_control_put() is called automatically on driver detach.
776  * See reset_control_get_shared() for more information.
777  */
778 static inline struct reset_control *
779 devm_reset_control_get_shared_by_index(struct device *dev, int index)
780 {
781 	return __devm_reset_control_get(dev, NULL, index, true, false, false);
782 }
783 
784 /*
785  * TEMPORARY calls to use during transition:
786  *
787  *   of_reset_control_get() => of_reset_control_get_exclusive()
788  *
789  * These inline function calls will be removed once all consumers
790  * have been moved over to the new explicit API.
791  */
792 static inline struct reset_control *of_reset_control_get(
793 				struct device_node *node, const char *id)
794 {
795 	return of_reset_control_get_exclusive(node, id);
796 }
797 
798 static inline struct reset_control *of_reset_control_get_by_index(
799 				struct device_node *node, int index)
800 {
801 	return of_reset_control_get_exclusive_by_index(node, index);
802 }
803 
804 static inline struct reset_control *devm_reset_control_get(
805 				struct device *dev, const char *id)
806 {
807 	return devm_reset_control_get_exclusive(dev, id);
808 }
809 
810 static inline struct reset_control *devm_reset_control_get_optional(
811 				struct device *dev, const char *id)
812 {
813 	return devm_reset_control_get_optional_exclusive(dev, id);
814 
815 }
816 
817 static inline struct reset_control *devm_reset_control_get_by_index(
818 				struct device *dev, int index)
819 {
820 	return devm_reset_control_get_exclusive_by_index(dev, index);
821 }
822 
823 /*
824  * APIs to manage a list of reset controllers
825  */
826 static inline struct reset_control *
827 devm_reset_control_array_get_exclusive(struct device *dev)
828 {
829 	return devm_reset_control_array_get(dev, false, false);
830 }
831 
832 static inline struct reset_control *
833 devm_reset_control_array_get_shared(struct device *dev)
834 {
835 	return devm_reset_control_array_get(dev, true, false);
836 }
837 
838 static inline struct reset_control *
839 devm_reset_control_array_get_optional_exclusive(struct device *dev)
840 {
841 	return devm_reset_control_array_get(dev, false, true);
842 }
843 
844 static inline struct reset_control *
845 devm_reset_control_array_get_optional_shared(struct device *dev)
846 {
847 	return devm_reset_control_array_get(dev, true, true);
848 }
849 
850 static inline struct reset_control *
851 of_reset_control_array_get_exclusive(struct device_node *node)
852 {
853 	return of_reset_control_array_get(node, false, false, true);
854 }
855 
856 static inline struct reset_control *
857 of_reset_control_array_get_exclusive_released(struct device_node *node)
858 {
859 	return of_reset_control_array_get(node, false, false, false);
860 }
861 
862 static inline struct reset_control *
863 of_reset_control_array_get_shared(struct device_node *node)
864 {
865 	return of_reset_control_array_get(node, true, false, true);
866 }
867 
868 static inline struct reset_control *
869 of_reset_control_array_get_optional_exclusive(struct device_node *node)
870 {
871 	return of_reset_control_array_get(node, false, true, true);
872 }
873 
874 static inline struct reset_control *
875 of_reset_control_array_get_optional_shared(struct device_node *node)
876 {
877 	return of_reset_control_array_get(node, true, true, true);
878 }
879 #endif
880