]>
Commit | Line | Data |
---|---|---|
d2912cb1 | 1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
a3c98b8b MH |
2 | /* |
3 | * governor.h - internal header for devfreq governors. | |
4 | * | |
5 | * Copyright (C) 2011 Samsung Electronics | |
6 | * MyungJoo Ham <myungjoo.ham@samsung.com> | |
7 | * | |
a3c98b8b MH |
8 | * This header is for devfreq governors in drivers/devfreq/ |
9 | */ | |
10 | ||
11 | #ifndef _GOVERNOR_H | |
12 | #define _GOVERNOR_H | |
13 | ||
14 | #include <linux/devfreq.h> | |
15 | ||
16 | #define to_devfreq(DEV) container_of((DEV), struct devfreq, dev) | |
17 | ||
7e6fdd4b RV |
18 | /* Devfreq events */ |
19 | #define DEVFREQ_GOV_START 0x1 | |
20 | #define DEVFREQ_GOV_STOP 0x2 | |
3a1ec2e8 | 21 | #define DEVFREQ_GOV_UPDATE_INTERVAL 0x3 |
206c30cf RV |
22 | #define DEVFREQ_GOV_SUSPEND 0x4 |
23 | #define DEVFREQ_GOV_RESUME 0x5 | |
7e6fdd4b | 24 | |
6ff66e2a MK |
25 | #define DEVFREQ_MIN_FREQ 0 |
26 | #define DEVFREQ_MAX_FREQ ULONG_MAX | |
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, | |
3bb5ee9a | 33 | * this governor is never changeable to other governor. |
5c0f6c79 DO |
34 | * @interrupt_driven: Devfreq core won't schedule polling work for this |
35 | * governor if value is set to 1. | |
3ea6b700 CC |
36 | * @get_target_freq: Returns desired operating frequency for the device. |
37 | * Basically, get_target_freq will run | |
38 | * devfreq_dev_profile.get_dev_status() to get the | |
39 | * status of the device (load = busy_time / total_time). | |
40 | * If no_central_polling is set, this callback is called | |
41 | * only with update_devfreq() notified by OPP. | |
42 | * @event_handler: Callback for devfreq core framework to notify events | |
43 | * to governors. Events include per device governor | |
44 | * init and exit, opp changes out of devfreq, suspend | |
45 | * and resume of per device devfreq during device idle. | |
46 | * | |
47 | * Note that the callbacks are called with devfreq->lock locked by devfreq. | |
48 | */ | |
49 | struct devfreq_governor { | |
50 | struct list_head node; | |
51 | ||
52 | const char name[DEVFREQ_NAME_LEN]; | |
53 | const unsigned int immutable; | |
5c0f6c79 | 54 | const unsigned int interrupt_driven; |
3ea6b700 CC |
55 | int (*get_target_freq)(struct devfreq *this, unsigned long *freq); |
56 | int (*event_handler)(struct devfreq *devfreq, | |
57 | unsigned int event, void *data); | |
58 | }; | |
59 | ||
6d743493 CC |
60 | void devfreq_monitor_start(struct devfreq *devfreq); |
61 | void devfreq_monitor_stop(struct devfreq *devfreq); | |
62 | void devfreq_monitor_suspend(struct devfreq *devfreq); | |
63 | void devfreq_monitor_resume(struct devfreq *devfreq); | |
3a1ec2e8 | 64 | void devfreq_update_interval(struct devfreq *devfreq, unsigned int *delay); |
3aa173b8 | 65 | |
6d743493 CC |
66 | int devfreq_add_governor(struct devfreq_governor *governor); |
67 | int devfreq_remove_governor(struct devfreq_governor *governor); | |
3aa173b8 | 68 | |
6d743493 | 69 | int devfreq_update_status(struct devfreq *devfreq, unsigned long freq); |
30582c25 | 70 | |
f75b0afa CC |
71 | static inline int devfreq_update_stats(struct devfreq *df) |
72 | { | |
73 | return df->profile->get_dev_status(df->dev.parent, &df->last_status); | |
74 | } | |
a3c98b8b | 75 | #endif /* _GOVERNOR_H */ |