aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/base/class.c
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>2016-11-28 10:41:41 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2016-11-29 15:12:12 -0500
commitced6473e7486702f530a49f886b73195e4977734 (patch)
treef4622f9caeccd1c86f340a86508287ff68670a1d /drivers/base/class.c
parentb5a062344419baeeea0cc034fe5eef88a877190e (diff)
driver core: class: add class_groups support
struct class needs to have a set of default groups that are added, as adding individual attributes does not work well in the long run. So add support for that. Future patches will convert the existing usages of class_attrs to use class_groups and then class_attrs will go away. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/base/class.c')
-rw-r--r--drivers/base/class.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/base/class.c b/drivers/base/class.c
index 71059e32bebc..a2b2896693d6 100644
--- a/drivers/base/class.c
+++ b/drivers/base/class.c
@@ -163,6 +163,18 @@ static void klist_class_dev_put(struct klist_node *n)
163 put_device(dev); 163 put_device(dev);
164} 164}
165 165
166static int class_add_groups(struct class *cls,
167 const struct attribute_group **groups)
168{
169 return sysfs_create_groups(&cls->p->subsys.kobj, groups);
170}
171
172static void class_remove_groups(struct class *cls,
173 const struct attribute_group **groups)
174{
175 return sysfs_remove_groups(&cls->p->subsys.kobj, groups);
176}
177
166int __class_register(struct class *cls, struct lock_class_key *key) 178int __class_register(struct class *cls, struct lock_class_key *key)
167{ 179{
168 struct subsys_private *cp; 180 struct subsys_private *cp;
@@ -203,6 +215,8 @@ int __class_register(struct class *cls, struct lock_class_key *key)
203 kfree(cp); 215 kfree(cp);
204 return error; 216 return error;
205 } 217 }
218 error = class_add_groups(class_get(cls), cls->class_groups);
219 class_put(cls);
206 error = add_class_attrs(class_get(cls)); 220 error = add_class_attrs(class_get(cls));
207 class_put(cls); 221 class_put(cls);
208 return error; 222 return error;
@@ -213,6 +227,7 @@ void class_unregister(struct class *cls)
213{ 227{
214 pr_debug("device class '%s': unregistering\n", cls->name); 228 pr_debug("device class '%s': unregistering\n", cls->name);
215 remove_class_attrs(cls); 229 remove_class_attrs(cls);
230 class_remove_groups(cls, cls->class_groups);
216 kset_unregister(&cls->p->subsys); 231 kset_unregister(&cls->p->subsys);
217} 232}
218 233