summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Cross <ccross@android.com>2011-01-08 13:59:15 -0800
committerColin Cross <ccross@android.com>2011-01-08 14:42:59 -0800
commitdb23c5ae580ea8bba4bd10449c5571939aef8086 (patch)
tree9826d8051cfd7fa87558e047dcbad7ae1a413b28
parent4b1622335df5b1b464873b89468443c88c0f38d7 (diff)
ARM: tegra: powergate: Allow calling power up when already powered
Allow calling tegra_powergate_sequence_power_up on a partition that is already powered. Reset the partition, and return success with the clock enabled. Change-Id: I776c6a84091f0bb8faca22d87b3fabf0cfede564 Signed-off-by: Colin Cross <ccross@android.com>
-rw-r--r--arch/arm/mach-tegra/powergate.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/arch/arm/mach-tegra/powergate.c b/arch/arm/mach-tegra/powergate.c
index 583a7e3751ac..3d75e1e2d4a1 100644
--- a/arch/arm/mach-tegra/powergate.c
+++ b/arch/arm/mach-tegra/powergate.c
@@ -124,10 +124,33 @@ int tegra_powergate_remove_clamping(int id)
}
/* Must be called with clk disabled, and returns with clk enabled */
+static int tegra_powergate_reset_module(struct clk *clk)
+{
+ int ret;
+
+ tegra_periph_reset_assert(clk);
+
+ udelay(10);
+
+ ret = clk_enable(clk);
+ if (ret)
+ return ret;
+
+ udelay(10);
+
+ tegra_periph_reset_deassert(clk);
+
+ return 0;
+}
+
+/* Must be called with clk disabled, and returns with clk enabled */
int tegra_powergate_sequence_power_up(int id, struct clk *clk)
{
int ret;
+ if (tegra_powergate_is_powered(id))
+ return tegra_powergate_reset_module(clk);
+
tegra_periph_reset_assert(clk);
ret = tegra_powergate_power_on(id);