Blame view

include/linux/power_supply.h 7.37 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,
  };
4a11b59d8   Anton Vorontsov   [BATTERY] Univers...
75
76
77
  enum power_supply_property {
  	/* Properties of type `int' */
  	POWER_SUPPLY_PROP_STATUS = 0,
ee8076ed3   Andres Salomon   power_supply: Add...
78
  	POWER_SUPPLY_PROP_CHARGE_TYPE,
4a11b59d8   Anton Vorontsov   [BATTERY] Univers...
79
80
81
82
  	POWER_SUPPLY_PROP_HEALTH,
  	POWER_SUPPLY_PROP_PRESENT,
  	POWER_SUPPLY_PROP_ONLINE,
  	POWER_SUPPLY_PROP_TECHNOLOGY,
c955fe8e0   Alexey Starikovskiy   POWER: Add suppor...
83
  	POWER_SUPPLY_PROP_CYCLE_COUNT,
c7cc930f9   Dmitry Eremin-Solenikov   power_supply: add...
84
85
  	POWER_SUPPLY_PROP_VOLTAGE_MAX,
  	POWER_SUPPLY_PROP_VOLTAGE_MIN,
4a11b59d8   Anton Vorontsov   [BATTERY] Univers...
86
87
88
89
  	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...
90
  	POWER_SUPPLY_PROP_CURRENT_MAX,
4a11b59d8   Anton Vorontsov   [BATTERY] Univers...
91
92
  	POWER_SUPPLY_PROP_CURRENT_NOW,
  	POWER_SUPPLY_PROP_CURRENT_AVG,
7faa144a5   Alexey Starikovskiy   ACPI: battery: ad...
93
94
  	POWER_SUPPLY_PROP_POWER_NOW,
  	POWER_SUPPLY_PROP_POWER_AVG,
4a11b59d8   Anton Vorontsov   [BATTERY] Univers...
95
96
97
98
99
100
  	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...
101
  	POWER_SUPPLY_PROP_CHARGE_COUNTER,
4a11b59d8   Anton Vorontsov   [BATTERY] Univers...
102
103
104
105
106
107
108
  	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...
109
  	POWER_SUPPLY_PROP_CAPACITY_LEVEL,
4a11b59d8   Anton Vorontsov   [BATTERY] Univers...
110
111
112
113
114
115
  	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...
116
  	POWER_SUPPLY_PROP_TYPE, /* use power_supply.type instead */
4a11b59d8   Anton Vorontsov   [BATTERY] Univers...
117
118
119
  	/* Properties of type `const char *' */
  	POWER_SUPPLY_PROP_MODEL_NAME,
  	POWER_SUPPLY_PROP_MANUFACTURER,
7c2670bbb   maximilian attems   ACPI: battery: ad...
120
  	POWER_SUPPLY_PROP_SERIAL_NUMBER,
4a11b59d8   Anton Vorontsov   [BATTERY] Univers...
121
122
123
124
125
126
  };
  
  enum power_supply_type {
  	POWER_SUPPLY_TYPE_BATTERY = 0,
  	POWER_SUPPLY_TYPE_UPS,
  	POWER_SUPPLY_TYPE_MAINS,
85efc8a18   Heikki Krogerus   power_supply: Add...
127
128
129
130
  	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...
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
  };
  
  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...
150
151
152
153
154
  	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...
155
  	void (*external_power_changed)(struct power_supply *psy);
e5f5ccb64   Daniel Mack   power_supply: get...
156
  	void (*set_charged)(struct power_supply *psy);
4a11b59d8   Anton Vorontsov   [BATTERY] Univers...
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
  
  	/* 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...
174
175
  	struct led_trigger *charging_blink_full_solid_trig;
  	char *charging_blink_full_solid_trig_name;
4a11b59d8   Anton Vorontsov   [BATTERY] Univers...
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
  #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...
197
  extern struct power_supply *power_supply_get_by_name(char *name);
4a11b59d8   Anton Vorontsov   [BATTERY] Univers...
198
199
  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...
200
  extern int power_supply_set_battery_charged(struct power_supply *psy);
4a11b59d8   Anton Vorontsov   [BATTERY] Univers...
201

942ed1619   Matthew Garrett   power_supply: Add...
202
203
204
205
206
  #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...
207
208
209
210
211
212
  extern int power_supply_register(struct device *parent,
  				 struct power_supply *psy);
  extern void power_supply_unregister(struct power_supply *psy);
  
  /* For APM emulation, think legacy userspace. */
  extern struct class *power_supply_class;
51d075660   Rhyland Klein   bq20z75: Add supp...
213
214
215
216
217
218
219
220
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
  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...
249
  	case POWER_SUPPLY_PROP_POWER_NOW:
51d075660   Rhyland Klein   bq20z75: Add supp...
250
251
252
253
254
255
256
  		return 1;
  	default:
  		break;
  	}
  
  	return 0;
  }
4a11b59d8   Anton Vorontsov   [BATTERY] Univers...
257
  #endif /* __LINUX_POWER_SUPPLY_H__ */