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
power_supply.h
Go to the documentation of this file.
1
/*
2
* Universal power supply monitor class
3
*
4
* Copyright © 2007 Anton Vorontsov <
[email protected]
>
5
* Copyright © 2004 Szabolcs Gyurko
6
* Copyright © 2003 Ian Molton <
[email protected]
>
7
*
8
* Modified: 2004, Oct Szabolcs Gyurko
9
*
10
* You may use this code as per GPL version 2
11
*/
12
13
#ifndef __LINUX_POWER_SUPPLY_H__
14
#define __LINUX_POWER_SUPPLY_H__
15
16
#include <
linux/workqueue.h
>
17
#include <
linux/leds.h
>
18
19
struct
device
;
20
21
/*
22
* All voltages, currents, charges, energies, time and temperatures in uV,
23
* µA, µAh, µWh, seconds and tenths of degree Celsius unless otherwise
24
* stated. It's driver's job to convert its raw values to units in which
25
* this class operates.
26
*/
27
28
/*
29
* For systems where the charger determines the maximum battery capacity
30
* the min and max fields should be used to present these values to user
31
* space. Unused/unknown fields will not appear in sysfs.
32
*/
33
34
enum
{
35
POWER_SUPPLY_STATUS_UNKNOWN
= 0,
36
POWER_SUPPLY_STATUS_CHARGING
,
37
POWER_SUPPLY_STATUS_DISCHARGING
,
38
POWER_SUPPLY_STATUS_NOT_CHARGING
,
39
POWER_SUPPLY_STATUS_FULL
,
40
};
41
42
enum
{
43
POWER_SUPPLY_CHARGE_TYPE_UNKNOWN
= 0,
44
POWER_SUPPLY_CHARGE_TYPE_NONE
,
45
POWER_SUPPLY_CHARGE_TYPE_TRICKLE
,
46
POWER_SUPPLY_CHARGE_TYPE_FAST
,
47
};
48
49
enum
{
50
POWER_SUPPLY_HEALTH_UNKNOWN
= 0,
51
POWER_SUPPLY_HEALTH_GOOD
,
52
POWER_SUPPLY_HEALTH_OVERHEAT
,
53
POWER_SUPPLY_HEALTH_DEAD
,
54
POWER_SUPPLY_HEALTH_OVERVOLTAGE
,
55
POWER_SUPPLY_HEALTH_UNSPEC_FAILURE
,
56
POWER_SUPPLY_HEALTH_COLD
,
57
};
58
59
enum
{
60
POWER_SUPPLY_TECHNOLOGY_UNKNOWN
= 0,
61
POWER_SUPPLY_TECHNOLOGY_NiMH
,
62
POWER_SUPPLY_TECHNOLOGY_LION
,
63
POWER_SUPPLY_TECHNOLOGY_LIPO
,
64
POWER_SUPPLY_TECHNOLOGY_LiFe
,
65
POWER_SUPPLY_TECHNOLOGY_NiCd
,
66
POWER_SUPPLY_TECHNOLOGY_LiMn
,
67
};
68
69
enum
{
70
POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN
= 0,
71
POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL
,
72
POWER_SUPPLY_CAPACITY_LEVEL_LOW
,
73
POWER_SUPPLY_CAPACITY_LEVEL_NORMAL
,
74
POWER_SUPPLY_CAPACITY_LEVEL_HIGH
,
75
POWER_SUPPLY_CAPACITY_LEVEL_FULL
,
76
};
77
78
enum
{
79
POWER_SUPPLY_SCOPE_UNKNOWN
= 0,
80
POWER_SUPPLY_SCOPE_SYSTEM
,
81
POWER_SUPPLY_SCOPE_DEVICE
,
82
};
83
84
enum
power_supply_property
{
85
/* Properties of type `int' */
86
POWER_SUPPLY_PROP_STATUS
= 0,
87
POWER_SUPPLY_PROP_CHARGE_TYPE
,
88
POWER_SUPPLY_PROP_HEALTH
,
89
POWER_SUPPLY_PROP_PRESENT
,
90
POWER_SUPPLY_PROP_ONLINE
,
91
POWER_SUPPLY_PROP_AUTHENTIC
,
92
POWER_SUPPLY_PROP_TECHNOLOGY
,
93
POWER_SUPPLY_PROP_CYCLE_COUNT
,
94
POWER_SUPPLY_PROP_VOLTAGE_MAX
,
95
POWER_SUPPLY_PROP_VOLTAGE_MIN
,
96
POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN
,
97
POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN
,
98
POWER_SUPPLY_PROP_VOLTAGE_NOW
,
99
POWER_SUPPLY_PROP_VOLTAGE_AVG
,
100
POWER_SUPPLY_PROP_VOLTAGE_OCV
,
101
POWER_SUPPLY_PROP_CURRENT_MAX
,
102
POWER_SUPPLY_PROP_CURRENT_NOW
,
103
POWER_SUPPLY_PROP_CURRENT_AVG
,
104
POWER_SUPPLY_PROP_POWER_NOW
,
105
POWER_SUPPLY_PROP_POWER_AVG
,
106
POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN
,
107
POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN
,
108
POWER_SUPPLY_PROP_CHARGE_FULL
,
109
POWER_SUPPLY_PROP_CHARGE_EMPTY
,
110
POWER_SUPPLY_PROP_CHARGE_NOW
,
111
POWER_SUPPLY_PROP_CHARGE_AVG
,
112
POWER_SUPPLY_PROP_CHARGE_COUNTER
,
113
POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT
,
114
POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX
,
115
POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE
,
116
POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX
,
117
POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN
,
118
POWER_SUPPLY_PROP_ENERGY_EMPTY_DESIGN
,
119
POWER_SUPPLY_PROP_ENERGY_FULL
,
120
POWER_SUPPLY_PROP_ENERGY_EMPTY
,
121
POWER_SUPPLY_PROP_ENERGY_NOW
,
122
POWER_SUPPLY_PROP_ENERGY_AVG
,
123
POWER_SUPPLY_PROP_CAPACITY
,
/* in percents! */
124
POWER_SUPPLY_PROP_CAPACITY_ALERT_MIN
,
/* in percents! */
125
POWER_SUPPLY_PROP_CAPACITY_ALERT_MAX
,
/* in percents! */
126
POWER_SUPPLY_PROP_CAPACITY_LEVEL
,
127
POWER_SUPPLY_PROP_TEMP
,
128
POWER_SUPPLY_PROP_TEMP_ALERT_MIN
,
129
POWER_SUPPLY_PROP_TEMP_ALERT_MAX
,
130
POWER_SUPPLY_PROP_TEMP_AMBIENT
,
131
POWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MIN
,
132
POWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MAX
,
133
POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW
,
134
POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG
,
135
POWER_SUPPLY_PROP_TIME_TO_FULL_NOW
,
136
POWER_SUPPLY_PROP_TIME_TO_FULL_AVG
,
137
POWER_SUPPLY_PROP_TYPE
,
/* use power_supply.type instead */
138
POWER_SUPPLY_PROP_SCOPE
,
139
/* Properties of type `const char *' */
140
POWER_SUPPLY_PROP_MODEL_NAME
,
141
POWER_SUPPLY_PROP_MANUFACTURER
,
142
POWER_SUPPLY_PROP_SERIAL_NUMBER
,
143
};
144
145
enum
power_supply_type
{
146
POWER_SUPPLY_TYPE_UNKNOWN
= 0,
147
POWER_SUPPLY_TYPE_BATTERY
,
148
POWER_SUPPLY_TYPE_UPS
,
149
POWER_SUPPLY_TYPE_MAINS
,
150
POWER_SUPPLY_TYPE_USB
,
/* Standard Downstream Port */
151
POWER_SUPPLY_TYPE_USB_DCP
,
/* Dedicated Charging Port */
152
POWER_SUPPLY_TYPE_USB_CDP
,
/* Charging Downstream Port */
153
POWER_SUPPLY_TYPE_USB_ACA
,
/* Accessory Charger Adapters */
154
};
155
156
union
power_supply_propval
{
157
int
intval
;
158
const
char
*
strval
;
159
};
160
161
struct
power_supply
{
162
const
char
*
name
;
163
enum
power_supply_type
type
;
164
enum
power_supply_property
*
properties
;
165
size_t
num_properties
;
166
167
char
**
supplied_to
;
168
size_t
num_supplicants
;
169
170
int
(*
get_property
)(
struct
power_supply
*psy,
171
enum
power_supply_property
psp,
172
union
power_supply_propval
*
val
);
173
int
(*
set_property
)(
struct
power_supply
*psy,
174
enum
power_supply_property
psp,
175
const
union
power_supply_propval
*
val
);
176
int
(*
property_is_writeable
)(
struct
power_supply
*psy,
177
enum
power_supply_property
psp);
178
void
(*
external_power_changed
)(
struct
power_supply
*psy);
179
void
(*
set_charged
)(
struct
power_supply
*psy);
180
181
/* For APM emulation, think legacy userspace. */
182
int
use_for_apm
;
183
184
/* private */
185
struct
device
*
dev
;
186
struct
work_struct
changed_work
;
187
#ifdef CONFIG_THERMAL
188
struct
thermal_zone_device
*tzd;
189
#endif
190
191
#ifdef CONFIG_LEDS_TRIGGERS
192
struct
led_trigger *charging_full_trig;
193
char
*charging_full_trig_name;
194
struct
led_trigger *charging_trig;
195
char
*charging_trig_name;
196
struct
led_trigger *full_trig;
197
char
*full_trig_name;
198
struct
led_trigger *online_trig;
199
char
*online_trig_name;
200
struct
led_trigger *charging_blink_full_solid_trig;
201
char
*charging_blink_full_solid_trig_name;
202
#endif
203
};
204
205
/*
206
* This is recommended structure to specify static power supply parameters.
207
* Generic one, parametrizable for different power supplies. Power supply
208
* class itself does not use it, but that's what implementing most platform
209
* drivers, should try reuse for consistency.
210
*/
211
212
struct
power_supply_info
{
213
const
char
*
name
;
214
int
technology
;
215
int
voltage_max_design
;
216
int
voltage_min_design
;
217
int
charge_full_design
;
218
int
charge_empty_design
;
219
int
energy_full_design
;
220
int
energy_empty_design
;
221
int
use_for_apm
;
222
};
223
224
extern
struct
power_supply
*
power_supply_get_by_name
(
char
*
name
);
225
extern
void
power_supply_changed
(
struct
power_supply
*psy);
226
extern
int
power_supply_am_i_supplied
(
struct
power_supply
*psy);
227
extern
int
power_supply_set_battery_charged
(
struct
power_supply
*psy);
228
229
#ifdef CONFIG_POWER_SUPPLY
230
extern
int
power_supply_is_system_supplied
(
void
);
231
#else
232
static
inline
int
power_supply_is_system_supplied
(
void
) {
return
-
ENOSYS
; }
233
#endif
234
235
extern
int
power_supply_register
(
struct
device
*parent,
236
struct
power_supply
*psy);
237
extern
void
power_supply_unregister
(
struct
power_supply
*psy);
238
extern
int
power_supply_powers
(
struct
power_supply
*psy,
struct
device
*
dev
);
239
240
/* For APM emulation, think legacy userspace. */
241
extern
struct
class
*
power_supply_class
;
242
243
static
inline
bool
power_supply_is_amp_property(
enum
power_supply_property
psp)
244
{
245
switch
(psp) {
246
case
POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN
:
247
case
POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN
:
248
case
POWER_SUPPLY_PROP_CHARGE_FULL
:
249
case
POWER_SUPPLY_PROP_CHARGE_EMPTY
:
250
case
POWER_SUPPLY_PROP_CHARGE_NOW
:
251
case
POWER_SUPPLY_PROP_CHARGE_AVG
:
252
case
POWER_SUPPLY_PROP_CHARGE_COUNTER
:
253
case
POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT
:
254
case
POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX
:
255
case
POWER_SUPPLY_PROP_CURRENT_MAX
:
256
case
POWER_SUPPLY_PROP_CURRENT_NOW
:
257
case
POWER_SUPPLY_PROP_CURRENT_AVG
:
258
return
1;
259
default
:
260
break
;
261
}
262
263
return
0;
264
}
265
266
static
inline
bool
power_supply_is_watt_property(
enum
power_supply_property
psp)
267
{
268
switch
(psp) {
269
case
POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN
:
270
case
POWER_SUPPLY_PROP_ENERGY_EMPTY_DESIGN
:
271
case
POWER_SUPPLY_PROP_ENERGY_FULL
:
272
case
POWER_SUPPLY_PROP_ENERGY_EMPTY
:
273
case
POWER_SUPPLY_PROP_ENERGY_NOW
:
274
case
POWER_SUPPLY_PROP_ENERGY_AVG
:
275
case
POWER_SUPPLY_PROP_VOLTAGE_MAX
:
276
case
POWER_SUPPLY_PROP_VOLTAGE_MIN
:
277
case
POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN
:
278
case
POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN
:
279
case
POWER_SUPPLY_PROP_VOLTAGE_NOW
:
280
case
POWER_SUPPLY_PROP_VOLTAGE_AVG
:
281
case
POWER_SUPPLY_PROP_VOLTAGE_OCV
:
282
case
POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE
:
283
case
POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX
:
284
case
POWER_SUPPLY_PROP_POWER_NOW
:
285
return
1;
286
default
:
287
break
;
288
}
289
290
return
0;
291
}
292
293
#endif
/* __LINUX_POWER_SUPPLY_H__ */
Generated on Thu Jan 10 2013 14:16:09 for Linux Kernel by
1.8.2