extcon: Fix compile time warning
[linux-2.6/btrfs-unstable.git] / include / linux / reset.h
blob5daff15722d3b027579e803baa452eb2f5df9cb4
1 #ifndef _LINUX_RESET_H_
2 #define _LINUX_RESET_H_
4 #include <linux/device.h>
6 struct reset_control;
8 #ifdef CONFIG_RESET_CONTROLLER
10 int reset_control_reset(struct reset_control *rstc);
11 int reset_control_assert(struct reset_control *rstc);
12 int reset_control_deassert(struct reset_control *rstc);
13 int reset_control_status(struct reset_control *rstc);
15 struct reset_control *__of_reset_control_get(struct device_node *node,
16 const char *id, int index, int shared);
17 void reset_control_put(struct reset_control *rstc);
18 struct reset_control *__devm_reset_control_get(struct device *dev,
19 const char *id, int index, int shared);
21 int __must_check device_reset(struct device *dev);
23 static inline int device_reset_optional(struct device *dev)
25 return device_reset(dev);
28 #else
30 static inline int reset_control_reset(struct reset_control *rstc)
32 WARN_ON(1);
33 return 0;
36 static inline int reset_control_assert(struct reset_control *rstc)
38 WARN_ON(1);
39 return 0;
42 static inline int reset_control_deassert(struct reset_control *rstc)
44 WARN_ON(1);
45 return 0;
48 static inline int reset_control_status(struct reset_control *rstc)
50 WARN_ON(1);
51 return 0;
54 static inline void reset_control_put(struct reset_control *rstc)
56 WARN_ON(1);
59 static inline int __must_check device_reset(struct device *dev)
61 WARN_ON(1);
62 return -ENOTSUPP;
65 static inline int device_reset_optional(struct device *dev)
67 return -ENOTSUPP;
70 static inline struct reset_control *__of_reset_control_get(
71 struct device_node *node,
72 const char *id, int index, int shared)
74 return ERR_PTR(-ENOTSUPP);
77 static inline struct reset_control *__devm_reset_control_get(
78 struct device *dev,
79 const char *id, int index, int shared)
81 return ERR_PTR(-ENOTSUPP);
84 #endif /* CONFIG_RESET_CONTROLLER */
86 /**
87 * reset_control_get_exclusive - Lookup and obtain an exclusive reference
88 * to a reset controller.
89 * @dev: device to be reset by the controller
90 * @id: reset line name
92 * Returns a struct reset_control or IS_ERR() condition containing errno.
93 * If this function is called more then once for the same reset_control it will
94 * return -EBUSY.
96 * See reset_control_get_shared for details on shared references to
97 * reset-controls.
99 * Use of id names is optional.
101 static inline struct reset_control *
102 __must_check reset_control_get_exclusive(struct device *dev, const char *id)
104 #ifndef CONFIG_RESET_CONTROLLER
105 WARN_ON(1);
106 #endif
107 return __of_reset_control_get(dev ? dev->of_node : NULL, id, 0, 0);
111 * reset_control_get_shared - Lookup and obtain a shared reference to a
112 * reset controller.
113 * @dev: device to be reset by the controller
114 * @id: reset line name
116 * Returns a struct reset_control or IS_ERR() condition containing errno.
117 * This function is intended for use with reset-controls which are shared
118 * between hardware-blocks.
120 * When a reset-control is shared, the behavior of reset_control_assert /
121 * deassert is changed, the reset-core will keep track of a deassert_count
122 * and only (re-)assert the reset after reset_control_assert has been called
123 * as many times as reset_control_deassert was called. Also see the remark
124 * about shared reset-controls in the reset_control_assert docs.
126 * Calling reset_control_assert without first calling reset_control_deassert
127 * is not allowed on a shared reset control. Calling reset_control_reset is
128 * also not allowed on a shared reset control.
130 * Use of id names is optional.
132 static inline struct reset_control *reset_control_get_shared(
133 struct device *dev, const char *id)
135 return __of_reset_control_get(dev ? dev->of_node : NULL, id, 0, 1);
138 static inline struct reset_control *reset_control_get_optional_exclusive(
139 struct device *dev, const char *id)
141 return __of_reset_control_get(dev ? dev->of_node : NULL, id, 0, 0);
144 static inline struct reset_control *reset_control_get_optional_shared(
145 struct device *dev, const char *id)
147 return __of_reset_control_get(dev ? dev->of_node : NULL, id, 0, 1);
151 * of_reset_control_get_exclusive - Lookup and obtain an exclusive reference
152 * to a reset controller.
153 * @node: device to be reset by the controller
154 * @id: reset line name
156 * Returns a struct reset_control or IS_ERR() condition containing errno.
158 * Use of id names is optional.
160 static inline struct reset_control *of_reset_control_get_exclusive(
161 struct device_node *node, const char *id)
163 return __of_reset_control_get(node, id, 0, 0);
167 * of_reset_control_get_shared - Lookup and obtain an shared reference
168 * to a reset controller.
169 * @node: device to be reset by the controller
170 * @id: reset line name
172 * When a reset-control is shared, the behavior of reset_control_assert /
173 * deassert is changed, the reset-core will keep track of a deassert_count
174 * and only (re-)assert the reset after reset_control_assert has been called
175 * as many times as reset_control_deassert was called. Also see the remark
176 * about shared reset-controls in the reset_control_assert docs.
178 * Calling reset_control_assert without first calling reset_control_deassert
179 * is not allowed on a shared reset control. Calling reset_control_reset is
180 * also not allowed on a shared reset control.
181 * Returns a struct reset_control or IS_ERR() condition containing errno.
183 * Use of id names is optional.
185 static inline struct reset_control *of_reset_control_get_shared(
186 struct device_node *node, const char *id)
188 return __of_reset_control_get(node, id, 0, 1);
192 * of_reset_control_get_exclusive_by_index - Lookup and obtain an exclusive
193 * reference to a reset controller
194 * by index.
195 * @node: device to be reset by the controller
196 * @index: index of the reset controller
198 * This is to be used to perform a list of resets for a device or power domain
199 * in whatever order. Returns a struct reset_control or IS_ERR() condition
200 * containing errno.
202 static inline struct reset_control *of_reset_control_get_exclusive_by_index(
203 struct device_node *node, int index)
205 return __of_reset_control_get(node, NULL, index, 0);
209 * of_reset_control_get_shared_by_index - Lookup and obtain an shared
210 * reference to a reset controller
211 * by index.
212 * @node: device to be reset by the controller
213 * @index: index of the reset controller
215 * When a reset-control is shared, the behavior of reset_control_assert /
216 * deassert is changed, the reset-core will keep track of a deassert_count
217 * and only (re-)assert the reset after reset_control_assert has been called
218 * as many times as reset_control_deassert was called. Also see the remark
219 * about shared reset-controls in the reset_control_assert docs.
221 * Calling reset_control_assert without first calling reset_control_deassert
222 * is not allowed on a shared reset control. Calling reset_control_reset is
223 * also not allowed on a shared reset control.
224 * Returns a struct reset_control or IS_ERR() condition containing errno.
226 * This is to be used to perform a list of resets for a device or power domain
227 * in whatever order. Returns a struct reset_control or IS_ERR() condition
228 * containing errno.
230 static inline struct reset_control *of_reset_control_get_shared_by_index(
231 struct device_node *node, int index)
233 return __of_reset_control_get(node, NULL, index, 1);
237 * devm_reset_control_get_exclusive - resource managed
238 * reset_control_get_exclusive()
239 * @dev: device to be reset by the controller
240 * @id: reset line name
242 * Managed reset_control_get_exclusive(). For reset controllers returned
243 * from this function, reset_control_put() is called automatically on driver
244 * detach.
246 * See reset_control_get_exclusive() for more information.
248 static inline struct reset_control *
249 __must_check devm_reset_control_get_exclusive(struct device *dev,
250 const char *id)
252 #ifndef CONFIG_RESET_CONTROLLER
253 WARN_ON(1);
254 #endif
255 return __devm_reset_control_get(dev, id, 0, 0);
259 * devm_reset_control_get_shared - resource managed reset_control_get_shared()
260 * @dev: device to be reset by the controller
261 * @id: reset line name
263 * Managed reset_control_get_shared(). For reset controllers returned from
264 * this function, reset_control_put() is called automatically on driver detach.
265 * See reset_control_get_shared() for more information.
267 static inline struct reset_control *devm_reset_control_get_shared(
268 struct device *dev, const char *id)
270 return __devm_reset_control_get(dev, id, 0, 1);
273 static inline struct reset_control *devm_reset_control_get_optional_exclusive(
274 struct device *dev, const char *id)
276 return __devm_reset_control_get(dev, id, 0, 0);
279 static inline struct reset_control *devm_reset_control_get_optional_shared(
280 struct device *dev, const char *id)
282 return __devm_reset_control_get(dev, id, 0, 1);
286 * devm_reset_control_get_exclusive_by_index - resource managed
287 * reset_control_get_exclusive()
288 * @dev: device to be reset by the controller
289 * @index: index of the reset controller
291 * Managed reset_control_get_exclusive(). For reset controllers returned from
292 * this function, reset_control_put() is called automatically on driver
293 * detach.
295 * See reset_control_get_exclusive() for more information.
297 static inline struct reset_control *
298 devm_reset_control_get_exclusive_by_index(struct device *dev, int index)
300 return __devm_reset_control_get(dev, NULL, index, 0);
304 * devm_reset_control_get_shared_by_index - resource managed
305 * reset_control_get_shared
306 * @dev: device to be reset by the controller
307 * @index: index of the reset controller
309 * Managed reset_control_get_shared(). For reset controllers returned from
310 * this function, reset_control_put() is called automatically on driver detach.
311 * See reset_control_get_shared() for more information.
313 static inline struct reset_control *
314 devm_reset_control_get_shared_by_index(struct device *dev, int index)
316 return __devm_reset_control_get(dev, NULL, index, 1);
320 * TEMPORARY calls to use during transition:
322 * of_reset_control_get() => of_reset_control_get_exclusive()
324 * These inline function calls will be removed once all consumers
325 * have been moved over to the new explicit API.
327 static inline struct reset_control *reset_control_get(
328 struct device *dev, const char *id)
330 return reset_control_get_exclusive(dev, id);
333 static inline struct reset_control *reset_control_get_optional(
334 struct device *dev, const char *id)
336 return reset_control_get_optional_exclusive(dev, id);
339 static inline struct reset_control *of_reset_control_get(
340 struct device_node *node, const char *id)
342 return of_reset_control_get_exclusive(node, id);
345 static inline struct reset_control *of_reset_control_get_by_index(
346 struct device_node *node, int index)
348 return of_reset_control_get_exclusive_by_index(node, index);
351 static inline struct reset_control *devm_reset_control_get(
352 struct device *dev, const char *id)
354 return devm_reset_control_get_exclusive(dev, id);
357 static inline struct reset_control *devm_reset_control_get_optional(
358 struct device *dev, const char *id)
360 return devm_reset_control_get_optional_exclusive(dev, id);
364 static inline struct reset_control *devm_reset_control_get_by_index(
365 struct device *dev, int index)
367 return devm_reset_control_get_exclusive_by_index(dev, index);
369 #endif