From: Colin Cross Date: Wed, 8 Dec 2010 02:24:55 +0000 (-0800) Subject: ARM: tegra: clock: Round rate before dvfs X-Git-Tag: firefly_0821_release~9833^2~89^2~6 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=a8f05581f7aa230d07517e2d7e9ec33c5d3cb552;p=firefly-linux-kernel-4.4.55.git ARM: tegra: clock: Round rate before dvfs Call the clock's round_rate op, if it exists, before setting dvfs rate. Ensures dvfs is set to the rate the clock will be at after the later call to set_rate. Change-Id: I4c8e85991238492adc3c37aed57c7269f3b41a2c Signed-off-by: Colin Cross --- diff --git a/arch/arm/mach-tegra/clock.c b/arch/arm/mach-tegra/clock.c index 124af0f78782..e3936af38356 100644 --- a/arch/arm/mach-tegra/clock.c +++ b/arch/arm/mach-tegra/clock.c @@ -350,6 +350,7 @@ int clk_set_rate(struct clk *c, unsigned long rate) int ret = 0; unsigned long flags; unsigned long old_rate; + long new_rate; clk_lock_save(c, flags); @@ -363,6 +364,17 @@ int clk_set_rate(struct clk *c, unsigned long rate) if (rate > c->max_rate) rate = c->max_rate; + if (c->ops && c->ops->round_rate) { + new_rate = c->ops->round_rate(c, rate); + + if (new_rate < 0) { + ret = new_rate; + goto out; + } + + rate = new_rate; + } + if (clk_is_auto_dvfs(c) && rate > old_rate && c->refcnt > 0) { ret = tegra_dvfs_set_rate(c, rate); if (ret)