]>
git.proxmox.com Git - mirror_ubuntu-eoan-kernel.git/blob - include/linux/reset.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _LINUX_RESET_H_
3 #define _LINUX_RESET_H_
5 #include <linux/types.h>
11 #ifdef CONFIG_RESET_CONTROLLER
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
);
18 struct reset_control
*__of_reset_control_get(struct device_node
*node
,
19 const char *id
, int index
, bool shared
,
21 struct reset_control
*__reset_control_get(struct device
*dev
, const char *id
,
22 int index
, bool shared
,
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
,
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
);
37 static inline int reset_control_reset(struct reset_control
*rstc
)
42 static inline int reset_control_assert(struct reset_control
*rstc
)
47 static inline int reset_control_deassert(struct reset_control
*rstc
)
52 static inline int reset_control_status(struct reset_control
*rstc
)
57 static inline void reset_control_put(struct reset_control
*rstc
)
61 static inline int __device_reset(struct device
*dev
, bool optional
)
63 return optional
? 0 : -ENOTSUPP
;
66 static inline struct reset_control
*__of_reset_control_get(
67 struct device_node
*node
,
68 const char *id
, int index
, bool shared
,
71 return optional
? NULL
: ERR_PTR(-ENOTSUPP
);
74 static inline struct reset_control
*__reset_control_get(
75 struct device
*dev
, const char *id
,
76 int index
, bool shared
, bool optional
)
78 return optional
? NULL
: ERR_PTR(-ENOTSUPP
);
81 static inline struct reset_control
*__devm_reset_control_get(
82 struct device
*dev
, const char *id
,
83 int index
, bool shared
, bool optional
)
85 return optional
? NULL
: ERR_PTR(-ENOTSUPP
);
88 static inline struct reset_control
*
89 devm_reset_control_array_get(struct device
*dev
, bool shared
, bool optional
)
91 return optional
? NULL
: ERR_PTR(-ENOTSUPP
);
94 static inline struct reset_control
*
95 of_reset_control_array_get(struct device_node
*np
, bool shared
, bool optional
)
97 return optional
? NULL
: ERR_PTR(-ENOTSUPP
);
100 #endif /* CONFIG_RESET_CONTROLLER */
102 static inline int __must_check
device_reset(struct device
*dev
)
104 return __device_reset(dev
, false);
107 static inline int device_reset_optional(struct device
*dev
)
109 return __device_reset(dev
, true);
113 * reset_control_get_exclusive - Lookup and obtain an exclusive reference
114 * to a reset controller.
115 * @dev: device to be reset by the controller
116 * @id: reset line name
118 * Returns a struct reset_control or IS_ERR() condition containing errno.
119 * If this function is called more than once for the same reset_control it will
122 * See reset_control_get_shared for details on shared references to
125 * Use of id names is optional.
127 static inline struct reset_control
*
128 __must_check
reset_control_get_exclusive(struct device
*dev
, const char *id
)
130 return __reset_control_get(dev
, id
, 0, false, false);
134 * reset_control_get_shared - Lookup and obtain a shared reference to a
136 * @dev: device to be reset by the controller
137 * @id: reset line name
139 * Returns a struct reset_control or IS_ERR() condition containing errno.
140 * This function is intended for use with reset-controls which are shared
141 * between hardware-blocks.
143 * When a reset-control is shared, the behavior of reset_control_assert /
144 * deassert is changed, the reset-core will keep track of a deassert_count
145 * and only (re-)assert the reset after reset_control_assert has been called
146 * as many times as reset_control_deassert was called. Also see the remark
147 * about shared reset-controls in the reset_control_assert docs.
149 * Calling reset_control_assert without first calling reset_control_deassert
150 * is not allowed on a shared reset control. Calling reset_control_reset is
151 * also not allowed on a shared reset control.
153 * Use of id names is optional.
155 static inline struct reset_control
*reset_control_get_shared(
156 struct device
*dev
, const char *id
)
158 return __reset_control_get(dev
, id
, 0, true, false);
161 static inline struct reset_control
*reset_control_get_optional_exclusive(
162 struct device
*dev
, const char *id
)
164 return __reset_control_get(dev
, id
, 0, false, true);
167 static inline struct reset_control
*reset_control_get_optional_shared(
168 struct device
*dev
, const char *id
)
170 return __reset_control_get(dev
, id
, 0, true, true);
174 * of_reset_control_get_exclusive - Lookup and obtain an exclusive reference
175 * to a reset controller.
176 * @node: device to be reset by the controller
177 * @id: reset line name
179 * Returns a struct reset_control or IS_ERR() condition containing errno.
181 * Use of id names is optional.
183 static inline struct reset_control
*of_reset_control_get_exclusive(
184 struct device_node
*node
, const char *id
)
186 return __of_reset_control_get(node
, id
, 0, false, false);
190 * of_reset_control_get_shared - Lookup and obtain an shared reference
191 * to a reset controller.
192 * @node: device to be reset by the controller
193 * @id: reset line name
195 * When a reset-control is shared, the behavior of reset_control_assert /
196 * deassert is changed, the reset-core will keep track of a deassert_count
197 * and only (re-)assert the reset after reset_control_assert has been called
198 * as many times as reset_control_deassert was called. Also see the remark
199 * about shared reset-controls in the reset_control_assert docs.
201 * Calling reset_control_assert without first calling reset_control_deassert
202 * is not allowed on a shared reset control. Calling reset_control_reset is
203 * also not allowed on a shared reset control.
204 * Returns a struct reset_control or IS_ERR() condition containing errno.
206 * Use of id names is optional.
208 static inline struct reset_control
*of_reset_control_get_shared(
209 struct device_node
*node
, const char *id
)
211 return __of_reset_control_get(node
, id
, 0, true, false);
215 * of_reset_control_get_exclusive_by_index - Lookup and obtain an exclusive
216 * reference to a reset controller
218 * @node: device to be reset by the controller
219 * @index: index of the reset controller
221 * This is to be used to perform a list of resets for a device or power domain
222 * in whatever order. Returns a struct reset_control or IS_ERR() condition
225 static inline struct reset_control
*of_reset_control_get_exclusive_by_index(
226 struct device_node
*node
, int index
)
228 return __of_reset_control_get(node
, NULL
, index
, false, false);
232 * of_reset_control_get_shared_by_index - Lookup and obtain an shared
233 * reference to a reset controller
235 * @node: device to be reset by the controller
236 * @index: index of the reset controller
238 * When a reset-control is shared, the behavior of reset_control_assert /
239 * deassert is changed, the reset-core will keep track of a deassert_count
240 * and only (re-)assert the reset after reset_control_assert has been called
241 * as many times as reset_control_deassert was called. Also see the remark
242 * about shared reset-controls in the reset_control_assert docs.
244 * Calling reset_control_assert without first calling reset_control_deassert
245 * is not allowed on a shared reset control. Calling reset_control_reset is
246 * also not allowed on a shared reset control.
247 * Returns a struct reset_control or IS_ERR() condition containing errno.
249 * This is to be used to perform a list of resets for a device or power domain
250 * in whatever order. Returns a struct reset_control or IS_ERR() condition
253 static inline struct reset_control
*of_reset_control_get_shared_by_index(
254 struct device_node
*node
, int index
)
256 return __of_reset_control_get(node
, NULL
, index
, true, false);
260 * devm_reset_control_get_exclusive - resource managed
261 * reset_control_get_exclusive()
262 * @dev: device to be reset by the controller
263 * @id: reset line name
265 * Managed reset_control_get_exclusive(). For reset controllers returned
266 * from this function, reset_control_put() is called automatically on driver
269 * See reset_control_get_exclusive() for more information.
271 static inline struct reset_control
*
272 __must_check
devm_reset_control_get_exclusive(struct device
*dev
,
275 return __devm_reset_control_get(dev
, id
, 0, false, false);
279 * devm_reset_control_get_shared - resource managed reset_control_get_shared()
280 * @dev: device to be reset by the controller
281 * @id: reset line name
283 * Managed reset_control_get_shared(). For reset controllers returned from
284 * this function, reset_control_put() is called automatically on driver detach.
285 * See reset_control_get_shared() for more information.
287 static inline struct reset_control
*devm_reset_control_get_shared(
288 struct device
*dev
, const char *id
)
290 return __devm_reset_control_get(dev
, id
, 0, true, false);
293 static inline struct reset_control
*devm_reset_control_get_optional_exclusive(
294 struct device
*dev
, const char *id
)
296 return __devm_reset_control_get(dev
, id
, 0, false, true);
299 static inline struct reset_control
*devm_reset_control_get_optional_shared(
300 struct device
*dev
, const char *id
)
302 return __devm_reset_control_get(dev
, id
, 0, true, true);
306 * devm_reset_control_get_exclusive_by_index - resource managed
307 * reset_control_get_exclusive()
308 * @dev: device to be reset by the controller
309 * @index: index of the reset controller
311 * Managed reset_control_get_exclusive(). For reset controllers returned from
312 * this function, reset_control_put() is called automatically on driver
315 * See reset_control_get_exclusive() for more information.
317 static inline struct reset_control
*
318 devm_reset_control_get_exclusive_by_index(struct device
*dev
, int index
)
320 return __devm_reset_control_get(dev
, NULL
, index
, false, false);
324 * devm_reset_control_get_shared_by_index - resource managed
325 * reset_control_get_shared
326 * @dev: device to be reset by the controller
327 * @index: index of the reset controller
329 * Managed reset_control_get_shared(). For reset controllers returned from
330 * this function, reset_control_put() is called automatically on driver detach.
331 * See reset_control_get_shared() for more information.
333 static inline struct reset_control
*
334 devm_reset_control_get_shared_by_index(struct device
*dev
, int index
)
336 return __devm_reset_control_get(dev
, NULL
, index
, true, false);
340 * TEMPORARY calls to use during transition:
342 * of_reset_control_get() => of_reset_control_get_exclusive()
344 * These inline function calls will be removed once all consumers
345 * have been moved over to the new explicit API.
347 static inline struct reset_control
*of_reset_control_get(
348 struct device_node
*node
, const char *id
)
350 return of_reset_control_get_exclusive(node
, id
);
353 static inline struct reset_control
*of_reset_control_get_by_index(
354 struct device_node
*node
, int index
)
356 return of_reset_control_get_exclusive_by_index(node
, index
);
359 static inline struct reset_control
*devm_reset_control_get(
360 struct device
*dev
, const char *id
)
362 return devm_reset_control_get_exclusive(dev
, id
);
365 static inline struct reset_control
*devm_reset_control_get_optional(
366 struct device
*dev
, const char *id
)
368 return devm_reset_control_get_optional_exclusive(dev
, id
);
372 static inline struct reset_control
*devm_reset_control_get_by_index(
373 struct device
*dev
, int index
)
375 return devm_reset_control_get_exclusive_by_index(dev
, index
);
379 * APIs to manage a list of reset controllers
381 static inline struct reset_control
*
382 devm_reset_control_array_get_exclusive(struct device
*dev
)
384 return devm_reset_control_array_get(dev
, false, false);
387 static inline struct reset_control
*
388 devm_reset_control_array_get_shared(struct device
*dev
)
390 return devm_reset_control_array_get(dev
, true, false);
393 static inline struct reset_control
*
394 devm_reset_control_array_get_optional_exclusive(struct device
*dev
)
396 return devm_reset_control_array_get(dev
, false, true);
399 static inline struct reset_control
*
400 devm_reset_control_array_get_optional_shared(struct device
*dev
)
402 return devm_reset_control_array_get(dev
, true, true);
405 static inline struct reset_control
*
406 of_reset_control_array_get_exclusive(struct device_node
*node
)
408 return of_reset_control_array_get(node
, false, false);
411 static inline struct reset_control
*
412 of_reset_control_array_get_shared(struct device_node
*node
)
414 return of_reset_control_array_get(node
, true, false);
417 static inline struct reset_control
*
418 of_reset_control_array_get_optional_exclusive(struct device_node
*node
)
420 return of_reset_control_array_get(node
, false, true);
423 static inline struct reset_control
*
424 of_reset_control_array_get_optional_shared(struct device_node
*node
)
426 return of_reset_control_array_get(node
, true, true);