1 /*
2  * Generic OPP Interface
3  *
4  * Copyright (C) 2009-2010 Texas Instruments Incorporated.
5  *	Nishanth Menon
6  *	Romit Dasgupta
7  *	Kevin Hilman
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License version 2 as
11  * published by the Free Software Foundation.
12  */
13 
14 #ifndef __LINUX_OPP_H__
15 #define __LINUX_OPP_H__
16 
17 #include <linux/err.h>
18 #include <linux/cpufreq.h>
19 #include <linux/notifier.h>
20 
21 struct opp;
22 
23 enum opp_event {
24 	OPP_EVENT_ADD, OPP_EVENT_ENABLE, OPP_EVENT_DISABLE,
25 };
26 
27 #if defined(CONFIG_PM_OPP)
28 
29 unsigned long opp_get_voltage(struct opp *opp);
30 
31 unsigned long opp_get_freq(struct opp *opp);
32 
33 int opp_get_opp_count(struct device *dev);
34 
35 struct opp *opp_find_freq_exact(struct device *dev, unsigned long freq,
36 				bool available);
37 
38 struct opp *opp_find_freq_floor(struct device *dev, unsigned long *freq);
39 
40 struct opp *opp_find_freq_ceil(struct device *dev, unsigned long *freq);
41 
42 int opp_add(struct device *dev, unsigned long freq, unsigned long u_volt);
43 
44 int opp_enable(struct device *dev, unsigned long freq);
45 
46 int opp_disable(struct device *dev, unsigned long freq);
47 
48 struct srcu_notifier_head *opp_get_notifier(struct device *dev);
49 
50 #else
opp_get_voltage(struct opp * opp)51 static inline unsigned long opp_get_voltage(struct opp *opp)
52 {
53 	return 0;
54 }
55 
opp_get_freq(struct opp * opp)56 static inline unsigned long opp_get_freq(struct opp *opp)
57 {
58 	return 0;
59 }
60 
opp_get_opp_count(struct device * dev)61 static inline int opp_get_opp_count(struct device *dev)
62 {
63 	return 0;
64 }
65 
opp_find_freq_exact(struct device * dev,unsigned long freq,bool available)66 static inline struct opp *opp_find_freq_exact(struct device *dev,
67 					unsigned long freq, bool available)
68 {
69 	return ERR_PTR(-EINVAL);
70 }
71 
opp_find_freq_floor(struct device * dev,unsigned long * freq)72 static inline struct opp *opp_find_freq_floor(struct device *dev,
73 					unsigned long *freq)
74 {
75 	return ERR_PTR(-EINVAL);
76 }
77 
opp_find_freq_ceil(struct device * dev,unsigned long * freq)78 static inline struct opp *opp_find_freq_ceil(struct device *dev,
79 					unsigned long *freq)
80 {
81 	return ERR_PTR(-EINVAL);
82 }
83 
opp_add(struct device * dev,unsigned long freq,unsigned long u_volt)84 static inline int opp_add(struct device *dev, unsigned long freq,
85 					unsigned long u_volt)
86 {
87 	return -EINVAL;
88 }
89 
opp_enable(struct device * dev,unsigned long freq)90 static inline int opp_enable(struct device *dev, unsigned long freq)
91 {
92 	return 0;
93 }
94 
opp_disable(struct device * dev,unsigned long freq)95 static inline int opp_disable(struct device *dev, unsigned long freq)
96 {
97 	return 0;
98 }
99 
opp_get_notifier(struct device * dev)100 static inline struct srcu_notifier_head *opp_get_notifier(struct device *dev)
101 {
102 	return ERR_PTR(-EINVAL);
103 }
104 #endif		/* CONFIG_PM_OPP */
105 
106 #if defined(CONFIG_CPU_FREQ) && defined(CONFIG_PM_OPP)
107 int opp_init_cpufreq_table(struct device *dev,
108 			    struct cpufreq_frequency_table **table);
109 void opp_free_cpufreq_table(struct device *dev,
110 				struct cpufreq_frequency_table **table);
111 #else
opp_init_cpufreq_table(struct device * dev,struct cpufreq_frequency_table ** table)112 static inline int opp_init_cpufreq_table(struct device *dev,
113 			    struct cpufreq_frequency_table **table)
114 {
115 	return -EINVAL;
116 }
117 
118 static inline
opp_free_cpufreq_table(struct device * dev,struct cpufreq_frequency_table ** table)119 void opp_free_cpufreq_table(struct device *dev,
120 				struct cpufreq_frequency_table **table)
121 {
122 }
123 #endif		/* CONFIG_CPU_FREQ */
124 
125 #endif		/* __LINUX_OPP_H__ */
126