diff options
| -rw-r--r-- | drivers/clk/clk.c | 43 | ||||
| -rw-r--r-- | include/linux/clk-provider.h | 1 |
2 files changed, 25 insertions, 19 deletions
diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c index efdfd009c270..d9cbae06549f 100644 --- a/drivers/clk/clk.c +++ b/drivers/clk/clk.c | |||
| @@ -558,25 +558,6 @@ int clk_enable(struct clk *clk) | |||
| 558 | EXPORT_SYMBOL_GPL(clk_enable); | 558 | EXPORT_SYMBOL_GPL(clk_enable); |
| 559 | 559 | ||
| 560 | /** | 560 | /** |
| 561 | * clk_get_rate - return the rate of clk | ||
| 562 | * @clk: the clk whose rate is being returned | ||
| 563 | * | ||
| 564 | * Simply returns the cached rate of the clk. Does not query the hardware. If | ||
| 565 | * clk is NULL then returns 0. | ||
| 566 | */ | ||
| 567 | unsigned long clk_get_rate(struct clk *clk) | ||
| 568 | { | ||
| 569 | unsigned long rate; | ||
| 570 | |||
| 571 | mutex_lock(&prepare_lock); | ||
| 572 | rate = __clk_get_rate(clk); | ||
| 573 | mutex_unlock(&prepare_lock); | ||
| 574 | |||
| 575 | return rate; | ||
| 576 | } | ||
| 577 | EXPORT_SYMBOL_GPL(clk_get_rate); | ||
| 578 | |||
| 579 | /** | ||
| 580 | * __clk_round_rate - round the given rate for a clk | 561 | * __clk_round_rate - round the given rate for a clk |
| 581 | * @clk: round the rate of this clock | 562 | * @clk: round the rate of this clock |
| 582 | * | 563 | * |
| @@ -702,6 +683,30 @@ static void __clk_recalc_rates(struct clk *clk, unsigned long msg) | |||
| 702 | } | 683 | } |
| 703 | 684 | ||
| 704 | /** | 685 | /** |
| 686 | * clk_get_rate - return the rate of clk | ||
| 687 | * @clk: the clk whose rate is being returned | ||
| 688 | * | ||
| 689 | * Simply returns the cached rate of the clk, unless CLK_GET_RATE_NOCACHE flag | ||
| 690 | * is set, which means a recalc_rate will be issued. | ||
| 691 | * If clk is NULL then returns 0. | ||
| 692 | */ | ||
| 693 | unsigned long clk_get_rate(struct clk *clk) | ||
| 694 | { | ||
| 695 | unsigned long rate; | ||
| 696 | |||
| 697 | mutex_lock(&prepare_lock); | ||
| 698 | |||
| 699 | if (clk && (clk->flags & CLK_GET_RATE_NOCACHE)) | ||
| 700 | __clk_recalc_rates(clk, 0); | ||
| 701 | |||
| 702 | rate = __clk_get_rate(clk); | ||
| 703 | mutex_unlock(&prepare_lock); | ||
| 704 | |||
| 705 | return rate; | ||
| 706 | } | ||
| 707 | EXPORT_SYMBOL_GPL(clk_get_rate); | ||
| 708 | |||
| 709 | /** | ||
| 705 | * __clk_speculate_rates | 710 | * __clk_speculate_rates |
| 706 | * @clk: first clk in the subtree | 711 | * @clk: first clk in the subtree |
| 707 | * @parent_rate: the "future" rate of clk's parent | 712 | * @parent_rate: the "future" rate of clk's parent |
diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h index 77335fac943e..1b15307cd466 100644 --- a/include/linux/clk-provider.h +++ b/include/linux/clk-provider.h | |||
| @@ -26,6 +26,7 @@ | |||
| 26 | #define CLK_IGNORE_UNUSED BIT(3) /* do not gate even if unused */ | 26 | #define CLK_IGNORE_UNUSED BIT(3) /* do not gate even if unused */ |
| 27 | #define CLK_IS_ROOT BIT(4) /* root clk, has no parent */ | 27 | #define CLK_IS_ROOT BIT(4) /* root clk, has no parent */ |
| 28 | #define CLK_IS_BASIC BIT(5) /* Basic clk, can't do a to_clk_foo() */ | 28 | #define CLK_IS_BASIC BIT(5) /* Basic clk, can't do a to_clk_foo() */ |
| 29 | #define CLK_GET_RATE_NOCACHE BIT(6) /* do not use the cached clk rate */ | ||
| 29 | 30 | ||
| 30 | struct clk_hw; | 31 | struct clk_hw; |
| 31 | 32 | ||
