summaryrefslogtreecommitdiff
path: root/drivers/power/supply/power_supply.h
blob: 8f6a2d44b996689b13e3ad4216e6f426d328b979 (plain)
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 *  Functions private to power supply class
 *
 *  Copyright © 2007  Anton Vorontsov <cbou@mail.ru>
 *  Copyright © 2004  Szabolcs Gyurko
 *  Copyright © 2003  Ian Molton <spyro@f2s.com>
 *
 *  Modified: 2004, Oct     Szabolcs Gyurko
 */

#include <linux/lockdep.h>

struct device;
struct device_type;
struct power_supply;

extern int power_supply_property_is_writeable(struct power_supply *psy,
					      enum power_supply_property psp);
extern bool power_supply_has_property(struct power_supply *psy,
				      enum power_supply_property psp);
extern bool power_supply_ext_has_property(const struct power_supply_ext *ext,
					  enum power_supply_property psp);

struct power_supply_ext_registration {
	struct list_head list_head;
	const struct power_supply_ext *ext;
	struct device *dev;
	void *data;
};

/* Make sure that the macro is a single expression */
#define power_supply_for_each_extension(pos, psy)			\
	if ( ({ lockdep_assert_held(&(psy)->extensions_sem); 0; }) )	\
		;							\
	else								\
		list_for_each_entry(pos, &(psy)->extensions, list_head)	\

#ifdef CONFIG_SYSFS

extern void __init power_supply_init_attrs(void);
extern int power_supply_uevent(const struct device *dev, struct kobj_uevent_env *env);
extern const struct attribute_group *power_supply_attr_groups[];
extern int power_supply_sysfs_add_extension(struct power_supply *psy,
					    const struct power_supply_ext *ext,
					    struct device *dev);
extern void power_supply_sysfs_remove_extension(struct power_supply *psy,
						const struct power_supply_ext *ext);

#else

static inline void power_supply_init_attrs(void) {}
#define power_supply_attr_groups NULL
#define power_supply_uevent NULL
static inline int power_supply_sysfs_add_extension(struct power_supply *psy,
						   const struct power_supply_ext *ext,
						   struct device *dev)
{ return 0; }
static inline void power_supply_sysfs_remove_extension(struct power_supply *psy,
						       const struct power_supply_ext *ext) {}

#endif /* CONFIG_SYSFS */

#ifdef CONFIG_LEDS_TRIGGERS

extern void power_supply_update_leds(struct power_supply *psy);
extern int power_supply_create_triggers(struct power_supply *psy);
extern void power_supply_remove_triggers(struct power_supply *psy);

#else

static inline void power_supply_update_leds(struct power_supply *psy) {}
static inline int power_supply_create_triggers(struct power_supply *psy)
{ return 0; }
static inline void power_supply_remove_triggers(struct power_supply *psy) {}

#endif /* CONFIG_LEDS_TRIGGERS */

#ifdef CONFIG_POWER_SUPPLY_HWMON

int power_supply_add_hwmon_sysfs(struct power_supply *psy);
void power_supply_remove_hwmon_sysfs(struct power_supply *psy);

#else

static inline int power_supply_add_hwmon_sysfs(struct power_supply *psy)
{
	return 0;
}

static inline
void power_supply_remove_hwmon_sysfs(struct power_supply *psy) {}

#endif /* CONFIG_POWER_SUPPLY_HWMON */