OSDN Git Service

devfreq_boost: Introduce devfreq boost driver
[sagit-ice-cold/kernel_xiaomi_msm8998.git] / include / linux / power_supply.h
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 #include <linux/spinlock.h>
20 #include <linux/notifier.h>
21 #include <linux/types.h>
22
23 /*
24  * All voltages, currents, charges, energies, time and temperatures in uV,
25  * µA, µAh, µWh, seconds and tenths of degree Celsius unless otherwise
26  * stated. It's driver's job to convert its raw values to units in which
27  * this class operates.
28  */
29
30 /*
31  * For systems where the charger determines the maximum battery capacity
32  * the min and max fields should be used to present these values to user
33  * space. Unused/unknown fields will not appear in sysfs.
34  */
35
36 enum {
37         POWER_SUPPLY_STATUS_UNKNOWN = 0,
38         POWER_SUPPLY_STATUS_CHARGING,
39         POWER_SUPPLY_STATUS_DISCHARGING,
40         POWER_SUPPLY_STATUS_NOT_CHARGING,
41         POWER_SUPPLY_STATUS_FULL,
42 };
43
44 enum {
45         POWER_SUPPLY_CHARGE_TYPE_UNKNOWN = 0,
46         POWER_SUPPLY_CHARGE_TYPE_NONE,
47         POWER_SUPPLY_CHARGE_TYPE_TRICKLE,
48         POWER_SUPPLY_CHARGE_TYPE_FAST,
49         POWER_SUPPLY_CHARGE_TYPE_TAPER,
50 };
51
52 enum {
53         POWER_SUPPLY_HEALTH_UNKNOWN = 0,
54         POWER_SUPPLY_HEALTH_GOOD,
55         POWER_SUPPLY_HEALTH_OVERHEAT,
56         POWER_SUPPLY_HEALTH_DEAD,
57         POWER_SUPPLY_HEALTH_OVERVOLTAGE,
58         POWER_SUPPLY_HEALTH_UNSPEC_FAILURE,
59         POWER_SUPPLY_HEALTH_COLD,
60         POWER_SUPPLY_HEALTH_WATCHDOG_TIMER_EXPIRE,
61         POWER_SUPPLY_HEALTH_SAFETY_TIMER_EXPIRE,
62         POWER_SUPPLY_HEALTH_WARM,
63         POWER_SUPPLY_HEALTH_COOL,
64         POWER_SUPPLY_HEALTH_HOT,
65 };
66
67 enum {
68         POWER_SUPPLY_TECHNOLOGY_UNKNOWN = 0,
69         POWER_SUPPLY_TECHNOLOGY_NiMH,
70         POWER_SUPPLY_TECHNOLOGY_LION,
71         POWER_SUPPLY_TECHNOLOGY_LIPO,
72         POWER_SUPPLY_TECHNOLOGY_LiFe,
73         POWER_SUPPLY_TECHNOLOGY_NiCd,
74         POWER_SUPPLY_TECHNOLOGY_LiMn,
75 };
76
77 enum {
78         POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN = 0,
79         POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL,
80         POWER_SUPPLY_CAPACITY_LEVEL_LOW,
81         POWER_SUPPLY_CAPACITY_LEVEL_NORMAL,
82         POWER_SUPPLY_CAPACITY_LEVEL_HIGH,
83         POWER_SUPPLY_CAPACITY_LEVEL_FULL,
84 };
85
86 enum {
87         POWER_SUPPLY_SCOPE_UNKNOWN = 0,
88         POWER_SUPPLY_SCOPE_SYSTEM,
89         POWER_SUPPLY_SCOPE_DEVICE,
90 };
91
92 enum {
93         POWER_SUPPLY_DP_DM_UNKNOWN = 0,
94         POWER_SUPPLY_DP_DM_PREPARE = 1,
95         POWER_SUPPLY_DP_DM_UNPREPARE = 2,
96         POWER_SUPPLY_DP_DM_CONFIRMED_HVDCP3 = 3,
97         POWER_SUPPLY_DP_DM_DP_PULSE = 4,
98         POWER_SUPPLY_DP_DM_DM_PULSE = 5,
99         POWER_SUPPLY_DP_DM_DP0P6_DMF = 6,
100         POWER_SUPPLY_DP_DM_DP0P6_DM3P3 = 7,
101         POWER_SUPPLY_DP_DM_DPF_DMF = 8,
102         POWER_SUPPLY_DP_DM_DPR_DMR = 9,
103         POWER_SUPPLY_DP_DM_HVDCP3_SUPPORTED = 10,
104         POWER_SUPPLY_DP_DM_ICL_DOWN = 11,
105         POWER_SUPPLY_DP_DM_ICL_UP = 12,
106         POWER_SUPPLY_DP_DM_FORCE_5V = 13,
107         POWER_SUPPLY_DP_DM_FORCE_9V = 14,
108         POWER_SUPPLY_DP_DM_FORCE_12V = 15,
109 };
110
111 enum {
112         POWER_SUPPLY_PL_NONE,
113         POWER_SUPPLY_PL_USBIN_USBIN,
114         POWER_SUPPLY_PL_USBIN_USBIN_EXT,
115         POWER_SUPPLY_PL_USBMID_USBMID,
116 };
117
118 enum power_supply_property {
119         /* Properties of type `int' */
120         POWER_SUPPLY_PROP_STATUS = 0,
121         POWER_SUPPLY_PROP_CHARGE_TYPE,
122         POWER_SUPPLY_PROP_HEALTH,
123         POWER_SUPPLY_PROP_PRESENT,
124         POWER_SUPPLY_PROP_ONLINE,
125         POWER_SUPPLY_PROP_AUTHENTIC,
126         POWER_SUPPLY_PROP_TECHNOLOGY,
127         POWER_SUPPLY_PROP_CYCLE_COUNT,
128         POWER_SUPPLY_PROP_VOLTAGE_MAX,
129         POWER_SUPPLY_PROP_VOLTAGE_MIN,
130         POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN,
131         POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN,
132         POWER_SUPPLY_PROP_VOLTAGE_NOW,
133         POWER_SUPPLY_PROP_VOLTAGE_AVG,
134         POWER_SUPPLY_PROP_VOLTAGE_OCV,
135         POWER_SUPPLY_PROP_VOLTAGE_BOOT,
136         POWER_SUPPLY_PROP_CURRENT_MAX,
137         POWER_SUPPLY_PROP_CURRENT_NOW,
138         POWER_SUPPLY_PROP_CURRENT_AVG,
139         POWER_SUPPLY_PROP_CURRENT_BOOT,
140         POWER_SUPPLY_PROP_POWER_NOW,
141         POWER_SUPPLY_PROP_POWER_AVG,
142         POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN,
143         POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN,
144         POWER_SUPPLY_PROP_CHARGE_FULL,
145         POWER_SUPPLY_PROP_CHARGE_EMPTY,
146         POWER_SUPPLY_PROP_CHARGE_NOW,
147         POWER_SUPPLY_PROP_CHARGE_NOW_RAW,
148         POWER_SUPPLY_PROP_CHARGE_NOW_ERROR,
149         POWER_SUPPLY_PROP_CHARGE_AVG,
150         POWER_SUPPLY_PROP_CHARGE_COUNTER,
151         POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT,
152         POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX,
153         POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE,
154         POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX,
155         POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT,
156         POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT_MAX,
157         POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT,
158         POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN,
159         POWER_SUPPLY_PROP_ENERGY_EMPTY_DESIGN,
160         POWER_SUPPLY_PROP_ENERGY_FULL,
161         POWER_SUPPLY_PROP_ENERGY_EMPTY,
162         POWER_SUPPLY_PROP_ENERGY_NOW,
163         POWER_SUPPLY_PROP_ENERGY_AVG,
164         POWER_SUPPLY_PROP_CAPACITY, /* in percents! */
165         POWER_SUPPLY_PROP_CAPACITY_ALERT_MIN, /* in percents! */
166         POWER_SUPPLY_PROP_CAPACITY_ALERT_MAX, /* in percents! */
167         POWER_SUPPLY_PROP_CAPACITY_LEVEL,
168         POWER_SUPPLY_PROP_CAPACITY_RAW,
169         POWER_SUPPLY_PROP_TEMP,
170         POWER_SUPPLY_PROP_TEMP_MAX,
171         POWER_SUPPLY_PROP_TEMP_MIN,
172         POWER_SUPPLY_PROP_TEMP_ALERT_MIN,
173         POWER_SUPPLY_PROP_TEMP_ALERT_MAX,
174         POWER_SUPPLY_PROP_TEMP_AMBIENT,
175         POWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MIN,
176         POWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MAX,
177         POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW,
178         POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG,
179         POWER_SUPPLY_PROP_TIME_TO_FULL_NOW,
180         POWER_SUPPLY_PROP_TIME_TO_FULL_AVG,
181         POWER_SUPPLY_PROP_TYPE, /* use power_supply.type instead */
182         POWER_SUPPLY_PROP_SCOPE,
183         POWER_SUPPLY_PROP_CHARGE_TERM_CURRENT,
184         POWER_SUPPLY_PROP_CALIBRATE,
185         /* Local extensions */
186         POWER_SUPPLY_PROP_USB_HC,
187         POWER_SUPPLY_PROP_USB_OTG,
188         POWER_SUPPLY_PROP_BATTERY_CHARGING_ENABLED,
189         POWER_SUPPLY_PROP_CHARGING_ENABLED,
190         POWER_SUPPLY_PROP_STEP_CHARGING_ENABLED,
191         POWER_SUPPLY_PROP_STEP_CHARGING_STEP,
192         POWER_SUPPLY_PROP_PIN_ENABLED,
193         POWER_SUPPLY_PROP_INPUT_SUSPEND,
194         POWER_SUPPLY_PROP_INPUT_VOLTAGE_REGULATION,
195         POWER_SUPPLY_PROP_INPUT_CURRENT_MAX,
196         POWER_SUPPLY_PROP_INPUT_CURRENT_TRIM,
197         POWER_SUPPLY_PROP_INPUT_CURRENT_SETTLED,
198         POWER_SUPPLY_PROP_INPUT_VOLTAGE_SETTLED,
199         POWER_SUPPLY_PROP_VCHG_LOOP_DBC_BYPASS,
200         POWER_SUPPLY_PROP_CHARGE_COUNTER_SHADOW,
201         POWER_SUPPLY_PROP_HI_POWER,
202         POWER_SUPPLY_PROP_LOW_POWER,
203         POWER_SUPPLY_PROP_COOL_TEMP,
204         POWER_SUPPLY_PROP_WARM_TEMP,
205         POWER_SUPPLY_PROP_COLD_TEMP,
206         POWER_SUPPLY_PROP_HOT_TEMP,
207         POWER_SUPPLY_PROP_SYSTEM_TEMP_LEVEL,
208         POWER_SUPPLY_PROP_RESISTANCE,
209         POWER_SUPPLY_PROP_RESISTANCE_CAPACITIVE,
210         POWER_SUPPLY_PROP_RESISTANCE_ID, /* in Ohms */
211         POWER_SUPPLY_PROP_RESISTANCE_NOW,
212         POWER_SUPPLY_PROP_FLASH_CURRENT_MAX,
213         POWER_SUPPLY_PROP_UPDATE_NOW,
214         POWER_SUPPLY_PROP_ESR_COUNT,
215         POWER_SUPPLY_PROP_BUCK_FREQ,
216         POWER_SUPPLY_PROP_BOOST_CURRENT,
217         POWER_SUPPLY_PROP_SAFETY_TIMER_ENABLE,
218         POWER_SUPPLY_PROP_CHARGE_DONE,
219         POWER_SUPPLY_PROP_FLASH_ACTIVE,
220         POWER_SUPPLY_PROP_FLASH_TRIGGER,
221         POWER_SUPPLY_PROP_FORCE_TLIM,
222         POWER_SUPPLY_PROP_DP_DM,
223         POWER_SUPPLY_PROP_INPUT_CURRENT_LIMITED,
224         POWER_SUPPLY_PROP_INPUT_CURRENT_NOW,
225         POWER_SUPPLY_PROP_CHARGE_QNOVO_ENABLE,
226         POWER_SUPPLY_PROP_CURRENT_QNOVO,
227         POWER_SUPPLY_PROP_VOLTAGE_QNOVO,
228         POWER_SUPPLY_PROP_RERUN_AICL,
229         POWER_SUPPLY_PROP_CHARGER_TYPE,
230         POWER_SUPPLY_PROP_CYCLE_COUNT_ID,
231         POWER_SUPPLY_PROP_SAFETY_TIMER_EXPIRED,
232         POWER_SUPPLY_PROP_RESTRICTED_CHARGING,
233         POWER_SUPPLY_PROP_CURRENT_CAPABILITY,
234         POWER_SUPPLY_PROP_TYPEC_MODE,
235         POWER_SUPPLY_PROP_TYPEC_CC_ORIENTATION, /* 0: N/C, 1: CC1, 2: CC2 */
236         POWER_SUPPLY_PROP_TYPEC_POWER_ROLE,
237         POWER_SUPPLY_PROP_PD_ALLOWED,
238         POWER_SUPPLY_PROP_PD_ACTIVE,
239         POWER_SUPPLY_PROP_PD_IN_HARD_RESET,
240         POWER_SUPPLY_PROP_PD_CURRENT_MAX,
241         POWER_SUPPLY_PROP_PD_USB_SUSPEND_SUPPORTED,
242         POWER_SUPPLY_PROP_CHARGER_TEMP,
243         POWER_SUPPLY_PROP_CHARGER_TEMP_MAX,
244         POWER_SUPPLY_PROP_PARALLEL_DISABLE,
245         POWER_SUPPLY_PROP_PE_START,
246         POWER_SUPPLY_PROP_SET_SHIP_MODE,
247         POWER_SUPPLY_PROP_SOC_REPORTING_READY,
248         POWER_SUPPLY_PROP_DEBUG_BATTERY,
249         POWER_SUPPLY_PROP_FCC_DELTA,
250         POWER_SUPPLY_PROP_ICL_REDUCTION,
251         POWER_SUPPLY_PROP_PARALLEL_MODE,
252         POWER_SUPPLY_PROP_DIE_HEALTH,
253         POWER_SUPPLY_PROP_CONNECTOR_HEALTH,
254         POWER_SUPPLY_PROP_CTM_CURRENT_MAX,
255         POWER_SUPPLY_PROP_HW_CURRENT_MAX,
256         POWER_SUPPLY_PROP_REAL_TYPE,
257         POWER_SUPPLY_PROP_HVDCP3_TYPE,
258         POWER_SUPPLY_PROP_PR_SWAP,
259         POWER_SUPPLY_PROP_CC_STEP,
260         POWER_SUPPLY_PROP_CC_STEP_SEL,
261         POWER_SUPPLY_PROP_SW_JEITA_ENABLED,
262         POWER_SUPPLY_PROP_PD_VOLTAGE_MAX,
263         POWER_SUPPLY_PROP_PD_VOLTAGE_MIN,
264         POWER_SUPPLY_PROP_SDP_CURRENT_MAX,
265         POWER_SUPPLY_PROP_RERUN_APSD,
266         POWER_SUPPLY_PROP_TYPE_RECHECK,
267         POWER_SUPPLY_PROP_FCC_STEPPER_ENABLE,
268         POWER_SUPPLY_PROP_IGNORE_FALSE_NEGATIVE_ISENSE,
269         POWER_SUPPLY_PROP_BATTERY_INFO,
270         POWER_SUPPLY_PROP_BATTERY_INFO_ID,
271         POWER_SUPPLY_PROP_ENABLE_JEITA_DETECTION,
272         POWER_SUPPLY_PROP_ALLOW_HVDCP3,
273         POWER_SUPPLY_PROP_MAX_PULSE_ALLOWED,
274         /* Local extensions of type int64_t */
275         POWER_SUPPLY_PROP_CHARGE_COUNTER_EXT,
276         /* Properties of type `const char *' */
277         POWER_SUPPLY_PROP_MODEL_NAME,
278         POWER_SUPPLY_PROP_MANUFACTURER,
279         POWER_SUPPLY_PROP_SERIAL_NUMBER,
280         POWER_SUPPLY_PROP_BATTERY_TYPE,
281         POWER_SUPPLY_PROP_MAX
282 };
283
284 enum power_supply_type {
285         POWER_SUPPLY_TYPE_UNKNOWN = 0,
286         POWER_SUPPLY_TYPE_BATTERY,
287         POWER_SUPPLY_TYPE_UPS,
288         POWER_SUPPLY_TYPE_MAINS,
289         POWER_SUPPLY_TYPE_USB,          /* Standard Downstream Port */
290         POWER_SUPPLY_TYPE_USB_DCP,      /* Dedicated Charging Port */
291         POWER_SUPPLY_TYPE_USB_CDP,      /* Charging Downstream Port */
292         POWER_SUPPLY_TYPE_USB_ACA,      /* Accessory Charger Adapters */
293         POWER_SUPPLY_TYPE_USB_HVDCP,    /* High Voltage DCP */
294         POWER_SUPPLY_TYPE_USB_HVDCP_3,  /* Efficient High Voltage DCP */
295         POWER_SUPPLY_TYPE_USB_PD,       /* Power Delivery */
296         POWER_SUPPLY_TYPE_WIRELESS,     /* Accessory Charger Adapters */
297         POWER_SUPPLY_TYPE_USB_FLOAT,    /* Floating charger */
298         POWER_SUPPLY_TYPE_BMS,          /* Battery Monitor System */
299         POWER_SUPPLY_TYPE_PARALLEL,     /* Parallel Path */
300         POWER_SUPPLY_TYPE_MAIN,         /* Main Path */
301         POWER_SUPPLY_TYPE_WIPOWER,      /* Wipower */
302         POWER_SUPPLY_TYPE_TYPEC,        /* Type-C */
303         POWER_SUPPLY_TYPE_UFP,          /* Type-C UFP */
304         POWER_SUPPLY_TYPE_DFP,          /* TYpe-C DFP */
305 };
306
307 /* Indicates USB Type-C CC connection status */
308 enum power_supply_typec_mode {
309         POWER_SUPPLY_TYPEC_NONE,
310
311         /* Acting as source */
312         POWER_SUPPLY_TYPEC_SINK,                        /* Rd only */
313         POWER_SUPPLY_TYPEC_SINK_POWERED_CABLE,          /* Rd/Ra */
314         POWER_SUPPLY_TYPEC_SINK_DEBUG_ACCESSORY,        /* Rd/Rd */
315         POWER_SUPPLY_TYPEC_SINK_AUDIO_ADAPTER,          /* Ra/Ra */
316         POWER_SUPPLY_TYPEC_POWERED_CABLE_ONLY,          /* Ra only */
317
318         /* Acting as sink */
319         POWER_SUPPLY_TYPEC_SOURCE_DEFAULT,              /* Rp default */
320         POWER_SUPPLY_TYPEC_SOURCE_MEDIUM,               /* Rp 1.5A */
321         POWER_SUPPLY_TYPEC_SOURCE_HIGH,                 /* Rp 3A */
322         POWER_SUPPLY_TYPEC_NON_COMPLIANT,
323 };
324
325 enum power_supply_typec_power_role {
326         POWER_SUPPLY_TYPEC_PR_NONE,     /* CC lines in high-Z */
327         POWER_SUPPLY_TYPEC_PR_DUAL,
328         POWER_SUPPLY_TYPEC_PR_SINK,
329         POWER_SUPPLY_TYPEC_PR_SOURCE,
330 };
331
332 enum power_supply_notifier_events {
333         PSY_EVENT_PROP_CHANGED,
334 };
335
336 enum vmbms_power_usecase {
337         VMBMS_IGNORE_ALL_BIT = 1,
338         VMBMS_VOICE_CALL_BIT = (1 << 4),
339         VMBMS_STATIC_DISPLAY_BIT = (1 << 5),
340 };
341
342 union power_supply_propval {
343         int intval;
344         const char *strval;
345         int64_t int64val;
346 };
347
348 struct device_node;
349 struct power_supply;
350
351 /* Run-time specific power supply configuration */
352 struct power_supply_config {
353         struct device_node *of_node;
354         /* Driver private data */
355         void *drv_data;
356
357         char **supplied_to;
358         size_t num_supplicants;
359 };
360
361 /* Description of power supply */
362 struct power_supply_desc {
363         const char *name;
364         enum power_supply_type type;
365         enum power_supply_property *properties;
366         size_t num_properties;
367
368         /*
369          * Functions for drivers implementing power supply class.
370          * These shouldn't be called directly by other drivers for accessing
371          * this power supply. Instead use power_supply_*() functions (for
372          * example power_supply_get_property()).
373          */
374         int (*get_property)(struct power_supply *psy,
375                             enum power_supply_property psp,
376                             union power_supply_propval *val);
377         int (*set_property)(struct power_supply *psy,
378                             enum power_supply_property psp,
379                             const union power_supply_propval *val);
380         /*
381          * property_is_writeable() will be called during registration
382          * of power supply. If this happens during device probe then it must
383          * not access internal data of device (because probe did not end).
384          */
385         int (*property_is_writeable)(struct power_supply *psy,
386                                      enum power_supply_property psp);
387         void (*external_power_changed)(struct power_supply *psy);
388         void (*set_charged)(struct power_supply *psy);
389
390         /*
391          * Set if thermal zone should not be created for this power supply.
392          * For example for virtual supplies forwarding calls to actual
393          * sensors or other supplies.
394          */
395         bool no_thermal;
396         /* For APM emulation, think legacy userspace. */
397         int use_for_apm;
398 };
399
400 struct power_supply {
401         const struct power_supply_desc *desc;
402
403         char **supplied_to;
404         size_t num_supplicants;
405
406         char **supplied_from;
407         size_t num_supplies;
408         struct device_node *of_node;
409
410         /* Driver private data */
411         void *drv_data;
412
413         /* private */
414         struct device dev;
415         struct work_struct changed_work;
416         struct delayed_work deferred_register_work;
417         spinlock_t changed_lock;
418         bool changed;
419         atomic_t use_cnt;
420 #ifdef CONFIG_THERMAL
421         struct thermal_zone_device *tzd;
422         struct thermal_cooling_device *tcd;
423 #endif
424
425 #ifdef CONFIG_LEDS_TRIGGERS
426         struct led_trigger *charging_full_trig;
427         char *charging_full_trig_name;
428         struct led_trigger *charging_trig;
429         char *charging_trig_name;
430         struct led_trigger *full_trig;
431         char *full_trig_name;
432         struct led_trigger *online_trig;
433         char *online_trig_name;
434         struct led_trigger *charging_blink_full_solid_trig;
435         char *charging_blink_full_solid_trig_name;
436 #endif
437 };
438
439 /*
440  * This is recommended structure to specify static power supply parameters.
441  * Generic one, parametrizable for different power supplies. Power supply
442  * class itself does not use it, but that's what implementing most platform
443  * drivers, should try reuse for consistency.
444  */
445
446 struct power_supply_info {
447         const char *name;
448         int technology;
449         int voltage_max_design;
450         int voltage_min_design;
451         int charge_full_design;
452         int charge_empty_design;
453         int energy_full_design;
454         int energy_empty_design;
455         int use_for_apm;
456 };
457
458 extern struct atomic_notifier_head power_supply_notifier;
459 extern int power_supply_reg_notifier(struct notifier_block *nb);
460 extern void power_supply_unreg_notifier(struct notifier_block *nb);
461 extern struct power_supply *power_supply_get_by_name(const char *name);
462 extern void power_supply_put(struct power_supply *psy);
463 #ifdef CONFIG_OF
464 extern struct power_supply *power_supply_get_by_phandle(struct device_node *np,
465                                                         const char *property);
466 extern struct power_supply *devm_power_supply_get_by_phandle(
467                                     struct device *dev, const char *property);
468 #else /* !CONFIG_OF */
469 static inline struct power_supply *
470 power_supply_get_by_phandle(struct device_node *np, const char *property)
471 { return NULL; }
472 static inline struct power_supply *
473 devm_power_supply_get_by_phandle(struct device *dev, const char *property)
474 { return NULL; }
475 #endif /* CONFIG_OF */
476 extern void power_supply_changed(struct power_supply *psy);
477 extern int power_supply_am_i_supplied(struct power_supply *psy);
478 extern int power_supply_set_battery_charged(struct power_supply *psy);
479
480 #ifdef CONFIG_POWER_SUPPLY
481 extern int power_supply_is_system_supplied(void);
482 #else
483 static inline int power_supply_is_system_supplied(void) { return -ENOSYS; }
484 #endif
485
486 extern int power_supply_get_property(struct power_supply *psy,
487                             enum power_supply_property psp,
488                             union power_supply_propval *val);
489 extern int power_supply_set_property(struct power_supply *psy,
490                             enum power_supply_property psp,
491                             const union power_supply_propval *val);
492 extern int power_supply_property_is_writeable(struct power_supply *psy,
493                                         enum power_supply_property psp);
494 extern void power_supply_external_power_changed(struct power_supply *psy);
495
496 extern struct power_supply *__must_check
497 power_supply_register(struct device *parent,
498                                  const struct power_supply_desc *desc,
499                                  const struct power_supply_config *cfg);
500 extern struct power_supply *__must_check
501 power_supply_register_no_ws(struct device *parent,
502                                  const struct power_supply_desc *desc,
503                                  const struct power_supply_config *cfg);
504 extern struct power_supply *__must_check
505 devm_power_supply_register(struct device *parent,
506                                  const struct power_supply_desc *desc,
507                                  const struct power_supply_config *cfg);
508 extern struct power_supply *__must_check
509 devm_power_supply_register_no_ws(struct device *parent,
510                                  const struct power_supply_desc *desc,
511                                  const struct power_supply_config *cfg);
512 extern void power_supply_unregister(struct power_supply *psy);
513 extern int power_supply_powers(struct power_supply *psy, struct device *dev);
514
515 extern void *power_supply_get_drvdata(struct power_supply *psy);
516 /* For APM emulation, think legacy userspace. */
517 extern struct class *power_supply_class;
518
519 static inline bool power_supply_is_amp_property(enum power_supply_property psp)
520 {
521         switch (psp) {
522         case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN:
523         case POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN:
524         case POWER_SUPPLY_PROP_CHARGE_FULL:
525         case POWER_SUPPLY_PROP_CHARGE_EMPTY:
526         case POWER_SUPPLY_PROP_CHARGE_NOW:
527         case POWER_SUPPLY_PROP_CHARGE_AVG:
528         case POWER_SUPPLY_PROP_CHARGE_COUNTER:
529         case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT:
530         case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX:
531         case POWER_SUPPLY_PROP_CURRENT_MAX:
532         case POWER_SUPPLY_PROP_CURRENT_NOW:
533         case POWER_SUPPLY_PROP_CURRENT_AVG:
534         case POWER_SUPPLY_PROP_CURRENT_BOOT:
535         case POWER_SUPPLY_PROP_CHARGE_COUNTER_SHADOW:
536         case POWER_SUPPLY_PROP_INPUT_CURRENT_MAX:
537         case POWER_SUPPLY_PROP_FLASH_CURRENT_MAX:
538                 return 1;
539         default:
540                 break;
541         }
542
543         return 0;
544 }
545
546 static inline bool power_supply_is_watt_property(enum power_supply_property psp)
547 {
548         switch (psp) {
549         case POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN:
550         case POWER_SUPPLY_PROP_ENERGY_EMPTY_DESIGN:
551         case POWER_SUPPLY_PROP_ENERGY_FULL:
552         case POWER_SUPPLY_PROP_ENERGY_EMPTY:
553         case POWER_SUPPLY_PROP_ENERGY_NOW:
554         case POWER_SUPPLY_PROP_ENERGY_AVG:
555         case POWER_SUPPLY_PROP_VOLTAGE_MAX:
556         case POWER_SUPPLY_PROP_VOLTAGE_MIN:
557         case POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN:
558         case POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN:
559         case POWER_SUPPLY_PROP_VOLTAGE_NOW:
560         case POWER_SUPPLY_PROP_VOLTAGE_AVG:
561         case POWER_SUPPLY_PROP_VOLTAGE_OCV:
562         case POWER_SUPPLY_PROP_VOLTAGE_BOOT:
563         case POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE:
564         case POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX:
565         case POWER_SUPPLY_PROP_POWER_NOW:
566                 return 1;
567         default:
568                 break;
569         }
570
571         return 0;
572 }
573
574 #endif /* __LINUX_POWER_SUPPLY_H__ */