msm: clock: Enforce voltage requirements when using clk_set_min_rate()

A couple drivers may use the clk_set_min_rate() API to set rates.
Prior to the voltage scaling reorg in commit e18bbc839c, this API
enforced voltage constraints.  It no longer does. Restore this
behaviour.

Change-Id: Ia80fef0b30b940830d024e087591e25e6e1c62b4
Signed-off-by: Matt Wagantall <mattw@codeaurora.org>
diff --git a/arch/arm/mach-msm/clock.c b/arch/arm/mach-msm/clock.c
index de89382..4f3ad95 100644
--- a/arch/arm/mach-msm/clock.c
+++ b/arch/arm/mach-msm/clock.c
@@ -230,12 +230,13 @@
 }
 EXPORT_SYMBOL(clk_get_rate);
 
-int clk_set_rate(struct clk *clk, unsigned long rate)
+static int _clk_set_rate(struct clk *clk, unsigned long rate,
+			 int (*set_fn)(struct clk *, unsigned))
 {
 	unsigned long start_rate, flags;
 	int rc;
 
-	if (!clk->ops->set_rate)
+	if (!set_fn)
 		return -ENOSYS;
 
 	spin_lock_irqsave(&clk->lock, flags);
@@ -245,13 +246,13 @@
 		rc = vote_rate_vdd(clk, rate);
 		if (rc)
 			goto err_vote_vdd;
-		rc = clk->ops->set_rate(clk, rate);
+		rc = set_fn(clk, rate);
 		if (rc)
 			goto err_set_rate;
 		/* Release vdd requirements for starting frequency. */
 		unvote_rate_vdd(clk, start_rate);
 	} else {
-		rc = clk->ops->set_rate(clk, rate);
+		rc = set_fn(clk, rate);
 	}
 	spin_unlock_irqrestore(&clk->lock, flags);
 	return rc;
@@ -262,7 +263,6 @@
 	spin_unlock_irqrestore(&clk->lock, flags);
 	return rc;
 }
-EXPORT_SYMBOL(clk_set_rate);
 
 long clk_round_rate(struct clk *clk, unsigned long rate)
 {
@@ -273,12 +273,15 @@
 }
 EXPORT_SYMBOL(clk_round_rate);
 
+int clk_set_rate(struct clk *clk, unsigned long rate)
+{
+	return _clk_set_rate(clk, rate, clk->ops->set_rate);
+}
+EXPORT_SYMBOL(clk_set_rate);
+
 int clk_set_min_rate(struct clk *clk, unsigned long rate)
 {
-	if (!clk->ops->set_min_rate)
-		return -ENOSYS;
-
-	return clk->ops->set_min_rate(clk, rate);
+	return _clk_set_rate(clk, rate, clk->ops->set_min_rate);
 }
 EXPORT_SYMBOL(clk_set_min_rate);