From 66c98986c909bfe789e8b15f805fd28ef4c36b76 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 1 Apr 2015 01:36:23 +0200 Subject: [PATCH] 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: Greg Kroah-Hartman --- drivers/staging/greybus/kernel_ver.h | 33 ++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/drivers/staging/greybus/kernel_ver.h b/drivers/staging/greybus/kernel_ver.h index 12b454e4dbf2..92eb024c3bed 100644 --- a/drivers/staging/greybus/kernel_ver.h +++ b/drivers/staging/greybus/kernel_ver.h @@ -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 + #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 */ -- 2.39.5