From: Tomeu Vizoso Date: Tue, 17 Mar 2015 09:36:13 +0000 (+0100) Subject: clk: tegra: Have EMC clock implement determine_rate() X-Git-Tag: KARO-TXA5-2015-06-26~139^2~1^2~4 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=8b4d9ad078488a8c4367311cf3db44d6cf847cd3;p=karo-tx-linux.git clk: tegra: Have EMC clock implement determine_rate() instead of round_rate, so we can take rate constraints into account when choosing the best rate. Signed-off-by: Tomeu Vizoso Acked-by: Mike Turquette Signed-off-by: Thierry Reding --- diff --git a/drivers/clk/tegra/clk-emc.c b/drivers/clk/tegra/clk-emc.c index 704fff78a914..615da43a508d 100644 --- a/drivers/clk/tegra/clk-emc.c +++ b/drivers/clk/tegra/clk-emc.c @@ -117,8 +117,11 @@ static unsigned long emc_recalc_rate(struct clk_hw *hw, * safer since things have EMC rate floors. Also don't touch parent_rate * since we don't want the CCF to play with our parent clocks. */ -static long emc_round_rate(struct clk_hw *hw, unsigned long rate, - unsigned long *parent_rate) +static long emc_determine_rate(struct clk_hw *hw, unsigned long rate, + unsigned long min_rate, + unsigned long max_rate, + unsigned long *best_parent_rate, + struct clk_hw **best_parent_hw) { struct tegra_clk_emc *tegra; u8 ram_code = tegra_read_ram_code(); @@ -133,7 +136,15 @@ static long emc_round_rate(struct clk_hw *hw, unsigned long rate, timing = tegra->timings + i; - if (timing->rate >= rate) + if (timing->rate > max_rate) { + i = min(i, 1); + return tegra->timings[i - 1].rate; + } + + if (timing->rate < min_rate) + continue; + + if (timing->rate >= rate) return timing->rate; } @@ -452,7 +463,7 @@ static int load_timings_from_dt(struct tegra_clk_emc *tegra, static const struct clk_ops tegra_clk_emc_ops = { .recalc_rate = emc_recalc_rate, - .round_rate = emc_round_rate, + .determine_rate = emc_determine_rate, .set_rate = emc_set_rate, .get_parent = emc_get_parent, };