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 #ifdef CONFIG_RESET_CONTROLLER 14 15 int reset_control_reset(struct reset_control *rstc); 16 int reset_control_assert(struct reset_control *rstc); 17 int reset_control_deassert(struct reset_control *rstc); 18 int reset_control_status(struct reset_control *rstc); 19 int reset_control_acquire(struct reset_control *rstc); 20 void reset_control_release(struct reset_control *rstc); 21 22 struct reset_control *__of_reset_control_get(struct device_node *node, 23 const char *id, int index, bool shared, 24 bool optional, bool acquired); 25 struct reset_control *__reset_control_get(struct device *dev, const char *id, 26 int index, bool shared, 27 bool optional, bool acquired); 28 void reset_control_put(struct reset_control *rstc); 29 int __device_reset(struct device *dev, bool optional); 30 struct reset_control *__devm_reset_control_get(struct device *dev, 31 const char *id, int index, bool shared, 32 bool optional, bool acquired); 33 34 struct reset_control *devm_reset_control_array_get(struct device *dev, 35 bool shared, bool optional); 36 struct reset_control *of_reset_control_array_get(struct device_node *np, 37 bool shared, bool optional, 38 bool acquired); 39 40 int reset_control_get_count(struct device *dev); 41 42 #else 43 44 static inline int reset_control_reset(struct reset_control *rstc) 45 { 46 return 0; 47 } 48 49 static inline int reset_control_assert(struct reset_control *rstc) 50 { 51 return 0; 52 } 53 54 static inline int reset_control_deassert(struct reset_control *rstc) 55 { 56 return 0; 57 } 58 59 static inline int reset_control_status(struct reset_control *rstc) 60 { 61 return 0; 62 } 63 64 static inline int reset_control_acquire(struct reset_control *rstc) 65 { 66 return 0; 67 } 68 69 static inline void reset_control_release(struct reset_control *rstc) 70 { 71 } 72 73 static inline void reset_control_put(struct reset_control *rstc) 74 { 75 } 76 77 static inline int __device_reset(struct device *dev, bool optional) 78 { 79 return optional ? 0 : -ENOTSUPP; 80 } 81 82 static inline struct reset_control *__of_reset_control_get( 83 struct device_node *node, 84 const char *id, int index, bool shared, 85 bool optional, bool acquired) 86 { 87 return optional ? NULL : ERR_PTR(-ENOTSUPP); 88 } 89 90 static inline struct reset_control *__reset_control_get( 91 struct device *dev, const char *id, 92 int index, bool shared, bool optional, 93 bool acquired) 94 { 95 return optional ? NULL : ERR_PTR(-ENOTSUPP); 96 } 97 98 static inline struct reset_control *__devm_reset_control_get( 99 struct device *dev, const char *id, 100 int index, bool shared, bool optional, 101 bool acquired) 102 { 103 return optional ? NULL : ERR_PTR(-ENOTSUPP); 104 } 105 106 static inline struct reset_control * 107 devm_reset_control_array_get(struct device *dev, bool shared, bool optional) 108 { 109 return optional ? NULL : ERR_PTR(-ENOTSUPP); 110 } 111 112 static inline struct reset_control * 113 of_reset_control_array_get(struct device_node *np, bool shared, bool optional, 114 bool acquired) 115 { 116 return optional ? NULL : ERR_PTR(-ENOTSUPP); 117 } 118 119 static inline int reset_control_get_count(struct device *dev) 120 { 121 return -ENOENT; 122 } 123 124 #endif /* CONFIG_RESET_CONTROLLER */ 125 126 static inline int __must_check device_reset(struct device *dev) 127 { 128 return __device_reset(dev, false); 129 } 130 131 static inline int device_reset_optional(struct device *dev) 132 { 133 return __device_reset(dev, true); 134 } 135 136 /** 137 * reset_control_get_exclusive - Lookup and obtain an exclusive reference 138 * to a reset controller. 139 * @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. 143 * If this function is called more than once for the same reset_control it will 144 * return -EBUSY. 145 * 146 * See reset_control_get_shared for details on shared references to 147 * reset-controls. 148 * 149 * Use of id names is optional. 150 */ 151 static inline struct reset_control * 152 __must_check reset_control_get_exclusive(struct device *dev, const char *id) 153 { 154 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 */ 171 static 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); 176 } 177 178 /** 179 * 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 186 * between hardware blocks. 187 * 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 */ 200 static inline struct reset_control *reset_control_get_shared( 201 struct device *dev, const char *id) 202 { 203 return __reset_control_get(dev, id, 0, true, false, false); 204 } 205 206 /** 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 */ 217 static inline struct reset_control *reset_control_get_optional_exclusive( 218 struct device *dev, const char *id) 219 { 220 return __reset_control_get(dev, id, 0, false, true, true); 221 } 222 223 /** 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 */ 234 static inline struct reset_control *reset_control_get_optional_shared( 235 struct device *dev, const char *id) 236 { 237 return __reset_control_get(dev, id, 0, true, true, false); 238 } 239 240 /** 241 * of_reset_control_get_exclusive - Lookup and obtain an exclusive reference 242 * to a reset controller. 243 * @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 */ 250 static inline struct reset_control *of_reset_control_get_exclusive( 251 struct device_node *node, const char *id) 252 { 253 return __of_reset_control_get(node, id, 0, false, false, true); 254 } 255 256 /** 257 * of_reset_control_get_shared - Lookup and obtain a shared reference 258 * 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 */ 275 static inline struct reset_control *of_reset_control_get_shared( 276 struct device_node *node, const char *id) 277 { 278 return __of_reset_control_get(node, id, 0, true, false, false); 279 } 280 281 /** 282 * of_reset_control_get_exclusive_by_index - Lookup and obtain an exclusive 283 * reference to a reset controller 284 * by index. 285 * @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 */ 292 static inline struct reset_control *of_reset_control_get_exclusive_by_index( 293 struct device_node *node, int index) 294 { 295 return __of_reset_control_get(node, NULL, index, false, false, true); 296 } 297 298 /** 299 * of_reset_control_get_shared_by_index - Lookup and obtain a shared 300 * 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 */ 320 static inline struct reset_control *of_reset_control_get_shared_by_index( 321 struct device_node *node, int index) 322 { 323 return __of_reset_control_get(node, NULL, index, true, false, false); 324 } 325 326 /** 327 * devm_reset_control_get_exclusive - resource managed 328 * reset_control_get_exclusive() 329 * @dev: device to be reset by the controller 330 * @id: reset line name 331 * 332 * 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. 337 */ 338 static inline struct reset_control * 339 __must_check devm_reset_control_get_exclusive(struct device *dev, 340 const char *id) 341 { 342 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 */ 357 static 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); 362 } 363 364 /** 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 */ 373 static inline struct reset_control *devm_reset_control_get_shared( 374 struct device *dev, const char *id) 375 { 376 return __devm_reset_control_get(dev, id, 0, true, false, false); 377 } 378 379 /** 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 */ 391 static inline struct reset_control *devm_reset_control_get_optional_exclusive( 392 struct device *dev, const char *id) 393 { 394 return __devm_reset_control_get(dev, id, 0, false, true, true); 395 } 396 397 /** 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 */ 409 static inline struct reset_control *devm_reset_control_get_optional_shared( 410 struct device *dev, const char *id) 411 { 412 return __devm_reset_control_get(dev, id, 0, true, true, false); 413 } 414 415 /** 416 * devm_reset_control_get_exclusive_by_index - resource managed 417 * reset_control_get_exclusive() 418 * @dev: device to be reset by the controller 419 * @index: index of the reset controller 420 * 421 * 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. 426 */ 427 static inline struct reset_control * 428 devm_reset_control_get_exclusive_by_index(struct device *dev, int index) 429 { 430 return __devm_reset_control_get(dev, NULL, index, false, false, true); 431 } 432 433 /** 434 * devm_reset_control_get_shared_by_index - resource managed 435 * reset_control_get_shared 436 * @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 */ 443 static inline struct reset_control * 444 devm_reset_control_get_shared_by_index(struct device *dev, int index) 445 { 446 return __devm_reset_control_get(dev, NULL, index, true, false, false); 447 } 448 449 /* 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 */ 457 static 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 463 static 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 469 static 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 475 static 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 482 static 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 } 487 488 /* 489 * APIs to manage a list of reset controllers 490 */ 491 static inline struct reset_control * 492 devm_reset_control_array_get_exclusive(struct device *dev) 493 { 494 return devm_reset_control_array_get(dev, false, false); 495 } 496 497 static inline struct reset_control * 498 devm_reset_control_array_get_shared(struct device *dev) 499 { 500 return devm_reset_control_array_get(dev, true, false); 501 } 502 503 static inline struct reset_control * 504 devm_reset_control_array_get_optional_exclusive(struct device *dev) 505 { 506 return devm_reset_control_array_get(dev, false, true); 507 } 508 509 static inline struct reset_control * 510 devm_reset_control_array_get_optional_shared(struct device *dev) 511 { 512 return devm_reset_control_array_get(dev, true, true); 513 } 514 515 static inline struct reset_control * 516 of_reset_control_array_get_exclusive(struct device_node *node) 517 { 518 return of_reset_control_array_get(node, false, false, true); 519 } 520 521 static inline struct reset_control * 522 of_reset_control_array_get_exclusive_released(struct device_node *node) 523 { 524 return of_reset_control_array_get(node, false, false, false); 525 } 526 527 static inline struct reset_control * 528 of_reset_control_array_get_shared(struct device_node *node) 529 { 530 return of_reset_control_array_get(node, true, false, true); 531 } 532 533 static inline struct reset_control * 534 of_reset_control_array_get_optional_exclusive(struct device_node *node) 535 { 536 return of_reset_control_array_get(node, false, true, true); 537 } 538 539 static inline struct reset_control * 540 of_reset_control_array_get_optional_shared(struct device_node *node) 541 { 542 return of_reset_control_array_get(node, true, true, true); 543 } 544 #endif 545