blob: 05aa9f440f484edcfd4710f050c3d95b8d4ff6c2 [file] [log] [blame]
Greg Kroah-Hartmanb2441312017-11-01 15:07:57 +01001/* SPDX-License-Identifier: GPL-2.0 */
Philipp Zabel61fc4132012-11-19 17:23:13 +01002#ifndef _LINUX_RESET_H_
3#define _LINUX_RESET_H_
4
Randy Dunlapd005aa72019-04-02 08:20:08 -07005#include <linux/err.h>
6#include <linux/errno.h>
Masahiro Yamadadfc1d9b2017-10-29 01:50:08 +09007#include <linux/types.h>
Hans de Goede6c96f052016-02-23 18:46:24 +01008
Masahiro Yamadadfc1d9b2017-10-29 01:50:08 +09009struct device;
10struct device_node;
Philipp Zabel61fc4132012-11-19 17:23:13 +010011struct reset_control;
12
Philipp Zabelb4240802014-03-07 15:18:47 +010013#ifdef CONFIG_RESET_CONTROLLER
14
Philipp Zabel61fc4132012-11-19 17:23:13 +010015int reset_control_reset(struct reset_control *rstc);
16int reset_control_assert(struct reset_control *rstc);
17int reset_control_deassert(struct reset_control *rstc);
Dinh Nguyen729de412014-10-10 10:21:14 -050018int reset_control_status(struct reset_control *rstc);
Philipp Zabelc84b0322019-02-21 16:25:53 +010019int reset_control_acquire(struct reset_control *rstc);
20void reset_control_release(struct reset_control *rstc);
Philipp Zabel61fc4132012-11-19 17:23:13 +010021
Hans de Goede6c96f052016-02-23 18:46:24 +010022struct reset_control *__of_reset_control_get(struct device_node *node,
Ramiro Oliveirabb475232017-01-13 17:57:41 +000023 const char *id, int index, bool shared,
Philipp Zabelc84b0322019-02-21 16:25:53 +010024 bool optional, bool acquired);
Philipp Zabel62e24c52016-02-05 13:41:39 +010025struct reset_control *__reset_control_get(struct device *dev, const char *id,
26 int index, bool shared,
Philipp Zabelc84b0322019-02-21 16:25:53 +010027 bool optional, bool acquired);
Philipp Zabel61fc4132012-11-19 17:23:13 +010028void reset_control_put(struct reset_control *rstc);
Masahiro Yamada1554bbd2017-10-29 01:50:06 +090029int __device_reset(struct device *dev, bool optional);
Hans de Goede6c96f052016-02-23 18:46:24 +010030struct reset_control *__devm_reset_control_get(struct device *dev,
Ramiro Oliveirabb475232017-01-13 17:57:41 +000031 const char *id, int index, bool shared,
Philipp Zabelc84b0322019-02-21 16:25:53 +010032 bool optional, bool acquired);
Philipp Zabel61fc4132012-11-19 17:23:13 +010033
Vivek Gautam17c82e22017-05-22 16:53:25 +053034struct reset_control *devm_reset_control_array_get(struct device *dev,
35 bool shared, bool optional);
36struct reset_control *of_reset_control_array_get(struct device_node *np,
Thierry Redingf31d5c22019-02-21 16:25:54 +010037 bool shared, bool optional,
38 bool acquired);
Vivek Gautam17c82e22017-05-22 16:53:25 +053039
Geert Uytterhoeveneaf91db2018-11-13 13:47:44 +010040int reset_control_get_count(struct device *dev);
41
Philipp Zabelb4240802014-03-07 15:18:47 +010042#else
43
44static inline int reset_control_reset(struct reset_control *rstc)
45{
Philipp Zabelb4240802014-03-07 15:18:47 +010046 return 0;
47}
48
49static inline int reset_control_assert(struct reset_control *rstc)
50{
Philipp Zabelb4240802014-03-07 15:18:47 +010051 return 0;
52}
53
54static inline int reset_control_deassert(struct reset_control *rstc)
55{
Philipp Zabelb4240802014-03-07 15:18:47 +010056 return 0;
57}
58
Dinh Nguyen729de412014-10-10 10:21:14 -050059static inline int reset_control_status(struct reset_control *rstc)
60{
Dinh Nguyen729de412014-10-10 10:21:14 -050061 return 0;
62}
63
Philipp Zabelc84b0322019-02-21 16:25:53 +010064static inline int reset_control_acquire(struct reset_control *rstc)
65{
66 return 0;
67}
68
69static inline void reset_control_release(struct reset_control *rstc)
70{
71}
72
Philipp Zabelb4240802014-03-07 15:18:47 +010073static inline void reset_control_put(struct reset_control *rstc)
74{
Philipp Zabelb4240802014-03-07 15:18:47 +010075}
76
Masahiro Yamada1554bbd2017-10-29 01:50:06 +090077static inline int __device_reset(struct device *dev, bool optional)
Daniel Lezcano41136522016-04-01 21:38:16 +020078{
Masahiro Yamada1554bbd2017-10-29 01:50:06 +090079 return optional ? 0 : -ENOTSUPP;
Philipp Zabelb4240802014-03-07 15:18:47 +010080}
81
Hans de Goede6c96f052016-02-23 18:46:24 +010082static inline struct reset_control *__of_reset_control_get(
83 struct device_node *node,
Ramiro Oliveirabb475232017-01-13 17:57:41 +000084 const char *id, int index, bool shared,
Philipp Zabelc84b0322019-02-21 16:25:53 +010085 bool optional, bool acquired)
Axel Lin5bcd0b72015-09-01 07:56:38 +080086{
Philipp Zabel0ca10b62017-03-20 11:25:16 +010087 return optional ? NULL : ERR_PTR(-ENOTSUPP);
Axel Lin5bcd0b72015-09-01 07:56:38 +080088}
89
Philipp Zabel62e24c52016-02-05 13:41:39 +010090static inline struct reset_control *__reset_control_get(
91 struct device *dev, const char *id,
Philipp Zabelc84b0322019-02-21 16:25:53 +010092 int index, bool shared, bool optional,
93 bool acquired)
Philipp Zabel62e24c52016-02-05 13:41:39 +010094{
95 return optional ? NULL : ERR_PTR(-ENOTSUPP);
96}
97
Hans de Goede6c96f052016-02-23 18:46:24 +010098static inline struct reset_control *__devm_reset_control_get(
Ramiro Oliveirabb475232017-01-13 17:57:41 +000099 struct device *dev, const char *id,
Philipp Zabelc84b0322019-02-21 16:25:53 +0100100 int index, bool shared, bool optional,
101 bool acquired)
Hans de Goede6c96f052016-02-23 18:46:24 +0100102{
Philipp Zabel0ca10b62017-03-20 11:25:16 +0100103 return optional ? NULL : ERR_PTR(-ENOTSUPP);
Hans de Goede6c96f052016-02-23 18:46:24 +0100104}
105
Vivek Gautam17c82e22017-05-22 16:53:25 +0530106static inline struct reset_control *
107devm_reset_control_array_get(struct device *dev, bool shared, bool optional)
108{
109 return optional ? NULL : ERR_PTR(-ENOTSUPP);
110}
111
112static inline struct reset_control *
Thierry Redingf31d5c22019-02-21 16:25:54 +0100113of_reset_control_array_get(struct device_node *np, bool shared, bool optional,
114 bool acquired)
Vivek Gautam17c82e22017-05-22 16:53:25 +0530115{
116 return optional ? NULL : ERR_PTR(-ENOTSUPP);
117}
118
Geert Uytterhoeveneaf91db2018-11-13 13:47:44 +0100119static inline int reset_control_get_count(struct device *dev)
120{
121 return -ENOENT;
122}
123
Hans de Goede6c96f052016-02-23 18:46:24 +0100124#endif /* CONFIG_RESET_CONTROLLER */
125
Masahiro Yamada1554bbd2017-10-29 01:50:06 +0900126static inline int __must_check device_reset(struct device *dev)
127{
128 return __device_reset(dev, false);
129}
130
131static inline int device_reset_optional(struct device *dev)
132{
133 return __device_reset(dev, true);
134}
135
Hans de Goede6c96f052016-02-23 18:46:24 +0100136/**
Lee Jonesa53e35d2016-06-06 16:56:50 +0100137 * reset_control_get_exclusive - Lookup and obtain an exclusive reference
138 * to a reset controller.
Hans de Goede6c96f052016-02-23 18:46:24 +0100139 * @dev: device to be reset by the controller
140 * @id: reset line name
141 *
142 * Returns a struct reset_control or IS_ERR() condition containing errno.
Geert Uytterhoeven34845c92018-09-26 15:20:03 +0200143 * If this function is called more than once for the same reset_control it will
Hans de Goede0b522972016-02-23 18:46:26 +0100144 * return -EBUSY.
145 *
Philipp Zabelb9e93482019-10-22 18:19:22 +0200146 * See reset_control_get_shared() for details on shared references to
Hans de Goede0b522972016-02-23 18:46:26 +0100147 * reset-controls.
Hans de Goede6c96f052016-02-23 18:46:24 +0100148 *
149 * Use of id names is optional.
150 */
Lee Jonesa53e35d2016-06-06 16:56:50 +0100151static inline struct reset_control *
152__must_check reset_control_get_exclusive(struct device *dev, const char *id)
Axel Lin5bcd0b72015-09-01 07:56:38 +0800153{
Philipp Zabelc84b0322019-02-21 16:25:53 +0100154 return __reset_control_get(dev, id, 0, false, false, true);
155}
156
157/**
158 * reset_control_get_exclusive_released - Lookup and obtain a temoprarily
159 * exclusive reference to a reset
160 * controller.
161 * @dev: device to be reset by the controller
162 * @id: reset line name
163 *
164 * Returns a struct reset_control or IS_ERR() condition containing errno.
165 * reset-controls returned by this function must be acquired via
166 * reset_control_acquire() before they can be used and should be released
167 * via reset_control_release() afterwards.
168 *
169 * Use of id names is optional.
170 */
171static inline struct reset_control *
172__must_check reset_control_get_exclusive_released(struct device *dev,
173 const char *id)
174{
175 return __reset_control_get(dev, id, 0, false, false, false);
Axel Lin5bcd0b72015-09-01 07:56:38 +0800176}
177
Hans de Goede6c96f052016-02-23 18:46:24 +0100178/**
Hans de Goede0b522972016-02-23 18:46:26 +0100179 * reset_control_get_shared - Lookup and obtain a shared reference to a
180 * reset controller.
181 * @dev: device to be reset by the controller
182 * @id: reset line name
183 *
184 * Returns a struct reset_control or IS_ERR() condition containing errno.
185 * This function is intended for use with reset-controls which are shared
Geert Uytterhoeven12c62b92018-10-08 13:15:43 +0200186 * between hardware blocks.
Hans de Goede0b522972016-02-23 18:46:26 +0100187 *
188 * When a reset-control is shared, the behavior of reset_control_assert /
189 * deassert is changed, the reset-core will keep track of a deassert_count
190 * and only (re-)assert the reset after reset_control_assert has been called
191 * as many times as reset_control_deassert was called. Also see the remark
192 * about shared reset-controls in the reset_control_assert docs.
193 *
194 * Calling reset_control_assert without first calling reset_control_deassert
195 * is not allowed on a shared reset control. Calling reset_control_reset is
196 * also not allowed on a shared reset control.
197 *
198 * Use of id names is optional.
199 */
200static inline struct reset_control *reset_control_get_shared(
201 struct device *dev, const char *id)
202{
Philipp Zabelc84b0322019-02-21 16:25:53 +0100203 return __reset_control_get(dev, id, 0, true, false, false);
Hans de Goede0b522972016-02-23 18:46:26 +0100204}
205
Philipp Zabelc2ffa002019-10-22 16:53:25 +0200206/**
207 * reset_control_get_optional_exclusive - optional reset_control_get_exclusive()
208 * @dev: device to be reset by the controller
209 * @id: reset line name
210 *
211 * Optional variant of reset_control_get_exclusive(). If the requested reset
212 * is not specified in the device tree, this function returns NULL instead of
213 * an error.
214 *
215 * See reset_control_get_exclusive() for more information.
216 */
Lee Jonesa53e35d2016-06-06 16:56:50 +0100217static inline struct reset_control *reset_control_get_optional_exclusive(
Lee Jones3c35f6e2016-06-06 16:56:49 +0100218 struct device *dev, const char *id)
219{
Philipp Zabelc84b0322019-02-21 16:25:53 +0100220 return __reset_control_get(dev, id, 0, false, true, true);
Lee Jones3c35f6e2016-06-06 16:56:49 +0100221}
222
Philipp Zabelc2ffa002019-10-22 16:53:25 +0200223/**
224 * reset_control_get_optional_shared - optional reset_control_get_shared()
225 * @dev: device to be reset by the controller
226 * @id: reset line name
227 *
228 * Optional variant of reset_control_get_shared(). If the requested reset
229 * is not specified in the device tree, this function returns NULL instead of
230 * an error.
231 *
232 * See reset_control_get_shared() for more information.
233 */
Lee Jonesc33d61a2016-06-06 16:56:52 +0100234static inline struct reset_control *reset_control_get_optional_shared(
235 struct device *dev, const char *id)
236{
Philipp Zabelc84b0322019-02-21 16:25:53 +0100237 return __reset_control_get(dev, id, 0, true, true, false);
Lee Jonesc33d61a2016-06-06 16:56:52 +0100238}
239
Hans de Goede0b522972016-02-23 18:46:26 +0100240/**
Lee Jonesa53e35d2016-06-06 16:56:50 +0100241 * of_reset_control_get_exclusive - Lookup and obtain an exclusive reference
242 * to a reset controller.
Hans de Goede6c96f052016-02-23 18:46:24 +0100243 * @node: device to be reset by the controller
244 * @id: reset line name
245 *
246 * Returns a struct reset_control or IS_ERR() condition containing errno.
247 *
248 * Use of id names is optional.
249 */
Lee Jonesa53e35d2016-06-06 16:56:50 +0100250static inline struct reset_control *of_reset_control_get_exclusive(
Hans de Goede6c96f052016-02-23 18:46:24 +0100251 struct device_node *node, const char *id)
252{
Philipp Zabelc84b0322019-02-21 16:25:53 +0100253 return __of_reset_control_get(node, id, 0, false, false, true);
Hans de Goede6c96f052016-02-23 18:46:24 +0100254}
255
256/**
Geert Uytterhoeven12c62b92018-10-08 13:15:43 +0200257 * of_reset_control_get_shared - Lookup and obtain a shared reference
Lee Jones40faee8e2016-06-06 16:56:51 +0100258 * to a reset controller.
259 * @node: device to be reset by the controller
260 * @id: reset line name
261 *
262 * When a reset-control is shared, the behavior of reset_control_assert /
263 * deassert is changed, the reset-core will keep track of a deassert_count
264 * and only (re-)assert the reset after reset_control_assert has been called
265 * as many times as reset_control_deassert was called. Also see the remark
266 * about shared reset-controls in the reset_control_assert docs.
267 *
268 * Calling reset_control_assert without first calling reset_control_deassert
269 * is not allowed on a shared reset control. Calling reset_control_reset is
270 * also not allowed on a shared reset control.
271 * Returns a struct reset_control or IS_ERR() condition containing errno.
272 *
273 * Use of id names is optional.
274 */
275static inline struct reset_control *of_reset_control_get_shared(
276 struct device_node *node, const char *id)
277{
Philipp Zabelc84b0322019-02-21 16:25:53 +0100278 return __of_reset_control_get(node, id, 0, true, false, false);
Lee Jones40faee8e2016-06-06 16:56:51 +0100279}
280
281/**
Lee Jonesa53e35d2016-06-06 16:56:50 +0100282 * of_reset_control_get_exclusive_by_index - Lookup and obtain an exclusive
283 * reference to a reset controller
284 * by index.
Hans de Goede6c96f052016-02-23 18:46:24 +0100285 * @node: device to be reset by the controller
286 * @index: index of the reset controller
287 *
288 * This is to be used to perform a list of resets for a device or power domain
289 * in whatever order. Returns a struct reset_control or IS_ERR() condition
290 * containing errno.
291 */
Lee Jonesa53e35d2016-06-06 16:56:50 +0100292static inline struct reset_control *of_reset_control_get_exclusive_by_index(
Hans de Goede6c96f052016-02-23 18:46:24 +0100293 struct device_node *node, int index)
294{
Philipp Zabelc84b0322019-02-21 16:25:53 +0100295 return __of_reset_control_get(node, NULL, index, false, false, true);
Hans de Goede6c96f052016-02-23 18:46:24 +0100296}
297
298/**
Geert Uytterhoeven12c62b92018-10-08 13:15:43 +0200299 * of_reset_control_get_shared_by_index - Lookup and obtain a shared
Lee Jones40faee8e2016-06-06 16:56:51 +0100300 * reference to a reset controller
301 * by index.
302 * @node: device to be reset by the controller
303 * @index: index of the reset controller
304 *
305 * When a reset-control is shared, the behavior of reset_control_assert /
306 * deassert is changed, the reset-core will keep track of a deassert_count
307 * and only (re-)assert the reset after reset_control_assert has been called
308 * as many times as reset_control_deassert was called. Also see the remark
309 * about shared reset-controls in the reset_control_assert docs.
310 *
311 * Calling reset_control_assert without first calling reset_control_deassert
312 * is not allowed on a shared reset control. Calling reset_control_reset is
313 * also not allowed on a shared reset control.
314 * Returns a struct reset_control or IS_ERR() condition containing errno.
315 *
316 * This is to be used to perform a list of resets for a device or power domain
317 * in whatever order. Returns a struct reset_control or IS_ERR() condition
318 * containing errno.
319 */
320static inline struct reset_control *of_reset_control_get_shared_by_index(
321 struct device_node *node, int index)
322{
Philipp Zabelc84b0322019-02-21 16:25:53 +0100323 return __of_reset_control_get(node, NULL, index, true, false, false);
Lee Jones40faee8e2016-06-06 16:56:51 +0100324}
325
326/**
Lee Jonesa53e35d2016-06-06 16:56:50 +0100327 * devm_reset_control_get_exclusive - resource managed
328 * reset_control_get_exclusive()
Hans de Goede6c96f052016-02-23 18:46:24 +0100329 * @dev: device to be reset by the controller
330 * @id: reset line name
331 *
Lee Jonesa53e35d2016-06-06 16:56:50 +0100332 * Managed reset_control_get_exclusive(). For reset controllers returned
333 * from this function, reset_control_put() is called automatically on driver
334 * detach.
335 *
336 * See reset_control_get_exclusive() for more information.
Hans de Goede6c96f052016-02-23 18:46:24 +0100337 */
Lee Jonesa53e35d2016-06-06 16:56:50 +0100338static inline struct reset_control *
339__must_check devm_reset_control_get_exclusive(struct device *dev,
340 const char *id)
Hans de Goede6c96f052016-02-23 18:46:24 +0100341{
Philipp Zabelc84b0322019-02-21 16:25:53 +0100342 return __devm_reset_control_get(dev, id, 0, false, false, true);
343}
344
345/**
346 * devm_reset_control_get_exclusive_released - resource managed
347 * reset_control_get_exclusive_released()
348 * @dev: device to be reset by the controller
349 * @id: reset line name
350 *
351 * Managed reset_control_get_exclusive_released(). For reset controllers
352 * returned from this function, reset_control_put() is called automatically on
353 * driver detach.
354 *
355 * See reset_control_get_exclusive_released() for more information.
356 */
357static inline struct reset_control *
358__must_check devm_reset_control_get_exclusive_released(struct device *dev,
359 const char *id)
360{
361 return __devm_reset_control_get(dev, id, 0, false, false, false);
Philipp Zabelb4240802014-03-07 15:18:47 +0100362}
363
Hans de Goede0b522972016-02-23 18:46:26 +0100364/**
365 * devm_reset_control_get_shared - resource managed reset_control_get_shared()
366 * @dev: device to be reset by the controller
367 * @id: reset line name
368 *
369 * Managed reset_control_get_shared(). For reset controllers returned from
370 * this function, reset_control_put() is called automatically on driver detach.
371 * See reset_control_get_shared() for more information.
372 */
373static inline struct reset_control *devm_reset_control_get_shared(
374 struct device *dev, const char *id)
375{
Philipp Zabelc84b0322019-02-21 16:25:53 +0100376 return __devm_reset_control_get(dev, id, 0, true, false, false);
Hans de Goede0b522972016-02-23 18:46:26 +0100377}
378
Philipp Zabelc2ffa002019-10-22 16:53:25 +0200379/**
380 * devm_reset_control_get_optional_exclusive - resource managed
381 * reset_control_get_optional_exclusive()
382 * @dev: device to be reset by the controller
383 * @id: reset line name
384 *
385 * Managed reset_control_get_optional_exclusive(). For reset controllers
386 * returned from this function, reset_control_put() is called automatically on
387 * driver detach.
388 *
389 * See reset_control_get_optional_exclusive() for more information.
390 */
Lee Jonesa53e35d2016-06-06 16:56:50 +0100391static inline struct reset_control *devm_reset_control_get_optional_exclusive(
Philipp Zabelb4240802014-03-07 15:18:47 +0100392 struct device *dev, const char *id)
393{
Philipp Zabelc84b0322019-02-21 16:25:53 +0100394 return __devm_reset_control_get(dev, id, 0, false, true, true);
Philipp Zabelb4240802014-03-07 15:18:47 +0100395}
396
Philipp Zabelc2ffa002019-10-22 16:53:25 +0200397/**
398 * devm_reset_control_get_optional_shared - resource managed
399 * reset_control_get_optional_shared()
400 * @dev: device to be reset by the controller
401 * @id: reset line name
402 *
403 * Managed reset_control_get_optional_shared(). For reset controllers returned
404 * from this function, reset_control_put() is called automatically on driver
405 * detach.
406 *
407 * See reset_control_get_optional_shared() for more information.
408 */
Lee Jonesc33d61a2016-06-06 16:56:52 +0100409static inline struct reset_control *devm_reset_control_get_optional_shared(
410 struct device *dev, const char *id)
411{
Philipp Zabelc84b0322019-02-21 16:25:53 +0100412 return __devm_reset_control_get(dev, id, 0, true, true, false);
Lee Jonesc33d61a2016-06-06 16:56:52 +0100413}
414
Hans de Goede6c96f052016-02-23 18:46:24 +0100415/**
Lee Jonesa53e35d2016-06-06 16:56:50 +0100416 * devm_reset_control_get_exclusive_by_index - resource managed
417 * reset_control_get_exclusive()
Hans de Goede6c96f052016-02-23 18:46:24 +0100418 * @dev: device to be reset by the controller
419 * @index: index of the reset controller
420 *
Lee Jonesa53e35d2016-06-06 16:56:50 +0100421 * Managed reset_control_get_exclusive(). For reset controllers returned from
422 * this function, reset_control_put() is called automatically on driver
423 * detach.
424 *
425 * See reset_control_get_exclusive() for more information.
Hans de Goede6c96f052016-02-23 18:46:24 +0100426 */
Lee Jonesa53e35d2016-06-06 16:56:50 +0100427static inline struct reset_control *
428devm_reset_control_get_exclusive_by_index(struct device *dev, int index)
Hans de Goedee3ec0a82014-04-13 14:09:15 +0200429{
Philipp Zabelc84b0322019-02-21 16:25:53 +0100430 return __devm_reset_control_get(dev, NULL, index, false, false, true);
Hans de Goede0b522972016-02-23 18:46:26 +0100431}
432
Hans de Goede0b522972016-02-23 18:46:26 +0100433/**
434 * devm_reset_control_get_shared_by_index - resource managed
Geert Uytterhoeven12c62b92018-10-08 13:15:43 +0200435 * reset_control_get_shared
Hans de Goede0b522972016-02-23 18:46:26 +0100436 * @dev: device to be reset by the controller
437 * @index: index of the reset controller
438 *
439 * Managed reset_control_get_shared(). For reset controllers returned from
440 * this function, reset_control_put() is called automatically on driver detach.
441 * See reset_control_get_shared() for more information.
442 */
Lee Jones0bcc0ea2016-06-06 16:56:53 +0100443static inline struct reset_control *
444devm_reset_control_get_shared_by_index(struct device *dev, int index)
Hans de Goede0b522972016-02-23 18:46:26 +0100445{
Philipp Zabelc84b0322019-02-21 16:25:53 +0100446 return __devm_reset_control_get(dev, NULL, index, true, false, false);
Hans de Goedee3ec0a82014-04-13 14:09:15 +0200447}
448
Lee Jonesa53e35d2016-06-06 16:56:50 +0100449/*
450 * TEMPORARY calls to use during transition:
451 *
452 * of_reset_control_get() => of_reset_control_get_exclusive()
453 *
454 * These inline function calls will be removed once all consumers
455 * have been moved over to the new explicit API.
456 */
Lee Jonesa53e35d2016-06-06 16:56:50 +0100457static inline struct reset_control *of_reset_control_get(
458 struct device_node *node, const char *id)
459{
460 return of_reset_control_get_exclusive(node, id);
461}
462
463static inline struct reset_control *of_reset_control_get_by_index(
464 struct device_node *node, int index)
465{
466 return of_reset_control_get_exclusive_by_index(node, index);
467}
468
469static inline struct reset_control *devm_reset_control_get(
470 struct device *dev, const char *id)
471{
472 return devm_reset_control_get_exclusive(dev, id);
473}
474
475static inline struct reset_control *devm_reset_control_get_optional(
476 struct device *dev, const char *id)
477{
478 return devm_reset_control_get_optional_exclusive(dev, id);
479
480}
481
482static inline struct reset_control *devm_reset_control_get_by_index(
483 struct device *dev, int index)
484{
485 return devm_reset_control_get_exclusive_by_index(dev, index);
486}
Vivek Gautam17c82e22017-05-22 16:53:25 +0530487
488/*
489 * APIs to manage a list of reset controllers
490 */
491static inline struct reset_control *
492devm_reset_control_array_get_exclusive(struct device *dev)
493{
494 return devm_reset_control_array_get(dev, false, false);
495}
496
497static inline struct reset_control *
498devm_reset_control_array_get_shared(struct device *dev)
499{
500 return devm_reset_control_array_get(dev, true, false);
501}
502
503static inline struct reset_control *
504devm_reset_control_array_get_optional_exclusive(struct device *dev)
505{
506 return devm_reset_control_array_get(dev, false, true);
507}
508
509static inline struct reset_control *
510devm_reset_control_array_get_optional_shared(struct device *dev)
511{
512 return devm_reset_control_array_get(dev, true, true);
513}
514
515static inline struct reset_control *
516of_reset_control_array_get_exclusive(struct device_node *node)
517{
Thierry Redingf31d5c22019-02-21 16:25:54 +0100518 return of_reset_control_array_get(node, false, false, true);
Vivek Gautam17c82e22017-05-22 16:53:25 +0530519}
520
521static inline struct reset_control *
Thierry Reding22815f182019-02-21 16:25:55 +0100522of_reset_control_array_get_exclusive_released(struct device_node *node)
523{
524 return of_reset_control_array_get(node, false, false, false);
525}
526
527static inline struct reset_control *
Vivek Gautam17c82e22017-05-22 16:53:25 +0530528of_reset_control_array_get_shared(struct device_node *node)
529{
Thierry Redingf31d5c22019-02-21 16:25:54 +0100530 return of_reset_control_array_get(node, true, false, true);
Vivek Gautam17c82e22017-05-22 16:53:25 +0530531}
532
533static inline struct reset_control *
534of_reset_control_array_get_optional_exclusive(struct device_node *node)
535{
Thierry Redingf31d5c22019-02-21 16:25:54 +0100536 return of_reset_control_array_get(node, false, true, true);
Vivek Gautam17c82e22017-05-22 16:53:25 +0530537}
538
539static inline struct reset_control *
540of_reset_control_array_get_optional_shared(struct device_node *node)
541{
Thierry Redingf31d5c22019-02-21 16:25:54 +0100542 return of_reset_control_array_get(node, true, true, true);
Vivek Gautam17c82e22017-05-22 16:53:25 +0530543}
Philipp Zabel61fc4132012-11-19 17:23:13 +0100544#endif