From: Colin Cross <ccross@android.com>
Date: Sat, 8 Jan 2011 21:59:15 +0000 (-0800)
Subject: ARM: tegra: powergate: Allow calling power up when already powered
X-Git-Tag: firefly_0821_release~9833^2~70^2
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=db23c5ae580ea8bba4bd10449c5571939aef8086;p=firefly-linux-kernel-4.4.55.git

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>
---

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);