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

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
......@@ -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 */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment