\r
/**\r
* struct vd_node: To Store All Voltage Domains' info\r
- * @vd_name: Voltage Domain's Name\r
- * @cur_volt: Voltage Domain's Current Voltage\r
- * @vd_list: Point of he Voltage Domain List Node\r
- * @pd_list: Head of Power Domain List Belongs to This Voltage Domain\r
- * @vd_voltreq_list: Head of Voltage Request List for Voltage Domain\r
+ * @name: Voltage Domain's Name\r
+ * @regulator_name: Voltage domain's regulator name\r
+ * @cur_volt: Voltage Domain's Current Voltage\r
+ * @regulator: Voltage Domain's regulator point\r
+ * @node: Point of he Voltage Domain List Node\r
+ * @pd_list: Head of Power Domain List Belongs to This Voltage Domain\r
+ * @req_volt_list: The list of clocks requests\r
+ * @dvfs_mutex: Lock\r
+ * @vd_dvfs_target: Callback function \r
*/\r
\r
struct vd_node {\r
- char *name;\r
- char *regulator_name;\r
- int cur_volt;\r
+ char *name;\r
+ char *regulator_name;\r
+ int cur_volt;\r
struct regulator *regulator;\r
- struct mutex dvfs_mutex;\r
struct list_head node;\r
struct list_head pd_list;\r
+ struct list_head req_volt_list;\r
+ struct mutex dvfs_mutex;\r
vd_dvfs_target_callback vd_dvfs_target;\r
};\r
-struct vd_node_lookup {\r
- struct vd_node *vd;\r
- char *regulator_name;\r
-};\r
+\r
/**\r
- * struct pd_node: To Store All Power Domains' info per Voltage Domain\r
- * @pd_name: Power Domain's Name\r
- * @cur_volt: Power Domain's Current Voltage\r
- * @pd_list: Point of the Power Domain List Node\r
- * @clk_list: Head of Power Domain's Clocks List\r
- * @pd_status: If The Power Domain On: 1 means on, 0 means off\r
+ * struct pd_node: To Store All Power Domains' info\r
+ * @name: Power Domain's Name\r
+ * @cur_volt: Power Domain's Current Voltage\r
+ * @pd_status: Power Domain's status\r
+ * @vd: Voltage Domain the power domain belongs to\r
+ * @pd_clk: Look power domain as a clock\r
+ * @node: List node to Voltage Domain\r
+ * @clk_list: Head of Power Domain's Clocks List\r
*/\r
struct pd_node {\r
- char *name;\r
- int cur_volt;\r
- unsigned char pd_status;\r
- struct vd_node *vd;\r
- struct clk *pd_clk;\r
+ char *name;\r
+ int cur_volt;\r
+ unsigned char pd_status;\r
+ struct vd_node *vd;\r
+ //struct clk *pd_clk;\r
struct list_head node;\r
struct list_head clk_list;\r
};\r
\r
struct pd_node_lookup {\r
- struct pd_node* pd;\r
+ struct pd_node *pd;\r
};\r
\r
struct clk_list{\r
- struct clk_node *dvfs_clk;\r
- struct list_head node;\r
+ struct clk_node *dvfs_clk;\r
+ struct list_head node;\r
};\r
\r
struct pds_list {\r
- struct clk_list clk_list;\r
- struct pd_node *pd;\r
+ struct clk_list clk_list;\r
+ struct pd_node *pd;\r
+};\r
+\r
+struct depend_list {\r
+ int req_volt;\r
+ struct clk_node *dvfs_clk;\r
+ struct vd_node *dep_vd;\r
+ struct list_head node2clk;\r
+ struct list_head node2vd;\r
+ struct cpufreq_frequency_table *dep_table;\r
+};\r
+\r
+struct depend_lookup {\r
+ char *clk_name;\r
+ struct clk_node *dvfs_clk;\r
+ struct vd_node *dep_vd;\r
+ struct depend_list dep_list;\r
+ struct cpufreq_frequency_table *dep_table;\r
};\r
\r
+/**\r
+ * struct clk_node: To Store All dvfs clocks' info\r
+ * @name: Dvfs clock's Name\r
+ * @set_freq: Dvfs clock's Current Frequency\r
+ * @set_volt: Dvfs clock's Current Voltage\r
+ * @enable_dvfs: Sign if DVFS clock enable\r
+ * @clk: System clk's point\r
+ * @pds: Power Domains dvfs clock belongs to\r
+ * @vd: Voltage Domains dvfs clock belongs to\r
+ * @depend_list: Dvfs Clock depend list\r
+ * @dvfs_nb: Notify list\r
+ * @dvfs_table: Frequency and voltage table for dvfs\r
+ * @clk_dvfs_target: Callback function\r
+ */\r
struct clk_node {\r
- char *name;\r
- int set_freq;//khz\r
- int set_volt;\r
- int enable_dvfs;\r
- struct clk *ck;\r
+ char *name;\r
+ int set_freq; //KHZ\r
+ int set_volt; //MV\r
+ int enable_dvfs;\r
+ struct clk *clk;\r
struct pds_list *pds;\r
struct vd_node *vd;\r
+ struct list_head depend_list;\r
+ struct notifier_block *dvfs_nb;\r
struct cpufreq_frequency_table *dvfs_table;\r
- struct notifier_block *dvfs_nb;\r
- struct list_head node;\r
- clk_dvfs_target_callback clk_dvfs_target;\r
+ clk_dvfs_target_callback clk_dvfs_target;\r
};\r
+struct dvfs_arm_table {\r
+ unsigned int frequency; /* kHz - doesn't need to be in ascending\r
+ * order */\r
+ unsigned int cpu_volt; /* any */\r
\r
+ unsigned int logic_volt;\r
+};\r
#ifdef CONFIG_DVFS\r
int rk30_dvfs_init(void);\r
int is_support_dvfs(struct clk_node *dvfs_info);\r
int dvfs_set_rate(struct clk *clk, unsigned long rate);\r
int clk_enable_dvfs(struct clk *clk);\r
int clk_disable_dvfs(struct clk *clk);\r
-int cpufreq_dvfs_init(struct clk *ck, struct cpufreq_frequency_table **table, clk_dvfs_target_callback clk_dvfs_target);\r
void dvfs_clk_register_set_rate_callback(struct clk *clk, clk_dvfs_target_callback clk_dvfs_target);\r
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 rk30_dvfs_init(void);\r
+int dvfs_set_depend_table(struct clk *clk, char *vd_name, struct cpufreq_frequency_table *table);\r
#else\r
-int rk30_dvfs_init(void){};\r
-int is_support_dvfs(struct clk_node *dvfs_info){};\r
-int dvfs_set_rate(struct clk *clk, unsigned long rate){};\r
-int clk_enable_dvfs(struct clk *clk){};\r
-int clk_disable_dvfs(struct clk *clk){};\r
-int cpufreq_dvfs_init(struct clk *ck, struct cpufreq_frequency_table **table, clk_dvfs_target_callback clk_dvfs_target){};\r
-void dvfs_clk_register_set_rate_callback(struct clk *clk, clk_dvfs_target_callback clk_dvfs_target){};\r
-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 rk30_dvfs_init(void){};\r
-\r
-\r
-\r
-\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
+static inline int dvfs_set_rate(struct clk *clk, unsigned long rate) { return 0; }\r
+static inline int clk_enable_dvfs(struct clk *clk) { return 0; }\r
+static inline int clk_disable_dvfs(struct clk *clk) { return 0; }\r
+static inline void dvfs_clk_register_set_rate_callback(struct clk *clk, clk_dvfs_target_callback clk_dvfs_target) {}\r
+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
#endif\r
\r
-\r
#endif\r