diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-09-03 14:37:15 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-09-03 14:37:15 -0400 |
commit | 542a086ac72fb193cbc1b996963a572269e57743 (patch) | |
tree | b137c08037cca4ffc8a156a891a01113b3b8edce /drivers/uio | |
parent | 1d1fdd95df681f0c065d90ffaafa215a0e8825e2 (diff) | |
parent | 1eeeef153c02f5856ec109fa532eb5f31c39f85c (diff) |
Merge tag 'driver-core-3.12-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core
Pull driver core patches from Greg KH:
"Here's the big driver core pull request for 3.12-rc1.
Lots of tiny changes here fixing up the way sysfs attributes are
created, to try to make drivers simpler, and fix a whole class race
conditions with creations of device attributes after the device was
announced to userspace.
All the various pieces are acked by the different subsystem
maintainers"
* tag 'driver-core-3.12-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core: (119 commits)
firmware loader: fix pending_fw_head list corruption
drivers/base/memory.c: introduce help macro to_memory_block
dynamic debug: line queries failing due to uninitialized local variable
sysfs: sysfs_create_groups returns a value.
debugfs: provide debugfs_create_x64() when disabled
rbd: convert bus code to use bus_groups
firmware: dcdbas: use binary attribute groups
sysfs: add sysfs_create/remove_groups for when SYSFS is not enabled
driver core: add #include <linux/sysfs.h> to core files.
HID: convert bus code to use dev_groups
Input: serio: convert bus code to use drv_groups
Input: gameport: convert bus code to use drv_groups
driver core: firmware: use __ATTR_RW()
driver core: core: use DEVICE_ATTR_RO
driver core: bus: use DRIVER_ATTR_WO()
driver core: create write-only attribute macros for devices and drivers
sysfs: create __ATTR_WO()
driver-core: platform: convert bus code to use dev_groups
workqueue: convert bus code to use dev_groups
MEI: convert bus code to use dev_groups
...
Diffstat (limited to 'drivers/uio')
-rw-r--r-- | drivers/uio/uio.c | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/drivers/uio/uio.c b/drivers/uio/uio.c index 8abe78c0b16f..ba475632c5fa 100644 --- a/drivers/uio/uio.c +++ b/drivers/uio/uio.c | |||
@@ -223,38 +223,42 @@ static struct kobj_type portio_attr_type = { | |||
223 | .default_attrs = portio_attrs, | 223 | .default_attrs = portio_attrs, |
224 | }; | 224 | }; |
225 | 225 | ||
226 | static ssize_t show_name(struct device *dev, | 226 | static ssize_t name_show(struct device *dev, |
227 | struct device_attribute *attr, char *buf) | 227 | struct device_attribute *attr, char *buf) |
228 | { | 228 | { |
229 | struct uio_device *idev = dev_get_drvdata(dev); | 229 | struct uio_device *idev = dev_get_drvdata(dev); |
230 | return sprintf(buf, "%s\n", idev->info->name); | 230 | return sprintf(buf, "%s\n", idev->info->name); |
231 | } | 231 | } |
232 | static DEVICE_ATTR_RO(name); | ||
232 | 233 | ||
233 | static ssize_t show_version(struct device *dev, | 234 | static ssize_t version_show(struct device *dev, |
234 | struct device_attribute *attr, char *buf) | 235 | struct device_attribute *attr, char *buf) |
235 | { | 236 | { |
236 | struct uio_device *idev = dev_get_drvdata(dev); | 237 | struct uio_device *idev = dev_get_drvdata(dev); |
237 | return sprintf(buf, "%s\n", idev->info->version); | 238 | return sprintf(buf, "%s\n", idev->info->version); |
238 | } | 239 | } |
240 | static DEVICE_ATTR_RO(version); | ||
239 | 241 | ||
240 | static ssize_t show_event(struct device *dev, | 242 | static ssize_t event_show(struct device *dev, |
241 | struct device_attribute *attr, char *buf) | 243 | struct device_attribute *attr, char *buf) |
242 | { | 244 | { |
243 | struct uio_device *idev = dev_get_drvdata(dev); | 245 | struct uio_device *idev = dev_get_drvdata(dev); |
244 | return sprintf(buf, "%u\n", (unsigned int)atomic_read(&idev->event)); | 246 | return sprintf(buf, "%u\n", (unsigned int)atomic_read(&idev->event)); |
245 | } | 247 | } |
248 | static DEVICE_ATTR_RO(event); | ||
246 | 249 | ||
247 | static struct device_attribute uio_class_attributes[] = { | 250 | static struct attribute *uio_attrs[] = { |
248 | __ATTR(name, S_IRUGO, show_name, NULL), | 251 | &dev_attr_name.attr, |
249 | __ATTR(version, S_IRUGO, show_version, NULL), | 252 | &dev_attr_version.attr, |
250 | __ATTR(event, S_IRUGO, show_event, NULL), | 253 | &dev_attr_event.attr, |
251 | {} | 254 | NULL, |
252 | }; | 255 | }; |
256 | ATTRIBUTE_GROUPS(uio); | ||
253 | 257 | ||
254 | /* UIO class infrastructure */ | 258 | /* UIO class infrastructure */ |
255 | static struct class uio_class = { | 259 | static struct class uio_class = { |
256 | .name = "uio", | 260 | .name = "uio", |
257 | .dev_attrs = uio_class_attributes, | 261 | .dev_groups = uio_groups, |
258 | }; | 262 | }; |
259 | 263 | ||
260 | /* | 264 | /* |