at v5.12 19 kB view raw
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 9struct device; 10struct device_node; 11struct reset_control; 12 13#ifdef CONFIG_RESET_CONTROLLER 14 15int reset_control_reset(struct reset_control *rstc); 16int reset_control_rearm(struct reset_control *rstc); 17int reset_control_assert(struct reset_control *rstc); 18int reset_control_deassert(struct reset_control *rstc); 19int reset_control_status(struct reset_control *rstc); 20int reset_control_acquire(struct reset_control *rstc); 21void reset_control_release(struct reset_control *rstc); 22 23struct reset_control *__of_reset_control_get(struct device_node *node, 24 const char *id, int index, bool shared, 25 bool optional, bool acquired); 26struct reset_control *__reset_control_get(struct device *dev, const char *id, 27 int index, bool shared, 28 bool optional, bool acquired); 29void reset_control_put(struct reset_control *rstc); 30int __device_reset(struct device *dev, bool optional); 31struct reset_control *__devm_reset_control_get(struct device *dev, 32 const char *id, int index, bool shared, 33 bool optional, bool acquired); 34 35struct reset_control *devm_reset_control_array_get(struct device *dev, 36 bool shared, bool optional); 37struct reset_control *of_reset_control_array_get(struct device_node *np, 38 bool shared, bool optional, 39 bool acquired); 40 41int reset_control_get_count(struct device *dev); 42 43#else 44 45static inline int reset_control_reset(struct reset_control *rstc) 46{ 47 return 0; 48} 49 50static inline int reset_control_assert(struct reset_control *rstc) 51{ 52 return 0; 53} 54 55static inline int reset_control_deassert(struct reset_control *rstc) 56{ 57 return 0; 58} 59 60static inline int reset_control_status(struct reset_control *rstc) 61{ 62 return 0; 63} 64 65static inline int reset_control_acquire(struct reset_control *rstc) 66{ 67 return 0; 68} 69 70static inline void reset_control_release(struct reset_control *rstc) 71{ 72} 73 74static inline void reset_control_put(struct reset_control *rstc) 75{ 76} 77 78static inline int __device_reset(struct device *dev, bool optional) 79{ 80 return optional ? 0 : -ENOTSUPP; 81} 82 83static inline struct reset_control *__of_reset_control_get( 84 struct device_node *node, 85 const char *id, int index, bool shared, 86 bool optional, bool acquired) 87{ 88 return optional ? NULL : ERR_PTR(-ENOTSUPP); 89} 90 91static inline struct reset_control *__reset_control_get( 92 struct device *dev, const char *id, 93 int index, bool shared, bool optional, 94 bool acquired) 95{ 96 return optional ? NULL : ERR_PTR(-ENOTSUPP); 97} 98 99static inline struct reset_control *__devm_reset_control_get( 100 struct device *dev, const char *id, 101 int index, bool shared, bool optional, 102 bool acquired) 103{ 104 return optional ? NULL : ERR_PTR(-ENOTSUPP); 105} 106 107static inline struct reset_control * 108devm_reset_control_array_get(struct device *dev, bool shared, bool optional) 109{ 110 return optional ? NULL : ERR_PTR(-ENOTSUPP); 111} 112 113static inline struct reset_control * 114of_reset_control_array_get(struct device_node *np, bool shared, bool optional, 115 bool acquired) 116{ 117 return optional ? NULL : ERR_PTR(-ENOTSUPP); 118} 119 120static inline int reset_control_get_count(struct device *dev) 121{ 122 return -ENOENT; 123} 124 125#endif /* CONFIG_RESET_CONTROLLER */ 126 127static inline int __must_check device_reset(struct device *dev) 128{ 129 return __device_reset(dev, false); 130} 131 132static inline int device_reset_optional(struct device *dev) 133{ 134 return __device_reset(dev, true); 135} 136 137/** 138 * reset_control_get_exclusive - Lookup and obtain an exclusive reference 139 * to a reset controller. 140 * @dev: device to be reset by the controller 141 * @id: reset line name 142 * 143 * Returns a struct reset_control or IS_ERR() condition containing errno. 144 * If this function is called more than once for the same reset_control it will 145 * return -EBUSY. 146 * 147 * See reset_control_get_shared() for details on shared references to 148 * reset-controls. 149 * 150 * Use of id names is optional. 151 */ 152static inline struct reset_control * 153__must_check reset_control_get_exclusive(struct device *dev, const char *id) 154{ 155 return __reset_control_get(dev, id, 0, false, false, true); 156} 157 158/** 159 * reset_control_get_exclusive_released - Lookup and obtain a temoprarily 160 * exclusive reference to a reset 161 * controller. 162 * @dev: device to be reset by the controller 163 * @id: reset line name 164 * 165 * Returns a struct reset_control or IS_ERR() condition containing errno. 166 * reset-controls returned by this function must be acquired via 167 * reset_control_acquire() before they can be used and should be released 168 * via reset_control_release() afterwards. 169 * 170 * Use of id names is optional. 171 */ 172static inline struct reset_control * 173__must_check reset_control_get_exclusive_released(struct device *dev, 174 const char *id) 175{ 176 return __reset_control_get(dev, id, 0, false, false, false); 177} 178 179/** 180 * reset_control_get_shared - Lookup and obtain a shared reference to a 181 * reset controller. 182 * @dev: device to be reset by the controller 183 * @id: reset line name 184 * 185 * Returns a struct reset_control or IS_ERR() condition containing errno. 186 * This function is intended for use with reset-controls which are shared 187 * between hardware blocks. 188 * 189 * When a reset-control is shared, the behavior of reset_control_assert / 190 * deassert is changed, the reset-core will keep track of a deassert_count 191 * and only (re-)assert the reset after reset_control_assert has been called 192 * as many times as reset_control_deassert was called. Also see the remark 193 * about shared reset-controls in the reset_control_assert docs. 194 * 195 * Calling reset_control_assert without first calling reset_control_deassert 196 * is not allowed on a shared reset control. Calling reset_control_reset is 197 * also not allowed on a shared reset control. 198 * 199 * Use of id names is optional. 200 */ 201static inline struct reset_control *reset_control_get_shared( 202 struct device *dev, const char *id) 203{ 204 return __reset_control_get(dev, id, 0, true, false, false); 205} 206 207/** 208 * reset_control_get_optional_exclusive - optional reset_control_get_exclusive() 209 * @dev: device to be reset by the controller 210 * @id: reset line name 211 * 212 * Optional variant of reset_control_get_exclusive(). If the requested reset 213 * is not specified in the device tree, this function returns NULL instead of 214 * an error. 215 * 216 * See reset_control_get_exclusive() for more information. 217 */ 218static inline struct reset_control *reset_control_get_optional_exclusive( 219 struct device *dev, const char *id) 220{ 221 return __reset_control_get(dev, id, 0, false, true, true); 222} 223 224/** 225 * reset_control_get_optional_shared - optional reset_control_get_shared() 226 * @dev: device to be reset by the controller 227 * @id: reset line name 228 * 229 * Optional variant of reset_control_get_shared(). If the requested reset 230 * is not specified in the device tree, this function returns NULL instead of 231 * an error. 232 * 233 * See reset_control_get_shared() for more information. 234 */ 235static inline struct reset_control *reset_control_get_optional_shared( 236 struct device *dev, const char *id) 237{ 238 return __reset_control_get(dev, id, 0, true, true, false); 239} 240 241/** 242 * of_reset_control_get_exclusive - Lookup and obtain an exclusive reference 243 * to a reset controller. 244 * @node: device to be reset by the controller 245 * @id: reset line name 246 * 247 * Returns a struct reset_control or IS_ERR() condition containing errno. 248 * 249 * Use of id names is optional. 250 */ 251static inline struct reset_control *of_reset_control_get_exclusive( 252 struct device_node *node, const char *id) 253{ 254 return __of_reset_control_get(node, id, 0, false, false, true); 255} 256 257/** 258 * of_reset_control_get_shared - Lookup and obtain a shared reference 259 * to a reset controller. 260 * @node: device to be reset by the controller 261 * @id: reset line name 262 * 263 * When a reset-control is shared, the behavior of reset_control_assert / 264 * deassert is changed, the reset-core will keep track of a deassert_count 265 * and only (re-)assert the reset after reset_control_assert has been called 266 * as many times as reset_control_deassert was called. Also see the remark 267 * about shared reset-controls in the reset_control_assert docs. 268 * 269 * Calling reset_control_assert without first calling reset_control_deassert 270 * is not allowed on a shared reset control. Calling reset_control_reset is 271 * also not allowed on a shared reset control. 272 * Returns a struct reset_control or IS_ERR() condition containing errno. 273 * 274 * Use of id names is optional. 275 */ 276static inline struct reset_control *of_reset_control_get_shared( 277 struct device_node *node, const char *id) 278{ 279 return __of_reset_control_get(node, id, 0, true, false, false); 280} 281 282/** 283 * of_reset_control_get_exclusive_by_index - Lookup and obtain an exclusive 284 * reference to a reset controller 285 * by index. 286 * @node: device to be reset by the controller 287 * @index: index of the reset controller 288 * 289 * This is to be used to perform a list of resets for a device or power domain 290 * in whatever order. Returns a struct reset_control or IS_ERR() condition 291 * containing errno. 292 */ 293static inline struct reset_control *of_reset_control_get_exclusive_by_index( 294 struct device_node *node, int index) 295{ 296 return __of_reset_control_get(node, NULL, index, false, false, true); 297} 298 299/** 300 * of_reset_control_get_shared_by_index - Lookup and obtain a shared 301 * reference to a reset controller 302 * by index. 303 * @node: device to be reset by the controller 304 * @index: index of the reset controller 305 * 306 * When a reset-control is shared, the behavior of reset_control_assert / 307 * deassert is changed, the reset-core will keep track of a deassert_count 308 * and only (re-)assert the reset after reset_control_assert has been called 309 * as many times as reset_control_deassert was called. Also see the remark 310 * about shared reset-controls in the reset_control_assert docs. 311 * 312 * Calling reset_control_assert without first calling reset_control_deassert 313 * is not allowed on a shared reset control. Calling reset_control_reset is 314 * also not allowed on a shared reset control. 315 * Returns a struct reset_control or IS_ERR() condition containing errno. 316 * 317 * This is to be used to perform a list of resets for a device or power domain 318 * in whatever order. Returns a struct reset_control or IS_ERR() condition 319 * containing errno. 320 */ 321static inline struct reset_control *of_reset_control_get_shared_by_index( 322 struct device_node *node, int index) 323{ 324 return __of_reset_control_get(node, NULL, index, true, false, false); 325} 326 327/** 328 * devm_reset_control_get_exclusive - resource managed 329 * reset_control_get_exclusive() 330 * @dev: device to be reset by the controller 331 * @id: reset line name 332 * 333 * Managed reset_control_get_exclusive(). For reset controllers returned 334 * from this function, reset_control_put() is called automatically on driver 335 * detach. 336 * 337 * See reset_control_get_exclusive() for more information. 338 */ 339static inline struct reset_control * 340__must_check devm_reset_control_get_exclusive(struct device *dev, 341 const char *id) 342{ 343 return __devm_reset_control_get(dev, id, 0, false, false, true); 344} 345 346/** 347 * devm_reset_control_get_exclusive_released - resource managed 348 * reset_control_get_exclusive_released() 349 * @dev: device to be reset by the controller 350 * @id: reset line name 351 * 352 * Managed reset_control_get_exclusive_released(). For reset controllers 353 * returned from this function, reset_control_put() is called automatically on 354 * driver detach. 355 * 356 * See reset_control_get_exclusive_released() for more information. 357 */ 358static inline struct reset_control * 359__must_check devm_reset_control_get_exclusive_released(struct device *dev, 360 const char *id) 361{ 362 return __devm_reset_control_get(dev, id, 0, false, false, false); 363} 364 365/** 366 * devm_reset_control_get_optional_exclusive_released - resource managed 367 * reset_control_get_optional_exclusive_released() 368 * @dev: device to be reset by the controller 369 * @id: reset line name 370 * 371 * Managed-and-optional variant of reset_control_get_exclusive_released(). For 372 * reset controllers returned from this function, reset_control_put() is called 373 * automatically on driver detach. 374 * 375 * See reset_control_get_exclusive_released() for more information. 376 */ 377static inline struct reset_control * 378__must_check devm_reset_control_get_optional_exclusive_released(struct device *dev, 379 const char *id) 380{ 381 return __devm_reset_control_get(dev, id, 0, false, true, false); 382} 383 384/** 385 * devm_reset_control_get_shared - resource managed reset_control_get_shared() 386 * @dev: device to be reset by the controller 387 * @id: reset line name 388 * 389 * Managed reset_control_get_shared(). For reset controllers returned from 390 * this function, reset_control_put() is called automatically on driver detach. 391 * See reset_control_get_shared() for more information. 392 */ 393static inline struct reset_control *devm_reset_control_get_shared( 394 struct device *dev, const char *id) 395{ 396 return __devm_reset_control_get(dev, id, 0, true, false, false); 397} 398 399/** 400 * devm_reset_control_get_optional_exclusive - resource managed 401 * reset_control_get_optional_exclusive() 402 * @dev: device to be reset by the controller 403 * @id: reset line name 404 * 405 * Managed reset_control_get_optional_exclusive(). For reset controllers 406 * returned from this function, reset_control_put() is called automatically on 407 * driver detach. 408 * 409 * See reset_control_get_optional_exclusive() for more information. 410 */ 411static inline struct reset_control *devm_reset_control_get_optional_exclusive( 412 struct device *dev, const char *id) 413{ 414 return __devm_reset_control_get(dev, id, 0, false, true, true); 415} 416 417/** 418 * devm_reset_control_get_optional_shared - resource managed 419 * reset_control_get_optional_shared() 420 * @dev: device to be reset by the controller 421 * @id: reset line name 422 * 423 * Managed reset_control_get_optional_shared(). For reset controllers returned 424 * from this function, reset_control_put() is called automatically on driver 425 * detach. 426 * 427 * See reset_control_get_optional_shared() for more information. 428 */ 429static inline struct reset_control *devm_reset_control_get_optional_shared( 430 struct device *dev, const char *id) 431{ 432 return __devm_reset_control_get(dev, id, 0, true, true, false); 433} 434 435/** 436 * devm_reset_control_get_exclusive_by_index - resource managed 437 * reset_control_get_exclusive() 438 * @dev: device to be reset by the controller 439 * @index: index of the reset controller 440 * 441 * Managed reset_control_get_exclusive(). For reset controllers returned from 442 * this function, reset_control_put() is called automatically on driver 443 * detach. 444 * 445 * See reset_control_get_exclusive() for more information. 446 */ 447static inline struct reset_control * 448devm_reset_control_get_exclusive_by_index(struct device *dev, int index) 449{ 450 return __devm_reset_control_get(dev, NULL, index, false, false, true); 451} 452 453/** 454 * devm_reset_control_get_shared_by_index - resource managed 455 * reset_control_get_shared 456 * @dev: device to be reset by the controller 457 * @index: index of the reset controller 458 * 459 * Managed reset_control_get_shared(). For reset controllers returned from 460 * this function, reset_control_put() is called automatically on driver detach. 461 * See reset_control_get_shared() for more information. 462 */ 463static inline struct reset_control * 464devm_reset_control_get_shared_by_index(struct device *dev, int index) 465{ 466 return __devm_reset_control_get(dev, NULL, index, true, false, false); 467} 468 469/* 470 * TEMPORARY calls to use during transition: 471 * 472 * of_reset_control_get() => of_reset_control_get_exclusive() 473 * 474 * These inline function calls will be removed once all consumers 475 * have been moved over to the new explicit API. 476 */ 477static inline struct reset_control *of_reset_control_get( 478 struct device_node *node, const char *id) 479{ 480 return of_reset_control_get_exclusive(node, id); 481} 482 483static inline struct reset_control *of_reset_control_get_by_index( 484 struct device_node *node, int index) 485{ 486 return of_reset_control_get_exclusive_by_index(node, index); 487} 488 489static inline struct reset_control *devm_reset_control_get( 490 struct device *dev, const char *id) 491{ 492 return devm_reset_control_get_exclusive(dev, id); 493} 494 495static inline struct reset_control *devm_reset_control_get_optional( 496 struct device *dev, const char *id) 497{ 498 return devm_reset_control_get_optional_exclusive(dev, id); 499 500} 501 502static inline struct reset_control *devm_reset_control_get_by_index( 503 struct device *dev, int index) 504{ 505 return devm_reset_control_get_exclusive_by_index(dev, index); 506} 507 508/* 509 * APIs to manage a list of reset controllers 510 */ 511static inline struct reset_control * 512devm_reset_control_array_get_exclusive(struct device *dev) 513{ 514 return devm_reset_control_array_get(dev, false, false); 515} 516 517static inline struct reset_control * 518devm_reset_control_array_get_shared(struct device *dev) 519{ 520 return devm_reset_control_array_get(dev, true, false); 521} 522 523static inline struct reset_control * 524devm_reset_control_array_get_optional_exclusive(struct device *dev) 525{ 526 return devm_reset_control_array_get(dev, false, true); 527} 528 529static inline struct reset_control * 530devm_reset_control_array_get_optional_shared(struct device *dev) 531{ 532 return devm_reset_control_array_get(dev, true, true); 533} 534 535static inline struct reset_control * 536of_reset_control_array_get_exclusive(struct device_node *node) 537{ 538 return of_reset_control_array_get(node, false, false, true); 539} 540 541static inline struct reset_control * 542of_reset_control_array_get_exclusive_released(struct device_node *node) 543{ 544 return of_reset_control_array_get(node, false, false, false); 545} 546 547static inline struct reset_control * 548of_reset_control_array_get_shared(struct device_node *node) 549{ 550 return of_reset_control_array_get(node, true, false, true); 551} 552 553static inline struct reset_control * 554of_reset_control_array_get_optional_exclusive(struct device_node *node) 555{ 556 return of_reset_control_array_get(node, false, true, true); 557} 558 559static inline struct reset_control * 560of_reset_control_array_get_optional_shared(struct device_node *node) 561{ 562 return of_reset_control_array_get(node, true, true, true); 563} 564#endif