Blame view

include/linux/power_supply.h 7.59 KB
4a11b59d8   Anton Vorontsov   [BATTERY] Univers...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
  /*
   *  Universal power supply monitor class
   *
   *  Copyright © 2007  Anton Vorontsov <cbou@mail.ru>
   *  Copyright © 2004  Szabolcs Gyurko
   *  Copyright © 2003  Ian Molton <spyro@f2s.com>
   *
   *  Modified: 2004, Oct     Szabolcs Gyurko
   *
   *  You may use this code as per GPL version 2
   */
  
  #ifndef __LINUX_POWER_SUPPLY_H__
  #define __LINUX_POWER_SUPPLY_H__
  
  #include <linux/device.h>
  #include <linux/workqueue.h>
  #include <linux/leds.h>
  
  /*
   * All voltages, currents, charges, energies, time and temperatures in uV,
   * µA, µAh, µWh, seconds and tenths of degree Celsius unless otherwise
   * stated. It's driver's job to convert its raw values to units in which
   * this class operates.
   */
  
  /*
   * For systems where the charger determines the maximum battery capacity
   * the min and max fields should be used to present these values to user
   * space. Unused/unknown fields will not appear in sysfs.
   */
  
  enum {
  	POWER_SUPPLY_STATUS_UNKNOWN = 0,
  	POWER_SUPPLY_STATUS_CHARGING,
  	POWER_SUPPLY_STATUS_DISCHARGING,
  	POWER_SUPPLY_STATUS_NOT_CHARGING,
  	POWER_SUPPLY_STATUS_FULL,
  };
  
  enum {
ee8076ed3   Andres Salomon   power_supply: Add...
42
43
44
45
46
47
48
  	POWER_SUPPLY_CHARGE_TYPE_UNKNOWN = 0,
  	POWER_SUPPLY_CHARGE_TYPE_NONE,
  	POWER_SUPPLY_CHARGE_TYPE_TRICKLE,
  	POWER_SUPPLY_CHARGE_TYPE_FAST,
  };
  
  enum {
4a11b59d8   Anton Vorontsov   [BATTERY] Univers...
49
50
51
52
53
54
  	POWER_SUPPLY_HEALTH_UNKNOWN = 0,
  	POWER_SUPPLY_HEALTH_GOOD,
  	POWER_SUPPLY_HEALTH_OVERHEAT,
  	POWER_SUPPLY_HEALTH_DEAD,
  	POWER_SUPPLY_HEALTH_OVERVOLTAGE,
  	POWER_SUPPLY_HEALTH_UNSPEC_FAILURE,
7e386e6e0   Mark Brown   power_supply: Add...
55
  	POWER_SUPPLY_HEALTH_COLD,
4a11b59d8   Anton Vorontsov   [BATTERY] Univers...
56
57
58
59
60
61
62
63
64
  };
  
  enum {
  	POWER_SUPPLY_TECHNOLOGY_UNKNOWN = 0,
  	POWER_SUPPLY_TECHNOLOGY_NiMH,
  	POWER_SUPPLY_TECHNOLOGY_LION,
  	POWER_SUPPLY_TECHNOLOGY_LIPO,
  	POWER_SUPPLY_TECHNOLOGY_LiFe,
  	POWER_SUPPLY_TECHNOLOGY_NiCd,
c7cc930f9   Dmitry Eremin-Solenikov   power_supply: add...
65
  	POWER_SUPPLY_TECHNOLOGY_LiMn,
4a11b59d8   Anton Vorontsov   [BATTERY] Univers...
66
  };
b294a290d   Andres Salomon   Revert "power: re...
67
68
69
70
71
72
73
74
  enum {
  	POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN = 0,
  	POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL,
  	POWER_SUPPLY_CAPACITY_LEVEL_LOW,
  	POWER_SUPPLY_CAPACITY_LEVEL_NORMAL,
  	POWER_SUPPLY_CAPACITY_LEVEL_HIGH,
  	POWER_SUPPLY_CAPACITY_LEVEL_FULL,
  };
25a0bc2df   Jeremy Fitzhardinge   power_supply: add...
75
76
77
78
79
  enum {
  	POWER_SUPPLY_SCOPE_UNKNOWN = 0,
  	POWER_SUPPLY_SCOPE_SYSTEM,
  	POWER_SUPPLY_SCOPE_DEVICE,
  };
4a11b59d8   Anton Vorontsov   [BATTERY] Univers...
80
81
82
  enum power_supply_property {
  	/* Properties of type `int' */
  	POWER_SUPPLY_PROP_STATUS = 0,
ee8076ed3   Andres Salomon   power_supply: Add...
83
  	POWER_SUPPLY_PROP_CHARGE_TYPE,
4a11b59d8   Anton Vorontsov   [BATTERY] Univers...
84
85
86
87
  	POWER_SUPPLY_PROP_HEALTH,
  	POWER_SUPPLY_PROP_PRESENT,
  	POWER_SUPPLY_PROP_ONLINE,
  	POWER_SUPPLY_PROP_TECHNOLOGY,
c955fe8e0   Alexey Starikovskiy   POWER: Add suppor...
88
  	POWER_SUPPLY_PROP_CYCLE_COUNT,
c7cc930f9   Dmitry Eremin-Solenikov   power_supply: add...
89
90
  	POWER_SUPPLY_PROP_VOLTAGE_MAX,
  	POWER_SUPPLY_PROP_VOLTAGE_MIN,
4a11b59d8   Anton Vorontsov   [BATTERY] Univers...
91
92
93
94
  	POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN,
  	POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN,
  	POWER_SUPPLY_PROP_VOLTAGE_NOW,
  	POWER_SUPPLY_PROP_VOLTAGE_AVG,
fe3f6d097   Heikki Krogerus   power_supply: Int...
95
  	POWER_SUPPLY_PROP_CURRENT_MAX,
4a11b59d8   Anton Vorontsov   [BATTERY] Univers...
96
97
  	POWER_SUPPLY_PROP_CURRENT_NOW,
  	POWER_SUPPLY_PROP_CURRENT_AVG,
7faa144a5   Alexey Starikovskiy   ACPI: battery: ad...
98
99
  	POWER_SUPPLY_PROP_POWER_NOW,
  	POWER_SUPPLY_PROP_POWER_AVG,
4a11b59d8   Anton Vorontsov   [BATTERY] Univers...
100
101
102
103
104
105
  	POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN,
  	POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN,
  	POWER_SUPPLY_PROP_CHARGE_FULL,
  	POWER_SUPPLY_PROP_CHARGE_EMPTY,
  	POWER_SUPPLY_PROP_CHARGE_NOW,
  	POWER_SUPPLY_PROP_CHARGE_AVG,
8e552c36d   Andres Salomon   power_supply: add...
106
  	POWER_SUPPLY_PROP_CHARGE_COUNTER,
4a11b59d8   Anton Vorontsov   [BATTERY] Univers...
107
108
109
110
111
112
113
  	POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN,
  	POWER_SUPPLY_PROP_ENERGY_EMPTY_DESIGN,
  	POWER_SUPPLY_PROP_ENERGY_FULL,
  	POWER_SUPPLY_PROP_ENERGY_EMPTY,
  	POWER_SUPPLY_PROP_ENERGY_NOW,
  	POWER_SUPPLY_PROP_ENERGY_AVG,
  	POWER_SUPPLY_PROP_CAPACITY, /* in percents! */
b294a290d   Andres Salomon   Revert "power: re...
114
  	POWER_SUPPLY_PROP_CAPACITY_LEVEL,
4a11b59d8   Anton Vorontsov   [BATTERY] Univers...
115
116
117
118
119
120
  	POWER_SUPPLY_PROP_TEMP,
  	POWER_SUPPLY_PROP_TEMP_AMBIENT,
  	POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW,
  	POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG,
  	POWER_SUPPLY_PROP_TIME_TO_FULL_NOW,
  	POWER_SUPPLY_PROP_TIME_TO_FULL_AVG,
5f487cd34   Anton Vorontsov   power_supply: Use...
121
  	POWER_SUPPLY_PROP_TYPE, /* use power_supply.type instead */
25a0bc2df   Jeremy Fitzhardinge   power_supply: add...
122
  	POWER_SUPPLY_PROP_SCOPE,
4a11b59d8   Anton Vorontsov   [BATTERY] Univers...
123
124
125
  	/* Properties of type `const char *' */
  	POWER_SUPPLY_PROP_MODEL_NAME,
  	POWER_SUPPLY_PROP_MANUFACTURER,
7c2670bbb   maximilian attems   ACPI: battery: ad...
126
  	POWER_SUPPLY_PROP_SERIAL_NUMBER,
4a11b59d8   Anton Vorontsov   [BATTERY] Univers...
127
128
129
  };
  
  enum power_supply_type {
9b8872273   Kim, Milo   power_supply: Add...
130
131
  	POWER_SUPPLY_TYPE_UNKNOWN = 0,
  	POWER_SUPPLY_TYPE_BATTERY,
4a11b59d8   Anton Vorontsov   [BATTERY] Univers...
132
133
  	POWER_SUPPLY_TYPE_UPS,
  	POWER_SUPPLY_TYPE_MAINS,
85efc8a18   Heikki Krogerus   power_supply: Add...
134
135
136
137
  	POWER_SUPPLY_TYPE_USB,		/* Standard Downstream Port */
  	POWER_SUPPLY_TYPE_USB_DCP,	/* Dedicated Charging Port */
  	POWER_SUPPLY_TYPE_USB_CDP,	/* Charging Downstream Port */
  	POWER_SUPPLY_TYPE_USB_ACA,	/* Accessory Charger Adapters */
4a11b59d8   Anton Vorontsov   [BATTERY] Univers...
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
  };
  
  union power_supply_propval {
  	int intval;
  	const char *strval;
  };
  
  struct power_supply {
  	const char *name;
  	enum power_supply_type type;
  	enum power_supply_property *properties;
  	size_t num_properties;
  
  	char **supplied_to;
  	size_t num_supplicants;
  
  	int (*get_property)(struct power_supply *psy,
  			    enum power_supply_property psp,
  			    union power_supply_propval *val);
0011d2d4a   Daniel Mack   power_supply: Add...
157
158
159
160
161
  	int (*set_property)(struct power_supply *psy,
  			    enum power_supply_property psp,
  			    const union power_supply_propval *val);
  	int (*property_is_writeable)(struct power_supply *psy,
  				     enum power_supply_property psp);
4a11b59d8   Anton Vorontsov   [BATTERY] Univers...
162
  	void (*external_power_changed)(struct power_supply *psy);
e5f5ccb64   Daniel Mack   power_supply: get...
163
  	void (*set_charged)(struct power_supply *psy);
4a11b59d8   Anton Vorontsov   [BATTERY] Univers...
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
  
  	/* For APM emulation, think legacy userspace. */
  	int use_for_apm;
  
  	/* private */
  	struct device *dev;
  	struct work_struct changed_work;
  
  #ifdef CONFIG_LEDS_TRIGGERS
  	struct led_trigger *charging_full_trig;
  	char *charging_full_trig_name;
  	struct led_trigger *charging_trig;
  	char *charging_trig_name;
  	struct led_trigger *full_trig;
  	char *full_trig_name;
  	struct led_trigger *online_trig;
  	char *online_trig_name;
6501f728c   Vasily Khoruzhick   power_supply: Add...
181
182
  	struct led_trigger *charging_blink_full_solid_trig;
  	char *charging_blink_full_solid_trig_name;
4a11b59d8   Anton Vorontsov   [BATTERY] Univers...
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
  #endif
  };
  
  /*
   * This is recommended structure to specify static power supply parameters.
   * Generic one, parametrizable for different power supplies. Power supply
   * class itself does not use it, but that's what implementing most platform
   * drivers, should try reuse for consistency.
   */
  
  struct power_supply_info {
  	const char *name;
  	int technology;
  	int voltage_max_design;
  	int voltage_min_design;
  	int charge_full_design;
  	int charge_empty_design;
  	int energy_full_design;
  	int energy_empty_design;
  	int use_for_apm;
  };
e5f5ccb64   Daniel Mack   power_supply: get...
204
  extern struct power_supply *power_supply_get_by_name(char *name);
4a11b59d8   Anton Vorontsov   [BATTERY] Univers...
205
206
  extern void power_supply_changed(struct power_supply *psy);
  extern int power_supply_am_i_supplied(struct power_supply *psy);
e5f5ccb64   Daniel Mack   power_supply: get...
207
  extern int power_supply_set_battery_charged(struct power_supply *psy);
4a11b59d8   Anton Vorontsov   [BATTERY] Univers...
208

942ed1619   Matthew Garrett   power_supply: Add...
209
210
211
212
213
  #if defined(CONFIG_POWER_SUPPLY) || defined(CONFIG_POWER_SUPPLY_MODULE)
  extern int power_supply_is_system_supplied(void);
  #else
  static inline int power_supply_is_system_supplied(void) { return -ENOSYS; }
  #endif
4a11b59d8   Anton Vorontsov   [BATTERY] Univers...
214
215
216
  extern int power_supply_register(struct device *parent,
  				 struct power_supply *psy);
  extern void power_supply_unregister(struct power_supply *psy);
835166519   Jeremy Fitzhardinge   power_supply: all...
217
  extern int power_supply_powers(struct power_supply *psy, struct device *dev);
4a11b59d8   Anton Vorontsov   [BATTERY] Univers...
218
219
220
  
  /* For APM emulation, think legacy userspace. */
  extern struct class *power_supply_class;
51d075660   Rhyland Klein   bq20z75: Add supp...
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
  static inline bool power_supply_is_amp_property(enum power_supply_property psp)
  {
  	switch (psp) {
  	case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN:
  	case POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN:
  	case POWER_SUPPLY_PROP_CHARGE_FULL:
  	case POWER_SUPPLY_PROP_CHARGE_EMPTY:
  	case POWER_SUPPLY_PROP_CHARGE_NOW:
  	case POWER_SUPPLY_PROP_CHARGE_AVG:
  	case POWER_SUPPLY_PROP_CHARGE_COUNTER:
  	case POWER_SUPPLY_PROP_CURRENT_MAX:
  	case POWER_SUPPLY_PROP_CURRENT_NOW:
  	case POWER_SUPPLY_PROP_CURRENT_AVG:
  		return 1;
  	default:
  		break;
  	}
  
  	return 0;
  }
  
  static inline bool power_supply_is_watt_property(enum power_supply_property psp)
  {
  	switch (psp) {
  	case POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN:
  	case POWER_SUPPLY_PROP_ENERGY_EMPTY_DESIGN:
  	case POWER_SUPPLY_PROP_ENERGY_FULL:
  	case POWER_SUPPLY_PROP_ENERGY_EMPTY:
  	case POWER_SUPPLY_PROP_ENERGY_NOW:
  	case POWER_SUPPLY_PROP_ENERGY_AVG:
  	case POWER_SUPPLY_PROP_VOLTAGE_MAX:
  	case POWER_SUPPLY_PROP_VOLTAGE_MIN:
  	case POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN:
  	case POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN:
  	case POWER_SUPPLY_PROP_VOLTAGE_NOW:
  	case POWER_SUPPLY_PROP_VOLTAGE_AVG:
35c9d2676   Rhyland Klein   power_supply: Upd...
257
  	case POWER_SUPPLY_PROP_POWER_NOW:
51d075660   Rhyland Klein   bq20z75: Add supp...
258
259
260
261
262
263
264
  		return 1;
  	default:
  		break;
  	}
  
  	return 0;
  }
4a11b59d8   Anton Vorontsov   [BATTERY] Univers...
265
  #endif /* __LINUX_POWER_SUPPLY_H__ */