diff options
author | Colin Cross <ccross@android.com> | 2011-01-08 13:59:15 -0800 |
---|---|---|
committer | Colin Cross <ccross@android.com> | 2011-01-08 14:42:59 -0800 |
commit | db23c5ae580ea8bba4bd10449c5571939aef8086 (patch) | |
tree | 9826d8051cfd7fa87558e047dcbad7ae1a413b28 /arch/arm/mach-tegra/powergate.c | |
parent | 4b1622335df5b1b464873b89468443c88c0f38d7 (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>
Diffstat (limited to 'arch/arm/mach-tegra/powergate.c')
-rw-r--r-- | arch/arm/mach-tegra/powergate.c | 23 |
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); |