dvfs : move dvfs.h to include/linux/rockchip/
author陈亮 <cl@rock-chips.com>
Fri, 28 Feb 2014 09:27:21 +0000 (01:27 -0800)
committer陈亮 <cl@rock-chips.com>
Fri, 28 Feb 2014 09:27:21 +0000 (01:27 -0800)
arch/arm/mach-rockchip/ddr_freq.c
arch/arm/mach-rockchip/dvfs.c
arch/arm/mach-rockchip/dvfs.h [deleted file]
arch/arm/mach-rockchip/rk3188-cpufreq.c
arch/arm/mach-rockchip/rk3188.c
arch/arm/mach-rockchip/rk3288.c
include/linux/rockchip/dvfs.h [new file with mode: 0644]

index 4385884489f035c9ae8eec3e725c7ad72692c8ed..b9c3b19e43ff61c590215dbd110756a93f931901 100644 (file)
@@ -16,9 +16,9 @@
 #include <asm/cacheflush.h>
 #include <asm/tlbflush.h>
 #include <linux/vmalloc.h>
+#include <linux/rockchip/dvfs.h>
 #include <dt-bindings/clock/ddr.h>
 
-#include "dvfs.h"
 #include "common.h"
 
 enum {
index 9701ecc78b548376222f9c434687031aa2ad6955..943399653ec92d43a5936e0f862bd45a475c6643 100644 (file)
@@ -19,7 +19,7 @@
 #include <linux/stat.h>
 #include <linux/of.h>
 #include <linux/opp.h>
-#include "dvfs.h"
+#include <linux/rockchip/dvfs.h>
 
 #define MHz    (1000 * 1000)
 static LIST_HEAD(rk_dvfs_tree);
diff --git a/arch/arm/mach-rockchip/dvfs.h b/arch/arm/mach-rockchip/dvfs.h
deleted file mode 100644 (file)
index 9155786..0000000
+++ /dev/null
@@ -1,195 +0,0 @@
-/* arch/arm/mach-rk30/rk30_dvfs.h
- *
- * Copyright (C) 2012 ROCKCHIP, Inc.
- *
- * This software is licensed under the terms of the GNU General Public
- * License version 2, as published by the Free Software Foundation, and
- * may be copied, distributed, and modified under those terms.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- */
-#ifndef _RK30_DVFS_H_
-#define _RK30_DVFS_H_
-
-#include <linux/device.h>
-#include <linux/clk-provider.h>
-
-struct dvfs_node;
-typedef int (*dvfs_set_rate_callback)(struct dvfs_node *clk_dvfs_node, unsigned long rate);
-typedef int (*clk_set_rate_callback)(struct clk *clk, unsigned long rate);
-
-/**
- * struct vd_node:     To Store All Voltage Domains' info
- * @name:              Voltage Domain's Name
- * @regulator_name:    Voltage domain's regulator name
- * @cur_volt:          Voltage Domain's Current Voltage
- * @regulator:         Voltage Domain's regulator point
- * @node:              Point of he Voltage Domain List Node
- * @pd_list:           Head of Power Domain List Belongs to This Voltage Domain
- * @req_volt_list:     The list of clocks requests
- * @dvfs_mutex:                Lock
- * @vd_dvfs_target:    Callback function       
- */
- #define VD_VOL_LIST_CNT (200)
- #define VD_LIST_RELATION_L 0
- #define VD_LIST_RELATION_H 1
-
-struct vd_node {
-       const char              *name;
-       const char              *regulator_name;
-       int                     volt_time_flag;// =0 ,is no initing checking ,>0 ,support,<0 not support
-       int                     mode_flag;// =0 ,is no initing checking ,>0 ,support,<0 not support
-       int                     cur_volt;
-       int                     volt_set_flag;
-       int                     suspend_volt;
-       struct regulator        *regulator;
-       struct list_head        node;
-       struct list_head        pd_list;
-       struct mutex            mutex;
-       dvfs_set_rate_callback  vd_dvfs_target;
-       unsigned int            n_voltages;
-       int volt_list[VD_VOL_LIST_CNT];
-};
-
-/**
- * struct pd_node:     To Store All Power Domains' info
- * @name:              Power Domain's Name
- * @cur_volt:          Power Domain's Current Voltage
- * @pd_status:         Power Domain's status
- * @vd:                        Voltage Domain the power domain belongs to
- * @pd_clk:            Look power domain as a clock
- * @node:              List node to Voltage Domain
- * @clk_list:          Head of Power Domain's Clocks List
- */
-struct pd_node {
-       const char              *name;
-       int                     cur_volt;
-       unsigned char           pd_status;
-       struct vd_node          *vd;
-       struct list_head        node;
-       struct list_head        clk_list;
-};
-
-/**
- * struct dvfs_node:   To Store All dvfs clocks' info
- * @name:              Dvfs clock's Name
- * @set_freq:          Dvfs clock's Current Frequency
- * @set_volt:          Dvfs clock's Current Voltage
- * @enable_dvfs:       Sign if DVFS clock enable
- * @clk:               System clk's point
- * @pd:                        Power Domains dvfs clock belongs to
- * @vd:                        Voltage Domains dvfs clock belongs to
- * @dvfs_nb:           Notify list
- * @dvfs_table:                Frequency and voltage table for dvfs
- * @clk_dvfs_target:   Callback function
- */
-struct dvfs_node {
-       struct device           dev;            //for opp
-       const char              *name;
-       int                     set_freq;       //KHZ
-       int                     set_volt;       //MV
-       int                     enable_count;
-       int                     freq_limit_en;  //sign if use limit frequency
-       unsigned int            min_rate;       //limit min frequency
-       unsigned int            max_rate;       //limit max frequency
-       unsigned int            last_set_rate;
-       struct clk              *clk;
-       struct pd_node          *pd;
-       struct vd_node          *vd;
-       struct list_head        node;
-       struct notifier_block   *dvfs_nb;
-       struct cpufreq_frequency_table  *dvfs_table;
-       struct cpufreq_frequency_table  *condition_freq_table;
-       clk_set_rate_callback   clk_dvfs_target;
-};
-
-
-
-#define DVFS_MHZ (1000*1000)
-#define DVFS_KHZ (1000)
-
-#define DVFS_V (1000*1000)
-#define DVFS_MV (1000)
-#if 0
-#define DVFS_DBG(fmt, args...) printk(KERN_INFO "DVFS DBG:\t"fmt, ##args)
-#else
-#define DVFS_DBG(fmt, args...) {while(0);}
-#endif
-
-#define DVFS_ERR(fmt, args...) printk(KERN_ERR "DVFS ERR:\t"fmt, ##args)
-#define DVFS_LOG(fmt, args...) printk(KERN_DEBUG "DVFS LOG:\t"fmt, ##args)
-#define DVFS_WARNING(fmt, args...) printk(KERN_WARNING "DVFS WARNING:\t"fmt, ##args)
-
-#define DVFS_SET_VOLT_FAILURE  1
-#define DVFS_SET_VOLT_SUCCESS  0
-
-#define dvfs_regulator_get(dev,id) regulator_get((dev),(id))
-#define dvfs_regulator_put(regu) regulator_put((regu))
-#define dvfs_regulator_set_voltage(regu,min_uV,max_uV) regulator_set_voltage((regu),(min_uV),(max_uV))
-#define dvfs_regulator_get_voltage(regu) regulator_get_voltage((regu))
-#define dvfs_regulator_set_voltage_time(regu, old_uV, new_uV) regulator_set_voltage_time((regu), (old_uV), (new_uV))
-#define dvfs_regulator_set_mode(regu, mode) regulator_set_mode((regu), (mode))
-#define dvfs_regulator_get_mode(regu) regulator_get_mode((regu))
-#define dvfs_regulator_list_voltage(regu,selector) regulator_list_voltage((regu),(selector))
-#define dvfs_regulator_count_voltages(regu) regulator_count_voltages((regu))
-
-#define clk_dvfs_node_get(a,b) clk_get((a),(b))
-#define clk_dvfs_node_get_rate_kz(a) (clk_get_rate((a))/1000)
-#define clk_dvfs_node_set_rate(a,b) clk_set_rate((a),(b))
-
-typedef void (*avs_init_fn)(void);
-typedef u8 (*avs_get_val_fn)(void);
-struct avs_ctr_st {
-       avs_init_fn             avs_init;
-       avs_get_val_fn          avs_get_val;
-};
-
-#ifdef CONFIG_DVFS
-struct dvfs_node *clk_get_dvfs_node(char *clk_name);
-void clk_put_dvfs_node(struct dvfs_node *clk_dvfs_node);
-unsigned long dvfs_clk_get_rate(struct dvfs_node *clk_dvfs_node);
-int dvfs_clk_set_rate(struct dvfs_node *clk_dvfs_node, unsigned long rate);
-int dvfs_clk_enable(struct dvfs_node *clk_dvfs_node);
-void dvfs_clk_disable(struct dvfs_node *clk_dvfs_node);
-int dvfs_clk_prepare_enable(struct dvfs_node *clk_dvfs_node);
-void dvfs_clk_disable_unprepare(struct dvfs_node *clk_dvfs_node);
-int dvfs_set_freq_volt_table(struct dvfs_node *clk_dvfs_node, struct cpufreq_frequency_table *table);
-int dvfs_clk_register_set_rate_callback(struct dvfs_node *clk_dvfs_node, clk_set_rate_callback clk_dvfs_target);
-int dvfs_clk_enable_limit(struct dvfs_node *clk_dvfs_node, unsigned int min_rate, unsigned max_rate);
-int dvfs_clk_disable_limit(struct dvfs_node *clk_dvfs_node);
-int clk_disable_dvfs(struct dvfs_node *clk_dvfs_node);
-int clk_enable_dvfs(struct dvfs_node *clk_dvfs_node);
-struct cpufreq_frequency_table *dvfs_get_freq_volt_table(struct dvfs_node *clk_dvfs_node);
-int rk_regist_vd(struct vd_node *vd);
-int rk_regist_pd(struct pd_node *pd);
-int rk_regist_clk(struct dvfs_node *clk_dvfs_node);
-int of_dvfs_init(void);
-
-#else
-
-static inline struct dvfs_node *clk_get_dvfs_node(char *clk_name){ return NULL; };
-static inline void clk_put_dvfs_node(struct dvfs_node *clk_dvfs_node){ return; };
-static inline unsigned long dvfs_clk_get_rate(struct dvfs_node *clk_dvfs_node){ return 0; };
-static inline int dvfs_clk_set_rate(struct dvfs_node *clk_dvfs_node, unsigned long rate){ return 0; };
-static inline int dvfs_clk_enable(struct dvfs_node *clk_dvfs_node){ return 0; };
-static inline void dvfs_clk_disable(struct dvfs_node *clk_dvfs_node){ };
-static inline int dvfs_clk_prepare_enable(struct dvfs_node *clk_dvfs_node){ return 0; };
-static inline void dvfs_clk_disable_unprepare(struct dvfs_node *clk_dvfs_node){ };
-static inline int dvfs_set_freq_volt_table(struct dvfs_node *clk_dvfs_node, struct cpufreq_frequency_table *table){ return 0; };
-static inline int dvfs_clk_register_set_rate_callback(struct dvfs_node *clk_dvfs_node, clk_set_rate_callback clk_dvfs_target){ return 0; };
-static inline int dvfs_clk_enable_limit(struct dvfs_node *clk_dvfs_node, unsigned int min_rate, unsigned max_rate){ return 0; };
-static inline int dvfs_clk_disable_limit(struct dvfs_node *clk_dvfs_node){ return 0; };
-static inline int clk_disable_dvfs(struct dvfs_node *clk_dvfs_node){ return 0; };
-static inline int clk_enable_dvfs(struct dvfs_node *clk_dvfs_node){ return 0; };
-static inline struct cpufreq_frequency_table *dvfs_get_freq_volt_table(struct dvfs_node *clk_dvfs_node){ return NULL; };
-static inline int rk_regist_vd(struct vd_node *vd){ return 0; };
-static inline int rk_regist_pd(struct pd_node *pd){ return 0; };
-static inline int rk_regist_clk(struct dvfs_node *clk_dvfs_node){ return 0; };
-static inline int of_dvfs_init(void){ return 0; };
-#endif
-
-#endif
index f9b5d9082fac41fbcda57e00904f770331ce8485..3a66589d0f29ef4771c03571b1c4bd9b580c9972 100644 (file)
 #include <linux/fs.h>
 #include <linux/miscdevice.h>
 #include <linux/string.h>
+#include <linux/rockchip/dvfs.h>
 #include <asm/smp_plat.h>
 #include <asm/cpu.h>
 #include <asm/unistd.h>
 #include <asm/uaccess.h>
 
-#include "dvfs.h"
 #include "cpu.h"
 
 #define VERSION "2.2"
index 9c23678188d41e36b0fd861d479d9729a569cb4a..e03253cf64c3f30fe539252e3d6a44f40820b5fe 100644 (file)
@@ -21,6 +21,7 @@
 #include <linux/kernel.h>
 #include <linux/of_address.h>
 #include <linux/of_platform.h>
+#include <linux/rockchip/dvfs.h>
 #include <asm/mach/arch.h>
 #include <asm/mach/map.h>
 #include "common.h"
@@ -32,7 +33,6 @@
 #include "loader.h"
 #include "pmu.h"
 #include "sram.h"
-#include "dvfs.h"
 
 #define RK3188_DEVICE(name) \
        { \
index efdccf1147360b2012e68fec708aba3cdd2c4e96..f1050c65c2d6e5e7fccae1f81075fb363eb1f79b 100644 (file)
@@ -23,6 +23,7 @@
 #include <linux/of_platform.h>
 #include <asm/mach/arch.h>
 #include <asm/mach/map.h>
+#include <linux/rockchip/dvfs.h>
 #include "common.h"
 #include "cpu.h"
 #include "cpu_axi.h"
@@ -32,7 +33,6 @@
 #include "loader.h"
 #include "pmu.h"
 #include "sram.h"
-#include "dvfs.h"
 
 #define RK3288_DEVICE(name) \
        { \
diff --git a/include/linux/rockchip/dvfs.h b/include/linux/rockchip/dvfs.h
new file mode 100644 (file)
index 0000000..9155786
--- /dev/null
@@ -0,0 +1,195 @@
+/* arch/arm/mach-rk30/rk30_dvfs.h
+ *
+ * Copyright (C) 2012 ROCKCHIP, Inc.
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+#ifndef _RK30_DVFS_H_
+#define _RK30_DVFS_H_
+
+#include <linux/device.h>
+#include <linux/clk-provider.h>
+
+struct dvfs_node;
+typedef int (*dvfs_set_rate_callback)(struct dvfs_node *clk_dvfs_node, unsigned long rate);
+typedef int (*clk_set_rate_callback)(struct clk *clk, unsigned long rate);
+
+/**
+ * struct vd_node:     To Store All Voltage Domains' info
+ * @name:              Voltage Domain's Name
+ * @regulator_name:    Voltage domain's regulator name
+ * @cur_volt:          Voltage Domain's Current Voltage
+ * @regulator:         Voltage Domain's regulator point
+ * @node:              Point of he Voltage Domain List Node
+ * @pd_list:           Head of Power Domain List Belongs to This Voltage Domain
+ * @req_volt_list:     The list of clocks requests
+ * @dvfs_mutex:                Lock
+ * @vd_dvfs_target:    Callback function       
+ */
+ #define VD_VOL_LIST_CNT (200)
+ #define VD_LIST_RELATION_L 0
+ #define VD_LIST_RELATION_H 1
+
+struct vd_node {
+       const char              *name;
+       const char              *regulator_name;
+       int                     volt_time_flag;// =0 ,is no initing checking ,>0 ,support,<0 not support
+       int                     mode_flag;// =0 ,is no initing checking ,>0 ,support,<0 not support
+       int                     cur_volt;
+       int                     volt_set_flag;
+       int                     suspend_volt;
+       struct regulator        *regulator;
+       struct list_head        node;
+       struct list_head        pd_list;
+       struct mutex            mutex;
+       dvfs_set_rate_callback  vd_dvfs_target;
+       unsigned int            n_voltages;
+       int volt_list[VD_VOL_LIST_CNT];
+};
+
+/**
+ * struct pd_node:     To Store All Power Domains' info
+ * @name:              Power Domain's Name
+ * @cur_volt:          Power Domain's Current Voltage
+ * @pd_status:         Power Domain's status
+ * @vd:                        Voltage Domain the power domain belongs to
+ * @pd_clk:            Look power domain as a clock
+ * @node:              List node to Voltage Domain
+ * @clk_list:          Head of Power Domain's Clocks List
+ */
+struct pd_node {
+       const char              *name;
+       int                     cur_volt;
+       unsigned char           pd_status;
+       struct vd_node          *vd;
+       struct list_head        node;
+       struct list_head        clk_list;
+};
+
+/**
+ * struct dvfs_node:   To Store All dvfs clocks' info
+ * @name:              Dvfs clock's Name
+ * @set_freq:          Dvfs clock's Current Frequency
+ * @set_volt:          Dvfs clock's Current Voltage
+ * @enable_dvfs:       Sign if DVFS clock enable
+ * @clk:               System clk's point
+ * @pd:                        Power Domains dvfs clock belongs to
+ * @vd:                        Voltage Domains dvfs clock belongs to
+ * @dvfs_nb:           Notify list
+ * @dvfs_table:                Frequency and voltage table for dvfs
+ * @clk_dvfs_target:   Callback function
+ */
+struct dvfs_node {
+       struct device           dev;            //for opp
+       const char              *name;
+       int                     set_freq;       //KHZ
+       int                     set_volt;       //MV
+       int                     enable_count;
+       int                     freq_limit_en;  //sign if use limit frequency
+       unsigned int            min_rate;       //limit min frequency
+       unsigned int            max_rate;       //limit max frequency
+       unsigned int            last_set_rate;
+       struct clk              *clk;
+       struct pd_node          *pd;
+       struct vd_node          *vd;
+       struct list_head        node;
+       struct notifier_block   *dvfs_nb;
+       struct cpufreq_frequency_table  *dvfs_table;
+       struct cpufreq_frequency_table  *condition_freq_table;
+       clk_set_rate_callback   clk_dvfs_target;
+};
+
+
+
+#define DVFS_MHZ (1000*1000)
+#define DVFS_KHZ (1000)
+
+#define DVFS_V (1000*1000)
+#define DVFS_MV (1000)
+#if 0
+#define DVFS_DBG(fmt, args...) printk(KERN_INFO "DVFS DBG:\t"fmt, ##args)
+#else
+#define DVFS_DBG(fmt, args...) {while(0);}
+#endif
+
+#define DVFS_ERR(fmt, args...) printk(KERN_ERR "DVFS ERR:\t"fmt, ##args)
+#define DVFS_LOG(fmt, args...) printk(KERN_DEBUG "DVFS LOG:\t"fmt, ##args)
+#define DVFS_WARNING(fmt, args...) printk(KERN_WARNING "DVFS WARNING:\t"fmt, ##args)
+
+#define DVFS_SET_VOLT_FAILURE  1
+#define DVFS_SET_VOLT_SUCCESS  0
+
+#define dvfs_regulator_get(dev,id) regulator_get((dev),(id))
+#define dvfs_regulator_put(regu) regulator_put((regu))
+#define dvfs_regulator_set_voltage(regu,min_uV,max_uV) regulator_set_voltage((regu),(min_uV),(max_uV))
+#define dvfs_regulator_get_voltage(regu) regulator_get_voltage((regu))
+#define dvfs_regulator_set_voltage_time(regu, old_uV, new_uV) regulator_set_voltage_time((regu), (old_uV), (new_uV))
+#define dvfs_regulator_set_mode(regu, mode) regulator_set_mode((regu), (mode))
+#define dvfs_regulator_get_mode(regu) regulator_get_mode((regu))
+#define dvfs_regulator_list_voltage(regu,selector) regulator_list_voltage((regu),(selector))
+#define dvfs_regulator_count_voltages(regu) regulator_count_voltages((regu))
+
+#define clk_dvfs_node_get(a,b) clk_get((a),(b))
+#define clk_dvfs_node_get_rate_kz(a) (clk_get_rate((a))/1000)
+#define clk_dvfs_node_set_rate(a,b) clk_set_rate((a),(b))
+
+typedef void (*avs_init_fn)(void);
+typedef u8 (*avs_get_val_fn)(void);
+struct avs_ctr_st {
+       avs_init_fn             avs_init;
+       avs_get_val_fn          avs_get_val;
+};
+
+#ifdef CONFIG_DVFS
+struct dvfs_node *clk_get_dvfs_node(char *clk_name);
+void clk_put_dvfs_node(struct dvfs_node *clk_dvfs_node);
+unsigned long dvfs_clk_get_rate(struct dvfs_node *clk_dvfs_node);
+int dvfs_clk_set_rate(struct dvfs_node *clk_dvfs_node, unsigned long rate);
+int dvfs_clk_enable(struct dvfs_node *clk_dvfs_node);
+void dvfs_clk_disable(struct dvfs_node *clk_dvfs_node);
+int dvfs_clk_prepare_enable(struct dvfs_node *clk_dvfs_node);
+void dvfs_clk_disable_unprepare(struct dvfs_node *clk_dvfs_node);
+int dvfs_set_freq_volt_table(struct dvfs_node *clk_dvfs_node, struct cpufreq_frequency_table *table);
+int dvfs_clk_register_set_rate_callback(struct dvfs_node *clk_dvfs_node, clk_set_rate_callback clk_dvfs_target);
+int dvfs_clk_enable_limit(struct dvfs_node *clk_dvfs_node, unsigned int min_rate, unsigned max_rate);
+int dvfs_clk_disable_limit(struct dvfs_node *clk_dvfs_node);
+int clk_disable_dvfs(struct dvfs_node *clk_dvfs_node);
+int clk_enable_dvfs(struct dvfs_node *clk_dvfs_node);
+struct cpufreq_frequency_table *dvfs_get_freq_volt_table(struct dvfs_node *clk_dvfs_node);
+int rk_regist_vd(struct vd_node *vd);
+int rk_regist_pd(struct pd_node *pd);
+int rk_regist_clk(struct dvfs_node *clk_dvfs_node);
+int of_dvfs_init(void);
+
+#else
+
+static inline struct dvfs_node *clk_get_dvfs_node(char *clk_name){ return NULL; };
+static inline void clk_put_dvfs_node(struct dvfs_node *clk_dvfs_node){ return; };
+static inline unsigned long dvfs_clk_get_rate(struct dvfs_node *clk_dvfs_node){ return 0; };
+static inline int dvfs_clk_set_rate(struct dvfs_node *clk_dvfs_node, unsigned long rate){ return 0; };
+static inline int dvfs_clk_enable(struct dvfs_node *clk_dvfs_node){ return 0; };
+static inline void dvfs_clk_disable(struct dvfs_node *clk_dvfs_node){ };
+static inline int dvfs_clk_prepare_enable(struct dvfs_node *clk_dvfs_node){ return 0; };
+static inline void dvfs_clk_disable_unprepare(struct dvfs_node *clk_dvfs_node){ };
+static inline int dvfs_set_freq_volt_table(struct dvfs_node *clk_dvfs_node, struct cpufreq_frequency_table *table){ return 0; };
+static inline int dvfs_clk_register_set_rate_callback(struct dvfs_node *clk_dvfs_node, clk_set_rate_callback clk_dvfs_target){ return 0; };
+static inline int dvfs_clk_enable_limit(struct dvfs_node *clk_dvfs_node, unsigned int min_rate, unsigned max_rate){ return 0; };
+static inline int dvfs_clk_disable_limit(struct dvfs_node *clk_dvfs_node){ return 0; };
+static inline int clk_disable_dvfs(struct dvfs_node *clk_dvfs_node){ return 0; };
+static inline int clk_enable_dvfs(struct dvfs_node *clk_dvfs_node){ return 0; };
+static inline struct cpufreq_frequency_table *dvfs_get_freq_volt_table(struct dvfs_node *clk_dvfs_node){ return NULL; };
+static inline int rk_regist_vd(struct vd_node *vd){ return 0; };
+static inline int rk_regist_pd(struct pd_node *pd){ return 0; };
+static inline int rk_regist_clk(struct dvfs_node *clk_dvfs_node){ return 0; };
+static inline int of_dvfs_init(void){ return 0; };
+#endif
+
+#endif