ARM: tegra: clock: Round rate before dvfs
authorColin Cross <ccross@android.com>
Wed, 8 Dec 2010 02:24:55 +0000 (18:24 -0800)
committerColin Cross <ccross@android.com>
Thu, 9 Dec 2010 02:12:08 +0000 (18:12 -0800)
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 <ccross@android.com>
arch/arm/mach-tegra/clock.c

index 124af0f78782d2a954c15c77c50ee381c643d260..e3936af38356a64318173cee4971a390cdf48faa 100644 (file)
@@ -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)