/* SPDX-License-Identifier: GPL-2.0-only */ /* * Functions private to power supply class * * Copyright © 2007 Anton Vorontsov * Copyright © 2004 Szabolcs Gyurko * Copyright © 2003 Ian Molton * * Modified: 2004, Oct Szabolcs Gyurko */ #include 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 */