From 33486335839f87b4927a2a590b586137adf42ad5 Mon Sep 17 00:00:00 2001
From: chenxing <chenxing@rock-chips.com>
Date: Wed, 25 Apr 2012 15:17:27 +0800
Subject: [PATCH] rk30:sdk: add arm and logic dvfs table in board-rk30-sdk.c

---
 arch/arm/mach-rk30/board-rk30-sdk.c | 46 ++++++++++++++++++++++-------
 1 file changed, 35 insertions(+), 11 deletions(-)

diff --git a/arch/arm/mach-rk30/board-rk30-sdk.c b/arch/arm/mach-rk30/board-rk30-sdk.c
index b1986841a479..bd18e171c279 100644
--- a/arch/arm/mach-rk30/board-rk30-sdk.c
+++ b/arch/arm/mach-rk30/board-rk30-sdk.c
@@ -1412,23 +1412,47 @@ static void __init rk30_reserve(void)
 	board_mem_reserved();
 }
 
-static struct cpufreq_frequency_table cpu_dvfs_table[] = {
-	{.frequency    	= 252*1000, .index    = 1000*1000},
-	{.frequency    	= 504*1000, .index    = 1000*1000},
-	{.frequency     = 816*1000, .index    = 1000*1000},//logic 1.025V
-	{.frequency     = 1008*1000,.index    = 1025*1000},
-	{.frequency     = 1200*1000,.index    = 1100*1000},
-	{.frequency     = 1272*1000,.index    = 1150*1000},//logic 1.050V
-	{.frequency     = 1416*1000,.index    = 1225*1000},//logic 1.100V
-	{.frequency     = 1512*1000,.index    = 1300*1000},//logic 1.125V
-	{.frequency     = 1608*1000,.index    = 1350*1000},//logic 1.175V
-	{.frequency	= CPUFREQ_TABLE_END},
+/**
+ * dvfs_cpu_logic_table: table for arm and logic dvfs 
+ * @frequency	: arm frequency
+ * @cpu_volt	: arm voltage depend on frequency
+ * @logic_volt	: logic voltage arm requests depend on frequency
+ * comments	: min arm/logic voltage
+ */
+static struct dvfs_arm_table dvfs_cpu_logic_table[] = {
+	{.frequency = 252 * 1000,	.cpu_volt = 1025 * 1000,	.logic_volt = 1025 * 1000},//0.975V/1.000V
+	{.frequency = 504 * 1000,	.cpu_volt = 1025 * 1000,	.logic_volt = 1025 * 1000},//0.975V/1.000V
+	{.frequency = 816 * 1000,	.cpu_volt = 1050 * 1000,	.logic_volt = 1050 * 1000},//1.000V/1.025V
+	{.frequency = 1008 * 1000,	.cpu_volt = 1050 * 1000,	.logic_volt = 1050 * 1000},//1.025V/1.050V
+	{.frequency = 1200 * 1000,	.cpu_volt = 1150 * 1000,	.logic_volt = 1100 * 1000},//1.100V/1.050V
+	{.frequency = 1272 * 1000,	.cpu_volt = 1200 * 1000,	.logic_volt = 1150 * 1000},//1.150V/1.100V
+	{.frequency = 1416 * 1000,	.cpu_volt = 1275 * 1000,	.logic_volt = 1150 * 1000},//1.225V/1.100V
+	{.frequency = 1512 * 1000,	.cpu_volt = 1325 * 1000,	.logic_volt = 1200 * 1000},//1.300V/1.150V
+	{.frequency = 1608 * 1000,	.cpu_volt = 1350 * 1000,	.logic_volt = 1200 * 1000},//1.325V/1.175V
+	{.frequency = CPUFREQ_TABLE_END},
 };
 
+#define DVFS_CPU_TABLE_SIZE	(ARRAY_SIZE(dvfs_cpu_logic_table))
+static struct cpufreq_frequency_table cpu_dvfs_table[DVFS_CPU_TABLE_SIZE];
+static struct cpufreq_frequency_table dep_cpu2core_table[DVFS_CPU_TABLE_SIZE];
+
 void __init board_clock_init(void)
 {
+	int i = 0;
+	for (i = 0; dvfs_cpu_logic_table[i].frequency != CPUFREQ_TABLE_END; i++) {
+		cpu_dvfs_table[i].frequency = dvfs_cpu_logic_table[i].frequency;
+		cpu_dvfs_table[i].index = dvfs_cpu_logic_table[i].cpu_volt;
+
+		dep_cpu2core_table[i].frequency = dvfs_cpu_logic_table[i].frequency;
+		dep_cpu2core_table[i].index = dvfs_cpu_logic_table[i].logic_volt;
+	}
+
+	cpu_dvfs_table[i].frequency = CPUFREQ_TABLE_END;
+	dep_cpu2core_table[i].frequency = CPUFREQ_TABLE_END;
+	
 	rk30_clock_data_init(periph_pll_default, codec_pll_default, RK30_CLOCKS_DEFAULT_FLAGS);
 	dvfs_set_freq_volt_table(clk_get(NULL, "cpu"), cpu_dvfs_table);
+	dvfs_set_depend_table(clk_get(NULL, "cpu"), "vd_core", dep_cpu2core_table);
 }
 
 MACHINE_START(RK30, "RK30board")
-- 
2.34.1