.. | .. |
---|
183 | 183 | */ |
---|
184 | 184 | bool clk_is_match(const struct clk *p, const struct clk *q); |
---|
185 | 185 | |
---|
| 186 | +/** |
---|
| 187 | + * clk_rate_exclusive_get - get exclusivity over the rate control of a |
---|
| 188 | + * producer |
---|
| 189 | + * @clk: clock source |
---|
| 190 | + * |
---|
| 191 | + * This function allows drivers to get exclusive control over the rate of a |
---|
| 192 | + * provider. It prevents any other consumer to execute, even indirectly, |
---|
| 193 | + * opereation which could alter the rate of the provider or cause glitches |
---|
| 194 | + * |
---|
| 195 | + * If exlusivity is claimed more than once on clock, even by the same driver, |
---|
| 196 | + * the rate effectively gets locked as exclusivity can't be preempted. |
---|
| 197 | + * |
---|
| 198 | + * Must not be called from within atomic context. |
---|
| 199 | + * |
---|
| 200 | + * Returns success (0) or negative errno. |
---|
| 201 | + */ |
---|
| 202 | +int clk_rate_exclusive_get(struct clk *clk); |
---|
| 203 | + |
---|
| 204 | +/** |
---|
| 205 | + * clk_rate_exclusive_put - release exclusivity over the rate control of a |
---|
| 206 | + * producer |
---|
| 207 | + * @clk: clock source |
---|
| 208 | + * |
---|
| 209 | + * This function allows drivers to release the exclusivity it previously got |
---|
| 210 | + * from clk_rate_exclusive_get() |
---|
| 211 | + * |
---|
| 212 | + * The caller must balance the number of clk_rate_exclusive_get() and |
---|
| 213 | + * clk_rate_exclusive_put() calls. |
---|
| 214 | + * |
---|
| 215 | + * Must not be called from within atomic context. |
---|
| 216 | + */ |
---|
| 217 | +void clk_rate_exclusive_put(struct clk *clk); |
---|
| 218 | + |
---|
186 | 219 | #else |
---|
187 | 220 | |
---|
188 | 221 | static inline int clk_notifier_register(struct clk *clk, |
---|
.. | .. |
---|
235 | 268 | { |
---|
236 | 269 | return p == q; |
---|
237 | 270 | } |
---|
| 271 | + |
---|
| 272 | +static inline int clk_rate_exclusive_get(struct clk *clk) |
---|
| 273 | +{ |
---|
| 274 | + return 0; |
---|
| 275 | +} |
---|
| 276 | + |
---|
| 277 | +static inline void clk_rate_exclusive_put(struct clk *clk) {} |
---|
238 | 278 | |
---|
239 | 279 | #endif |
---|
240 | 280 | |
---|
.. | .. |
---|
437 | 477 | struct clk *devm_clk_get(struct device *dev, const char *id); |
---|
438 | 478 | |
---|
439 | 479 | /** |
---|
| 480 | + * devm_clk_get_prepared - devm_clk_get() + clk_prepare() |
---|
| 481 | + * @dev: device for clock "consumer" |
---|
| 482 | + * @id: clock consumer ID |
---|
| 483 | + * |
---|
| 484 | + * Context: May sleep. |
---|
| 485 | + * |
---|
| 486 | + * Return: a struct clk corresponding to the clock producer, or |
---|
| 487 | + * valid IS_ERR() condition containing errno. The implementation |
---|
| 488 | + * uses @dev and @id to determine the clock consumer, and thereby |
---|
| 489 | + * the clock producer. (IOW, @id may be identical strings, but |
---|
| 490 | + * clk_get may return different clock producers depending on @dev.) |
---|
| 491 | + * |
---|
| 492 | + * The returned clk (if valid) is prepared. Drivers must however assume |
---|
| 493 | + * that the clock is not enabled. |
---|
| 494 | + * |
---|
| 495 | + * The clock will automatically be unprepared and freed when the device |
---|
| 496 | + * is unbound from the bus. |
---|
| 497 | + */ |
---|
| 498 | +struct clk *devm_clk_get_prepared(struct device *dev, const char *id); |
---|
| 499 | + |
---|
| 500 | +/** |
---|
| 501 | + * devm_clk_get_enabled - devm_clk_get() + clk_prepare_enable() |
---|
| 502 | + * @dev: device for clock "consumer" |
---|
| 503 | + * @id: clock consumer ID |
---|
| 504 | + * |
---|
| 505 | + * Context: May sleep. |
---|
| 506 | + * |
---|
| 507 | + * Return: a struct clk corresponding to the clock producer, or |
---|
| 508 | + * valid IS_ERR() condition containing errno. The implementation |
---|
| 509 | + * uses @dev and @id to determine the clock consumer, and thereby |
---|
| 510 | + * the clock producer. (IOW, @id may be identical strings, but |
---|
| 511 | + * clk_get may return different clock producers depending on @dev.) |
---|
| 512 | + * |
---|
| 513 | + * The returned clk (if valid) is prepared and enabled. |
---|
| 514 | + * |
---|
| 515 | + * The clock will automatically be disabled, unprepared and freed |
---|
| 516 | + * when the device is unbound from the bus. |
---|
| 517 | + */ |
---|
| 518 | +struct clk *devm_clk_get_enabled(struct device *dev, const char *id); |
---|
| 519 | + |
---|
| 520 | +/** |
---|
440 | 521 | * devm_clk_get_optional - lookup and obtain a managed reference to an optional |
---|
441 | 522 | * clock producer. |
---|
442 | 523 | * @dev: device for clock "consumer" |
---|
.. | .. |
---|
446 | 527 | * In this case, instead of returning -ENOENT, the function returns NULL. |
---|
447 | 528 | */ |
---|
448 | 529 | struct clk *devm_clk_get_optional(struct device *dev, const char *id); |
---|
| 530 | + |
---|
| 531 | +/** |
---|
| 532 | + * devm_clk_get_optional_prepared - devm_clk_get_optional() + clk_prepare() |
---|
| 533 | + * @dev: device for clock "consumer" |
---|
| 534 | + * @id: clock consumer ID |
---|
| 535 | + * |
---|
| 536 | + * Context: May sleep. |
---|
| 537 | + * |
---|
| 538 | + * Return: a struct clk corresponding to the clock producer, or |
---|
| 539 | + * valid IS_ERR() condition containing errno. The implementation |
---|
| 540 | + * uses @dev and @id to determine the clock consumer, and thereby |
---|
| 541 | + * the clock producer. If no such clk is found, it returns NULL |
---|
| 542 | + * which serves as a dummy clk. That's the only difference compared |
---|
| 543 | + * to devm_clk_get_prepared(). |
---|
| 544 | + * |
---|
| 545 | + * The returned clk (if valid) is prepared. Drivers must however |
---|
| 546 | + * assume that the clock is not enabled. |
---|
| 547 | + * |
---|
| 548 | + * The clock will automatically be unprepared and freed when the |
---|
| 549 | + * device is unbound from the bus. |
---|
| 550 | + */ |
---|
| 551 | +struct clk *devm_clk_get_optional_prepared(struct device *dev, const char *id); |
---|
| 552 | + |
---|
| 553 | +/** |
---|
| 554 | + * devm_clk_get_optional_enabled - devm_clk_get_optional() + |
---|
| 555 | + * clk_prepare_enable() |
---|
| 556 | + * @dev: device for clock "consumer" |
---|
| 557 | + * @id: clock consumer ID |
---|
| 558 | + * |
---|
| 559 | + * Context: May sleep. |
---|
| 560 | + * |
---|
| 561 | + * Return: a struct clk corresponding to the clock producer, or |
---|
| 562 | + * valid IS_ERR() condition containing errno. The implementation |
---|
| 563 | + * uses @dev and @id to determine the clock consumer, and thereby |
---|
| 564 | + * the clock producer. If no such clk is found, it returns NULL |
---|
| 565 | + * which serves as a dummy clk. That's the only difference compared |
---|
| 566 | + * to devm_clk_get_enabled(). |
---|
| 567 | + * |
---|
| 568 | + * The returned clk (if valid) is prepared and enabled. |
---|
| 569 | + * |
---|
| 570 | + * The clock will automatically be disabled, unprepared and freed |
---|
| 571 | + * when the device is unbound from the bus. |
---|
| 572 | + */ |
---|
| 573 | +struct clk *devm_clk_get_optional_enabled(struct device *dev, const char *id); |
---|
449 | 574 | |
---|
450 | 575 | /** |
---|
451 | 576 | * devm_get_clk_from_child - lookup and obtain a managed reference to a |
---|
.. | .. |
---|
463 | 588 | */ |
---|
464 | 589 | struct clk *devm_get_clk_from_child(struct device *dev, |
---|
465 | 590 | struct device_node *np, const char *con_id); |
---|
466 | | -/** |
---|
467 | | - * clk_rate_exclusive_get - get exclusivity over the rate control of a |
---|
468 | | - * producer |
---|
469 | | - * @clk: clock source |
---|
470 | | - * |
---|
471 | | - * This function allows drivers to get exclusive control over the rate of a |
---|
472 | | - * provider. It prevents any other consumer to execute, even indirectly, |
---|
473 | | - * opereation which could alter the rate of the provider or cause glitches |
---|
474 | | - * |
---|
475 | | - * If exlusivity is claimed more than once on clock, even by the same driver, |
---|
476 | | - * the rate effectively gets locked as exclusivity can't be preempted. |
---|
477 | | - * |
---|
478 | | - * Must not be called from within atomic context. |
---|
479 | | - * |
---|
480 | | - * Returns success (0) or negative errno. |
---|
481 | | - */ |
---|
482 | | -int clk_rate_exclusive_get(struct clk *clk); |
---|
483 | | - |
---|
484 | | -/** |
---|
485 | | - * clk_rate_exclusive_put - release exclusivity over the rate control of a |
---|
486 | | - * producer |
---|
487 | | - * @clk: clock source |
---|
488 | | - * |
---|
489 | | - * This function allows drivers to release the exclusivity it previously got |
---|
490 | | - * from clk_rate_exclusive_get() |
---|
491 | | - * |
---|
492 | | - * The caller must balance the number of clk_rate_exclusive_get() and |
---|
493 | | - * clk_rate_exclusive_put() calls. |
---|
494 | | - * |
---|
495 | | - * Must not be called from within atomic context. |
---|
496 | | - */ |
---|
497 | | -void clk_rate_exclusive_put(struct clk *clk); |
---|
498 | 591 | |
---|
499 | 592 | /** |
---|
500 | 593 | * clk_enable - inform the system when the clock source should be running. |
---|
.. | .. |
---|
791 | 884 | return NULL; |
---|
792 | 885 | } |
---|
793 | 886 | |
---|
| 887 | +static inline struct clk *devm_clk_get_prepared(struct device *dev, |
---|
| 888 | + const char *id) |
---|
| 889 | +{ |
---|
| 890 | + return NULL; |
---|
| 891 | +} |
---|
| 892 | + |
---|
| 893 | +static inline struct clk *devm_clk_get_enabled(struct device *dev, |
---|
| 894 | + const char *id) |
---|
| 895 | +{ |
---|
| 896 | + return NULL; |
---|
| 897 | +} |
---|
| 898 | + |
---|
794 | 899 | static inline struct clk *devm_clk_get_optional(struct device *dev, |
---|
795 | 900 | const char *id) |
---|
| 901 | +{ |
---|
| 902 | + return NULL; |
---|
| 903 | +} |
---|
| 904 | + |
---|
| 905 | +static inline struct clk *devm_clk_get_optional_prepared(struct device *dev, |
---|
| 906 | + const char *id) |
---|
| 907 | +{ |
---|
| 908 | + return NULL; |
---|
| 909 | +} |
---|
| 910 | + |
---|
| 911 | +static inline struct clk *devm_clk_get_optional_enabled(struct device *dev, |
---|
| 912 | + const char *id) |
---|
796 | 913 | { |
---|
797 | 914 | return NULL; |
---|
798 | 915 | } |
---|
.. | .. |
---|
829 | 946 | static inline void clk_bulk_put_all(int num_clks, struct clk_bulk_data *clks) {} |
---|
830 | 947 | |
---|
831 | 948 | static inline void devm_clk_put(struct device *dev, struct clk *clk) {} |
---|
832 | | - |
---|
833 | | - |
---|
834 | | -static inline int clk_rate_exclusive_get(struct clk *clk) |
---|
835 | | -{ |
---|
836 | | - return 0; |
---|
837 | | -} |
---|
838 | | - |
---|
839 | | -static inline void clk_rate_exclusive_put(struct clk *clk) {} |
---|
840 | 949 | |
---|
841 | 950 | static inline int clk_enable(struct clk *clk) |
---|
842 | 951 | { |
---|