at v4.8-rc2 12 kB view raw
1#ifndef _LINUX_RESET_H_ 2#define _LINUX_RESET_H_ 3 4#include <linux/device.h> 5 6struct reset_control; 7 8#ifdef CONFIG_RESET_CONTROLLER 9 10int reset_control_reset(struct reset_control *rstc); 11int reset_control_assert(struct reset_control *rstc); 12int reset_control_deassert(struct reset_control *rstc); 13int reset_control_status(struct reset_control *rstc); 14 15struct reset_control *__of_reset_control_get(struct device_node *node, 16 const char *id, int index, int shared); 17void reset_control_put(struct reset_control *rstc); 18struct reset_control *__devm_reset_control_get(struct device *dev, 19 const char *id, int index, int shared); 20 21int __must_check device_reset(struct device *dev); 22 23static inline int device_reset_optional(struct device *dev) 24{ 25 return device_reset(dev); 26} 27 28#else 29 30static inline int reset_control_reset(struct reset_control *rstc) 31{ 32 WARN_ON(1); 33 return 0; 34} 35 36static inline int reset_control_assert(struct reset_control *rstc) 37{ 38 WARN_ON(1); 39 return 0; 40} 41 42static inline int reset_control_deassert(struct reset_control *rstc) 43{ 44 WARN_ON(1); 45 return 0; 46} 47 48static inline int reset_control_status(struct reset_control *rstc) 49{ 50 WARN_ON(1); 51 return 0; 52} 53 54static inline void reset_control_put(struct reset_control *rstc) 55{ 56 WARN_ON(1); 57} 58 59static inline int __must_check device_reset(struct device *dev) 60{ 61 WARN_ON(1); 62 return -ENOTSUPP; 63} 64 65static inline int device_reset_optional(struct device *dev) 66{ 67 return -ENOTSUPP; 68} 69 70static inline struct reset_control *__of_reset_control_get( 71 struct device_node *node, 72 const char *id, int index, int shared) 73{ 74 return ERR_PTR(-ENOTSUPP); 75} 76 77static inline struct reset_control *__devm_reset_control_get( 78 struct device *dev, 79 const char *id, int index, int shared) 80{ 81 return ERR_PTR(-ENOTSUPP); 82} 83 84#endif /* CONFIG_RESET_CONTROLLER */ 85 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 91 * 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. 95 * 96 * See reset_control_get_shared for details on shared references to 97 * reset-controls. 98 * 99 * Use of id names is optional. 100 */ 101static inline struct reset_control * 102__must_check reset_control_get_exclusive(struct device *dev, const char *id) 103{ 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); 108} 109 110/** 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 115 * 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. 119 * 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. 125 * 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. 129 * 130 * Use of id names is optional. 131 */ 132static inline struct reset_control *reset_control_get_shared( 133 struct device *dev, const char *id) 134{ 135 return __of_reset_control_get(dev ? dev->of_node : NULL, id, 0, 1); 136} 137 138static inline struct reset_control *reset_control_get_optional_exclusive( 139 struct device *dev, const char *id) 140{ 141 return __of_reset_control_get(dev ? dev->of_node : NULL, id, 0, 0); 142} 143 144static inline struct reset_control *reset_control_get_optional_shared( 145 struct device *dev, const char *id) 146{ 147 return __of_reset_control_get(dev ? dev->of_node : NULL, id, 0, 1); 148} 149 150/** 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 155 * 156 * Returns a struct reset_control or IS_ERR() condition containing errno. 157 * 158 * Use of id names is optional. 159 */ 160static inline struct reset_control *of_reset_control_get_exclusive( 161 struct device_node *node, const char *id) 162{ 163 return __of_reset_control_get(node, id, 0, 0); 164} 165 166/** 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 171 * 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. 177 * 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. 182 * 183 * Use of id names is optional. 184 */ 185static inline struct reset_control *of_reset_control_get_shared( 186 struct device_node *node, const char *id) 187{ 188 return __of_reset_control_get(node, id, 0, 1); 189} 190 191/** 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 197 * 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. 201 */ 202static inline struct reset_control *of_reset_control_get_exclusive_by_index( 203 struct device_node *node, int index) 204{ 205 return __of_reset_control_get(node, NULL, index, 0); 206} 207 208/** 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 214 * 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. 220 * 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. 225 * 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. 229 */ 230static inline struct reset_control *of_reset_control_get_shared_by_index( 231 struct device_node *node, int index) 232{ 233 return __of_reset_control_get(node, NULL, index, 1); 234} 235 236/** 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 241 * 242 * Managed reset_control_get_exclusive(). For reset controllers returned 243 * from this function, reset_control_put() is called automatically on driver 244 * detach. 245 * 246 * See reset_control_get_exclusive() for more information. 247 */ 248static inline struct reset_control * 249__must_check devm_reset_control_get_exclusive(struct device *dev, 250 const char *id) 251{ 252#ifndef CONFIG_RESET_CONTROLLER 253 WARN_ON(1); 254#endif 255 return __devm_reset_control_get(dev, id, 0, 0); 256} 257 258/** 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 262 * 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. 266 */ 267static inline struct reset_control *devm_reset_control_get_shared( 268 struct device *dev, const char *id) 269{ 270 return __devm_reset_control_get(dev, id, 0, 1); 271} 272 273static inline struct reset_control *devm_reset_control_get_optional_exclusive( 274 struct device *dev, const char *id) 275{ 276 return __devm_reset_control_get(dev, id, 0, 0); 277} 278 279static inline struct reset_control *devm_reset_control_get_optional_shared( 280 struct device *dev, const char *id) 281{ 282 return __devm_reset_control_get(dev, id, 0, 1); 283} 284 285/** 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 290 * 291 * Managed reset_control_get_exclusive(). For reset controllers returned from 292 * this function, reset_control_put() is called automatically on driver 293 * detach. 294 * 295 * See reset_control_get_exclusive() for more information. 296 */ 297static inline struct reset_control * 298devm_reset_control_get_exclusive_by_index(struct device *dev, int index) 299{ 300 return __devm_reset_control_get(dev, NULL, index, 0); 301} 302 303/** 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 308 * 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. 312 */ 313static inline struct reset_control * 314devm_reset_control_get_shared_by_index(struct device *dev, int index) 315{ 316 return __devm_reset_control_get(dev, NULL, index, 1); 317} 318 319/* 320 * TEMPORARY calls to use during transition: 321 * 322 * of_reset_control_get() => of_reset_control_get_exclusive() 323 * 324 * These inline function calls will be removed once all consumers 325 * have been moved over to the new explicit API. 326 */ 327static inline struct reset_control *reset_control_get( 328 struct device *dev, const char *id) 329{ 330 return reset_control_get_exclusive(dev, id); 331} 332 333static inline struct reset_control *reset_control_get_optional( 334 struct device *dev, const char *id) 335{ 336 return reset_control_get_optional_exclusive(dev, id); 337} 338 339static inline struct reset_control *of_reset_control_get( 340 struct device_node *node, const char *id) 341{ 342 return of_reset_control_get_exclusive(node, id); 343} 344 345static inline struct reset_control *of_reset_control_get_by_index( 346 struct device_node *node, int index) 347{ 348 return of_reset_control_get_exclusive_by_index(node, index); 349} 350 351static inline struct reset_control *devm_reset_control_get( 352 struct device *dev, const char *id) 353{ 354 return devm_reset_control_get_exclusive(dev, id); 355} 356 357static inline struct reset_control *devm_reset_control_get_optional( 358 struct device *dev, const char *id) 359{ 360 return devm_reset_control_get_optional_exclusive(dev, id); 361 362} 363 364static inline struct reset_control *devm_reset_control_get_by_index( 365 struct device *dev, int index) 366{ 367 return devm_reset_control_get_exclusive_by_index(dev, index); 368} 369#endif