[ARM] tegra: Disable clocks left on by bootloader
authorColin Cross <ccross@android.com>
Thu, 21 Oct 2010 00:47:18 +0000 (17:47 -0700)
committerColin Cross <ccross@android.com>
Mon, 25 Oct 2010 21:41:32 +0000 (14:41 -0700)
Change-Id: I6651ab59b738787ec94f358d5789d950c3d1a563
Signed-off-by: Colin Cross <ccross@android.com>
arch/arm/mach-tegra/clock.c

index 8625b013742b2fae58bf918145368091c831ba44..008614d44e97f4bece92e6e36281203d0ee9c76b 100644 (file)
@@ -511,6 +511,30 @@ int __init tegra_init_dvfs(void)
 
 late_initcall(tegra_init_dvfs);
 
+int __init tegra_disable_boot_clocks(void)
+{
+       unsigned long flags;
+
+       struct clk *c;
+
+       spin_lock_irqsave(&clock_lock, flags);
+
+       list_for_each_entry(c, &clocks, node) {
+               if (c->refcnt == 0 && c->state == ON &&
+                               c->ops && c->ops->disable) {
+                       pr_warning("Disabling clock %s left on by bootloader\n",
+                               c->name);
+                       c->ops->disable(c);
+                       c->state = OFF;
+               }
+       }
+
+       spin_unlock_irqrestore(&clock_lock, flags);
+
+       return 0;
+}
+late_initcall(tegra_disable_boot_clocks);
+
 #ifdef CONFIG_DEBUG_FS
 static struct dentry *clk_debugfs_root;