msm: acpuclock-8960: Skip HFPLL regulator during PLL reprogramming

When briefly disabling HFPLLs to reprogram their rates, there is
no need to de-assert and re-assert requests for the PLL's power rails.
Skip these the regulator enable/disable steps to save potential latency
waiting for the regulator calls to return.

Change-Id: I1f00b00123178a27655fd0d70834ac809149e694
Signed-off-by: Matt Wagantall <mattw@codeaurora.org>
diff --git a/arch/arm/mach-msm/acpuclock-8960.c b/arch/arm/mach-msm/acpuclock-8960.c
index 408f77b..1cc1499 100644
--- a/arch/arm/mach-msm/acpuclock-8960.c
+++ b/arch/arm/mach-msm/acpuclock-8960.c
@@ -734,25 +734,28 @@
 }
 
 /* Enable an already-configured HFPLL. */
-static void hfpll_enable(struct scalable *sc)
+static void hfpll_enable(struct scalable *sc, bool skip_regulators)
 {
 	int rc;
 
-	if (cpu_is_msm8960()) {
-		rc = rpm_vreg_set_voltage(sc->vreg[VREG_HFPLL_A].rpm_vreg_id,
-				sc->vreg[VREG_HFPLL_A].rpm_vreg_voter, 2100000,
-				sc->vreg[VREG_HFPLL_A].max_vdd, 0);
+	if (!skip_regulators) {
+		if (cpu_is_msm8960()) {
+			rc = rpm_vreg_set_voltage(
+					sc->vreg[VREG_HFPLL_A].rpm_vreg_id,
+					sc->vreg[VREG_HFPLL_A].rpm_vreg_voter,
+					2100000,
+					sc->vreg[VREG_HFPLL_A].max_vdd, 0);
+			if (rc)
+				pr_err("%s regulator enable failed (%d)\n",
+					sc->vreg[VREG_HFPLL_A].name, rc);
+		}
+		rc = rpm_vreg_set_voltage(sc->vreg[VREG_HFPLL_B].rpm_vreg_id,
+				sc->vreg[VREG_HFPLL_B].rpm_vreg_voter, 1800000,
+				sc->vreg[VREG_HFPLL_B].max_vdd, 0);
 		if (rc)
 			pr_err("%s regulator enable failed (%d)\n",
-				sc->vreg[VREG_HFPLL_A].name, rc);
+				sc->vreg[VREG_HFPLL_B].name, rc);
 	}
-	rc = rpm_vreg_set_voltage(sc->vreg[VREG_HFPLL_B].rpm_vreg_id,
-			sc->vreg[VREG_HFPLL_B].rpm_vreg_voter, 1800000,
-			sc->vreg[VREG_HFPLL_B].max_vdd, 0);
-	if (rc)
-		pr_err("%s regulator enable failed (%d)\n",
-			sc->vreg[VREG_HFPLL_B].name, rc);
-
 	/* Disable PLL bypass mode. */
 	writel_relaxed(0x2, sc->hfpll_base + HFPLL_MODE);
 
@@ -775,7 +778,7 @@
 }
 
 /* Disable a HFPLL for power-savings or while its being reprogrammed. */
-static void hfpll_disable(struct scalable *sc)
+static void hfpll_disable(struct scalable *sc, bool skip_regulators)
 {
 	int rc;
 
@@ -785,20 +788,23 @@
 	 */
 	writel_relaxed(0, sc->hfpll_base + HFPLL_MODE);
 
-	rc = rpm_vreg_set_voltage(sc->vreg[VREG_HFPLL_B].rpm_vreg_id,
-			sc->vreg[VREG_HFPLL_B].rpm_vreg_voter, 0,
-			0, 0);
-	if (rc)
-		pr_err("%s regulator enable failed (%d)\n",
-			sc->vreg[VREG_HFPLL_B].name, rc);
-
-	if (cpu_is_msm8960()) {
-		rc = rpm_vreg_set_voltage(sc->vreg[VREG_HFPLL_A].rpm_vreg_id,
-				sc->vreg[VREG_HFPLL_A].rpm_vreg_voter, 0,
+	if (!skip_regulators) {
+		rc = rpm_vreg_set_voltage(sc->vreg[VREG_HFPLL_B].rpm_vreg_id,
+				sc->vreg[VREG_HFPLL_B].rpm_vreg_voter, 0,
 				0, 0);
 		if (rc)
 			pr_err("%s regulator enable failed (%d)\n",
-				sc->vreg[VREG_HFPLL_A].name, rc);
+				sc->vreg[VREG_HFPLL_B].name, rc);
+
+		if (cpu_is_msm8960()) {
+			rc = rpm_vreg_set_voltage(
+					sc->vreg[VREG_HFPLL_A].rpm_vreg_id,
+					sc->vreg[VREG_HFPLL_A].rpm_vreg_voter,
+					0, 0, 0);
+			if (rc)
+				pr_err("%s regulator enable failed (%d)\n",
+					sc->vreg[VREG_HFPLL_A].name, rc);
+		}
 	}
 }
 
@@ -862,9 +868,9 @@
 		set_pri_clk_src(sc, PRI_SRC_SEL_SEC_SRC);
 
 		/* Program CPU HFPLL. */
-		hfpll_disable(sc);
+		hfpll_disable(sc, 1);
 		hfpll_set_rate(sc, tgt_s);
-		hfpll_enable(sc);
+		hfpll_enable(sc, 1);
 
 		/* Move CPU to HFPLL source. */
 		set_pri_clk_src(sc, tgt_s->pri_src_sel);
@@ -880,10 +886,10 @@
 			set_sec_clk_src(sc, tgt_s->sec_src_sel);
 			set_pri_clk_src(sc, tgt_s->pri_src_sel);
 		}
-		hfpll_disable(sc);
+		hfpll_disable(sc, 0);
 	} else if (strt_s->src != HFPLL && tgt_s->src == HFPLL) {
 		hfpll_set_rate(sc, tgt_s);
-		hfpll_enable(sc);
+		hfpll_enable(sc, 0);
 		/*
 		 * If responding to CPU_UP_PREPARE, we can't change CP15
 		 * registers for the CPU that's coming up since we're not
@@ -1141,7 +1147,7 @@
 	pr_debug("Initializing HFPLL%d\n", sc - scalable);
 
 	/* Disable the PLL for re-programming. */
-	hfpll_disable(sc);
+	hfpll_disable(sc, 0);
 
 	/* Configure PLL parameters for integer mode. */
 	writel_relaxed(0x7845C665, sc->hfpll_base + HFPLL_CONFIG_CTL);
@@ -1153,7 +1159,7 @@
 
 	/* Set an initial rate and enable the PLL. */
 	hfpll_set_rate(sc, tgt_s);
-	hfpll_enable(sc);
+	hfpll_enable(sc, 0);
 }
 
 /* Voltage regulator initialization. */