rk30:sdk: add arm logic table analysis function in dvfs.c
authorchenxing <chenxing@rock-chips.com>
Wed, 25 Apr 2012 08:38:48 +0000 (16:38 +0800)
committerchenxing <chenxing@rock-chips.com>
Wed, 25 Apr 2012 08:38:48 +0000 (16:38 +0800)
arch/arm/mach-rk30/dvfs.c
arch/arm/mach-rk30/include/mach/dvfs.h

index 95a84a8097aa1294e185c49f0f14d078adc1b58d..1f3b9ac8bc85dc1c64b26c2e10117b93f372e04e 100755 (executable)
@@ -257,6 +257,27 @@ int dvfs_set_depend_table(struct clk *clk, char *vd_name, struct cpufreq_frequen
        return 0;\r
 }\r
 \r
+int dvfs_set_arm_logic_volt(struct dvfs_arm_table *dvfs_cpu_logic_table, \r
+               struct cpufreq_frequency_table *cpu_dvfs_table,\r
+               struct cpufreq_frequency_table *dep_cpu2core_table)\r
+{\r
+       int i = 0;\r
+       for (i = 0; dvfs_cpu_logic_table[i].frequency != CPUFREQ_TABLE_END; i++) {\r
+               cpu_dvfs_table[i].frequency = dvfs_cpu_logic_table[i].frequency;\r
+               cpu_dvfs_table[i].index = dvfs_cpu_logic_table[i].cpu_volt;\r
+\r
+               dep_cpu2core_table[i].frequency = dvfs_cpu_logic_table[i].frequency;\r
+               dep_cpu2core_table[i].index = dvfs_cpu_logic_table[i].logic_volt;\r
+       }\r
+\r
+       cpu_dvfs_table[i].frequency = CPUFREQ_TABLE_END;\r
+       dep_cpu2core_table[i].frequency = CPUFREQ_TABLE_END;\r
+\r
+       dvfs_set_freq_volt_table(clk_get(NULL, "cpu"), cpu_dvfs_table);\r
+       dvfs_set_depend_table(clk_get(NULL, "cpu"), "vd_core", dep_cpu2core_table);\r
+       return 0;\r
+}\r
+\r
 int clk_enable_dvfs(struct clk *clk)\r
 {\r
        struct regulator *regulator;\r
index 8f4ce715ede494d91510a19f45fa6cad4e19fd70..256e6adbdb0b5fda45d3e66fd00a6a1f151236d0 100755 (executable)
@@ -125,6 +125,7 @@ struct clk_node {
        struct cpufreq_frequency_table  *dvfs_table;\r
        clk_dvfs_target_callback        clk_dvfs_target;\r
 };\r
+\r
 struct dvfs_arm_table {\r
        unsigned int    frequency; /* kHz - doesn't need to be in ascending\r
                                    * order */\r
@@ -132,6 +133,7 @@ struct dvfs_arm_table {
 \r
        unsigned int    logic_volt;\r
 };\r
+\r
 #ifdef CONFIG_DVFS\r
 int rk30_dvfs_init(void);\r
 int is_support_dvfs(struct clk_node *dvfs_info);\r
@@ -142,6 +144,7 @@ void dvfs_clk_register_set_rate_callback(struct clk *clk, clk_dvfs_target_callba
 struct cpufreq_frequency_table *dvfs_get_freq_volt_table(struct clk *clk);\r
 int dvfs_set_freq_volt_table(struct clk *clk, struct cpufreq_frequency_table *table);\r
 int dvfs_set_depend_table(struct clk *clk, char *vd_name, struct cpufreq_frequency_table *table);\r
+int dvfs_set_arm_logic_volt(struct dvfs_arm_table *dvfs_cpu_logic_table, struct cpufreq_frequency_table *cpu_dvfs_table, struct cpufreq_frequency_table *dep_cpu2core_table);\r
 #else\r
 static inline int rk30_dvfs_init(void) { return 0; }\r
 static inline int is_support_dvfs(struct clk_node *dvfs_info) { return 0; }\r
@@ -152,6 +155,8 @@ static inline void dvfs_clk_register_set_rate_callback(struct clk *clk, clk_dvfs
 static inline struct cpufreq_frequency_table *dvfs_get_freq_volt_table(struct clk *clk) { return NULL; }\r
 static inline int dvfs_set_freq_volt_table(struct clk *clk, struct cpufreq_frequency_table *table) { return 0; }\r
 static inline int dvfs_set_depend_table(struct clk *clk, char *vd_name, struct cpufreq_frequency_table *table) {return 0;}\r
+int dvfs_set_arm_logic_volt(struct dvfs_arm_table *dvfs_cpu_logic_table, struct cpufreq_frequency_table *cpu_dvfs_table, struct cpufreq_frequency_table *dep_cpu2core_table){ return 0; }\r
+\r
 #endif\r
 \r
 #endif\r