]>
Commit | Line | Data |
---|---|---|
a3c98b8b MH |
1 | /* |
2 | * governor.h - internal header for devfreq governors. | |
3 | * | |
4 | * Copyright (C) 2011 Samsung Electronics | |
5 | * MyungJoo Ham <myungjoo.ham@samsung.com> | |
6 | * | |
7 | * This program is free software; you can redistribute it and/or modify | |
8 | * it under the terms of the GNU General Public License version 2 as | |
9 | * published by the Free Software Foundation. | |
10 | * | |
11 | * This header is for devfreq governors in drivers/devfreq/ | |
12 | */ | |
13 | ||
14 | #ifndef _GOVERNOR_H | |
15 | #define _GOVERNOR_H | |
16 | ||
17 | #include <linux/devfreq.h> | |
18 | ||
19 | #define to_devfreq(DEV) container_of((DEV), struct devfreq, dev) | |
20 | ||
7e6fdd4b RV |
21 | /* Devfreq events */ |
22 | #define DEVFREQ_GOV_START 0x1 | |
23 | #define DEVFREQ_GOV_STOP 0x2 | |
24 | #define DEVFREQ_GOV_INTERVAL 0x3 | |
206c30cf RV |
25 | #define DEVFREQ_GOV_SUSPEND 0x4 |
26 | #define DEVFREQ_GOV_RESUME 0x5 | |
7e6fdd4b | 27 | |
3ea6b700 CC |
28 | /** |
29 | * struct devfreq_governor - Devfreq policy governor | |
30 | * @node: list node - contains registered devfreq governors | |
31 | * @name: Governor's name | |
32 | * @immutable: Immutable flag for governor. If the value is 1, | |
33 | * this govenror is never changeable to other governor. | |
34 | * @get_target_freq: Returns desired operating frequency for the device. | |
35 | * Basically, get_target_freq will run | |
36 | * devfreq_dev_profile.get_dev_status() to get the | |
37 | * status of the device (load = busy_time / total_time). | |
38 | * If no_central_polling is set, this callback is called | |
39 | * only with update_devfreq() notified by OPP. | |
40 | * @event_handler: Callback for devfreq core framework to notify events | |
41 | * to governors. Events include per device governor | |
42 | * init and exit, opp changes out of devfreq, suspend | |
43 | * and resume of per device devfreq during device idle. | |
44 | * | |
45 | * Note that the callbacks are called with devfreq->lock locked by devfreq. | |
46 | */ | |
47 | struct devfreq_governor { | |
48 | struct list_head node; | |
49 | ||
50 | const char name[DEVFREQ_NAME_LEN]; | |
51 | const unsigned int immutable; | |
52 | int (*get_target_freq)(struct devfreq *this, unsigned long *freq); | |
53 | int (*event_handler)(struct devfreq *devfreq, | |
54 | unsigned int event, void *data); | |
55 | }; | |
56 | ||
a3c98b8b MH |
57 | /* Caution: devfreq->lock must be locked before calling update_devfreq */ |
58 | extern int update_devfreq(struct devfreq *devfreq); | |
59 | ||
7e6fdd4b RV |
60 | extern void devfreq_monitor_start(struct devfreq *devfreq); |
61 | extern void devfreq_monitor_stop(struct devfreq *devfreq); | |
62 | extern void devfreq_monitor_suspend(struct devfreq *devfreq); | |
63 | extern void devfreq_monitor_resume(struct devfreq *devfreq); | |
64 | extern void devfreq_interval_update(struct devfreq *devfreq, | |
65 | unsigned int *delay); | |
3aa173b8 NM |
66 | |
67 | extern int devfreq_add_governor(struct devfreq_governor *governor); | |
68 | extern int devfreq_remove_governor(struct devfreq_governor *governor); | |
69 | ||
30582c25 CC |
70 | extern int devfreq_update_status(struct devfreq *devfreq, unsigned long freq); |
71 | ||
f75b0afa CC |
72 | static inline int devfreq_update_stats(struct devfreq *df) |
73 | { | |
74 | return df->profile->get_dev_status(df->dev.parent, &df->last_status); | |
75 | } | |
a3c98b8b | 76 | #endif /* _GOVERNOR_H */ |