power: convert power_supply static attribs to new API
PATCH 5/5 power: convert power_supply static attribs to new API
This allows us to share the uevent callback code w/ the dynamic attrib stuff.
Signed-off-by Andres Salomon <[email protected]>
--- drivers/power/power_supply_sysfs.c | 50 ++++++++---------------------------- include/linux/power_supply.h | 9 ++++++ 2 files changed, 20 insertions(+), 39 deletions(-)
drivers/power/power_supply_sysfs.c +11 -39
@@ -26,17 +26,16 @@* (as a macro let's say). */ -static ssize_t power_supply_show_static_attrs (struct device *dev, -struct device_attribute *attr, -char *buf) { -static char *type_text[] = {"Battery" ,"UPS" ,"Mains" ,"USB" }; +static ssize_t power_supply_show_type (struct device *dev, +struct device_attribute *attr, +char *buf) +{struct power_supply *psy =dev_get_drvdata (dev); - -return sprintf (buf,"%s\n" , type_text[psy->type]); +return power_supply_type_str (psy->type, buf); }static struct device_attribute power_supply_static_attrs[] = { -__ATTR (type,0444 , power_supply_show_static_attrs,NULL ), +__ATTR (type,S_IRUGO , power_supply_show_type,NULL ), };int power_supply_create_attrs (struct power_supply *psy)
@@ -187,9 +186,8 @@ static int add_uevent_arg_wrapper(struct power_supply *psy,int power_supply_uevent (struct device *dev,struct kobj_uevent_env *env) {struct power_supply *psy =dev_get_drvdata (dev); +struct device_attribute *attr;int ret =0 , j; -char *prop_buf; -char *attrname;dev_dbg (dev,"uevent\n" );
@@ -204,42 +202,18 @@ int power_supply_uevent(struct device *dev, struct kobj_uevent_env *env)if (ret)return ret; - prop_buf = (char *)get_zeroed_page (GFP_KERNEL ); -if (!prop_buf) -return -ENOMEM ; -for (j =0 ; j <ARRAY_SIZE (power_supply_static_attrs); j++) { -struct device_attribute *attr; -char *line; - attr = &power_supply_static_attrs[j]; - - ret =power_supply_show_static_attrs (dev, attr, prop_buf); + ret =add_uevent_arg_wrapper (psy, attr, env);if (ret <0 ) goto out; - - line =strchr (prop_buf,'\n' ); -if (line) - *line =0 ; - - attrname =kstruprdup (attr->attr.name,GFP_KERNEL ); -if (!attrname) { - ret = -ENOMEM ; - goto out; - } - -dev_dbg (dev,"Static prop %s=%s\n" , attrname, prop_buf); - - ret =add_uevent_var (env,"POWER_SUPPLY_%s=%s" , attrname, prop_buf); -kfree (attrname); -if (ret) - goto out; } +dev_dbg (dev,"%zd static props\n" , j);for (j =0 ; psy->props[j]; j++) { -struct device_attribute *attr = psy->props[j]; - + attr = psy->props[j]; ret =add_uevent_arg_wrapper (psy, attr, env); +/* * When a battery is absent, we expect -ENODEV. Don't abort; * send the uevent with at least the PRESENT=0 property.
@@ -250,7 +224,5 @@ int power_supply_uevent(struct device *dev, struct kobj_uevent_env *env)dev_dbg (dev,"%zd dynamic props\n" , j); out: -free_page ((unsigned long )prop_buf); -return ret; }
include/linux/power_supply.h +9 -0
@@ -146,6 +146,15 @@ enum power_supply_type { POWER_SUPPLY_TYPE_USB, }; +static inline ssize_t power_supply_type_str (int type,char *buf) +{ +static char *type_text[] = {"Battery" ,"UPS" ,"Mains" ,"USB" }; + +BUG_ON (type <POWER_SUPPLY_TYPE_BATTERY || + type >POWER_SUPPLY_TYPE_USB ); +return sprintf (buf,"%s\n" , type_text[type]); +} +struct power_supply {const char *name;enum power_supply_type type;
Signature · 1 line
1.5.3.5