Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
linux
devfreq.h
Go to the documentation of this file.
1
/*
2
* devfreq: Generic Dynamic Voltage and Frequency Scaling (DVFS) Framework
3
* for Non-CPU Devices.
4
*
5
* Copyright (C) 2011 Samsung Electronics
6
* MyungJoo Ham <
[email protected]
>
7
*
8
* This program is free software; you can redistribute it and/or modify
9
* it under the terms of the GNU General Public License version 2 as
10
* published by the Free Software Foundation.
11
*/
12
13
#ifndef __LINUX_DEVFREQ_H__
14
#define __LINUX_DEVFREQ_H__
15
16
#include <linux/device.h>
17
#include <
linux/notifier.h
>
18
#include <
linux/opp.h
>
19
20
#define DEVFREQ_NAME_LEN 16
21
22
struct
devfreq
;
23
39
struct
devfreq_dev_status
{
40
/* both since the last measure */
41
unsigned
long
total_time
;
42
unsigned
long
busy_time
;
43
unsigned
long
current_frequency
;
44
void
*
private_data
;
45
};
46
47
/*
48
* The resulting frequency should be at most this. (this bound is the
49
* least upper bound; thus, the resulting freq should be lower or same)
50
* If the flag is not set, the resulting frequency should be at most the
51
* bound (greatest lower bound)
52
*/
53
#define DEVFREQ_FLAG_LEAST_UPPER_BOUND 0x1
54
75
struct
devfreq_dev_profile
{
76
unsigned
long
initial_freq
;
77
unsigned
int
polling_ms
;
78
79
int
(*
target
)(
struct
device
*
dev
,
unsigned
long
*
freq
,
u32
flags
);
80
int
(*
get_dev_status
)(
struct
device
*
dev
,
81
struct
devfreq_dev_status
*
stat
);
82
void
(*
exit
)(
struct
device
*
dev
);
83
};
84
107
struct
devfreq_governor
{
108
const
char
name
[
DEVFREQ_NAME_LEN
];
109
int
(*
get_target_freq
)(
struct
devfreq
*
this
,
unsigned
long
*
freq
);
110
int
(*
init
)(
struct
devfreq
*
this
);
111
void
(*
exit
)(
struct
devfreq
*
this
);
112
const
bool
no_central_polling
;
113
};
114
148
struct
devfreq
{
149
struct
list_head
node
;
150
151
struct
mutex
lock
;
152
struct
device
dev
;
153
struct
devfreq_dev_profile
*
profile
;
154
const
struct
devfreq_governor
*
governor
;
155
struct
notifier_block
nb
;
156
157
unsigned
long
polling_jiffies
;
158
unsigned
long
previous_freq
;
159
unsigned
int
next_polling
;
160
161
void
*
data
;
/* private data for governors */
162
163
bool
being_removed
;
164
165
unsigned
long
min_freq
;
166
unsigned
long
max_freq
;
167
};
168
169
#if defined(CONFIG_PM_DEVFREQ)
170
extern
struct
devfreq
*
devfreq_add_device
(
struct
device
*
dev
,
171
struct
devfreq_dev_profile
*
profile
,
172
const
struct
devfreq_governor
*
governor
,
173
void
*
data
);
174
extern
int
devfreq_remove_device
(
struct
devfreq
*
devfreq
);
175
176
/* Helper functions for devfreq user device driver with OPP. */
177
extern
struct
opp
*
devfreq_recommended_opp
(
struct
device
*
dev
,
178
unsigned
long
*
freq
,
u32
flags
);
179
extern
int
devfreq_register_opp_notifier
(
struct
device
*
dev
,
180
struct
devfreq
*
devfreq
);
181
extern
int
devfreq_unregister_opp_notifier
(
struct
device
*
dev
,
182
struct
devfreq
*
devfreq
);
183
184
#ifdef CONFIG_DEVFREQ_GOV_POWERSAVE
185
extern
const
struct
devfreq_governor
devfreq_powersave
;
186
#endif
187
#ifdef CONFIG_DEVFREQ_GOV_PERFORMANCE
188
extern
const
struct
devfreq_governor
devfreq_performance
;
189
#endif
190
#ifdef CONFIG_DEVFREQ_GOV_USERSPACE
191
extern
const
struct
devfreq_governor
devfreq_userspace
;
192
#endif
193
#ifdef CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND
194
extern
const
struct
devfreq_governor
devfreq_simple_ondemand
;
208
struct
devfreq_simple_ondemand_data {
209
unsigned
int
upthreshold;
210
unsigned
int
downdifferential;
211
};
212
#endif
213
214
#else
/* !CONFIG_PM_DEVFREQ */
215
static
struct
devfreq
*
devfreq_add_device
(
struct
device
*
dev
,
216
struct
devfreq_dev_profile
*
profile
,
217
struct
devfreq_governor
*
governor
,
218
void
*
data
)
219
{
220
return
NULL
;
221
}
222
223
static
int
devfreq_remove_device
(
struct
devfreq
*
devfreq
)
224
{
225
return
0;
226
}
227
228
static
struct
opp
*
devfreq_recommended_opp
(
struct
device
*
dev
,
229
unsigned
long
*
freq
,
u32
flags
)
230
{
231
return
-
EINVAL
;
232
}
233
234
static
int
devfreq_register_opp_notifier
(
struct
device
*
dev
,
235
struct
devfreq
*
devfreq
)
236
{
237
return
-
EINVAL
;
238
}
239
240
static
int
devfreq_unregister_opp_notifier
(
struct
device
*
dev
,
241
struct
devfreq
*
devfreq
)
242
{
243
return
-
EINVAL
;
244
}
245
246
#define devfreq_powersave NULL
247
#define devfreq_performance NULL
248
#define devfreq_userspace NULL
249
#define devfreq_simple_ondemand NULL
250
251
#endif
/* CONFIG_PM_DEVFREQ */
252
253
#endif
/* __LINUX_DEVFREQ_H__ */
Generated on Thu Jan 10 2013 14:51:18 for Linux Kernel by
1.8.2