aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorThomas Weißschuh <linux@weissschuh.net>2024-12-19 15:28:18 +0100
committerSebastian Reichel <sebastian.reichel@collabora.com>2024-12-19 21:45:58 +0100
commit21096800c5ac634a9fbbac21505bfd798163b390 (patch)
tree377393b5481a32944d5a43acddd3542bd5ca218e
parentpower: supply: bq2415x_charger: report charging state changes to userspace (diff)
downloadwireguard-linux-21096800c5ac634a9fbbac21505bfd798163b390.tar.xz
wireguard-linux-21096800c5ac634a9fbbac21505bfd798163b390.zip
power: supply: core: fix build of extension sysfs group if CONFIG_SYSFS=n
Add and use wrapper functions for the sysfs interaction. Restore the compatibility of CONFIG_POWER_SUPPLY=y and CONFIG_SYSFS=n. Reported-by: Nathan Chancellor <nathan@kernel.org> Closes: https://lore.kernel.org/lkml/20241218195229.GA2796534@ax162/ Fixes: 288a2cabcf6b ("power: supply: core: add UAPI to discover currently used extensions") Signed-off-by: Thomas Weißschuh <linux@weissschuh.net> Link: https://lore.kernel.org/r/20241219-psy-extensions-sysfs-v1-1-868fc6cb46d6@weissschuh.net Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
-rw-r--r--drivers/power/supply/power_supply.h12
-rw-r--r--drivers/power/supply/power_supply_core.c13
-rw-r--r--drivers/power/supply/power_supply_sysfs.c15
3 files changed, 30 insertions, 10 deletions
diff --git a/drivers/power/supply/power_supply.h b/drivers/power/supply/power_supply.h
index 9ed749cd0936..8f6a2d44b996 100644
--- a/drivers/power/supply/power_supply.h
+++ b/drivers/power/supply/power_supply.h
@@ -40,14 +40,24 @@ struct power_supply_ext_registration {
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_extension_group;
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 */
diff --git a/drivers/power/supply/power_supply_core.c b/drivers/power/supply/power_supply_core.c
index 76ebaef403ed..eeeed1216e22 100644
--- a/drivers/power/supply/power_supply_core.c
+++ b/drivers/power/supply/power_supply_core.c
@@ -1386,10 +1386,9 @@ int power_supply_register_extension(struct power_supply *psy, const struct power
reg->data = data;
list_add(&reg->list_head, &psy->extensions);
- ret = sysfs_add_link_to_group(&psy->dev.kobj, power_supply_extension_group.name,
- &dev->kobj, ext->name);
+ ret = power_supply_sysfs_add_extension(psy, ext, dev);
if (ret)
- goto sysfs_link_failed;
+ goto sysfs_add_failed;
ret = power_supply_update_sysfs_and_hwmon(psy);
if (ret)
@@ -1398,8 +1397,8 @@ int power_supply_register_extension(struct power_supply *psy, const struct power
return 0;
sysfs_hwmon_failed:
- sysfs_remove_link_from_group(&psy->dev.kobj, power_supply_extension_group.name, ext->name);
-sysfs_link_failed:
+ power_supply_sysfs_remove_extension(psy, ext);
+sysfs_add_failed:
list_del(&reg->list_head);
kfree(reg);
return ret;
@@ -1415,9 +1414,7 @@ void power_supply_unregister_extension(struct power_supply *psy, const struct po
power_supply_for_each_extension(reg, psy) {
if (reg->ext == ext) {
list_del(&reg->list_head);
- sysfs_remove_link_from_group(&psy->dev.kobj,
- power_supply_extension_group.name,
- reg->ext->name);
+ power_supply_sysfs_remove_extension(psy, ext);
kfree(reg);
power_supply_update_sysfs_and_hwmon(psy);
return;
diff --git a/drivers/power/supply/power_supply_sysfs.c b/drivers/power/supply/power_supply_sysfs.c
index 261bf7bf6e22..9ce5eda24093 100644
--- a/drivers/power/supply/power_supply_sysfs.c
+++ b/drivers/power/supply/power_supply_sysfs.c
@@ -462,7 +462,7 @@ static struct attribute *power_supply_extension_attrs[] = {
NULL
};
-const struct attribute_group power_supply_extension_group = {
+static const struct attribute_group power_supply_extension_group = {
.name = "extensions",
.attrs = power_supply_extension_attrs,
};
@@ -624,3 +624,16 @@ int power_supply_charge_types_parse(unsigned int available_types, const char *bu
return -EINVAL;
}
EXPORT_SYMBOL_GPL(power_supply_charge_types_parse);
+
+int power_supply_sysfs_add_extension(struct power_supply *psy, const struct power_supply_ext *ext,
+ struct device *dev)
+{
+ return sysfs_add_link_to_group(&psy->dev.kobj, power_supply_extension_group.name,
+ &dev->kobj, ext->name);
+}
+
+void power_supply_sysfs_remove_extension(struct power_supply *psy,
+ const struct power_supply_ext *ext)
+{
+ sysfs_remove_link_from_group(&psy->dev.kobj, power_supply_extension_group.name, ext->name);
+}