Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 38457ab3 authored by Andi Kleen's avatar Andi Kleen Committed by Greg Kroah-Hartman
Browse files

sysfs: Add attribute array to sysdev classes



Add a attribute array that is automatically registered and unregistered
to struct sysdev_class. This is similar to what struct class has.

A lot of drivers add list of attributes, so it's better to do 
this easily in the common sysdev layer.

This adds a new field to struct sysdev_class. I audited the 
whole tree and there are no dynamically allocated sysdev classes,
so this is fully compatible. 

Signed-off-by: default avatarAndi Kleen <ak@linux.intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 1c205ae1
Loading
Loading
Loading
Loading
+8 −1
Original line number Original line Diff line number Diff line
@@ -145,13 +145,20 @@ int sysdev_class_register(struct sysdev_class *cls)
	if (retval)
	if (retval)
		return retval;
		return retval;


	return kset_register(&cls->kset);
	retval = kset_register(&cls->kset);
	if (!retval && cls->attrs)
		retval = sysfs_create_files(&cls->kset.kobj,
					    (const struct attribute **)cls->attrs);
	return retval;
}
}


void sysdev_class_unregister(struct sysdev_class *cls)
void sysdev_class_unregister(struct sysdev_class *cls)
{
{
	pr_debug("Unregistering sysdev class '%s'\n",
	pr_debug("Unregistering sysdev class '%s'\n",
		 kobject_name(&cls->kset.kobj));
		 kobject_name(&cls->kset.kobj));
	if (cls->attrs)
		sysfs_remove_files(&cls->kset.kobj,
				   (const struct attribute **)cls->attrs);
	kset_unregister(&cls->kset);
	kset_unregister(&cls->kset);
}
}


+2 −0
Original line number Original line Diff line number Diff line
@@ -27,10 +27,12 @@




struct sys_device;
struct sys_device;
struct sysdev_class_attribute;


struct sysdev_class {
struct sysdev_class {
	const char *name;
	const char *name;
	struct list_head	drivers;
	struct list_head	drivers;
	struct sysdev_class_attribute **attrs;


	/* Default operations for these types of devices */
	/* Default operations for these types of devices */
	int	(*shutdown)(struct sys_device *);
	int	(*shutdown)(struct sys_device *);