diff options
author | Rajendra Nayak <rnayak@codeaurora.org> | 2016-11-21 07:37:11 +0100 |
---|---|---|
committer | Stephen Boyd <sboyd@codeaurora.org> | 2016-11-23 20:00:05 +0100 |
commit | 081ba80206d6b53d45ee31bc6c90871e8cfbc117 (patch) | |
tree | 82a093ec8ca01dd8fe7173ce23964873c5696d09 /drivers/clk/qcom/common.c | |
parent | Merge tag 'clk-v4.10-exynos5433' of git://linuxtv.org/snawrocki/samsung into ... (diff) | |
download | linux-081ba80206d6b53d45ee31bc6c90871e8cfbc117.tar.xz linux-081ba80206d6b53d45ee31bc6c90871e8cfbc117.zip |
clk: qcom: Add rcg ops to return floor value closest to the requested rate
The default behaviour with clk_rcg2_ops is for the
clk_round_rate()/clk_set_rate() to return/set a ceil clock
rate closest to the requested rate by looking up the corresponding
frequency table.
However, we do have some instances (mainly sdcc on various platforms)
of clients expecting a clk_set_rate() to set a floor value instead.
Add a new clk_rcg2_floor_ops to handle this for such specific
rcg instances
Signed-off-by: Rajendra Nayak <rnayak@codeaurora.org>
Signed-off-by: Ritesh Harjani <riteshh@codeaurora.org>
Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
Diffstat (limited to 'drivers/clk/qcom/common.c')
-rw-r--r-- | drivers/clk/qcom/common.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/clk/qcom/common.c b/drivers/clk/qcom/common.c index 94569f461ba7..cfab7b400381 100644 --- a/drivers/clk/qcom/common.c +++ b/drivers/clk/qcom/common.c @@ -46,6 +46,22 @@ struct freq_tbl *qcom_find_freq(const struct freq_tbl *f, unsigned long rate) } EXPORT_SYMBOL_GPL(qcom_find_freq); +const struct freq_tbl *qcom_find_freq_floor(const struct freq_tbl *f, + unsigned long rate) +{ + const struct freq_tbl *best = NULL; + + for ( ; f->freq; f++) { + if (rate >= f->freq) + best = f; + else + break; + } + + return best; +} +EXPORT_SYMBOL_GPL(qcom_find_freq_floor); + int qcom_find_src_index(struct clk_hw *hw, const struct parent_map *map, u8 src) { int i, num_parents = clk_hw_get_num_parents(hw); |