diff options
author | Colin Cross <ccross@android.com> | 2011-01-08 13:59:15 -0800 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2011-11-30 21:36:52 -0800 |
commit | c435e85ea6830cc00f6a606830d6d42c59d2dbc4 (patch) | |
tree | 74d9b9057dda8460d480231ef1b4ffc28e26e03f /arch/arm/mach-tegra/powergate.c | |
parent | f0cd326e64c8cc2e47784d61696c89dce926987e (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 3cee9aa1f2c8..9089f774af6d 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); |