Skip to content

Commit 2109680

Browse files
t-8chsre
authored andcommitted
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 <[email protected]> Closes: https://lore.kernel.org/lkml/20241218195229.GA2796534@ax162/ Fixes: 288a2ca ("power: supply: core: add UAPI to discover currently used extensions") Signed-off-by: Thomas Weißschuh <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Sebastian Reichel <[email protected]>
1 parent 5972da7 commit 2109680

File tree

3 files changed

+30
-10
lines changed

3 files changed

+30
-10
lines changed

drivers/power/supply/power_supply.h

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,24 @@ struct power_supply_ext_registration {
4040

4141
extern void __init power_supply_init_attrs(void);
4242
extern int power_supply_uevent(const struct device *dev, struct kobj_uevent_env *env);
43-
extern const struct attribute_group power_supply_extension_group;
4443
extern const struct attribute_group *power_supply_attr_groups[];
44+
extern int power_supply_sysfs_add_extension(struct power_supply *psy,
45+
const struct power_supply_ext *ext,
46+
struct device *dev);
47+
extern void power_supply_sysfs_remove_extension(struct power_supply *psy,
48+
const struct power_supply_ext *ext);
4549

4650
#else
4751

4852
static inline void power_supply_init_attrs(void) {}
4953
#define power_supply_attr_groups NULL
5054
#define power_supply_uevent NULL
55+
static inline int power_supply_sysfs_add_extension(struct power_supply *psy,
56+
const struct power_supply_ext *ext,
57+
struct device *dev)
58+
{ return 0; }
59+
static inline void power_supply_sysfs_remove_extension(struct power_supply *psy,
60+
const struct power_supply_ext *ext) {}
5161

5262
#endif /* CONFIG_SYSFS */
5363

drivers/power/supply/power_supply_core.c

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1386,10 +1386,9 @@ int power_supply_register_extension(struct power_supply *psy, const struct power
13861386
reg->data = data;
13871387
list_add(&reg->list_head, &psy->extensions);
13881388

1389-
ret = sysfs_add_link_to_group(&psy->dev.kobj, power_supply_extension_group.name,
1390-
&dev->kobj, ext->name);
1389+
ret = power_supply_sysfs_add_extension(psy, ext, dev);
13911390
if (ret)
1392-
goto sysfs_link_failed;
1391+
goto sysfs_add_failed;
13931392

13941393
ret = power_supply_update_sysfs_and_hwmon(psy);
13951394
if (ret)
@@ -1398,8 +1397,8 @@ int power_supply_register_extension(struct power_supply *psy, const struct power
13981397
return 0;
13991398

14001399
sysfs_hwmon_failed:
1401-
sysfs_remove_link_from_group(&psy->dev.kobj, power_supply_extension_group.name, ext->name);
1402-
sysfs_link_failed:
1400+
power_supply_sysfs_remove_extension(psy, ext);
1401+
sysfs_add_failed:
14031402
list_del(&reg->list_head);
14041403
kfree(reg);
14051404
return ret;
@@ -1415,9 +1414,7 @@ void power_supply_unregister_extension(struct power_supply *psy, const struct po
14151414
power_supply_for_each_extension(reg, psy) {
14161415
if (reg->ext == ext) {
14171416
list_del(&reg->list_head);
1418-
sysfs_remove_link_from_group(&psy->dev.kobj,
1419-
power_supply_extension_group.name,
1420-
reg->ext->name);
1417+
power_supply_sysfs_remove_extension(psy, ext);
14211418
kfree(reg);
14221419
power_supply_update_sysfs_and_hwmon(psy);
14231420
return;

drivers/power/supply/power_supply_sysfs.c

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -462,7 +462,7 @@ static struct attribute *power_supply_extension_attrs[] = {
462462
NULL
463463
};
464464

465-
const struct attribute_group power_supply_extension_group = {
465+
static const struct attribute_group power_supply_extension_group = {
466466
.name = "extensions",
467467
.attrs = power_supply_extension_attrs,
468468
};
@@ -624,3 +624,16 @@ int power_supply_charge_types_parse(unsigned int available_types, const char *bu
624624
return -EINVAL;
625625
}
626626
EXPORT_SYMBOL_GPL(power_supply_charge_types_parse);
627+
628+
int power_supply_sysfs_add_extension(struct power_supply *psy, const struct power_supply_ext *ext,
629+
struct device *dev)
630+
{
631+
return sysfs_add_link_to_group(&psy->dev.kobj, power_supply_extension_group.name,
632+
&dev->kobj, ext->name);
633+
}
634+
635+
void power_supply_sysfs_remove_extension(struct power_supply *psy,
636+
const struct power_supply_ext *ext)
637+
{
638+
sysfs_remove_link_from_group(&psy->dev.kobj, power_supply_extension_group.name, ext->name);
639+
}

0 commit comments

Comments
 (0)