Commit 66c98986 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman
Browse files

greybus: kernel_ver.h: add sysfs_create_groups() and sysfs_remove_groups()



These functions showed up in 3.12 or so, and we are stuck on 3.10 for
various reasons, so provide backports in kernel_ver.h so that we can
rely on these functions.

Signed-off-by: default avatarGreg Kroah-Hartman <greg@kroah.com>
parent 7a51b936
Loading
Loading
Loading
Loading
+33 −0
Original line number Diff line number Diff line
@@ -78,6 +78,8 @@ static inline void gb_gpiochip_remove(struct gpio_chip *chip)
 * it here.
 */
#if LINUX_VERSION_CODE < KERNEL_VERSION(3,11,0)
#include <linux/sysfs.h>

#define ATTRIBUTE_GROUPS(name)					\
static const struct attribute_group name##_group = {		\
	.attrs = name##_attrs,					\
@@ -86,6 +88,37 @@ static const struct attribute_group *name##_groups[] = { \
	&name##_group,						\
	NULL,							\
}

static inline int sysfs_create_groups(struct kobject *kobj,
				      const struct attribute_group **groups)
{
	int error = 0;
	int i;

	if (!groups)
		return 0;

	for (i = 0; groups[i]; i++) {
		error = sysfs_create_group(kobj, groups[i]);
		if (error) {
			while (--i >= 0)
				sysfs_remove_group(kobj, groups[i]);
			break;
		}
	}
	return error;
}

static inline void sysfs_remove_groups(struct kobject *kobj,
				       const struct attribute_group **groups)
{
	int i;

	if (!groups)
		return;
	for (i = 0; groups[i]; i++)
		sysfs_remove_group(kobj, groups[i]);
}
#endif

#endif	/* __GREYBUS_KERNEL_VER_H */