[PATCH 06/08] OMAP3 SRF: Voltage scaling support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Adds Voltage scaling support

Signed-off-by: Rajendra Nayak <rnayak@xxxxxx>

---
 arch/arm/mach-omap2/board-3430sdp.c       |   26 +++++++++++++-------------
 arch/arm/mach-omap2/resource34xx.c        |   17 ++++++++++++++++-
 arch/arm/mach-omap2/resource34xx.h        |    1 +
 arch/arm/plat-omap/include/mach/omap-pm.h |    2 +-
 4 files changed, 31 insertions(+), 15 deletions(-)

Index: linux-omap-2.6/arch/arm/mach-omap2/board-3430sdp.c
===================================================================
--- linux-omap-2.6.orig/arch/arm/mach-omap2/board-3430sdp.c	2008-11-10 12:09:13.000000000 +0530
+++ linux-omap-2.6/arch/arm/mach-omap2/board-3430sdp.c	2008-11-10 12:09:14.000000000 +0530
@@ -71,39 +71,39 @@
 static struct omap_opp mpu_rate_table[] = {
 	{0, 0, 0},
 	/*OPP1*/
-	{S125M, VDD1_OPP1, 0},
+	{S125M, VDD1_OPP1, 0x18},
 	/*OPP2*/
-	{S250M, VDD1_OPP2, 0},
+	{S250M, VDD1_OPP2, 0x20},
 	/*OPP3*/
-	{S500M, VDD1_OPP3, 0},
+	{S500M, VDD1_OPP3, 0x30},
 	/*OPP4*/
-	{S550M, VDD1_OPP4, 0},
+	{S550M, VDD1_OPP4, 0x36},
 	/*OPP5*/
-	{S600M, VDD1_OPP5, 0},
+	{S600M, VDD1_OPP5, 0x3C},
 };
 
 static struct omap_opp l3_rate_table[] = {
 	{0, 0, 0},
 	/*OPP1*/
-	{0, VDD2_OPP1, 0},
+	{0, VDD2_OPP1, 0x18},
 	/*OPP2*/
-	{S83M, VDD2_OPP2, 0},
+	{S83M, VDD2_OPP2, 0x20},
 	/*OPP3*/
-	{S166M, VDD2_OPP3, 0},
+	{S166M, VDD2_OPP3, 0x2C},
 };
 
 struct omap_opp dsp_rate_table[] = {
 	{0, 0, 0},
 	/*OPP1*/
-	{S90M, VDD1_OPP1, 0},
+	{S90M, VDD1_OPP1, 0x18},
 	/*OPP2*/
-	{S180M, VDD1_OPP2, 0},
+	{S180M, VDD1_OPP2, 0x20},
 	/*OPP3*/
-	{S360M, VDD1_OPP3, 0},
+	{S360M, VDD1_OPP3, 0x30},
 	/*OPP4*/
-	{S400M, VDD1_OPP4, 0},
+	{S400M, VDD1_OPP4, 0x36},
 	/*OPP5*/
-	{S430M, VDD1_OPP5, 0},
+	{S430M, VDD1_OPP5, 0x3C},
 };
 
 #define CONFIG_DISABLE_HFCLK 1
Index: linux-omap-2.6/arch/arm/mach-omap2/resource34xx.c
===================================================================
--- linux-omap-2.6.orig/arch/arm/mach-omap2/resource34xx.c	2008-11-10 12:09:13.000000000 +0530
+++ linux-omap-2.6/arch/arm/mach-omap2/resource34xx.c	2008-11-10 12:09:14.000000000 +0530
@@ -19,6 +19,7 @@
 #include <linux/pm_qos_params.h>
 #include <mach/powerdomain.h>
 #include <mach/clockdomain.h>
+#include "smartreflex.h"
 #include "resource34xx.h"
 #include "pm.h"
 
@@ -157,10 +158,24 @@ void init_opp(struct shared_resource *re
 int set_opp(struct shared_resource *resp, u32 target_level)
 {
 	unsigned long mpu_freq;
+
+	if (resp->curr_level == target_level)
+		return 0;
+
 	if (strcmp(resp->name, "vdd1_opp") == 0) {
 		mpu_freq = get_freq(mpu_opps + MAX_VDD1_OPP,
 					target_level);
-		clk_set_rate(vdd1_clk, mpu_freq);
+		if (resp->curr_level > target_level) {
+			/* Scale Frequency and then voltage */
+			clk_set_rate(vdd1_clk, mpu_freq);
+			sr_voltagescale_vcbypass(PRCM_VDD1,
+					mpu_opps[target_level-1].vsel);
+		} else {
+			/* Scale Voltage and then frequency */
+			sr_voltagescale_vcbypass(PRCM_VDD1,
+					mpu_opps[target_level-1].vsel);
+			clk_set_rate(vdd1_clk, mpu_freq);
+		}
 		resp->curr_level = curr_vdd1_prcm_set->opp_id;
 	} else if (strcmp(resp->name, "vdd2_opp") == 0) {
 		/* Not supported yet */
Index: linux-omap-2.6/arch/arm/mach-omap2/resource34xx.h
===================================================================
--- linux-omap-2.6.orig/arch/arm/mach-omap2/resource34xx.h	2008-11-10 12:09:13.000000000 +0530
+++ linux-omap-2.6/arch/arm/mach-omap2/resource34xx.h	2008-11-10 12:09:14.000000000 +0530
@@ -31,6 +31,7 @@ extern struct omap_opp *curr_vdd1_prcm_s
 extern struct omap_opp *curr_vdd2_prcm_set;
 extern unsigned long get_freq(struct  omap_opp *, unsigned short);
 extern unsigned short get_opp(struct omap_opp *, unsigned long);
+extern int sr_voltagescale_vcbypass(u32 target_opp, u8 vsel);
 
 /*
  * mpu_latency/core_latency are used to control the cpuidle C state.
Index: linux-omap-2.6/arch/arm/plat-omap/include/mach/omap-pm.h
===================================================================
--- linux-omap-2.6.orig/arch/arm/plat-omap/include/mach/omap-pm.h	2008-11-10 12:09:13.000000000 +0530
+++ linux-omap-2.6/arch/arm/plat-omap/include/mach/omap-pm.h	2008-11-10 12:09:14.000000000 +0530
@@ -30,7 +30,7 @@
 struct omap_opp {
 	unsigned long rate;
 	u8 opp_id;
-	u16 min_vdd;
+	u16 vsel;
 };
 
 extern struct omap_opp *mpu_opps;

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux