Messages in this thread | | | Date | Sun, 3 May 2020 03:27:26 +0200 | From | Sebastian Reichel <> | Subject | Re: [PATCH 4/4] power_supply: Add power supply type property to uevent env |
| |
Hi,
On Fri, Apr 24, 2020 at 11:35:33AM -0600, Mathew King wrote: > Add POWER_SUPPLY_TYPE to the uevent env for power supply. Type is a > property of all power supplies and there is a sysfs entry for it but it > is not included in the properties array of the power supply so > explicitly add it to the udev env. > > Signed-off-by: Mathew King <mathewk@chromium.org> > ---
Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>
-- Sebastian
> drivers/power/supply/power_supply_sysfs.c | 61 ++++++++++++++--------- > 1 file changed, 37 insertions(+), 24 deletions(-) > > diff --git a/drivers/power/supply/power_supply_sysfs.c b/drivers/power/supply/power_supply_sysfs.c > index fbb05466b9a5..c7087cd7ffe3 100644 > --- a/drivers/power/supply/power_supply_sysfs.c > +++ b/drivers/power/supply/power_supply_sysfs.c > @@ -448,6 +448,37 @@ void power_supply_destroy_attrs(void) > } > } > > +static int add_prop_uevent(struct device *dev, struct kobj_uevent_env *env, > + enum power_supply_property prop, char *prop_buf) > +{ > + int ret = 0; > + struct power_supply_attr *pwr_attr; > + struct device_attribute *dev_attr; > + char *line; > + > + pwr_attr = &power_supply_attrs[prop]; > + dev_attr = &pwr_attr->dev_attr; > + > + ret = power_supply_show_property(dev, dev_attr, prop_buf); > + if (ret == -ENODEV || ret == -ENODATA) { > + /* > + * When a battery is absent, we expect -ENODEV. Don't abort; > + * send the uevent with at least the the PRESENT=0 property > + */ > + return 0; > + } > + > + if (ret < 0) > + return ret; > + > + line = strchr(prop_buf, '\n'); > + if (line) > + *line = 0; > + > + return add_uevent_var(env, "POWER_SUPPLY_%s=%s", > + pwr_attr->upper_name, prop_buf); > +} > + > int power_supply_uevent(struct device *dev, struct kobj_uevent_env *env) > { > struct power_supply *psy = dev_get_drvdata(dev); > @@ -467,31 +498,13 @@ int power_supply_uevent(struct device *dev, struct kobj_uevent_env *env) > if (!prop_buf) > return -ENOMEM; > > - for (j = 0; j < psy->desc->num_properties; j++) { > - struct power_supply_attr *pwr_attr; > - struct device_attribute *dev_attr; > - char *line; > - > - pwr_attr = &power_supply_attrs[psy->desc->properties[j]]; > - dev_attr = &pwr_attr->dev_attr; > - > - ret = power_supply_show_property(dev, dev_attr, prop_buf); > - if (ret == -ENODEV || ret == -ENODATA) { > - /* When a battery is absent, we expect -ENODEV. Don't abort; > - send the uevent with at least the the PRESENT=0 property */ > - ret = 0; > - continue; > - } > - > - if (ret < 0) > - goto out; > - > - line = strchr(prop_buf, '\n'); > - if (line) > - *line = 0; > + ret = add_prop_uevent(dev, env, POWER_SUPPLY_PROP_TYPE, prop_buf); > + if (ret) > + goto out; > > - ret = add_uevent_var(env, "POWER_SUPPLY_%s=%s", > - pwr_attr->upper_name, prop_buf); > + for (j = 0; j < psy->desc->num_properties; j++) { > + ret = add_prop_uevent(dev, env, psy->desc->properties[j], > + prop_buf); > if (ret) > goto out; > } > -- > 2.26.2.303.gf8c07b1a785-goog > [unhandled content-type:application/pgp-signature] | |