root/include/linux/pm_opp.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. dev_pm_opp_get_opp_table
  2. dev_pm_opp_get_opp_table_indexed
  3. dev_pm_opp_put_opp_table
  4. dev_pm_opp_get_voltage
  5. dev_pm_opp_get_freq
  6. dev_pm_opp_get_level
  7. dev_pm_opp_is_turbo
  8. dev_pm_opp_get_opp_count
  9. dev_pm_opp_get_max_clock_latency
  10. dev_pm_opp_get_max_volt_latency
  11. dev_pm_opp_get_max_transition_latency
  12. dev_pm_opp_get_suspend_opp_freq
  13. dev_pm_opp_find_freq_exact
  14. dev_pm_opp_find_level_exact
  15. dev_pm_opp_find_freq_floor
  16. dev_pm_opp_find_freq_ceil_by_volt
  17. dev_pm_opp_find_freq_ceil
  18. dev_pm_opp_put
  19. dev_pm_opp_add
  20. dev_pm_opp_remove
  21. dev_pm_opp_remove_all_dynamic
  22. dev_pm_opp_enable
  23. dev_pm_opp_disable
  24. dev_pm_opp_register_notifier
  25. dev_pm_opp_unregister_notifier
  26. dev_pm_opp_set_supported_hw
  27. dev_pm_opp_put_supported_hw
  28. dev_pm_opp_register_set_opp_helper
  29. dev_pm_opp_unregister_set_opp_helper
  30. dev_pm_opp_set_prop_name
  31. dev_pm_opp_put_prop_name
  32. dev_pm_opp_set_regulators
  33. dev_pm_opp_put_regulators
  34. dev_pm_opp_set_clkname
  35. dev_pm_opp_put_clkname
  36. dev_pm_opp_attach_genpd
  37. dev_pm_opp_detach_genpd
  38. dev_pm_opp_xlate_performance_state
  39. dev_pm_opp_set_rate
  40. dev_pm_opp_set_sharing_cpus
  41. dev_pm_opp_get_sharing_cpus
  42. dev_pm_opp_remove_table
  43. dev_pm_opp_cpumask_remove_table
  44. dev_pm_opp_of_add_table
  45. dev_pm_opp_of_add_table_indexed
  46. dev_pm_opp_of_remove_table
  47. dev_pm_opp_of_cpumask_add_table
  48. dev_pm_opp_of_cpumask_remove_table
  49. dev_pm_opp_of_get_sharing_cpus
  50. dev_pm_opp_of_get_opp_desc_node
  51. dev_pm_opp_get_of_node
  52. dev_pm_opp_of_register_em
  53. of_get_required_opp_performance_state

   1 /* SPDX-License-Identifier: GPL-2.0-only */
   2 /*
   3  * Generic OPP Interface
   4  *
   5  * Copyright (C) 2009-2010 Texas Instruments Incorporated.
   6  *      Nishanth Menon
   7  *      Romit Dasgupta
   8  *      Kevin Hilman
   9  */
  10 
  11 #ifndef __LINUX_OPP_H__
  12 #define __LINUX_OPP_H__
  13 
  14 #include <linux/err.h>
  15 #include <linux/notifier.h>
  16 
  17 struct clk;
  18 struct regulator;
  19 struct dev_pm_opp;
  20 struct device;
  21 struct opp_table;
  22 
  23 enum dev_pm_opp_event {
  24         OPP_EVENT_ADD, OPP_EVENT_REMOVE, OPP_EVENT_ENABLE, OPP_EVENT_DISABLE,
  25 };
  26 
  27 /**
  28  * struct dev_pm_opp_supply - Power supply voltage/current values
  29  * @u_volt:     Target voltage in microvolts corresponding to this OPP
  30  * @u_volt_min: Minimum voltage in microvolts corresponding to this OPP
  31  * @u_volt_max: Maximum voltage in microvolts corresponding to this OPP
  32  * @u_amp:      Maximum current drawn by the device in microamperes
  33  *
  34  * This structure stores the voltage/current values for a single power supply.
  35  */
  36 struct dev_pm_opp_supply {
  37         unsigned long u_volt;
  38         unsigned long u_volt_min;
  39         unsigned long u_volt_max;
  40         unsigned long u_amp;
  41 };
  42 
  43 /**
  44  * struct dev_pm_opp_info - OPP freq/voltage/current values
  45  * @rate:       Target clk rate in hz
  46  * @supplies:   Array of voltage/current values for all power supplies
  47  *
  48  * This structure stores the freq/voltage/current values for a single OPP.
  49  */
  50 struct dev_pm_opp_info {
  51         unsigned long rate;
  52         struct dev_pm_opp_supply *supplies;
  53 };
  54 
  55 /**
  56  * struct dev_pm_set_opp_data - Set OPP data
  57  * @old_opp:    Old OPP info
  58  * @new_opp:    New OPP info
  59  * @regulators: Array of regulator pointers
  60  * @regulator_count: Number of regulators
  61  * @clk:        Pointer to clk
  62  * @dev:        Pointer to the struct device
  63  *
  64  * This structure contains all information required for setting an OPP.
  65  */
  66 struct dev_pm_set_opp_data {
  67         struct dev_pm_opp_info old_opp;
  68         struct dev_pm_opp_info new_opp;
  69 
  70         struct regulator **regulators;
  71         unsigned int regulator_count;
  72         struct clk *clk;
  73         struct device *dev;
  74 };
  75 
  76 #if defined(CONFIG_PM_OPP)
  77 
  78 struct opp_table *dev_pm_opp_get_opp_table(struct device *dev);
  79 struct opp_table *dev_pm_opp_get_opp_table_indexed(struct device *dev, int index);
  80 void dev_pm_opp_put_opp_table(struct opp_table *opp_table);
  81 
  82 unsigned long dev_pm_opp_get_voltage(struct dev_pm_opp *opp);
  83 
  84 unsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp);
  85 
  86 unsigned int dev_pm_opp_get_level(struct dev_pm_opp *opp);
  87 
  88 bool dev_pm_opp_is_turbo(struct dev_pm_opp *opp);
  89 
  90 int dev_pm_opp_get_opp_count(struct device *dev);
  91 unsigned long dev_pm_opp_get_max_clock_latency(struct device *dev);
  92 unsigned long dev_pm_opp_get_max_volt_latency(struct device *dev);
  93 unsigned long dev_pm_opp_get_max_transition_latency(struct device *dev);
  94 unsigned long dev_pm_opp_get_suspend_opp_freq(struct device *dev);
  95 
  96 struct dev_pm_opp *dev_pm_opp_find_freq_exact(struct device *dev,
  97                                               unsigned long freq,
  98                                               bool available);
  99 struct dev_pm_opp *dev_pm_opp_find_level_exact(struct device *dev,
 100                                                unsigned int level);
 101 
 102 struct dev_pm_opp *dev_pm_opp_find_freq_floor(struct device *dev,
 103                                               unsigned long *freq);
 104 struct dev_pm_opp *dev_pm_opp_find_freq_ceil_by_volt(struct device *dev,
 105                                                      unsigned long u_volt);
 106 
 107 struct dev_pm_opp *dev_pm_opp_find_freq_ceil(struct device *dev,
 108                                              unsigned long *freq);
 109 void dev_pm_opp_put(struct dev_pm_opp *opp);
 110 
 111 int dev_pm_opp_add(struct device *dev, unsigned long freq,
 112                    unsigned long u_volt);
 113 void dev_pm_opp_remove(struct device *dev, unsigned long freq);
 114 void dev_pm_opp_remove_all_dynamic(struct device *dev);
 115 
 116 int dev_pm_opp_enable(struct device *dev, unsigned long freq);
 117 
 118 int dev_pm_opp_disable(struct device *dev, unsigned long freq);
 119 
 120 int dev_pm_opp_register_notifier(struct device *dev, struct notifier_block *nb);
 121 int dev_pm_opp_unregister_notifier(struct device *dev, struct notifier_block *nb);
 122 
 123 struct opp_table *dev_pm_opp_set_supported_hw(struct device *dev, const u32 *versions, unsigned int count);
 124 void dev_pm_opp_put_supported_hw(struct opp_table *opp_table);
 125 struct opp_table *dev_pm_opp_set_prop_name(struct device *dev, const char *name);
 126 void dev_pm_opp_put_prop_name(struct opp_table *opp_table);
 127 struct opp_table *dev_pm_opp_set_regulators(struct device *dev, const char * const names[], unsigned int count);
 128 void dev_pm_opp_put_regulators(struct opp_table *opp_table);
 129 struct opp_table *dev_pm_opp_set_clkname(struct device *dev, const char * name);
 130 void dev_pm_opp_put_clkname(struct opp_table *opp_table);
 131 struct opp_table *dev_pm_opp_register_set_opp_helper(struct device *dev, int (*set_opp)(struct dev_pm_set_opp_data *data));
 132 void dev_pm_opp_unregister_set_opp_helper(struct opp_table *opp_table);
 133 struct opp_table *dev_pm_opp_attach_genpd(struct device *dev, const char **names, struct device ***virt_devs);
 134 void dev_pm_opp_detach_genpd(struct opp_table *opp_table);
 135 int dev_pm_opp_xlate_performance_state(struct opp_table *src_table, struct opp_table *dst_table, unsigned int pstate);
 136 int dev_pm_opp_set_rate(struct device *dev, unsigned long target_freq);
 137 int dev_pm_opp_set_sharing_cpus(struct device *cpu_dev, const struct cpumask *cpumask);
 138 int dev_pm_opp_get_sharing_cpus(struct device *cpu_dev, struct cpumask *cpumask);
 139 void dev_pm_opp_remove_table(struct device *dev);
 140 void dev_pm_opp_cpumask_remove_table(const struct cpumask *cpumask);
 141 #else
 142 static inline struct opp_table *dev_pm_opp_get_opp_table(struct device *dev)
 143 {
 144         return ERR_PTR(-ENOTSUPP);
 145 }
 146 
 147 static inline struct opp_table *dev_pm_opp_get_opp_table_indexed(struct device *dev, int index)
 148 {
 149         return ERR_PTR(-ENOTSUPP);
 150 }
 151 
 152 static inline void dev_pm_opp_put_opp_table(struct opp_table *opp_table) {}
 153 
 154 static inline unsigned long dev_pm_opp_get_voltage(struct dev_pm_opp *opp)
 155 {
 156         return 0;
 157 }
 158 
 159 static inline unsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp)
 160 {
 161         return 0;
 162 }
 163 
 164 static inline unsigned int dev_pm_opp_get_level(struct dev_pm_opp *opp)
 165 {
 166         return 0;
 167 }
 168 
 169 static inline bool dev_pm_opp_is_turbo(struct dev_pm_opp *opp)
 170 {
 171         return false;
 172 }
 173 
 174 static inline int dev_pm_opp_get_opp_count(struct device *dev)
 175 {
 176         return 0;
 177 }
 178 
 179 static inline unsigned long dev_pm_opp_get_max_clock_latency(struct device *dev)
 180 {
 181         return 0;
 182 }
 183 
 184 static inline unsigned long dev_pm_opp_get_max_volt_latency(struct device *dev)
 185 {
 186         return 0;
 187 }
 188 
 189 static inline unsigned long dev_pm_opp_get_max_transition_latency(struct device *dev)
 190 {
 191         return 0;
 192 }
 193 
 194 static inline unsigned long dev_pm_opp_get_suspend_opp_freq(struct device *dev)
 195 {
 196         return 0;
 197 }
 198 
 199 static inline struct dev_pm_opp *dev_pm_opp_find_freq_exact(struct device *dev,
 200                                         unsigned long freq, bool available)
 201 {
 202         return ERR_PTR(-ENOTSUPP);
 203 }
 204 
 205 static inline struct dev_pm_opp *dev_pm_opp_find_level_exact(struct device *dev,
 206                                         unsigned int level)
 207 {
 208         return ERR_PTR(-ENOTSUPP);
 209 }
 210 
 211 static inline struct dev_pm_opp *dev_pm_opp_find_freq_floor(struct device *dev,
 212                                         unsigned long *freq)
 213 {
 214         return ERR_PTR(-ENOTSUPP);
 215 }
 216 
 217 static inline struct dev_pm_opp *dev_pm_opp_find_freq_ceil_by_volt(struct device *dev,
 218                                         unsigned long u_volt)
 219 {
 220         return ERR_PTR(-ENOTSUPP);
 221 }
 222 
 223 static inline struct dev_pm_opp *dev_pm_opp_find_freq_ceil(struct device *dev,
 224                                         unsigned long *freq)
 225 {
 226         return ERR_PTR(-ENOTSUPP);
 227 }
 228 
 229 static inline void dev_pm_opp_put(struct dev_pm_opp *opp) {}
 230 
 231 static inline int dev_pm_opp_add(struct device *dev, unsigned long freq,
 232                                         unsigned long u_volt)
 233 {
 234         return -ENOTSUPP;
 235 }
 236 
 237 static inline void dev_pm_opp_remove(struct device *dev, unsigned long freq)
 238 {
 239 }
 240 
 241 static inline void dev_pm_opp_remove_all_dynamic(struct device *dev)
 242 {
 243 }
 244 
 245 static inline int dev_pm_opp_enable(struct device *dev, unsigned long freq)
 246 {
 247         return 0;
 248 }
 249 
 250 static inline int dev_pm_opp_disable(struct device *dev, unsigned long freq)
 251 {
 252         return 0;
 253 }
 254 
 255 static inline int dev_pm_opp_register_notifier(struct device *dev, struct notifier_block *nb)
 256 {
 257         return -ENOTSUPP;
 258 }
 259 
 260 static inline int dev_pm_opp_unregister_notifier(struct device *dev, struct notifier_block *nb)
 261 {
 262         return -ENOTSUPP;
 263 }
 264 
 265 static inline struct opp_table *dev_pm_opp_set_supported_hw(struct device *dev,
 266                                                             const u32 *versions,
 267                                                             unsigned int count)
 268 {
 269         return ERR_PTR(-ENOTSUPP);
 270 }
 271 
 272 static inline void dev_pm_opp_put_supported_hw(struct opp_table *opp_table) {}
 273 
 274 static inline struct opp_table *dev_pm_opp_register_set_opp_helper(struct device *dev,
 275                         int (*set_opp)(struct dev_pm_set_opp_data *data))
 276 {
 277         return ERR_PTR(-ENOTSUPP);
 278 }
 279 
 280 static inline void dev_pm_opp_unregister_set_opp_helper(struct opp_table *opp_table) {}
 281 
 282 static inline struct opp_table *dev_pm_opp_set_prop_name(struct device *dev, const char *name)
 283 {
 284         return ERR_PTR(-ENOTSUPP);
 285 }
 286 
 287 static inline void dev_pm_opp_put_prop_name(struct opp_table *opp_table) {}
 288 
 289 static inline struct opp_table *dev_pm_opp_set_regulators(struct device *dev, const char * const names[], unsigned int count)
 290 {
 291         return ERR_PTR(-ENOTSUPP);
 292 }
 293 
 294 static inline void dev_pm_opp_put_regulators(struct opp_table *opp_table) {}
 295 
 296 static inline struct opp_table *dev_pm_opp_set_clkname(struct device *dev, const char * name)
 297 {
 298         return ERR_PTR(-ENOTSUPP);
 299 }
 300 
 301 static inline void dev_pm_opp_put_clkname(struct opp_table *opp_table) {}
 302 
 303 static inline struct opp_table *dev_pm_opp_attach_genpd(struct device *dev, const char **names, struct device ***virt_devs)
 304 {
 305         return ERR_PTR(-ENOTSUPP);
 306 }
 307 
 308 static inline void dev_pm_opp_detach_genpd(struct opp_table *opp_table) {}
 309 
 310 static inline int dev_pm_opp_xlate_performance_state(struct opp_table *src_table, struct opp_table *dst_table, unsigned int pstate)
 311 {
 312         return -ENOTSUPP;
 313 }
 314 
 315 static inline int dev_pm_opp_set_rate(struct device *dev, unsigned long target_freq)
 316 {
 317         return -ENOTSUPP;
 318 }
 319 
 320 static inline int dev_pm_opp_set_sharing_cpus(struct device *cpu_dev, const struct cpumask *cpumask)
 321 {
 322         return -ENOTSUPP;
 323 }
 324 
 325 static inline int dev_pm_opp_get_sharing_cpus(struct device *cpu_dev, struct cpumask *cpumask)
 326 {
 327         return -EINVAL;
 328 }
 329 
 330 static inline void dev_pm_opp_remove_table(struct device *dev)
 331 {
 332 }
 333 
 334 static inline void dev_pm_opp_cpumask_remove_table(const struct cpumask *cpumask)
 335 {
 336 }
 337 
 338 #endif          /* CONFIG_PM_OPP */
 339 
 340 #if defined(CONFIG_PM_OPP) && defined(CONFIG_OF)
 341 int dev_pm_opp_of_add_table(struct device *dev);
 342 int dev_pm_opp_of_add_table_indexed(struct device *dev, int index);
 343 void dev_pm_opp_of_remove_table(struct device *dev);
 344 int dev_pm_opp_of_cpumask_add_table(const struct cpumask *cpumask);
 345 void dev_pm_opp_of_cpumask_remove_table(const struct cpumask *cpumask);
 346 int dev_pm_opp_of_get_sharing_cpus(struct device *cpu_dev, struct cpumask *cpumask);
 347 struct device_node *dev_pm_opp_of_get_opp_desc_node(struct device *dev);
 348 struct device_node *dev_pm_opp_get_of_node(struct dev_pm_opp *opp);
 349 int of_get_required_opp_performance_state(struct device_node *np, int index);
 350 void dev_pm_opp_of_register_em(struct cpumask *cpus);
 351 #else
 352 static inline int dev_pm_opp_of_add_table(struct device *dev)
 353 {
 354         return -ENOTSUPP;
 355 }
 356 
 357 static inline int dev_pm_opp_of_add_table_indexed(struct device *dev, int index)
 358 {
 359         return -ENOTSUPP;
 360 }
 361 
 362 static inline void dev_pm_opp_of_remove_table(struct device *dev)
 363 {
 364 }
 365 
 366 static inline int dev_pm_opp_of_cpumask_add_table(const struct cpumask *cpumask)
 367 {
 368         return -ENOTSUPP;
 369 }
 370 
 371 static inline void dev_pm_opp_of_cpumask_remove_table(const struct cpumask *cpumask)
 372 {
 373 }
 374 
 375 static inline int dev_pm_opp_of_get_sharing_cpus(struct device *cpu_dev, struct cpumask *cpumask)
 376 {
 377         return -ENOTSUPP;
 378 }
 379 
 380 static inline struct device_node *dev_pm_opp_of_get_opp_desc_node(struct device *dev)
 381 {
 382         return NULL;
 383 }
 384 
 385 static inline struct device_node *dev_pm_opp_get_of_node(struct dev_pm_opp *opp)
 386 {
 387         return NULL;
 388 }
 389 
 390 static inline void dev_pm_opp_of_register_em(struct cpumask *cpus)
 391 {
 392 }
 393 
 394 static inline int of_get_required_opp_performance_state(struct device_node *np, int index)
 395 {
 396         return -ENOTSUPP;
 397 }
 398 #endif
 399 
 400 #endif          /* __LINUX_OPP_H__ */

/* [<][>][^][v][top][bottom][index][help] */