Root/
1 | /* |
2 | * Universal power supply monitor class |
3 | * |
4 | * Copyright © 2007 Anton Vorontsov <cbou@mail.ru> |
5 | * Copyright © 2004 Szabolcs Gyurko |
6 | * Copyright © 2003 Ian Molton <spyro@f2s.com> |
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/device.h> |
17 | #include <linux/workqueue.h> |
18 | #include <linux/leds.h> |
19 | |
20 | /* |
21 | * All voltages, currents, charges, energies, time and temperatures in uV, |
22 | * µA, µAh, µWh, seconds and tenths of degree Celsius unless otherwise |
23 | * stated. It's driver's job to convert its raw values to units in which |
24 | * this class operates. |
25 | */ |
26 | |
27 | /* |
28 | * For systems where the charger determines the maximum battery capacity |
29 | * the min and max fields should be used to present these values to user |
30 | * space. Unused/unknown fields will not appear in sysfs. |
31 | */ |
32 | |
33 | enum { |
34 | POWER_SUPPLY_STATUS_UNKNOWN = 0, |
35 | POWER_SUPPLY_STATUS_CHARGING, |
36 | POWER_SUPPLY_STATUS_DISCHARGING, |
37 | POWER_SUPPLY_STATUS_NOT_CHARGING, |
38 | POWER_SUPPLY_STATUS_FULL, |
39 | }; |
40 | |
41 | enum { |
42 | POWER_SUPPLY_CHARGE_TYPE_UNKNOWN = 0, |
43 | POWER_SUPPLY_CHARGE_TYPE_NONE, |
44 | POWER_SUPPLY_CHARGE_TYPE_TRICKLE, |
45 | POWER_SUPPLY_CHARGE_TYPE_FAST, |
46 | }; |
47 | |
48 | enum { |
49 | POWER_SUPPLY_HEALTH_UNKNOWN = 0, |
50 | POWER_SUPPLY_HEALTH_GOOD, |
51 | POWER_SUPPLY_HEALTH_OVERHEAT, |
52 | POWER_SUPPLY_HEALTH_DEAD, |
53 | POWER_SUPPLY_HEALTH_OVERVOLTAGE, |
54 | POWER_SUPPLY_HEALTH_UNSPEC_FAILURE, |
55 | POWER_SUPPLY_HEALTH_COLD, |
56 | }; |
57 | |
58 | enum { |
59 | POWER_SUPPLY_TECHNOLOGY_UNKNOWN = 0, |
60 | POWER_SUPPLY_TECHNOLOGY_NiMH, |
61 | POWER_SUPPLY_TECHNOLOGY_LION, |
62 | POWER_SUPPLY_TECHNOLOGY_LIPO, |
63 | POWER_SUPPLY_TECHNOLOGY_LiFe, |
64 | POWER_SUPPLY_TECHNOLOGY_NiCd, |
65 | POWER_SUPPLY_TECHNOLOGY_LiMn, |
66 | }; |
67 | |
68 | enum { |
69 | POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN = 0, |
70 | POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL, |
71 | POWER_SUPPLY_CAPACITY_LEVEL_LOW, |
72 | POWER_SUPPLY_CAPACITY_LEVEL_NORMAL, |
73 | POWER_SUPPLY_CAPACITY_LEVEL_HIGH, |
74 | POWER_SUPPLY_CAPACITY_LEVEL_FULL, |
75 | }; |
76 | |
77 | enum power_supply_property { |
78 | /* Properties of type `int' */ |
79 | POWER_SUPPLY_PROP_STATUS = 0, |
80 | POWER_SUPPLY_PROP_CHARGE_TYPE, |
81 | POWER_SUPPLY_PROP_HEALTH, |
82 | POWER_SUPPLY_PROP_PRESENT, |
83 | POWER_SUPPLY_PROP_ONLINE, |
84 | POWER_SUPPLY_PROP_TECHNOLOGY, |
85 | POWER_SUPPLY_PROP_VOLTAGE_MAX, |
86 | POWER_SUPPLY_PROP_VOLTAGE_MIN, |
87 | POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN, |
88 | POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN, |
89 | POWER_SUPPLY_PROP_VOLTAGE_NOW, |
90 | POWER_SUPPLY_PROP_VOLTAGE_AVG, |
91 | POWER_SUPPLY_PROP_CURRENT_NOW, |
92 | POWER_SUPPLY_PROP_CURRENT_AVG, |
93 | POWER_SUPPLY_PROP_POWER_NOW, |
94 | POWER_SUPPLY_PROP_POWER_AVG, |
95 | POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN, |
96 | POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN, |
97 | POWER_SUPPLY_PROP_CHARGE_FULL, |
98 | POWER_SUPPLY_PROP_CHARGE_EMPTY, |
99 | POWER_SUPPLY_PROP_CHARGE_NOW, |
100 | POWER_SUPPLY_PROP_CHARGE_AVG, |
101 | POWER_SUPPLY_PROP_CHARGE_COUNTER, |
102 | POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN, |
103 | POWER_SUPPLY_PROP_ENERGY_EMPTY_DESIGN, |
104 | POWER_SUPPLY_PROP_ENERGY_FULL, |
105 | POWER_SUPPLY_PROP_ENERGY_EMPTY, |
106 | POWER_SUPPLY_PROP_ENERGY_NOW, |
107 | POWER_SUPPLY_PROP_ENERGY_AVG, |
108 | POWER_SUPPLY_PROP_CAPACITY, /* in percents! */ |
109 | POWER_SUPPLY_PROP_CAPACITY_LEVEL, |
110 | POWER_SUPPLY_PROP_TEMP, |
111 | POWER_SUPPLY_PROP_TEMP_AMBIENT, |
112 | POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW, |
113 | POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG, |
114 | POWER_SUPPLY_PROP_TIME_TO_FULL_NOW, |
115 | POWER_SUPPLY_PROP_TIME_TO_FULL_AVG, |
116 | /* Properties of type `const char *' */ |
117 | POWER_SUPPLY_PROP_MODEL_NAME, |
118 | POWER_SUPPLY_PROP_MANUFACTURER, |
119 | POWER_SUPPLY_PROP_SERIAL_NUMBER, |
120 | }; |
121 | |
122 | enum power_supply_type { |
123 | POWER_SUPPLY_TYPE_BATTERY = 0, |
124 | POWER_SUPPLY_TYPE_UPS, |
125 | POWER_SUPPLY_TYPE_MAINS, |
126 | POWER_SUPPLY_TYPE_USB, |
127 | }; |
128 | |
129 | union power_supply_propval { |
130 | int intval; |
131 | const char *strval; |
132 | }; |
133 | |
134 | struct power_supply { |
135 | const char *name; |
136 | enum power_supply_type type; |
137 | enum power_supply_property *properties; |
138 | size_t num_properties; |
139 | |
140 | char **supplied_to; |
141 | size_t num_supplicants; |
142 | |
143 | int (*get_property)(struct power_supply *psy, |
144 | enum power_supply_property psp, |
145 | union power_supply_propval *val); |
146 | void (*external_power_changed)(struct power_supply *psy); |
147 | void (*set_charged)(struct power_supply *psy); |
148 | |
149 | /* For APM emulation, think legacy userspace. */ |
150 | int use_for_apm; |
151 | |
152 | /* private */ |
153 | struct device *dev; |
154 | struct work_struct changed_work; |
155 | |
156 | #ifdef CONFIG_LEDS_TRIGGERS |
157 | struct led_trigger *charging_full_trig; |
158 | char *charging_full_trig_name; |
159 | struct led_trigger *charging_trig; |
160 | char *charging_trig_name; |
161 | struct led_trigger *full_trig; |
162 | char *full_trig_name; |
163 | struct led_trigger *online_trig; |
164 | char *online_trig_name; |
165 | #endif |
166 | }; |
167 | |
168 | /* |
169 | * This is recommended structure to specify static power supply parameters. |
170 | * Generic one, parametrizable for different power supplies. Power supply |
171 | * class itself does not use it, but that's what implementing most platform |
172 | * drivers, should try reuse for consistency. |
173 | */ |
174 | |
175 | struct power_supply_info { |
176 | const char *name; |
177 | int technology; |
178 | int voltage_max_design; |
179 | int voltage_min_design; |
180 | int charge_full_design; |
181 | int charge_empty_design; |
182 | int energy_full_design; |
183 | int energy_empty_design; |
184 | int use_for_apm; |
185 | }; |
186 | |
187 | extern struct power_supply *power_supply_get_by_name(char *name); |
188 | extern void power_supply_changed(struct power_supply *psy); |
189 | extern int power_supply_am_i_supplied(struct power_supply *psy); |
190 | extern int power_supply_set_battery_charged(struct power_supply *psy); |
191 | |
192 | #if defined(CONFIG_POWER_SUPPLY) || defined(CONFIG_POWER_SUPPLY_MODULE) |
193 | extern int power_supply_is_system_supplied(void); |
194 | #else |
195 | static inline int power_supply_is_system_supplied(void) { return -ENOSYS; } |
196 | #endif |
197 | |
198 | extern int power_supply_register(struct device *parent, |
199 | struct power_supply *psy); |
200 | extern void power_supply_unregister(struct power_supply *psy); |
201 | |
202 | /* For APM emulation, think legacy userspace. */ |
203 | extern struct class *power_supply_class; |
204 | |
205 | #endif /* __LINUX_POWER_SUPPLY_H__ */ |
206 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9