From db23c5ae580ea8bba4bd10449c5571939aef8086 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Sat, 8 Jan 2011 13:59:15 -0800 Subject: [PATCH] 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 --- arch/arm/mach-tegra/powergate.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) 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 @@ -123,11 +123,34 @@ int tegra_powergate_remove_clamping(int id) return 0; } +/* 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); -- 2.34.1