diff options
Diffstat (limited to 'include/linux/devfreq.h')
-rw-r--r-- | include/linux/devfreq.h | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/include/linux/devfreq.h b/include/linux/devfreq.h index ce447f0f1bad..68030e22af35 100644 --- a/include/linux/devfreq.h +++ b/include/linux/devfreq.h | |||
@@ -65,7 +65,10 @@ struct devfreq_dev_status { | |||
65 | * The "flags" parameter's possible values are | 65 | * The "flags" parameter's possible values are |
66 | * explained above with "DEVFREQ_FLAG_*" macros. | 66 | * explained above with "DEVFREQ_FLAG_*" macros. |
67 | * @get_dev_status: The device should provide the current performance | 67 | * @get_dev_status: The device should provide the current performance |
68 | * status to devfreq, which is used by governors. | 68 | * status to devfreq. Governors are recommended not to |
69 | * use this directly. Instead, governors are recommended | ||
70 | * to use devfreq_update_stats() along with | ||
71 | * devfreq.last_status. | ||
69 | * @get_cur_freq: The device should provide the current frequency | 72 | * @get_cur_freq: The device should provide the current frequency |
70 | * at which it is operating. | 73 | * at which it is operating. |
71 | * @exit: An optional callback that is called when devfreq | 74 | * @exit: An optional callback that is called when devfreq |
@@ -161,6 +164,7 @@ struct devfreq { | |||
161 | struct delayed_work work; | 164 | struct delayed_work work; |
162 | 165 | ||
163 | unsigned long previous_freq; | 166 | unsigned long previous_freq; |
167 | struct devfreq_dev_status last_status; | ||
164 | 168 | ||
165 | void *data; /* private data for governors */ | 169 | void *data; /* private data for governors */ |
166 | 170 | ||
@@ -204,6 +208,19 @@ extern int devm_devfreq_register_opp_notifier(struct device *dev, | |||
204 | extern void devm_devfreq_unregister_opp_notifier(struct device *dev, | 208 | extern void devm_devfreq_unregister_opp_notifier(struct device *dev, |
205 | struct devfreq *devfreq); | 209 | struct devfreq *devfreq); |
206 | 210 | ||
211 | /** | ||
212 | * devfreq_update_stats() - update the last_status pointer in struct devfreq | ||
213 | * @df: the devfreq instance whose status needs updating | ||
214 | * | ||
215 | * Governors are recommended to use this function along with last_status, | ||
216 | * which allows other entities to reuse the last_status without affecting | ||
217 | * the values fetched later by governors. | ||
218 | */ | ||
219 | static inline int devfreq_update_stats(struct devfreq *df) | ||
220 | { | ||
221 | return df->profile->get_dev_status(df->dev.parent, &df->last_status); | ||
222 | } | ||
223 | |||
207 | #if IS_ENABLED(CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND) | 224 | #if IS_ENABLED(CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND) |
208 | /** | 225 | /** |
209 | * struct devfreq_simple_ondemand_data - void *data fed to struct devfreq | 226 | * struct devfreq_simple_ondemand_data - void *data fed to struct devfreq |
@@ -289,6 +306,11 @@ static inline void devm_devfreq_unregister_opp_notifier(struct device *dev, | |||
289 | struct devfreq *devfreq) | 306 | struct devfreq *devfreq) |
290 | { | 307 | { |
291 | } | 308 | } |
309 | |||
310 | static inline int devfreq_update_stats(struct devfreq *df) | ||
311 | { | ||
312 | return -EINVAL; | ||
313 | } | ||
292 | #endif /* CONFIG_PM_DEVFREQ */ | 314 | #endif /* CONFIG_PM_DEVFREQ */ |
293 | 315 | ||
294 | #endif /* __LINUX_DEVFREQ_H__ */ | 316 | #endif /* __LINUX_DEVFREQ_H__ */ |