Commit 9029409d authored by Thomas Weißschuh's avatar Thomas Weißschuh Committed by Sebastian Reichel
Browse files

power: supply: core: introduce power_supply_for_each_psy()



All existing callers of power_supply_for_each_device() want to iterate
over 'struct power_supply', not 'struct device'.
The power_supply_for_each_device() forces each caller to duplicate the
logic to go from one to the other.
Introduce power_supply_for_each_psy() to simplify the callers.

Signed-off-by: default avatarThomas Weißschuh <linux@weissschuh.net>
Link: https://lore.kernel.org/r/20241210-power-supply-dev_to_psy-v2-2-9d8c9d24cfe4@weissschuh.net


Signed-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
parent e959fdb1
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
@@ -122,6 +122,30 @@ int power_supply_for_each_device(void *data, int (*fn)(struct device *dev, void
}
EXPORT_SYMBOL_GPL(power_supply_for_each_device);

struct psy_for_each_psy_cb_data {
	int (*fn)(struct power_supply *psy, void *data);
	void *data;
};

static int psy_for_each_psy_cb(struct device *dev, void *data)
{
	struct psy_for_each_psy_cb_data *cb_data = data;
	struct power_supply *psy = dev_get_drvdata(dev);

	return cb_data->fn(psy, cb_data->data);
}

int power_supply_for_each_psy(void *data, int (*fn)(struct power_supply *psy, void *data))
{
	struct psy_for_each_psy_cb_data cb_data = {
		.fn = fn,
		.data = data,
	};

	return power_supply_for_each_device(&cb_data, psy_for_each_psy_cb);
}
EXPORT_SYMBOL_GPL(power_supply_for_each_psy);

void power_supply_changed(struct power_supply *psy)
{
	unsigned long flags;
+1 −0
Original line number Diff line number Diff line
@@ -882,6 +882,7 @@ extern int power_supply_powers(struct power_supply *psy, struct device *dev);

extern void *power_supply_get_drvdata(struct power_supply *psy);
extern int power_supply_for_each_device(void *data, int (*fn)(struct device *dev, void *data));
extern int power_supply_for_each_psy(void *data, int (*fn)(struct power_supply *psy, void *data));

static inline bool power_supply_is_amp_property(enum power_supply_property psp)
{