[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20200504202930.228453-5-mathewk@chromium.org>
Date: Mon, 4 May 2020 14:29:30 -0600
From: Mathew King <mathewk@...omium.org>
To: linux-kernel@...r.kernel.org
Cc: Mathew King <mathewk@...omium.org>,
Sebastian Reichel <sre@...nel.org>, linux-pm@...r.kernel.org
Subject: [PATCH v2 4/4] power_supply: Add power supply type property to uevent env
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@...omium.org>
---
v2: - Fixup with patches in series
---
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 8f90daff0003..d856aed8cb41 100644
--- a/drivers/power/supply/power_supply_sysfs.c
+++ b/drivers/power/supply/power_supply_sysfs.c
@@ -410,6 +410,37 @@ void power_supply_init_attrs(struct device_type *dev_type)
}
}
+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->prop_name, prop_buf);
+}
+
int power_supply_uevent(struct device *dev, struct kobj_uevent_env *env)
{
struct power_supply *psy = dev_get_drvdata(dev);
@@ -429,31 +460,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->prop_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.526.g744177e7f7-goog
Powered by blists - more mailing lists