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
regulator
consumer.h
Go to the documentation of this file.
1
/*
2
* consumer.h -- SoC Regulator consumer support.
3
*
4
* Copyright (C) 2007, 2008 Wolfson Microelectronics PLC.
5
*
6
* Author: Liam Girdwood <
[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
* Regulator Consumer Interface.
13
*
14
* A Power Management Regulator framework for SoC based devices.
15
* Features:-
16
* o Voltage and current level control.
17
* o Operating mode control.
18
* o Regulator status.
19
* o sysfs entries for showing client devices and status
20
*
21
* EXPERIMENTAL FEATURES:
22
* Dynamic Regulator operating Mode Switching (DRMS) - allows regulators
23
* to use most efficient operating mode depending upon voltage and load and
24
* is transparent to client drivers.
25
*
26
* e.g. Devices x,y,z share regulator r. Device x and y draw 20mA each during
27
* IO and 1mA at idle. Device z draws 100mA when under load and 5mA when
28
* idling. Regulator r has > 90% efficiency in NORMAL mode at loads > 100mA
29
* but this drops rapidly to 60% when below 100mA. Regulator r has > 90%
30
* efficiency in IDLE mode at loads < 10mA. Thus regulator r will operate
31
* in normal mode for loads > 10mA and in IDLE mode for load <= 10mA.
32
*
33
*/
34
35
#ifndef __LINUX_REGULATOR_CONSUMER_H_
36
#define __LINUX_REGULATOR_CONSUMER_H_
37
38
struct
device
;
39
struct
notifier_block
;
40
41
/*
42
* Regulator operating modes.
43
*
44
* Regulators can run in a variety of different operating modes depending on
45
* output load. This allows further system power savings by selecting the
46
* best (and most efficient) regulator mode for a desired load.
47
*
48
* Most drivers will only care about NORMAL. The modes below are generic and
49
* will probably not match the naming convention of your regulator data sheet
50
* but should match the use cases in the datasheet.
51
*
52
* In order of power efficiency (least efficient at top).
53
*
54
* Mode Description
55
* FAST Regulator can handle fast changes in it's load.
56
* e.g. useful in CPU voltage & frequency scaling where
57
* load can quickly increase with CPU frequency increases.
58
*
59
* NORMAL Normal regulator power supply mode. Most drivers will
60
* use this mode.
61
*
62
* IDLE Regulator runs in a more efficient mode for light
63
* loads. Can be used for devices that have a low power
64
* requirement during periods of inactivity. This mode
65
* may be more noisy than NORMAL and may not be able
66
* to handle fast load switching.
67
*
68
* STANDBY Regulator runs in the most efficient mode for very
69
* light loads. Can be used by devices when they are
70
* in a sleep/standby state. This mode is likely to be
71
* the most noisy and may not be able to handle fast load
72
* switching.
73
*
74
* NOTE: Most regulators will only support a subset of these modes. Some
75
* will only just support NORMAL.
76
*
77
* These modes can be OR'ed together to make up a mask of valid register modes.
78
*/
79
80
#define REGULATOR_MODE_FAST 0x1
81
#define REGULATOR_MODE_NORMAL 0x2
82
#define REGULATOR_MODE_IDLE 0x4
83
#define REGULATOR_MODE_STANDBY 0x8
84
85
/*
86
* Regulator notifier events.
87
*
88
* UNDER_VOLTAGE Regulator output is under voltage.
89
* OVER_CURRENT Regulator output current is too high.
90
* REGULATION_OUT Regulator output is out of regulation.
91
* FAIL Regulator output has failed.
92
* OVER_TEMP Regulator over temp.
93
* FORCE_DISABLE Regulator forcibly shut down by software.
94
* VOLTAGE_CHANGE Regulator voltage changed.
95
* DISABLE Regulator was disabled.
96
*
97
* NOTE: These events can be OR'ed together when passed into handler.
98
*/
99
100
#define REGULATOR_EVENT_UNDER_VOLTAGE 0x01
101
#define REGULATOR_EVENT_OVER_CURRENT 0x02
102
#define REGULATOR_EVENT_REGULATION_OUT 0x04
103
#define REGULATOR_EVENT_FAIL 0x08
104
#define REGULATOR_EVENT_OVER_TEMP 0x10
105
#define REGULATOR_EVENT_FORCE_DISABLE 0x20
106
#define REGULATOR_EVENT_VOLTAGE_CHANGE 0x40
107
#define REGULATOR_EVENT_DISABLE 0x80
108
109
struct
regulator
;
110
123
struct
regulator_bulk_data
{
124
const
char
*
supply
;
125
struct
regulator
*
consumer
;
126
127
/* private: Internal use */
128
int
ret
;
129
};
130
131
#if defined(CONFIG_REGULATOR)
132
133
/* regulator get and put */
134
struct
regulator
*
__must_check
regulator_get
(
struct
device
*
dev
,
135
const
char
*
id
);
136
struct
regulator
*
__must_check
devm_regulator_get
(
struct
device
*
dev
,
137
const
char
*
id
);
138
struct
regulator
*
__must_check
regulator_get_exclusive
(
struct
device
*
dev
,
139
const
char
*
id
);
140
void
regulator_put
(
struct
regulator
*
regulator
);
141
void
devm_regulator_put
(
struct
regulator
*
regulator
);
142
143
/* regulator output control and status */
144
int
regulator_enable
(
struct
regulator
*
regulator
);
145
int
regulator_disable
(
struct
regulator
*
regulator
);
146
int
regulator_force_disable
(
struct
regulator
*
regulator
);
147
int
regulator_is_enabled
(
struct
regulator
*
regulator
);
148
int
regulator_disable_deferred
(
struct
regulator
*
regulator
,
int
ms
);
149
150
int
regulator_bulk_get
(
struct
device
*
dev
,
int
num_consumers,
151
struct
regulator_bulk_data
*consumers);
152
int
devm_regulator_bulk_get
(
struct
device
*
dev
,
int
num_consumers,
153
struct
regulator_bulk_data
*consumers);
154
int
regulator_bulk_enable
(
int
num_consumers,
155
struct
regulator_bulk_data
*consumers);
156
int
regulator_bulk_disable
(
int
num_consumers,
157
struct
regulator_bulk_data
*consumers);
158
int
regulator_bulk_force_disable
(
int
num_consumers,
159
struct
regulator_bulk_data
*consumers);
160
void
regulator_bulk_free
(
int
num_consumers,
161
struct
regulator_bulk_data
*consumers);
162
163
int
regulator_count_voltages
(
struct
regulator
*
regulator
);
164
int
regulator_list_voltage
(
struct
regulator
*
regulator
,
unsigned
selector
);
165
int
regulator_is_supported_voltage
(
struct
regulator
*
regulator
,
166
int
min_uV
,
int
max_uV
);
167
int
regulator_set_voltage
(
struct
regulator
*
regulator
,
int
min_uV
,
int
max_uV
);
168
int
regulator_set_voltage_time
(
struct
regulator
*
regulator
,
169
int
old_uV,
int
new_uV);
170
int
regulator_get_voltage
(
struct
regulator
*
regulator
);
171
int
regulator_sync_voltage
(
struct
regulator
*
regulator
);
172
int
regulator_set_current_limit
(
struct
regulator
*
regulator
,
173
int
min_uA,
int
max_uA);
174
int
regulator_get_current_limit
(
struct
regulator
*
regulator
);
175
176
int
regulator_set_mode
(
struct
regulator
*
regulator
,
unsigned
int
mode
);
177
unsigned
int
regulator_get_mode
(
struct
regulator
*
regulator
);
178
int
regulator_set_optimum_mode
(
struct
regulator
*
regulator
,
int
load_uA);
179
180
int
regulator_allow_bypass
(
struct
regulator
*
regulator
,
bool
allow);
181
182
/* regulator notifier block */
183
int
regulator_register_notifier
(
struct
regulator
*
regulator
,
184
struct
notifier_block
*nb);
185
int
regulator_unregister_notifier
(
struct
regulator
*
regulator
,
186
struct
notifier_block
*nb);
187
188
/* driver data - core doesn't touch */
189
void
*
regulator_get_drvdata
(
struct
regulator
*
regulator
);
190
void
regulator_set_drvdata
(
struct
regulator
*
regulator
,
void
*
data
);
191
192
#else
193
194
/*
195
* Make sure client drivers will still build on systems with no software
196
* controllable voltage or current regulators.
197
*/
198
static
inline
struct
regulator
*
__must_check
regulator_get
(
struct
device
*
dev
,
199
const
char
*
id
)
200
{
201
/* Nothing except the stubbed out regulator API should be
202
* looking at the value except to check if it is an error
203
* value. Drivers are free to handle NULL specifically by
204
* skipping all regulator API calls, but they don't have to.
205
* Drivers which don't, should make sure they properly handle
206
* corner cases of the API, such as regulator_get_voltage()
207
* returning 0.
208
*/
209
return
NULL
;
210
}
211
212
static
inline
struct
regulator
*
__must_check
213
devm_regulator_get
(
struct
device
*
dev
,
const
char
*
id
)
214
{
215
return
NULL
;
216
}
217
218
static
inline
void
regulator_put
(
struct
regulator
*
regulator
)
219
{
220
}
221
222
static
inline
void
devm_regulator_put
(
struct
regulator
*
regulator
)
223
{
224
}
225
226
static
inline
int
regulator_enable
(
struct
regulator
*
regulator
)
227
{
228
return
0;
229
}
230
231
static
inline
int
regulator_disable
(
struct
regulator
*
regulator
)
232
{
233
return
0;
234
}
235
236
static
inline
int
regulator_force_disable
(
struct
regulator
*
regulator
)
237
{
238
return
0;
239
}
240
241
static
inline
int
regulator_disable_deferred
(
struct
regulator
*
regulator
,
242
int
ms
)
243
{
244
return
0;
245
}
246
247
static
inline
int
regulator_is_enabled
(
struct
regulator
*
regulator
)
248
{
249
return
1;
250
}
251
252
static
inline
int
regulator_bulk_get
(
struct
device
*
dev
,
253
int
num_consumers,
254
struct
regulator_bulk_data
*consumers)
255
{
256
return
0;
257
}
258
259
static
inline
int
devm_regulator_bulk_get
(
struct
device
*
dev
,
int
num_consumers,
260
struct
regulator_bulk_data
*consumers)
261
{
262
return
0;
263
}
264
265
static
inline
int
regulator_bulk_enable
(
int
num_consumers,
266
struct
regulator_bulk_data
*consumers)
267
{
268
return
0;
269
}
270
271
static
inline
int
regulator_bulk_disable
(
int
num_consumers,
272
struct
regulator_bulk_data
*consumers)
273
{
274
return
0;
275
}
276
277
static
inline
int
regulator_bulk_force_disable
(
int
num_consumers,
278
struct
regulator_bulk_data
*consumers)
279
{
280
return
0;
281
}
282
283
static
inline
void
regulator_bulk_free
(
int
num_consumers,
284
struct
regulator_bulk_data
*consumers)
285
{
286
}
287
288
static
inline
int
regulator_set_voltage
(
struct
regulator
*
regulator
,
289
int
min_uV
,
int
max_uV
)
290
{
291
return
0;
292
}
293
294
static
inline
int
regulator_get_voltage
(
struct
regulator
*
regulator
)
295
{
296
return
-
EINVAL
;
297
}
298
299
static
inline
int
regulator_is_supported_voltage
(
struct
regulator
*
regulator
,
300
int
min_uV
,
int
max_uV
)
301
{
302
return
0;
303
}
304
305
static
inline
int
regulator_set_current_limit
(
struct
regulator
*
regulator
,
306
int
min_uA,
int
max_uA)
307
{
308
return
0;
309
}
310
311
static
inline
int
regulator_get_current_limit
(
struct
regulator
*
regulator
)
312
{
313
return
0;
314
}
315
316
static
inline
int
regulator_set_mode
(
struct
regulator
*
regulator
,
317
unsigned
int
mode
)
318
{
319
return
0;
320
}
321
322
static
inline
unsigned
int
regulator_get_mode
(
struct
regulator
*
regulator
)
323
{
324
return
REGULATOR_MODE_NORMAL
;
325
}
326
327
static
inline
int
regulator_set_optimum_mode
(
struct
regulator
*
regulator
,
328
int
load_uA)
329
{
330
return
REGULATOR_MODE_NORMAL
;
331
}
332
333
static
inline
int
regulator_allow_bypass
(
struct
regulator
*
regulator
,
334
bool
allow)
335
{
336
return
0;
337
}
338
339
static
inline
int
regulator_register_notifier
(
struct
regulator
*
regulator
,
340
struct
notifier_block
*nb)
341
{
342
return
0;
343
}
344
345
static
inline
int
regulator_unregister_notifier
(
struct
regulator
*
regulator
,
346
struct
notifier_block
*nb)
347
{
348
return
0;
349
}
350
351
static
inline
void
*
regulator_get_drvdata
(
struct
regulator
*
regulator
)
352
{
353
return
NULL
;
354
}
355
356
static
inline
void
regulator_set_drvdata
(
struct
regulator
*
regulator
,
357
void
*
data
)
358
{
359
}
360
361
#endif
362
363
static
inline
int
regulator_set_voltage_tol(
struct
regulator
*
regulator
,
364
int
new_uV,
int
tol_uV)
365
{
366
return
regulator_set_voltage
(regulator,
367
new_uV - tol_uV, new_uV + tol_uV);
368
}
369
370
#endif
Generated on Thu Jan 10 2013 14:51:35 for Linux Kernel by
1.8.2