aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/base/sys.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/base/sys.c')
-rw-r--r--drivers/base/sys.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/drivers/base/sys.c b/drivers/base/sys.c
index 0d903909af7e..9354dc10a363 100644
--- a/drivers/base/sys.c
+++ b/drivers/base/sys.c
@@ -17,7 +17,6 @@
17#include <linux/module.h> 17#include <linux/module.h>
18#include <linux/kernel.h> 18#include <linux/kernel.h>
19#include <linux/init.h> 19#include <linux/init.h>
20#include <linux/slab.h>
21#include <linux/string.h> 20#include <linux/string.h>
22#include <linux/pm.h> 21#include <linux/pm.h>
23#include <linux/device.h> 22#include <linux/device.h>
@@ -54,7 +53,7 @@ sysdev_store(struct kobject *kobj, struct attribute *attr,
54 return -EIO; 53 return -EIO;
55} 54}
56 55
57static struct sysfs_ops sysfs_ops = { 56static const struct sysfs_ops sysfs_ops = {
58 .show = sysdev_show, 57 .show = sysdev_show,
59 .store = sysdev_store, 58 .store = sysdev_store,
60}; 59};
@@ -89,7 +88,7 @@ static ssize_t sysdev_class_show(struct kobject *kobj, struct attribute *attr,
89 struct sysdev_class_attribute *class_attr = to_sysdev_class_attr(attr); 88 struct sysdev_class_attribute *class_attr = to_sysdev_class_attr(attr);
90 89
91 if (class_attr->show) 90 if (class_attr->show)
92 return class_attr->show(class, buffer); 91 return class_attr->show(class, class_attr, buffer);
93 return -EIO; 92 return -EIO;
94} 93}
95 94
@@ -100,11 +99,11 @@ static ssize_t sysdev_class_store(struct kobject *kobj, struct attribute *attr,
100 struct sysdev_class_attribute *class_attr = to_sysdev_class_attr(attr); 99 struct sysdev_class_attribute *class_attr = to_sysdev_class_attr(attr);
101 100
102 if (class_attr->store) 101 if (class_attr->store)
103 return class_attr->store(class, buffer, count); 102 return class_attr->store(class, class_attr, buffer, count);
104 return -EIO; 103 return -EIO;
105} 104}
106 105
107static struct sysfs_ops sysfs_class_ops = { 106static const struct sysfs_ops sysfs_class_ops = {
108 .show = sysdev_class_show, 107 .show = sysdev_class_show,
109 .store = sysdev_class_store, 108 .store = sysdev_class_store,
110}; 109};
@@ -145,13 +144,20 @@ int sysdev_class_register(struct sysdev_class *cls)
145 if (retval) 144 if (retval)
146 return retval; 145 return retval;
147 146
148 return kset_register(&cls->kset); 147 retval = kset_register(&cls->kset);
148 if (!retval && cls->attrs)
149 retval = sysfs_create_files(&cls->kset.kobj,
150 (const struct attribute **)cls->attrs);
151 return retval;
149} 152}
150 153
151void sysdev_class_unregister(struct sysdev_class *cls) 154void sysdev_class_unregister(struct sysdev_class *cls)
152{ 155{
153 pr_debug("Unregistering sysdev class '%s'\n", 156 pr_debug("Unregistering sysdev class '%s'\n",
154 kobject_name(&cls->kset.kobj)); 157 kobject_name(&cls->kset.kobj));
158 if (cls->attrs)
159 sysfs_remove_files(&cls->kset.kobj,
160 (const struct attribute **)cls->attrs);
155 kset_unregister(&cls->kset); 161 kset_unregister(&cls->kset);
156} 162}
157 163