linux/include/linux/pm_opp.h
<<
>>
Prefs
   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/notifier.h>
  19
  20struct dev_pm_opp;
  21struct device;
  22
  23enum dev_pm_opp_event {
  24        OPP_EVENT_ADD, OPP_EVENT_REMOVE, OPP_EVENT_ENABLE, OPP_EVENT_DISABLE,
  25};
  26
  27#if defined(CONFIG_PM_OPP)
  28
  29unsigned long dev_pm_opp_get_voltage(struct dev_pm_opp *opp);
  30
  31unsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp);
  32
  33bool dev_pm_opp_is_turbo(struct dev_pm_opp *opp);
  34
  35int dev_pm_opp_get_opp_count(struct device *dev);
  36unsigned long dev_pm_opp_get_max_clock_latency(struct device *dev);
  37unsigned long dev_pm_opp_get_max_volt_latency(struct device *dev);
  38unsigned long dev_pm_opp_get_max_transition_latency(struct device *dev);
  39struct dev_pm_opp *dev_pm_opp_get_suspend_opp(struct device *dev);
  40
  41struct dev_pm_opp *dev_pm_opp_find_freq_exact(struct device *dev,
  42                                              unsigned long freq,
  43                                              bool available);
  44
  45struct dev_pm_opp *dev_pm_opp_find_freq_floor(struct device *dev,
  46                                              unsigned long *freq);
  47
  48struct dev_pm_opp *dev_pm_opp_find_freq_ceil(struct device *dev,
  49                                             unsigned long *freq);
  50
  51int dev_pm_opp_add(struct device *dev, unsigned long freq,
  52                   unsigned long u_volt);
  53void dev_pm_opp_remove(struct device *dev, unsigned long freq);
  54
  55int dev_pm_opp_enable(struct device *dev, unsigned long freq);
  56
  57int dev_pm_opp_disable(struct device *dev, unsigned long freq);
  58
  59struct srcu_notifier_head *dev_pm_opp_get_notifier(struct device *dev);
  60int dev_pm_opp_set_supported_hw(struct device *dev, const u32 *versions,
  61                                unsigned int count);
  62void dev_pm_opp_put_supported_hw(struct device *dev);
  63int dev_pm_opp_set_prop_name(struct device *dev, const char *name);
  64void dev_pm_opp_put_prop_name(struct device *dev);
  65int dev_pm_opp_set_regulator(struct device *dev, const char *name);
  66void dev_pm_opp_put_regulator(struct device *dev);
  67int dev_pm_opp_set_rate(struct device *dev, unsigned long target_freq);
  68int dev_pm_opp_set_sharing_cpus(struct device *cpu_dev, const struct cpumask *cpumask);
  69int dev_pm_opp_get_sharing_cpus(struct device *cpu_dev, struct cpumask *cpumask);
  70void dev_pm_opp_remove_table(struct device *dev);
  71void dev_pm_opp_cpumask_remove_table(const struct cpumask *cpumask);
  72#else
  73static inline unsigned long dev_pm_opp_get_voltage(struct dev_pm_opp *opp)
  74{
  75        return 0;
  76}
  77
  78static inline unsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp)
  79{
  80        return 0;
  81}
  82
  83static inline bool dev_pm_opp_is_turbo(struct dev_pm_opp *opp)
  84{
  85        return false;
  86}
  87
  88static inline int dev_pm_opp_get_opp_count(struct device *dev)
  89{
  90        return 0;
  91}
  92
  93static inline unsigned long dev_pm_opp_get_max_clock_latency(struct device *dev)
  94{
  95        return 0;
  96}
  97
  98static inline unsigned long dev_pm_opp_get_max_volt_latency(struct device *dev)
  99{
 100        return 0;
 101}
 102
 103static inline unsigned long dev_pm_opp_get_max_transition_latency(struct device *dev)
 104{
 105        return 0;
 106}
 107
 108static inline struct dev_pm_opp *dev_pm_opp_get_suspend_opp(struct device *dev)
 109{
 110        return NULL;
 111}
 112
 113static inline struct dev_pm_opp *dev_pm_opp_find_freq_exact(struct device *dev,
 114                                        unsigned long freq, bool available)
 115{
 116        return ERR_PTR(-ENOTSUPP);
 117}
 118
 119static inline struct dev_pm_opp *dev_pm_opp_find_freq_floor(struct device *dev,
 120                                        unsigned long *freq)
 121{
 122        return ERR_PTR(-ENOTSUPP);
 123}
 124
 125static inline struct dev_pm_opp *dev_pm_opp_find_freq_ceil(struct device *dev,
 126                                        unsigned long *freq)
 127{
 128        return ERR_PTR(-ENOTSUPP);
 129}
 130
 131static inline int dev_pm_opp_add(struct device *dev, unsigned long freq,
 132                                        unsigned long u_volt)
 133{
 134        return -ENOTSUPP;
 135}
 136
 137static inline void dev_pm_opp_remove(struct device *dev, unsigned long freq)
 138{
 139}
 140
 141static inline int dev_pm_opp_enable(struct device *dev, unsigned long freq)
 142{
 143        return 0;
 144}
 145
 146static inline int dev_pm_opp_disable(struct device *dev, unsigned long freq)
 147{
 148        return 0;
 149}
 150
 151static inline struct srcu_notifier_head *dev_pm_opp_get_notifier(
 152                                                        struct device *dev)
 153{
 154        return ERR_PTR(-ENOTSUPP);
 155}
 156
 157static inline int dev_pm_opp_set_supported_hw(struct device *dev,
 158                                              const u32 *versions,
 159                                              unsigned int count)
 160{
 161        return -ENOTSUPP;
 162}
 163
 164static inline void dev_pm_opp_put_supported_hw(struct device *dev) {}
 165
 166static inline int dev_pm_opp_set_prop_name(struct device *dev, const char *name)
 167{
 168        return -ENOTSUPP;
 169}
 170
 171static inline void dev_pm_opp_put_prop_name(struct device *dev) {}
 172
 173static inline int dev_pm_opp_set_regulator(struct device *dev, const char *name)
 174{
 175        return -ENOTSUPP;
 176}
 177
 178static inline void dev_pm_opp_put_regulator(struct device *dev) {}
 179
 180static inline int dev_pm_opp_set_rate(struct device *dev, unsigned long target_freq)
 181{
 182        return -ENOTSUPP;
 183}
 184
 185static inline int dev_pm_opp_set_sharing_cpus(struct device *cpu_dev, const struct cpumask *cpumask)
 186{
 187        return -ENOTSUPP;
 188}
 189
 190static inline int dev_pm_opp_get_sharing_cpus(struct device *cpu_dev, struct cpumask *cpumask)
 191{
 192        return -EINVAL;
 193}
 194
 195static inline void dev_pm_opp_remove_table(struct device *dev)
 196{
 197}
 198
 199static inline void dev_pm_opp_cpumask_remove_table(const struct cpumask *cpumask)
 200{
 201}
 202
 203#endif          /* CONFIG_PM_OPP */
 204
 205#if defined(CONFIG_PM_OPP) && defined(CONFIG_OF)
 206int dev_pm_opp_of_add_table(struct device *dev);
 207void dev_pm_opp_of_remove_table(struct device *dev);
 208int dev_pm_opp_of_cpumask_add_table(const struct cpumask *cpumask);
 209void dev_pm_opp_of_cpumask_remove_table(const struct cpumask *cpumask);
 210int dev_pm_opp_of_get_sharing_cpus(struct device *cpu_dev, struct cpumask *cpumask);
 211#else
 212static inline int dev_pm_opp_of_add_table(struct device *dev)
 213{
 214        return -ENOTSUPP;
 215}
 216
 217static inline void dev_pm_opp_of_remove_table(struct device *dev)
 218{
 219}
 220
 221static inline int dev_pm_opp_of_cpumask_add_table(const struct cpumask *cpumask)
 222{
 223        return -ENOTSUPP;
 224}
 225
 226static inline void dev_pm_opp_of_cpumask_remove_table(const struct cpumask *cpumask)
 227{
 228}
 229
 230static inline int dev_pm_opp_of_get_sharing_cpus(struct device *cpu_dev, struct cpumask *cpumask)
 231{
 232        return -ENOTSUPP;
 233}
 234#endif
 235
 236#endif          /* __LINUX_OPP_H__ */
 237