aboutsummaryrefslogtreecommitdiffstats
path: root/d1.patch
diff options
Diffstat (limited to 'd1.patch')
-rw-r--r--d1.patch3213
1 files changed, 2 insertions, 3211 deletions
diff --git a/d1.patch b/d1.patch
index f4257c7d721b26..6bf4190b627b6f 100644
--- a/d1.patch
+++ b/d1.patch
@@ -1,2270 +1,7 @@
-Subject: meta-patch of all of the dev_attr conversions
-
---
- drivers/devfreq/devfreq.c | 76 ++++++++++--------
- drivers/dma/dmaengine.c | 26 +++---
- drivers/extcon/extcon-class.c | 13 +--
- drivers/hid/hid-roccat-arvo.c | 25 +++--
- drivers/hid/hid-roccat-isku.c | 13 +--
- drivers/hid/hid-roccat-kone.c | 30 ++++---
- drivers/hid/hid-roccat-koneplus.c | 26 +++---
- drivers/hid/hid-roccat-kovaplus.c | 33 ++++---
- drivers/hid/hid-roccat-pyra.c | 22 +++--
- drivers/isdn/mISDN/core.c | 62 ++++++++------
- drivers/leds/led-class.c | 38 +++++++--
- drivers/media/v4l2-core/v4l2-dev.c | 30 ++++---
- drivers/misc/c2port/core.c | 50 ++++++-----
- drivers/misc/enclosure.c | 29 ++----
- drivers/pci/pci-sysfs.c | 32 +++++--
- drivers/pci/pci.h | 2
- drivers/pci/probe.c | 2
- drivers/platform/x86/wmi.c | 10 +-
- drivers/pps/pps.c | 2
- drivers/pps/sysfs.c | 55 ++++++++-----
- drivers/ptp/ptp_clock.c | 2
- drivers/ptp/ptp_private.h | 2
- drivers/ptp/ptp_sysfs.c | 51 ++++++------
- drivers/regulator/core.c | 28 +++---
- drivers/rtc/rtc-sysfs.c | 46 +++++-----
- drivers/scsi/osd/osd_uld.c | 13 +--
- drivers/scsi/sd.c | 147 +++++++++++++++++------------------
- drivers/scsi/st.c | 25 +++--
- drivers/staging/comedi/comedi_fops.c | 39 ++++-----
- drivers/uio/uio.c | 22 +++--
- drivers/video/backlight/backlight.c | 44 +++++-----
- drivers/video/backlight/lcd.c | 26 +++---
- drivers/video/output.c | 20 ++--
- fs/fuse/cuse.c | 13 +--
- include/linux/pps_kernel.h | 2
- mm/backing-dev.c | 19 ++--
- net/core/net-sysfs.c | 134 +++++++++++++++++--------------
- net/ieee802154/wpan-class.c | 21 ++---
- net/rfkill/core.c | 88 +++++++++-----------
- net/wireless/sysfs.c | 23 +++--
- 40 files changed, 748 insertions(+), 593 deletions(-)
+ drivers/uio/uio.c | 22 +++++++++++++---------
+ 1 file changed, 13 insertions(+), 9 deletions(-)
---- a/drivers/devfreq/devfreq.c
-+++ b/drivers/devfreq/devfreq.c
-@@ -703,7 +703,7 @@ err_out:
- }
- EXPORT_SYMBOL(devfreq_remove_governor);
-
--static ssize_t show_governor(struct device *dev,
-+static ssize_t governor_show(struct device *dev,
- struct device_attribute *attr, char *buf)
- {
- if (!to_devfreq(dev)->governor)
-@@ -712,7 +712,7 @@ static ssize_t show_governor(struct devi
- return sprintf(buf, "%s\n", to_devfreq(dev)->governor->name);
- }
-
--static ssize_t store_governor(struct device *dev, struct device_attribute *attr,
-+static ssize_t governor_store(struct device *dev, struct device_attribute *attr,
- const char *buf, size_t count)
- {
- struct devfreq *df = to_devfreq(dev);
-@@ -754,9 +754,11 @@ out:
- ret = count;
- return ret;
- }
--static ssize_t show_available_governors(struct device *d,
-- struct device_attribute *attr,
-- char *buf)
-+static DEVICE_ATTR_RW(governor);
-+
-+static ssize_t available_governors_show(struct device *d,
-+ struct device_attribute *attr,
-+ char *buf)
- {
- struct devfreq_governor *tmp_governor;
- ssize_t count = 0;
-@@ -775,9 +777,10 @@ static ssize_t show_available_governors(
-
- return count;
- }
-+static DEVICE_ATTR_RO(available_governors);
-
--static ssize_t show_freq(struct device *dev,
-- struct device_attribute *attr, char *buf)
-+static ssize_t cur_freq_show(struct device *dev, struct device_attribute *attr,
-+ char *buf)
- {
- unsigned long freq;
- struct devfreq *devfreq = to_devfreq(dev);
-@@ -788,20 +791,22 @@ static ssize_t show_freq(struct device *
-
- return sprintf(buf, "%lu\n", devfreq->previous_freq);
- }
-+static DEVICE_ATTR_RO(cur_freq);
-
--static ssize_t show_target_freq(struct device *dev,
-- struct device_attribute *attr, char *buf)
-+static ssize_t target_freq_show(struct device *dev,
-+ struct device_attribute *attr, char *buf)
- {
- return sprintf(buf, "%lu\n", to_devfreq(dev)->previous_freq);
- }
-+static DEVICE_ATTR_RO(target_freq);
-
--static ssize_t show_polling_interval(struct device *dev,
-+static ssize_t polling_interval_show(struct device *dev,
- struct device_attribute *attr, char *buf)
- {
- return sprintf(buf, "%d\n", to_devfreq(dev)->profile->polling_ms);
- }
-
--static ssize_t store_polling_interval(struct device *dev,
-+static ssize_t polling_interval_store(struct device *dev,
- struct device_attribute *attr,
- const char *buf, size_t count)
- {
-@@ -821,8 +826,9 @@ static ssize_t store_polling_interval(st
-
- return ret;
- }
-+static DEVICE_ATTR_RW(polling_interval);
-
--static ssize_t store_min_freq(struct device *dev, struct device_attribute *attr,
-+static ssize_t min_freq_store(struct device *dev, struct device_attribute *attr,
- const char *buf, size_t count)
- {
- struct devfreq *df = to_devfreq(dev);
-@@ -849,13 +855,13 @@ unlock:
- return ret;
- }
-
--static ssize_t show_min_freq(struct device *dev, struct device_attribute *attr,
-+static ssize_t min_freq_show(struct device *dev, struct device_attribute *attr,
- char *buf)
- {
- return sprintf(buf, "%lu\n", to_devfreq(dev)->min_freq);
- }
-
--static ssize_t store_max_freq(struct device *dev, struct device_attribute *attr,
-+static ssize_t max_freq_store(struct device *dev, struct device_attribute *attr,
- const char *buf, size_t count)
- {
- struct devfreq *df = to_devfreq(dev);
-@@ -881,16 +887,18 @@ unlock:
- mutex_unlock(&df->lock);
- return ret;
- }
-+static DEVICE_ATTR_RW(min_freq);
-
--static ssize_t show_max_freq(struct device *dev, struct device_attribute *attr,
-+static ssize_t max_freq_show(struct device *dev, struct device_attribute *attr,
- char *buf)
- {
- return sprintf(buf, "%lu\n", to_devfreq(dev)->max_freq);
- }
-+static DEVICE_ATTR_RW(max_freq);
-
--static ssize_t show_available_freqs(struct device *d,
-- struct device_attribute *attr,
-- char *buf)
-+static ssize_t available_frequencies_show(struct device *d,
-+ struct device_attribute *attr,
-+ char *buf)
- {
- struct devfreq *df = to_devfreq(d);
- struct device *dev = df->dev.parent;
-@@ -918,9 +926,10 @@ static ssize_t show_available_freqs(stru
-
- return count;
- }
-+static DEVICE_ATTR_RO(available_frequencies);
-
--static ssize_t show_trans_table(struct device *dev, struct device_attribute *attr,
-- char *buf)
-+static ssize_t trans_stat_show(struct device *dev,
-+ struct device_attribute *attr, char *buf)
- {
- struct devfreq *devfreq = to_devfreq(dev);
- ssize_t len;
-@@ -959,20 +968,21 @@ static ssize_t show_trans_table(struct d
- devfreq->total_trans);
- return len;
- }
-+static DEVICE_ATTR_RO(trans_stat);
-
--static struct device_attribute devfreq_attrs[] = {
-- __ATTR(governor, S_IRUGO | S_IWUSR, show_governor, store_governor),
-- __ATTR(available_governors, S_IRUGO, show_available_governors, NULL),
-- __ATTR(cur_freq, S_IRUGO, show_freq, NULL),
-- __ATTR(available_frequencies, S_IRUGO, show_available_freqs, NULL),
-- __ATTR(target_freq, S_IRUGO, show_target_freq, NULL),
-- __ATTR(polling_interval, S_IRUGO | S_IWUSR, show_polling_interval,
-- store_polling_interval),
-- __ATTR(min_freq, S_IRUGO | S_IWUSR, show_min_freq, store_min_freq),
-- __ATTR(max_freq, S_IRUGO | S_IWUSR, show_max_freq, store_max_freq),
-- __ATTR(trans_stat, S_IRUGO, show_trans_table, NULL),
-- { },
-+static struct attribute *devfreq_attrs[] = {
-+ &dev_attr_governor.attr,
-+ &dev_attr_available_governors.attr,
-+ &dev_attr_cur_freq.attr,
-+ &dev_attr_available_frequencies.attr,
-+ &dev_attr_target_freq.attr,
-+ &dev_attr_polling_interval.attr,
-+ &dev_attr_min_freq.attr,
-+ &dev_attr_max_freq.attr,
-+ &dev_attr_trans_stat.attr,
-+ NULL,
- };
-+ATTRIBUTE_GROUPS(devfreq);
-
- static int __init devfreq_init(void)
- {
-@@ -988,7 +998,7 @@ static int __init devfreq_init(void)
- pr_err("%s: couldn't create workqueue\n", __FILE__);
- return PTR_ERR(devfreq_wq);
- }
-- devfreq_class->dev_attrs = devfreq_attrs;
-+ devfreq_class->dev_groups = devfreq_groups;
-
- return 0;
- }
---- a/drivers/dma/dmaengine.c
-+++ b/drivers/dma/dmaengine.c
-@@ -87,7 +87,8 @@ static struct dma_chan *dev_to_dma_chan(
- return chan_dev->chan;
- }
-
--static ssize_t show_memcpy_count(struct device *dev, struct device_attribute *attr, char *buf)
-+static ssize_t memcpy_count_show(struct device *dev,
-+ struct device_attribute *attr, char *buf)
- {
- struct dma_chan *chan;
- unsigned long count = 0;
-@@ -106,9 +107,10 @@ static ssize_t show_memcpy_count(struct
-
- return err;
- }
-+static DEVICE_ATTR_RO(memcpy_count);
-
--static ssize_t show_bytes_transferred(struct device *dev, struct device_attribute *attr,
-- char *buf)
-+static ssize_t bytes_transferred_show(struct device *dev,
-+ struct device_attribute *attr, char *buf)
- {
- struct dma_chan *chan;
- unsigned long count = 0;
-@@ -127,8 +129,10 @@ static ssize_t show_bytes_transferred(st
-
- return err;
- }
-+static DEVICE_ATTR_RO(bytes_transferred);
-
--static ssize_t show_in_use(struct device *dev, struct device_attribute *attr, char *buf)
-+static ssize_t in_use_show(struct device *dev, struct device_attribute *attr,
-+ char *buf)
- {
- struct dma_chan *chan;
- int err;
-@@ -143,13 +147,15 @@ static ssize_t show_in_use(struct device
-
- return err;
- }
-+static DEVICE_ATTR_RO(in_use);
-
--static struct device_attribute dma_attrs[] = {
-- __ATTR(memcpy_count, S_IRUGO, show_memcpy_count, NULL),
-- __ATTR(bytes_transferred, S_IRUGO, show_bytes_transferred, NULL),
-- __ATTR(in_use, S_IRUGO, show_in_use, NULL),
-- __ATTR_NULL
-+static struct attribute *dma_dev_attrs[] = {
-+ &dev_attr_memcpy_count.attr,
-+ &dev_attr_bytes_transferred.attr,
-+ &dev_attr_in_use.attr,
-+ NULL,
- };
-+ATTRIBUTE_GROUPS(dma_dev);
-
- static void chan_dev_release(struct device *dev)
- {
-@@ -167,7 +173,7 @@ static void chan_dev_release(struct devi
-
- static struct class dma_devclass = {
- .name = "dma",
-- .dev_attrs = dma_attrs,
-+ .dev_groups = dma_dev_groups,
- .dev_release = chan_dev_release,
- };
-
---- a/drivers/extcon/extcon-class.c
-+++ b/drivers/extcon/extcon-class.c
-@@ -148,6 +148,7 @@ static ssize_t state_store(struct device
-
- return count;
- }
-+static DEVICE_ATTR_RW(state);
-
- static ssize_t name_show(struct device *dev, struct device_attribute *attr,
- char *buf)
-@@ -163,6 +164,7 @@ static ssize_t name_show(struct device *
-
- return sprintf(buf, "%s\n", dev_name(edev->dev));
- }
-+static DEVICE_ATTR_RO(name);
-
- static ssize_t cable_name_show(struct device *dev,
- struct device_attribute *attr, char *buf)
-@@ -527,11 +529,12 @@ int extcon_unregister_notifier(struct ex
- }
- EXPORT_SYMBOL_GPL(extcon_unregister_notifier);
-
--static struct device_attribute extcon_attrs[] = {
-- __ATTR(state, S_IRUGO | S_IWUSR, state_show, state_store),
-- __ATTR_RO(name),
-- __ATTR_NULL,
-+static struct attribute *extcon_attrs[] = {
-+ &dev_attr_state.attr,
-+ &dev_attr_name.attr,
-+ NULL,
- };
-+ATTRIBUTE_GROUPS(extcon);
-
- static int create_extcon_class(void)
- {
-@@ -539,7 +542,7 @@ static int create_extcon_class(void)
- extcon_class = class_create(THIS_MODULE, "extcon");
- if (IS_ERR(extcon_class))
- return PTR_ERR(extcon_class);
-- extcon_class->dev_attrs = extcon_attrs;
-+ extcon_class->dev_groups = extcon_groups;
-
- #if defined(CONFIG_ANDROID)
- switch_class = class_compat_register("switch");
---- a/drivers/hid/hid-roccat-arvo.c
-+++ b/drivers/hid/hid-roccat-arvo.c
-@@ -75,6 +75,8 @@ static ssize_t arvo_sysfs_set_mode_key(s
-
- return size;
- }
-+static DEVICE_ATTR(mode_key, 0660,
-+ arvo_sysfs_show_mode_key, arvo_sysfs_set_mode_key);
-
- static ssize_t arvo_sysfs_show_key_mask(struct device *dev,
- struct device_attribute *attr, char *buf)
-@@ -123,6 +125,8 @@ static ssize_t arvo_sysfs_set_key_mask(s
-
- return size;
- }
-+static DEVICE_ATTR(key_mask, 0660,
-+ arvo_sysfs_show_key_mask, arvo_sysfs_set_key_mask);
-
- /* retval is 1-5 on success, < 0 on error */
- static int arvo_get_actual_profile(struct usb_device *usb_dev)
-@@ -179,6 +183,9 @@ static ssize_t arvo_sysfs_set_actual_pro
- mutex_unlock(&arvo->arvo_lock);
- return retval;
- }
-+static DEVICE_ATTR(actual_profile, 0660,
-+ arvo_sysfs_show_actual_profile,
-+ arvo_sysfs_set_actual_profile);
-
- static ssize_t arvo_sysfs_write(struct file *fp,
- struct kobject *kobj, void const *buf,
-@@ -239,17 +246,13 @@ static ssize_t arvo_sysfs_read_info(stru
- sizeof(struct arvo_info), ARVO_COMMAND_INFO);
- }
-
--
--static struct device_attribute arvo_attributes[] = {
-- __ATTR(mode_key, 0660,
-- arvo_sysfs_show_mode_key, arvo_sysfs_set_mode_key),
-- __ATTR(key_mask, 0660,
-- arvo_sysfs_show_key_mask, arvo_sysfs_set_key_mask),
-- __ATTR(actual_profile, 0660,
-- arvo_sysfs_show_actual_profile,
-- arvo_sysfs_set_actual_profile),
-- __ATTR_NULL
-+static struct attribute *arvo_attrs[] = {
-+ &dev_attr_mode_key.attr,
-+ &dev_attr_key_mask.attr,
-+ &dev_attr_actual_profile.attr,
-+ NULL,
- };
-+ATTRIBUTE_GROUPS(arvo);
-
- static struct bin_attribute arvo_bin_attributes[] = {
- {
-@@ -430,7 +433,7 @@ static int __init arvo_init(void)
- arvo_class = class_create(THIS_MODULE, "arvo");
- if (IS_ERR(arvo_class))
- return PTR_ERR(arvo_class);
-- arvo_class->dev_attrs = arvo_attributes;
-+ arvo_class->dev_groups = arvo_groups;
- arvo_class->dev_bin_attrs = arvo_bin_attributes;
-
- retval = hid_register_driver(&arvo_driver);
---- a/drivers/hid/hid-roccat-isku.c
-+++ b/drivers/hid/hid-roccat-isku.c
-@@ -109,13 +109,14 @@ static ssize_t isku_sysfs_set_actual_pro
-
- return size;
- }
-+static DEVICE_ATTR(actual_profile, 0660, isku_sysfs_show_actual_profile,
-+ isku_sysfs_set_actual_profile);
-
--static struct device_attribute isku_attributes[] = {
-- __ATTR(actual_profile, 0660,
-- isku_sysfs_show_actual_profile,
-- isku_sysfs_set_actual_profile),
-- __ATTR_NULL
-+static struct attribute *isku_attrs[] = {
-+ &dev_attr_actual_profile.attr,
-+ NULL,
- };
-+ATTRIBUTE_GROUPS(isku);
-
- static ssize_t isku_sysfs_read(struct file *fp, struct kobject *kobj,
- char *buf, loff_t off, size_t count,
-@@ -427,7 +428,7 @@ static int __init isku_init(void)
- isku_class = class_create(THIS_MODULE, "isku");
- if (IS_ERR(isku_class))
- return PTR_ERR(isku_class);
-- isku_class->dev_attrs = isku_attributes;
-+ isku_class->dev_groups = isku_groups;
- isku_class->dev_bin_attrs = isku_bin_attributes;
-
- retval = hid_register_driver(&isku_driver);
---- a/drivers/hid/hid-roccat-kone.c
-+++ b/drivers/hid/hid-roccat-kone.c
-@@ -386,6 +386,7 @@ static ssize_t kone_sysfs_show_actual_pr
- hid_get_drvdata(dev_get_drvdata(dev->parent->parent));
- return snprintf(buf, PAGE_SIZE, "%d\n", kone->actual_profile);
- }
-+static DEVICE_ATTR(actual_profile, 0440, kone_sysfs_show_actual_profile, NULL);
-
- static ssize_t kone_sysfs_show_actual_dpi(struct device *dev,
- struct device_attribute *attr, char *buf)
-@@ -394,6 +395,7 @@ static ssize_t kone_sysfs_show_actual_dp
- hid_get_drvdata(dev_get_drvdata(dev->parent->parent));
- return snprintf(buf, PAGE_SIZE, "%d\n", kone->actual_dpi);
- }
-+static DEVICE_ATTR(actual_dpi, 0440, kone_sysfs_show_actual_dpi, NULL);
-
- /* weight is read each time, since we don't get informed when it's changed */
- static ssize_t kone_sysfs_show_weight(struct device *dev,
-@@ -416,6 +418,7 @@ static ssize_t kone_sysfs_show_weight(st
- return retval;
- return snprintf(buf, PAGE_SIZE, "%d\n", weight);
- }
-+static DEVICE_ATTR(weight, 0440, kone_sysfs_show_weight, NULL);
-
- static ssize_t kone_sysfs_show_firmware_version(struct device *dev,
- struct device_attribute *attr, char *buf)
-@@ -424,6 +427,8 @@ static ssize_t kone_sysfs_show_firmware_
- hid_get_drvdata(dev_get_drvdata(dev->parent->parent));
- return snprintf(buf, PAGE_SIZE, "%d\n", kone->firmware_version);
- }
-+static DEVICE_ATTR(firmware_version, 0440, kone_sysfs_show_firmware_version,
-+ NULL);
-
- static ssize_t kone_sysfs_show_tcu(struct device *dev,
- struct device_attribute *attr, char *buf)
-@@ -524,6 +529,7 @@ exit_unlock:
- mutex_unlock(&kone->kone_lock);
- return retval;
- }
-+static DEVICE_ATTR(tcu, 0660, kone_sysfs_show_tcu, kone_sysfs_set_tcu);
-
- static ssize_t kone_sysfs_show_startup_profile(struct device *dev,
- struct device_attribute *attr, char *buf)
-@@ -570,15 +576,17 @@ static ssize_t kone_sysfs_set_startup_pr
- mutex_unlock(&kone->kone_lock);
- return size;
- }
-+static DEVICE_ATTR(startup_profile, 0660, kone_sysfs_show_startup_profile,
-+ kone_sysfs_set_startup_profile);
-
--static struct device_attribute kone_attributes[] = {
-+static struct attribute *kone_attrs[] = {
- /*
- * Read actual dpi settings.
- * Returns raw value for further processing. Refer to enum
- * kone_polling_rates to get real value.
- */
-- __ATTR(actual_dpi, 0440, kone_sysfs_show_actual_dpi, NULL),
-- __ATTR(actual_profile, 0440, kone_sysfs_show_actual_profile, NULL),
-+ &dev_attr_actual_dpi.attr,
-+ &dev_attr_actual_profile.attr,
-
- /*
- * The mouse can be equipped with one of four supplied weights from 5
-@@ -587,7 +595,7 @@ static struct device_attribute kone_attr
- * by software. Refer to enum kone_weights to get corresponding real
- * weight.
- */
-- __ATTR(weight, 0440, kone_sysfs_show_weight, NULL),
-+ &dev_attr_weight.attr,
-
- /*
- * Prints firmware version stored in mouse as integer.
-@@ -595,22 +603,20 @@ static struct device_attribute kone_attr
- * to get the real version number the decimal point has to be shifted 2
- * positions to the left. E.g. a value of 138 means 1.38.
- */
-- __ATTR(firmware_version, 0440,
-- kone_sysfs_show_firmware_version, NULL),
-+ &dev_attr_firmware_version.attr,
-
- /*
- * Prints state of Tracking Control Unit as number where 0 = off and
- * 1 = on. Writing 0 deactivates tcu and writing 1 calibrates and
- * activates the tcu
- */
-- __ATTR(tcu, 0660, kone_sysfs_show_tcu, kone_sysfs_set_tcu),
-+ &dev_attr_tcu.attr,
-
- /* Prints and takes the number of the profile the mouse starts with */
-- __ATTR(startup_profile, 0660,
-- kone_sysfs_show_startup_profile,
-- kone_sysfs_set_startup_profile),
-- __ATTR_NULL
-+ &dev_attr_startup_profile.attr,
-+ NULL,
- };
-+ATTRIBUTE_GROUPS(kone);
-
- static struct bin_attribute kone_bin_attributes[] = {
- {
-@@ -891,7 +897,7 @@ static int __init kone_init(void)
- kone_class = class_create(THIS_MODULE, "kone");
- if (IS_ERR(kone_class))
- return PTR_ERR(kone_class);
-- kone_class->dev_attrs = kone_attributes;
-+ kone_class->dev_groups = kone_groups;
- kone_class->dev_bin_attrs = kone_bin_attributes;
-
- retval = hid_register_driver(&kone_driver);
---- a/drivers/hid/hid-roccat-koneplus.c
-+++ b/drivers/hid/hid-roccat-koneplus.c
-@@ -274,6 +274,12 @@ static ssize_t koneplus_sysfs_set_actual
-
- return size;
- }
-+static DEVICE_ATTR(actual_profile, 0660,
-+ koneplus_sysfs_show_actual_profile,
-+ koneplus_sysfs_set_actual_profile);
-+static DEVICE_ATTR(startup_profile, 0660,
-+ koneplus_sysfs_show_actual_profile,
-+ koneplus_sysfs_set_actual_profile);
-
- static ssize_t koneplus_sysfs_show_firmware_version(struct device *dev,
- struct device_attribute *attr, char *buf)
-@@ -293,18 +299,16 @@ static ssize_t koneplus_sysfs_show_firmw
-
- return snprintf(buf, PAGE_SIZE, "%d\n", info.firmware_version);
- }
-+static DEVICE_ATTR(firmware_version, 0440,
-+ koneplus_sysfs_show_firmware_version, NULL);
-
--static struct device_attribute koneplus_attributes[] = {
-- __ATTR(actual_profile, 0660,
-- koneplus_sysfs_show_actual_profile,
-- koneplus_sysfs_set_actual_profile),
-- __ATTR(startup_profile, 0660,
-- koneplus_sysfs_show_actual_profile,
-- koneplus_sysfs_set_actual_profile),
-- __ATTR(firmware_version, 0440,
-- koneplus_sysfs_show_firmware_version, NULL),
-- __ATTR_NULL
-+static struct attribute *koneplus_attrs[] = {
-+ &dev_attr_actual_profile.attr,
-+ &dev_attr_startup_profile.attr,
-+ &dev_attr_firmware_version.attr,
-+ NULL,
- };
-+ATTRIBUTE_GROUPS(koneplus);
-
- static struct bin_attribute koneplus_bin_attributes[] = {
- KONEPLUS_BIN_ATTRIBUTE_W(control, CONTROL),
-@@ -572,7 +576,7 @@ static int __init koneplus_init(void)
- koneplus_class = class_create(THIS_MODULE, "koneplus");
- if (IS_ERR(koneplus_class))
- return PTR_ERR(koneplus_class);
-- koneplus_class->dev_attrs = koneplus_attributes;
-+ koneplus_class->dev_groups = koneplus_groups;
- koneplus_class->dev_bin_attrs = koneplus_bin_attributes;
-
- retval = hid_register_driver(&koneplus_driver);
---- a/drivers/hid/hid-roccat-kovaplus.c
-+++ b/drivers/hid/hid-roccat-kovaplus.c
-@@ -310,6 +310,9 @@ static ssize_t kovaplus_sysfs_set_actual
-
- return size;
- }
-+static DEVICE_ATTR(actual_profile, 0660,
-+ kovaplus_sysfs_show_actual_profile,
-+ kovaplus_sysfs_set_actual_profile);
-
- static ssize_t kovaplus_sysfs_show_actual_cpi(struct device *dev,
- struct device_attribute *attr, char *buf)
-@@ -318,6 +321,7 @@ static ssize_t kovaplus_sysfs_show_actua
- hid_get_drvdata(dev_get_drvdata(dev->parent->parent));
- return snprintf(buf, PAGE_SIZE, "%d\n", kovaplus->actual_cpi);
- }
-+static DEVICE_ATTR(actual_cpi, 0440, kovaplus_sysfs_show_actual_cpi, NULL);
-
- static ssize_t kovaplus_sysfs_show_actual_sensitivity_x(struct device *dev,
- struct device_attribute *attr, char *buf)
-@@ -326,6 +330,8 @@ static ssize_t kovaplus_sysfs_show_actua
- hid_get_drvdata(dev_get_drvdata(dev->parent->parent));
- return snprintf(buf, PAGE_SIZE, "%d\n", kovaplus->actual_x_sensitivity);
- }
-+static DEVICE_ATTR(actual_sensitivity_x, 0440,
-+ kovaplus_sysfs_show_actual_sensitivity_x, NULL);
-
- static ssize_t kovaplus_sysfs_show_actual_sensitivity_y(struct device *dev,
- struct device_attribute *attr, char *buf)
-@@ -334,6 +340,8 @@ static ssize_t kovaplus_sysfs_show_actua
- hid_get_drvdata(dev_get_drvdata(dev->parent->parent));
- return snprintf(buf, PAGE_SIZE, "%d\n", kovaplus->actual_y_sensitivity);
- }
-+static DEVICE_ATTR(actual_sensitivity_y, 0440,
-+ kovaplus_sysfs_show_actual_sensitivity_y, NULL);
-
- static ssize_t kovaplus_sysfs_show_firmware_version(struct device *dev,
- struct device_attribute *attr, char *buf)
-@@ -353,21 +361,18 @@ static ssize_t kovaplus_sysfs_show_firmw
-
- return snprintf(buf, PAGE_SIZE, "%d\n", info.firmware_version);
- }
-+static DEVICE_ATTR(firmware_version, 0440,
-+ kovaplus_sysfs_show_firmware_version, NULL);
-
--static struct device_attribute kovaplus_attributes[] = {
-- __ATTR(actual_cpi, 0440,
-- kovaplus_sysfs_show_actual_cpi, NULL),
-- __ATTR(firmware_version, 0440,
-- kovaplus_sysfs_show_firmware_version, NULL),
-- __ATTR(actual_profile, 0660,
-- kovaplus_sysfs_show_actual_profile,
-- kovaplus_sysfs_set_actual_profile),
-- __ATTR(actual_sensitivity_x, 0440,
-- kovaplus_sysfs_show_actual_sensitivity_x, NULL),
-- __ATTR(actual_sensitivity_y, 0440,
-- kovaplus_sysfs_show_actual_sensitivity_y, NULL),
-- __ATTR_NULL
-+static struct attribute *kovaplus_attrs[] = {
-+ &dev_attr_actual_cpi.attr,
-+ &dev_attr_firmware_version.attr,
-+ &dev_attr_actual_profile.attr,
-+ &dev_attr_actual_sensitivity_x.attr,
-+ &dev_attr_actual_sensitivity_y.attr,
-+ NULL,
- };
-+ATTRIBUTE_GROUPS(kovaplus);
-
- static struct bin_attribute kovaplus_bin_attributes[] = {
- KOVAPLUS_BIN_ATTRIBUTE_W(control, CONTROL),
-@@ -662,7 +667,7 @@ static int __init kovaplus_init(void)
- kovaplus_class = class_create(THIS_MODULE, "kovaplus");
- if (IS_ERR(kovaplus_class))
- return PTR_ERR(kovaplus_class);
-- kovaplus_class->dev_attrs = kovaplus_attributes;
-+ kovaplus_class->dev_groups = kovaplus_groups;
- kovaplus_class->dev_bin_attrs = kovaplus_bin_attributes;
-
- retval = hid_register_driver(&kovaplus_driver);
---- a/drivers/hid/hid-roccat-pyra.c
-+++ b/drivers/hid/hid-roccat-pyra.c
-@@ -266,6 +266,7 @@ static ssize_t pyra_sysfs_show_actual_cp
- hid_get_drvdata(dev_get_drvdata(dev->parent->parent));
- return snprintf(buf, PAGE_SIZE, "%d\n", pyra->actual_cpi);
- }
-+static DEVICE_ATTR(actual_cpi, 0440, pyra_sysfs_show_actual_cpi, NULL);
-
- static ssize_t pyra_sysfs_show_actual_profile(struct device *dev,
- struct device_attribute *attr, char *buf)
-@@ -282,6 +283,8 @@ static ssize_t pyra_sysfs_show_actual_pr
-
- return snprintf(buf, PAGE_SIZE, "%d\n", settings.startup_profile);
- }
-+static DEVICE_ATTR(actual_profile, 0440, pyra_sysfs_show_actual_profile, NULL);
-+static DEVICE_ATTR(startup_profile, 0440, pyra_sysfs_show_actual_profile, NULL);
-
- static ssize_t pyra_sysfs_show_firmware_version(struct device *dev,
- struct device_attribute *attr, char *buf)
-@@ -301,16 +304,17 @@ static ssize_t pyra_sysfs_show_firmware_
-
- return snprintf(buf, PAGE_SIZE, "%d\n", info.firmware_version);
- }
-+static DEVICE_ATTR(firmware_version, 0440, pyra_sysfs_show_firmware_version,
-+ NULL);
-
--static struct device_attribute pyra_attributes[] = {
-- __ATTR(actual_cpi, 0440, pyra_sysfs_show_actual_cpi, NULL),
-- __ATTR(actual_profile, 0440, pyra_sysfs_show_actual_profile, NULL),
-- __ATTR(firmware_version, 0440,
-- pyra_sysfs_show_firmware_version, NULL),
-- __ATTR(startup_profile, 0440,
-- pyra_sysfs_show_actual_profile, NULL),
-- __ATTR_NULL
-+static struct attribute *pyra_attrs[] = {
-+ &dev_attr_actual_cpi.attr,
-+ &dev_attr_actual_profile.attr,
-+ &dev_attr_firmware_version.attr,
-+ &dev_attr_startup_profile.attr,
-+ NULL,
- };
-+ATTRIBUTE_GROUPS(pyra);
-
- static struct bin_attribute pyra_bin_attributes[] = {
- PYRA_BIN_ATTRIBUTE_W(control, CONTROL),
-@@ -600,7 +604,7 @@ static int __init pyra_init(void)
- pyra_class = class_create(THIS_MODULE, "pyra");
- if (IS_ERR(pyra_class))
- return PTR_ERR(pyra_class);
-- pyra_class->dev_attrs = pyra_attributes;
-+ pyra_class->dev_groups = pyra_groups;
- pyra_class->dev_bin_attrs = pyra_bin_attributes;
-
- retval = hid_register_driver(&pyra_driver);
---- a/drivers/isdn/mISDN/core.c
-+++ b/drivers/isdn/mISDN/core.c
-@@ -37,8 +37,8 @@ static void mISDN_dev_release(struct dev
- /* nothing to do: the device is part of its parent's data structure */
- }
-
--static ssize_t _show_id(struct device *dev,
-- struct device_attribute *attr, char *buf)
-+static ssize_t id_show(struct device *dev,
-+ struct device_attribute *attr, char *buf)
- {
- struct mISDNdevice *mdev = dev_to_mISDN(dev);
-
-@@ -46,9 +46,10 @@ static ssize_t _show_id(struct device *d
- return -ENODEV;
- return sprintf(buf, "%d\n", mdev->id);
- }
-+static DEVICE_ATTR_RO(id);
-
--static ssize_t _show_nrbchan(struct device *dev,
-- struct device_attribute *attr, char *buf)
-+static ssize_t nrbchan_show(struct device *dev,
-+ struct device_attribute *attr, char *buf)
- {
- struct mISDNdevice *mdev = dev_to_mISDN(dev);
-
-@@ -56,9 +57,10 @@ static ssize_t _show_nrbchan(struct devi
- return -ENODEV;
- return sprintf(buf, "%d\n", mdev->nrbchan);
- }
-+static DEVICE_ATTR_RO(nrbchan);
-
--static ssize_t _show_d_protocols(struct device *dev,
-- struct device_attribute *attr, char *buf)
-+static ssize_t d_protocols_show(struct device *dev,
-+ struct device_attribute *attr, char *buf)
- {
- struct mISDNdevice *mdev = dev_to_mISDN(dev);
-
-@@ -66,9 +68,10 @@ static ssize_t _show_d_protocols(struct
- return -ENODEV;
- return sprintf(buf, "%d\n", mdev->Dprotocols);
- }
-+static DEVICE_ATTR_RO(d_protocols);
-
--static ssize_t _show_b_protocols(struct device *dev,
-- struct device_attribute *attr, char *buf)
-+static ssize_t b_protocols_show(struct device *dev,
-+ struct device_attribute *attr, char *buf)
- {
- struct mISDNdevice *mdev = dev_to_mISDN(dev);
-
-@@ -76,9 +79,10 @@ static ssize_t _show_b_protocols(struct
- return -ENODEV;
- return sprintf(buf, "%d\n", mdev->Bprotocols | get_all_Bprotocols());
- }
-+static DEVICE_ATTR_RO(b_protocols);
-
--static ssize_t _show_protocol(struct device *dev,
-- struct device_attribute *attr, char *buf)
-+static ssize_t protocol_show(struct device *dev,
-+ struct device_attribute *attr, char *buf)
- {
- struct mISDNdevice *mdev = dev_to_mISDN(dev);
-
-@@ -86,17 +90,19 @@ static ssize_t _show_protocol(struct dev
- return -ENODEV;
- return sprintf(buf, "%d\n", mdev->D.protocol);
- }
-+static DEVICE_ATTR_RO(protocol);
-
--static ssize_t _show_name(struct device *dev,
-- struct device_attribute *attr, char *buf)
-+static ssize_t name_show(struct device *dev,
-+ struct device_attribute *attr, char *buf)
- {
- strcpy(buf, dev_name(dev));
- return strlen(buf);
- }
-+static DEVICE_ATTR_RO(name);
-
- #if 0 /* hangs */
--static ssize_t _set_name(struct device *dev, struct device_attribute *attr,
-- const char *buf, size_t count)
-+static ssize_t name_set(struct device *dev, struct device_attribute *attr,
-+ const char *buf, size_t count)
- {
- int err = 0;
- char *out = kmalloc(count + 1, GFP_KERNEL);
-@@ -113,10 +119,11 @@ static ssize_t _set_name(struct device *
-
- return (err < 0) ? err : count;
- }
-+static DEVICE_ATTR_RW(name);
- #endif
-
--static ssize_t _show_channelmap(struct device *dev,
-- struct device_attribute *attr, char *buf)
-+static ssize_t channelmap_show(struct device *dev,
-+ struct device_attribute *attr, char *buf)
- {
- struct mISDNdevice *mdev = dev_to_mISDN(dev);
- char *bp = buf;
-@@ -127,18 +134,19 @@ static ssize_t _show_channelmap(struct d
-
- return bp - buf;
- }
-+static DEVICE_ATTR_RO(channelmap);
-
--static struct device_attribute mISDN_dev_attrs[] = {
-- __ATTR(id, S_IRUGO, _show_id, NULL),
-- __ATTR(d_protocols, S_IRUGO, _show_d_protocols, NULL),
-- __ATTR(b_protocols, S_IRUGO, _show_b_protocols, NULL),
-- __ATTR(protocol, S_IRUGO, _show_protocol, NULL),
-- __ATTR(channelmap, S_IRUGO, _show_channelmap, NULL),
-- __ATTR(nrbchan, S_IRUGO, _show_nrbchan, NULL),
-- __ATTR(name, S_IRUGO, _show_name, NULL),
--/* __ATTR(name, S_IRUGO | S_IWUSR, _show_name, _set_name), */
-- {}
-+static struct attribute *mISDN_attrs[] = {
-+ &dev_attr_id.attr,
-+ &dev_attr_d_protocols.attr,
-+ &dev_attr_b_protocols.attr,
-+ &dev_attr_protocol.attr,
-+ &dev_attr_channelmap.attr,
-+ &dev_attr_nrbchan.attr,
-+ &dev_attr_name.attr,
-+ NULL,
- };
-+ATTRIBUTE_GROUPS(mISDN);
-
- static int mISDN_uevent(struct device *dev, struct kobj_uevent_env *env)
- {
-@@ -162,7 +170,7 @@ static struct class mISDN_class = {
- .name = "mISDN",
- .owner = THIS_MODULE,
- .dev_uevent = mISDN_uevent,
-- .dev_attrs = mISDN_dev_attrs,
-+ .dev_groups = mISDN_groups,
- .dev_release = mISDN_dev_release,
- .class_release = mISDN_class_release,
- };
---- a/drivers/leds/led-class.c
-+++ b/drivers/leds/led-class.c
-@@ -29,7 +29,7 @@ static void led_update_brightness(struct
- led_cdev->brightness = led_cdev->brightness_get(led_cdev);
- }
-
--static ssize_t led_brightness_show(struct device *dev,
-+static ssize_t brightness_show(struct device *dev,
- struct device_attribute *attr, char *buf)
- {
- struct led_classdev *led_cdev = dev_get_drvdata(dev);
-@@ -40,7 +40,7 @@ static ssize_t led_brightness_show(struc
- return sprintf(buf, "%u\n", led_cdev->brightness);
- }
-
--static ssize_t led_brightness_store(struct device *dev,
-+static ssize_t brightness_store(struct device *dev,
- struct device_attribute *attr, const char *buf, size_t size)
- {
- struct led_classdev *led_cdev = dev_get_drvdata(dev);
-@@ -57,6 +57,7 @@ static ssize_t led_brightness_store(stru
-
- return size;
- }
-+static DEVICE_ATTR_RW(brightness);
-
- static ssize_t led_max_brightness_show(struct device *dev,
- struct device_attribute *attr, char *buf)
-@@ -65,14 +66,35 @@ static ssize_t led_max_brightness_show(s
-
- return sprintf(buf, "%u\n", led_cdev->max_brightness);
- }
-+static DEVICE_ATTR(max_brightness, 0444, led_max_brightness_show, NULL);
-
--static struct device_attribute led_class_attrs[] = {
-- __ATTR(brightness, 0644, led_brightness_show, led_brightness_store),
-- __ATTR(max_brightness, 0444, led_max_brightness_show, NULL),
- #ifdef CONFIG_LEDS_TRIGGERS
-- __ATTR(trigger, 0644, led_trigger_show, led_trigger_store),
-+static DEVICE_ATTR(trigger, 0644, led_trigger_show, led_trigger_store);
-+static struct attribute *led_trigger_attrs[] = {
-+ &dev_attr_trigger.attr,
-+ NULL,
-+};
-+static const struct attribute_group led_trigger_group = {
-+ .attrs = led_trigger_attrs,
-+};
-+#endif
-+
-+static struct attribute *led_class_attrs[] = {
-+ &dev_attr_brightness.attr,
-+ &dev_attr_max_brightness.attr,
-+ NULL,
-+};
-+
-+static const struct attribute_group led_group = {
-+ .attrs = led_class_attrs,
-+};
-+
-+static const struct attribute_group *led_groups[] = {
-+ &led_group,
-+#ifdef CONFIG_LEDS_TRIGGERS
-+ &led_trigger_group,
- #endif
-- __ATTR_NULL,
-+ NULL,
- };
-
- static void led_timer_function(unsigned long data)
-@@ -258,7 +280,7 @@ static int __init leds_init(void)
- if (IS_ERR(leds_class))
- return PTR_ERR(leds_class);
- leds_class->pm = &leds_class_dev_pm_ops;
-- leds_class->dev_attrs = led_class_attrs;
-+ leds_class->dev_groups = led_groups;
- return 0;
- }
-
---- a/drivers/media/v4l2-core/v4l2-dev.c
-+++ b/drivers/media/v4l2-core/v4l2-dev.c
-@@ -38,24 +38,25 @@
- * sysfs stuff
- */
-
--static ssize_t show_index(struct device *cd,
-- struct device_attribute *attr, char *buf)
-+static ssize_t index_show(struct device *cd,
-+ struct device_attribute *attr, char *buf)
- {
- struct video_device *vdev = to_video_device(cd);
-
- return sprintf(buf, "%i\n", vdev->index);
- }
-+static DEVICE_ATTR_RO(index);
-
--static ssize_t show_debug(struct device *cd,
-- struct device_attribute *attr, char *buf)
-+static ssize_t debug_show(struct device *cd,
-+ struct device_attribute *attr, char *buf)
- {
- struct video_device *vdev = to_video_device(cd);
-
- return sprintf(buf, "%i\n", vdev->debug);
- }
-
--static ssize_t set_debug(struct device *cd, struct device_attribute *attr,
-- const char *buf, size_t len)
-+static ssize_t debug_store(struct device *cd, struct device_attribute *attr,
-+ const char *buf, size_t len)
- {
- struct video_device *vdev = to_video_device(cd);
- int res = 0;
-@@ -68,21 +69,24 @@ static ssize_t set_debug(struct device *
- vdev->debug = value;
- return len;
- }
-+static DEVICE_ATTR_RW(debug);
-
--static ssize_t show_name(struct device *cd,
-+static ssize_t name_show(struct device *cd,
- struct device_attribute *attr, char *buf)
- {
- struct video_device *vdev = to_video_device(cd);
-
- return sprintf(buf, "%.*s\n", (int)sizeof(vdev->name), vdev->name);
- }
-+static DEVICE_ATTR_RO(name);
-
--static struct device_attribute video_device_attrs[] = {
-- __ATTR(name, S_IRUGO, show_name, NULL),
-- __ATTR(debug, 0644, show_debug, set_debug),
-- __ATTR(index, S_IRUGO, show_index, NULL),
-- __ATTR_NULL
-+static struct attribute *video_device_attrs[] = {
-+ &dev_attr_name.attr,
-+ &dev_attr_debug.attr,
-+ &dev_attr_index.attr,
-+ NULL,
- };
-+ATTRIBUTE_GROUPS(video_device);
-
- /*
- * Active devices
-@@ -217,7 +221,7 @@ static void v4l2_device_release(struct d
-
- static struct class video_class = {
- .name = VIDEO_NAME,
-- .dev_attrs = video_device_attrs,
-+ .dev_groups = video_device_groups,
- };
-
- struct video_device *video_devdata(struct file *file)
---- a/drivers/misc/c2port/core.c
-+++ b/drivers/misc/c2port/core.c
-@@ -311,6 +311,7 @@ static ssize_t c2port_show_name(struct d
-
- return sprintf(buf, "%s\n", c2dev->name);
- }
-+static DEVICE_ATTR(name, 0444, c2port_show_name, NULL);
-
- static ssize_t c2port_show_flash_blocks_num(struct device *dev,
- struct device_attribute *attr, char *buf)
-@@ -320,6 +321,7 @@ static ssize_t c2port_show_flash_blocks_
-
- return sprintf(buf, "%d\n", ops->blocks_num);
- }
-+static DEVICE_ATTR(flash_blocks_num, 0444, c2port_show_flash_blocks_num, NULL);
-
- static ssize_t c2port_show_flash_block_size(struct device *dev,
- struct device_attribute *attr, char *buf)
-@@ -329,6 +331,7 @@ static ssize_t c2port_show_flash_block_s
-
- return sprintf(buf, "%d\n", ops->block_size);
- }
-+static DEVICE_ATTR(flash_block_size, 0444, c2port_show_flash_block_size, NULL);
-
- static ssize_t c2port_show_flash_size(struct device *dev,
- struct device_attribute *attr, char *buf)
-@@ -338,18 +341,18 @@ static ssize_t c2port_show_flash_size(st
-
- return sprintf(buf, "%d\n", ops->blocks_num * ops->block_size);
- }
-+static DEVICE_ATTR(flash_size, 0444, c2port_show_flash_size, NULL);
-
--static ssize_t c2port_show_access(struct device *dev,
-- struct device_attribute *attr, char *buf)
-+static ssize_t access_show(struct device *dev, struct device_attribute *attr,
-+ char *buf)
- {
- struct c2port_device *c2dev = dev_get_drvdata(dev);
-
- return sprintf(buf, "%d\n", c2dev->access);
- }
-
--static ssize_t c2port_store_access(struct device *dev,
-- struct device_attribute *attr,
-- const char *buf, size_t count)
-+static ssize_t access_store(struct device *dev, struct device_attribute *attr,
-+ const char *buf, size_t count)
- {
- struct c2port_device *c2dev = dev_get_drvdata(dev);
- struct c2port_ops *ops = c2dev->ops;
-@@ -375,6 +378,7 @@ static ssize_t c2port_store_access(struc
-
- return count;
- }
-+static DEVICE_ATTR_RW(access);
-
- static ssize_t c2port_store_reset(struct device *dev,
- struct device_attribute *attr,
-@@ -395,6 +399,7 @@ static ssize_t c2port_store_reset(struct
-
- return count;
- }
-+static DEVICE_ATTR(reset, 0200, NULL, c2port_store_reset);
-
- static ssize_t __c2port_show_dev_id(struct c2port_device *dev, char *buf)
- {
-@@ -431,6 +436,7 @@ static ssize_t c2port_show_dev_id(struct
-
- return ret;
- }
-+static DEVICE_ATTR(dev_id, 0444, c2port_show_dev_id, NULL);
-
- static ssize_t __c2port_show_rev_id(struct c2port_device *dev, char *buf)
- {
-@@ -467,6 +473,7 @@ static ssize_t c2port_show_rev_id(struct
-
- return ret;
- }
-+static DEVICE_ATTR(rev_id, 0444, c2port_show_rev_id, NULL);
-
- static ssize_t c2port_show_flash_access(struct device *dev,
- struct device_attribute *attr, char *buf)
-@@ -536,6 +543,8 @@ static ssize_t c2port_store_flash_access
-
- return count;
- }
-+static DEVICE_ATTR(flash_access, 0644, c2port_show_flash_access,
-+ c2port_store_flash_access);
-
- static ssize_t __c2port_write_flash_erase(struct c2port_device *dev)
- {
-@@ -616,6 +625,7 @@ static ssize_t c2port_store_flash_erase(
-
- return count;
- }
-+static DEVICE_ATTR(flash_erase, 0200, NULL, c2port_store_flash_erase);
-
- static ssize_t __c2port_read_flash_data(struct c2port_device *dev,
- char *buffer, loff_t offset, size_t count)
-@@ -850,22 +860,20 @@ static ssize_t c2port_write_flash_data(s
- /*
- * Class attributes
- */
--
--static struct device_attribute c2port_attrs[] = {
-- __ATTR(name, 0444, c2port_show_name, NULL),
-- __ATTR(flash_blocks_num, 0444, c2port_show_flash_blocks_num, NULL),
-- __ATTR(flash_block_size, 0444, c2port_show_flash_block_size, NULL),
-- __ATTR(flash_size, 0444, c2port_show_flash_size, NULL),
-- __ATTR(access, 0644, c2port_show_access, c2port_store_access),
-- __ATTR(reset, 0200, NULL, c2port_store_reset),
-- __ATTR(dev_id, 0444, c2port_show_dev_id, NULL),
-- __ATTR(rev_id, 0444, c2port_show_rev_id, NULL),
--
-- __ATTR(flash_access, 0644, c2port_show_flash_access,
-- c2port_store_flash_access),
-- __ATTR(flash_erase, 0200, NULL, c2port_store_flash_erase),
-- __ATTR_NULL,
-+static struct attribute *c2port_attrs[] = {
-+ &dev_attr_name.attr,
-+ &dev_attr_flash_blocks_num.attr,
-+ &dev_attr_flash_block_size.attr,
-+ &dev_attr_flash_size.attr,
-+ &dev_attr_access.attr,
-+ &dev_attr_reset.attr,
-+ &dev_attr_dev_id.attr,
-+ &dev_attr_rev_id.attr,
-+ &dev_attr_flash_access.attr,
-+ &dev_attr_flash_erase.attr,
-+ NULL,
- };
-+ATTRIBUTE_GROUPS(c2port);
-
- static struct bin_attribute c2port_bin_attrs[] = {
- {
-@@ -979,7 +987,7 @@ static int __init c2port_init(void)
- printk(KERN_ERR "c2port: failed to allocate class\n");
- return PTR_ERR(c2port_class);
- }
-- c2port_class->dev_attrs = c2port_attrs;
-+ c2port_class->dev_groups = c2port_groups;
- c2port_class->dev_bin_attrs = c2port_bin_attrs;
-
- return 0;
---- a/drivers/misc/enclosure.c
-+++ b/drivers/misc/enclosure.c
-@@ -239,7 +239,7 @@ static void enclosure_component_release(
- put_device(dev->parent);
- }
-
--static const struct attribute_group *enclosure_groups[];
-+static const struct attribute_group *enclosure_component_groups[];
-
- /**
- * enclosure_component_register - add a particular component to an enclosure
-@@ -282,7 +282,7 @@ enclosure_component_register(struct encl
- dev_set_name(cdev, "%u", number);
-
- cdev->release = enclosure_component_release;
-- cdev->groups = enclosure_groups;
-+ cdev->groups = enclosure_component_groups;
-
- err = device_register(cdev);
- if (err) {
-@@ -365,25 +365,26 @@ EXPORT_SYMBOL_GPL(enclosure_remove_devic
- * sysfs pieces below
- */
-
--static ssize_t enclosure_show_components(struct device *cdev,
-- struct device_attribute *attr,
-- char *buf)
-+static ssize_t components_show(struct device *cdev,
-+ struct device_attribute *attr, char *buf)
- {
- struct enclosure_device *edev = to_enclosure_device(cdev);
-
- return snprintf(buf, 40, "%d\n", edev->components);
- }
-+static DEVICE_ATTR_RO(components);
-
--static struct device_attribute enclosure_attrs[] = {
-- __ATTR(components, S_IRUGO, enclosure_show_components, NULL),
-- __ATTR_NULL
-+static struct attribute *enclosure_class_attrs[] = {
-+ &dev_attr_components.attr,
-+ NULL,
- };
-+ATTRIBUTE_GROUPS(enclosure_class);
-
- static struct class enclosure_class = {
- .name = "enclosure",
- .owner = THIS_MODULE,
- .dev_release = enclosure_release,
-- .dev_attrs = enclosure_attrs,
-+ .dev_groups = enclosure_class_groups,
- };
-
- static const char *const enclosure_status [] = {
-@@ -536,15 +537,7 @@ static struct attribute *enclosure_compo
- &dev_attr_type.attr,
- NULL
- };
--
--static struct attribute_group enclosure_group = {
-- .attrs = enclosure_component_attrs,
--};
--
--static const struct attribute_group *enclosure_groups[] = {
-- &enclosure_group,
-- NULL
--};
-+ATTRIBUTE_GROUPS(enclosure_component);
-
- static int __init enclosure_init(void)
- {
---- a/drivers/pci/pci-sysfs.c
-+++ b/drivers/pci/pci-sysfs.c
-@@ -131,19 +131,19 @@ static ssize_t pci_bus_show_cpuaffinity(
- return ret;
- }
-
--static inline ssize_t pci_bus_show_cpumaskaffinity(struct device *dev,
-- struct device_attribute *attr,
-- char *buf)
-+static ssize_t cpuaffinity_show(struct device *dev,
-+ struct device_attribute *attr, char *buf)
- {
- return pci_bus_show_cpuaffinity(dev, 0, attr, buf);
- }
-+static DEVICE_ATTR_RO(cpuaffinity);
-
--static inline ssize_t pci_bus_show_cpulistaffinity(struct device *dev,
-- struct device_attribute *attr,
-- char *buf)
-+static ssize_t cpulistaffinity_show(struct device *dev,
-+ struct device_attribute *attr, char *buf)
- {
- return pci_bus_show_cpuaffinity(dev, 1, attr, buf);
- }
-+static DEVICE_ATTR_RO(cpulistaffinity);
-
- /* show resources */
- static ssize_t
-@@ -379,6 +379,7 @@ dev_bus_rescan_store(struct device *dev,
- }
- return count;
- }
-+static DEVICE_ATTR(rescan, (S_IWUSR|S_IWGRP), NULL, dev_bus_rescan_store);
-
- #if defined(CONFIG_PM_RUNTIME) && defined(CONFIG_ACPI)
- static ssize_t d3cold_allowed_store(struct device *dev,
-@@ -514,11 +515,20 @@ struct device_attribute pci_dev_attrs[]
- __ATTR_NULL,
- };
-
--struct device_attribute pcibus_dev_attrs[] = {
-- __ATTR(rescan, (S_IWUSR|S_IWGRP), NULL, dev_bus_rescan_store),
-- __ATTR(cpuaffinity, S_IRUGO, pci_bus_show_cpumaskaffinity, NULL),
-- __ATTR(cpulistaffinity, S_IRUGO, pci_bus_show_cpulistaffinity, NULL),
-- __ATTR_NULL,
-+static struct attribute *pcibus_attrs[] = {
-+ &dev_attr_rescan.attr,
-+ &dev_attr_cpuaffinity.attr,
-+ &dev_attr_cpulistaffinity.attr,
-+ NULL,
-+};
-+
-+static const struct attribute_group pcibus_group = {
-+ .attrs = pcibus_attrs,
-+};
-+
-+const struct attribute_group *pcibus_groups[] = {
-+ &pcibus_group,
-+ NULL,
- };
-
- static ssize_t
---- a/drivers/pci/pci.h
-+++ b/drivers/pci/pci.h
-@@ -151,7 +151,7 @@ static inline int pci_no_d1d2(struct pci
-
- }
- extern struct device_attribute pci_dev_attrs[];
--extern struct device_attribute pcibus_dev_attrs[];
-+extern const struct attribute_group *pcibus_groups[];
- extern struct device_type pci_dev_type;
- extern struct bus_attribute pci_bus_attrs[];
-
---- a/drivers/pci/probe.c
-+++ b/drivers/pci/probe.c
-@@ -96,7 +96,7 @@ static void release_pcibus_dev(struct de
- static struct class pcibus_class = {
- .name = "pci_bus",
- .dev_release = &release_pcibus_dev,
-- .dev_attrs = pcibus_dev_attrs,
-+ .dev_groups = pcibus_groups,
- };
-
- static int __init pcibus_class_init(void)
---- a/drivers/platform/x86/wmi.c
-+++ b/drivers/platform/x86/wmi.c
-@@ -693,11 +693,13 @@ static ssize_t modalias_show(struct devi
-
- return sprintf(buf, "wmi:%s\n", guid_string);
- }
-+static DEVICE_ATTR_RO(modalias);
-
--static struct device_attribute wmi_dev_attrs[] = {
-- __ATTR_RO(modalias),
-- __ATTR_NULL
-+static struct attribute *wmi_attrs[] = {
-+ &dev_attr_modalias.attr,
-+ NULL,
- };
-+ATTRIBUTE_GROUPS(wmi);
-
- static int wmi_dev_uevent(struct device *dev, struct kobj_uevent_env *env)
- {
-@@ -732,7 +734,7 @@ static struct class wmi_class = {
- .name = "wmi",
- .dev_release = wmi_dev_free,
- .dev_uevent = wmi_dev_uevent,
-- .dev_attrs = wmi_dev_attrs,
-+ .dev_groups = wmi_groups,
- };
-
- static int wmi_create_device(const struct guid_block *gblock,
---- a/drivers/pps/pps.c
-+++ b/drivers/pps/pps.c
-@@ -406,7 +406,7 @@ static int __init pps_init(void)
- pr_err("failed to allocate class\n");
- return PTR_ERR(pps_class);
- }
-- pps_class->dev_attrs = pps_attrs;
-+ pps_class->dev_groups = pps_groups;
-
- err = alloc_chrdev_region(&pps_devt, 0, PPS_MAX_SOURCES, "pps");
- if (err < 0) {
---- a/drivers/pps/sysfs.c
-+++ b/drivers/pps/sysfs.c
-@@ -29,8 +29,8 @@
- * Attribute functions
- */
-
--static ssize_t pps_show_assert(struct device *dev,
-- struct device_attribute *attr, char *buf)
-+static ssize_t assert_show(struct device *dev, struct device_attribute *attr,
-+ char *buf)
- {
- struct pps_device *pps = dev_get_drvdata(dev);
-
-@@ -41,9 +41,10 @@ static ssize_t pps_show_assert(struct de
- (long long) pps->assert_tu.sec, pps->assert_tu.nsec,
- pps->assert_sequence);
- }
-+static DEVICE_ATTR_RO(assert);
-
--static ssize_t pps_show_clear(struct device *dev,
-- struct device_attribute *attr, char *buf)
-+static ssize_t clear_show(struct device *dev, struct device_attribute *attr,
-+ char *buf)
- {
- struct pps_device *pps = dev_get_drvdata(dev);
-
-@@ -54,45 +55,59 @@ static ssize_t pps_show_clear(struct dev
- (long long) pps->clear_tu.sec, pps->clear_tu.nsec,
- pps->clear_sequence);
- }
-+static DEVICE_ATTR_RO(clear);
-
--static ssize_t pps_show_mode(struct device *dev,
-- struct device_attribute *attr, char *buf)
-+static ssize_t mode_show(struct device *dev, struct device_attribute *attr,
-+ char *buf)
- {
- struct pps_device *pps = dev_get_drvdata(dev);
-
- return sprintf(buf, "%4x\n", pps->info.mode);
- }
-+static DEVICE_ATTR_RO(mode);
-
--static ssize_t pps_show_echo(struct device *dev,
-- struct device_attribute *attr, char *buf)
-+static ssize_t echo_show(struct device *dev, struct device_attribute *attr,
-+ char *buf)
- {
- struct pps_device *pps = dev_get_drvdata(dev);
-
- return sprintf(buf, "%d\n", !!pps->info.echo);
- }
-+static DEVICE_ATTR_RO(echo);
-
--static ssize_t pps_show_name(struct device *dev,
-- struct device_attribute *attr, char *buf)
-+static ssize_t name_show(struct device *dev, struct device_attribute *attr,
-+ char *buf)
- {
- struct pps_device *pps = dev_get_drvdata(dev);
-
- return sprintf(buf, "%s\n", pps->info.name);
- }
-+static DEVICE_ATTR_RO(name);
-
--static ssize_t pps_show_path(struct device *dev,
-- struct device_attribute *attr, char *buf)
-+static ssize_t path_show(struct device *dev, struct device_attribute *attr,
-+ char *buf)
- {
- struct pps_device *pps = dev_get_drvdata(dev);
-
- return sprintf(buf, "%s\n", pps->info.path);
- }
-+static DEVICE_ATTR_RO(path);
-
--struct device_attribute pps_attrs[] = {
-- __ATTR(assert, S_IRUGO, pps_show_assert, NULL),
-- __ATTR(clear, S_IRUGO, pps_show_clear, NULL),
-- __ATTR(mode, S_IRUGO, pps_show_mode, NULL),
-- __ATTR(echo, S_IRUGO, pps_show_echo, NULL),
-- __ATTR(name, S_IRUGO, pps_show_name, NULL),
-- __ATTR(path, S_IRUGO, pps_show_path, NULL),
-- __ATTR_NULL,
-+static struct attribute *pps_attrs[] = {
-+ &dev_attr_assert.attr,
-+ &dev_attr_clear.attr,
-+ &dev_attr_mode.attr,
-+ &dev_attr_echo.attr,
-+ &dev_attr_name.attr,
-+ &dev_attr_path.attr,
-+ NULL,
-+};
-+
-+static const struct attribute_group pps_group = {
-+ .attrs = pps_attrs,
-+};
-+
-+const struct attribute_group *pps_groups[] = {
-+ &pps_group,
-+ NULL,
- };
---- a/drivers/ptp/ptp_clock.c
-+++ b/drivers/ptp/ptp_clock.c
-@@ -330,7 +330,7 @@ static int __init ptp_init(void)
- goto no_region;
- }
-
-- ptp_class->dev_attrs = ptp_dev_attrs;
-+ ptp_class->dev_groups = ptp_groups;
- pr_info("PTP clock support registered\n");
- return 0;
-
---- a/drivers/ptp/ptp_private.h
-+++ b/drivers/ptp/ptp_private.h
-@@ -84,7 +84,7 @@ uint ptp_poll(struct posix_clock *pc,
- * see ptp_sysfs.c
- */
-
--extern struct device_attribute ptp_dev_attrs[];
-+extern const struct attribute_group *ptp_groups[];
-
- int ptp_cleanup_sysfs(struct ptp_clock *ptp);
-
---- a/drivers/ptp/ptp_sysfs.c
-+++ b/drivers/ptp/ptp_sysfs.c
-@@ -27,36 +27,43 @@ static ssize_t clock_name_show(struct de
- struct ptp_clock *ptp = dev_get_drvdata(dev);
- return snprintf(page, PAGE_SIZE-1, "%s\n", ptp->info->name);
- }
-+static DEVICE_ATTR(clock_name, 0444, clock_name_show, NULL);
-
--#define PTP_SHOW_INT(name) \
--static ssize_t name##_show(struct device *dev, \
-+#define PTP_SHOW_INT(name, var) \
-+static ssize_t var##_show(struct device *dev, \
- struct device_attribute *attr, char *page) \
- { \
- struct ptp_clock *ptp = dev_get_drvdata(dev); \
-- return snprintf(page, PAGE_SIZE-1, "%d\n", ptp->info->name); \
--}
-+ return snprintf(page, PAGE_SIZE-1, "%d\n", ptp->info->var); \
-+} \
-+static DEVICE_ATTR(name, 0444, var##_show, NULL);
-
--PTP_SHOW_INT(max_adj);
--PTP_SHOW_INT(n_alarm);
--PTP_SHOW_INT(n_ext_ts);
--PTP_SHOW_INT(n_per_out);
--PTP_SHOW_INT(pps);
--
--#define PTP_RO_ATTR(_var, _name) { \
-- .attr = { .name = __stringify(_name), .mode = 0444 }, \
-- .show = _var##_show, \
--}
-+PTP_SHOW_INT(max_adjustment, max_adj);
-+PTP_SHOW_INT(n_alarms, n_alarm);
-+PTP_SHOW_INT(n_external_timestamps, n_ext_ts);
-+PTP_SHOW_INT(n_periodic_outputs, n_per_out);
-+PTP_SHOW_INT(pps_available, pps);
-+
-+static struct attribute *ptp_attrs[] = {
-+ &dev_attr_clock_name.attr,
-+ &dev_attr_max_adjustment.attr,
-+ &dev_attr_n_alarms.attr,
-+ &dev_attr_n_external_timestamps.attr,
-+ &dev_attr_n_periodic_outputs.attr,
-+ &dev_attr_pps_available.attr,
-+ NULL,
-+};
-
--struct device_attribute ptp_dev_attrs[] = {
-- PTP_RO_ATTR(clock_name, clock_name),
-- PTP_RO_ATTR(max_adj, max_adjustment),
-- PTP_RO_ATTR(n_alarm, n_alarms),
-- PTP_RO_ATTR(n_ext_ts, n_external_timestamps),
-- PTP_RO_ATTR(n_per_out, n_periodic_outputs),
-- PTP_RO_ATTR(pps, pps_available),
-- __ATTR_NULL,
-+static const struct attribute_group ptp_group = {
-+ .attrs = ptp_attrs,
- };
-
-+const struct attribute_group *ptp_groups[] = {
-+ &ptp_group,
-+ NULL,
-+};
-+
-+
- static ssize_t extts_enable_store(struct device *dev,
- struct device_attribute *attr,
- const char *buf, size_t count)
---- a/drivers/regulator/core.c
-+++ b/drivers/regulator/core.c
-@@ -323,13 +323,14 @@ static ssize_t regulator_uA_show(struct
- }
- static DEVICE_ATTR(microamps, 0444, regulator_uA_show, NULL);
-
--static ssize_t regulator_name_show(struct device *dev,
-- struct device_attribute *attr, char *buf)
-+static ssize_t name_show(struct device *dev, struct device_attribute *attr,
-+ char *buf)
- {
- struct regulator_dev *rdev = dev_get_drvdata(dev);
-
- return sprintf(buf, "%s\n", rdev_get_name(rdev));
- }
-+static DEVICE_ATTR_RO(name);
-
- static ssize_t regulator_print_opmode(char *buf, int mode)
- {
-@@ -489,15 +490,16 @@ static ssize_t regulator_total_uA_show(s
- }
- static DEVICE_ATTR(requested_microamps, 0444, regulator_total_uA_show, NULL);
-
--static ssize_t regulator_num_users_show(struct device *dev,
-- struct device_attribute *attr, char *buf)
-+static ssize_t num_users_show(struct device *dev, struct device_attribute *attr,
-+ char *buf)
- {
- struct regulator_dev *rdev = dev_get_drvdata(dev);
- return sprintf(buf, "%d\n", rdev->use_count);
- }
-+static DEVICE_ATTR_RO(num_users);
-
--static ssize_t regulator_type_show(struct device *dev,
-- struct device_attribute *attr, char *buf)
-+static ssize_t type_show(struct device *dev, struct device_attribute *attr,
-+ char *buf)
- {
- struct regulator_dev *rdev = dev_get_drvdata(dev);
-
-@@ -509,6 +511,7 @@ static ssize_t regulator_type_show(struc
- }
- return sprintf(buf, "unknown\n");
- }
-+static DEVICE_ATTR_RO(type);
-
- static ssize_t regulator_suspend_mem_uV_show(struct device *dev,
- struct device_attribute *attr, char *buf)
-@@ -632,12 +635,13 @@ static DEVICE_ATTR(bypass, 0444,
- * These are the only attributes are present for all regulators.
- * Other attributes are a function of regulator functionality.
- */
--static struct device_attribute regulator_dev_attrs[] = {
-- __ATTR(name, 0444, regulator_name_show, NULL),
-- __ATTR(num_users, 0444, regulator_num_users_show, NULL),
-- __ATTR(type, 0444, regulator_type_show, NULL),
-- __ATTR_NULL,
-+static struct attribute *regulator_dev_attrs[] = {
-+ &dev_attr_name.attr,
-+ &dev_attr_num_users.attr,
-+ &dev_attr_type.attr,
-+ NULL,
- };
-+ATTRIBUTE_GROUPS(regulator_dev);
-
- static void regulator_dev_release(struct device *dev)
- {
-@@ -648,7 +652,7 @@ static void regulator_dev_release(struct
- static struct class regulator_class = {
- .name = "regulator",
- .dev_release = regulator_dev_release,
-- .dev_attrs = regulator_dev_attrs,
-+ .dev_groups = regulator_dev_groups,
- };
-
- /* Calculate the new optimum regulator operating mode based on the new total
---- a/drivers/rtc/rtc-sysfs.c
-+++ b/drivers/rtc/rtc-sysfs.c
-@@ -25,15 +25,14 @@
- */
-
- static ssize_t
--rtc_sysfs_show_name(struct device *dev, struct device_attribute *attr,
-- char *buf)
-+name_show(struct device *dev, struct device_attribute *attr, char *buf)
- {
- return sprintf(buf, "%s\n", to_rtc_device(dev)->name);
- }
-+static DEVICE_ATTR_RO(name);
-
- static ssize_t
--rtc_sysfs_show_date(struct device *dev, struct device_attribute *attr,
-- char *buf)
-+date_show(struct device *dev, struct device_attribute *attr, char *buf)
- {
- ssize_t retval;
- struct rtc_time tm;
-@@ -46,10 +45,10 @@ rtc_sysfs_show_date(struct device *dev,
-
- return retval;
- }
-+static DEVICE_ATTR_RO(date);
-
- static ssize_t
--rtc_sysfs_show_time(struct device *dev, struct device_attribute *attr,
-- char *buf)
-+time_show(struct device *dev, struct device_attribute *attr, char *buf)
- {
- ssize_t retval;
- struct rtc_time tm;
-@@ -62,10 +61,10 @@ rtc_sysfs_show_time(struct device *dev,
-
- return retval;
- }
-+static DEVICE_ATTR_RO(time);
-
- static ssize_t
--rtc_sysfs_show_since_epoch(struct device *dev, struct device_attribute *attr,
-- char *buf)
-+since_epoch_show(struct device *dev, struct device_attribute *attr, char *buf)
- {
- ssize_t retval;
- struct rtc_time tm;
-@@ -79,16 +78,16 @@ rtc_sysfs_show_since_epoch(struct device
-
- return retval;
- }
-+static DEVICE_ATTR_RO(since_epoch);
-
- static ssize_t
--rtc_sysfs_show_max_user_freq(struct device *dev, struct device_attribute *attr,
-- char *buf)
-+max_user_freq_show(struct device *dev, struct device_attribute *attr, char *buf)
- {
- return sprintf(buf, "%d\n", to_rtc_device(dev)->max_user_freq);
- }
-
- static ssize_t
--rtc_sysfs_set_max_user_freq(struct device *dev, struct device_attribute *attr,
-+max_user_freq_store(struct device *dev, struct device_attribute *attr,
- const char *buf, size_t n)
- {
- struct rtc_device *rtc = to_rtc_device(dev);
-@@ -101,6 +100,7 @@ rtc_sysfs_set_max_user_freq(struct devic
-
- return n;
- }
-+static DEVICE_ATTR_RW(max_user_freq);
-
- /**
- * rtc_sysfs_show_hctosys - indicate if the given RTC set the system time
-@@ -109,8 +109,7 @@ rtc_sysfs_set_max_user_freq(struct devic
- * boot or resume event.
- */
- static ssize_t
--rtc_sysfs_show_hctosys(struct device *dev, struct device_attribute *attr,
-- char *buf)
-+hctosys_show(struct device *dev, struct device_attribute *attr, char *buf)
- {
- #ifdef CONFIG_RTC_HCTOSYS_DEVICE
- if (rtc_hctosys_ret == 0 &&
-@@ -121,17 +120,18 @@ rtc_sysfs_show_hctosys(struct device *de
- #endif
- return sprintf(buf, "0\n");
- }
-+static DEVICE_ATTR_RO(hctosys);
-
--static struct device_attribute rtc_attrs[] = {
-- __ATTR(name, S_IRUGO, rtc_sysfs_show_name, NULL),
-- __ATTR(date, S_IRUGO, rtc_sysfs_show_date, NULL),
-- __ATTR(time, S_IRUGO, rtc_sysfs_show_time, NULL),
-- __ATTR(since_epoch, S_IRUGO, rtc_sysfs_show_since_epoch, NULL),
-- __ATTR(max_user_freq, S_IRUGO | S_IWUSR, rtc_sysfs_show_max_user_freq,
-- rtc_sysfs_set_max_user_freq),
-- __ATTR(hctosys, S_IRUGO, rtc_sysfs_show_hctosys, NULL),
-- { },
-+static struct attribute *rtc_attrs[] = {
-+ &dev_attr_name.attr,
-+ &dev_attr_date.attr,
-+ &dev_attr_time.attr,
-+ &dev_attr_since_epoch.attr,
-+ &dev_attr_max_user_freq.attr,
-+ &dev_attr_hctosys.attr,
-+ NULL,
- };
-+ATTRIBUTE_GROUPS(rtc);
-
- static ssize_t
- rtc_sysfs_show_wakealarm(struct device *dev, struct device_attribute *attr,
-@@ -261,5 +261,5 @@ void rtc_sysfs_del_device(struct rtc_dev
-
- void __init rtc_sysfs_init(struct class *rtc_class)
- {
-- rtc_class->dev_attrs = rtc_attrs;
-+ rtc_class->dev_groups = rtc_groups;
- }
---- a/drivers/scsi/osd/osd_uld.c
-+++ b/drivers/scsi/osd/osd_uld.c
-@@ -107,6 +107,7 @@ static ssize_t osdname_show(struct devic
- class_dev);
- return sprintf(buf, "%s\n", ould->odi.osdname);
- }
-+static DEVICE_ATTR_RO(osdname);
-
- static ssize_t systemid_show(struct device *dev, struct device_attribute *attr,
- char *buf)
-@@ -117,17 +118,19 @@ static ssize_t systemid_show(struct devi
- memcpy(buf, ould->odi.systemid, ould->odi.systemid_len);
- return ould->odi.systemid_len;
- }
-+static DEVICE_ATTR_RO(systemid);
-
--static struct device_attribute osd_uld_attrs[] = {
-- __ATTR(osdname, S_IRUGO, osdname_show, NULL),
-- __ATTR(systemid, S_IRUGO, systemid_show, NULL),
-- __ATTR_NULL,
-+static struct attribute *osd_uld_attrs[] = {
-+ &dev_attr_osdname.attr,
-+ &dev_attr_systemid.attr,
-+ NULL,
- };
-+ATTRIBUTE_GROUPS(osd_uld);
-
- static struct class osd_uld_class = {
- .owner = THIS_MODULE,
- .name = "scsi_osd",
-- .dev_attrs = osd_uld_attrs,
-+ .dev_groups = osd_uld_groups,
- };
-
- /*
---- a/drivers/scsi/sd.c
-+++ b/drivers/scsi/sd.c
-@@ -132,8 +132,8 @@ static const char *sd_cache_types[] = {
- };
-
- static ssize_t
--sd_store_cache_type(struct device *dev, struct device_attribute *attr,
-- const char *buf, size_t count)
-+cache_type_store(struct device *dev, struct device_attribute *attr,
-+ const char *buf, size_t count)
- {
- int i, ct = -1, rcd, wce, sp;
- struct scsi_disk *sdkp = to_scsi_disk(dev);
-@@ -199,8 +199,18 @@ sd_store_cache_type(struct device *dev,
- }
-
- static ssize_t
--sd_store_manage_start_stop(struct device *dev, struct device_attribute *attr,
-- const char *buf, size_t count)
-+manage_start_stop_show(struct device *dev, struct device_attribute *attr,
-+ char *buf)
-+{
-+ struct scsi_disk *sdkp = to_scsi_disk(dev);
-+ struct scsi_device *sdp = sdkp->device;
-+
-+ return snprintf(buf, 20, "%u\n", sdp->manage_start_stop);
-+}
-+
-+static ssize_t
-+manage_start_stop_store(struct device *dev, struct device_attribute *attr,
-+ const char *buf, size_t count)
- {
- struct scsi_disk *sdkp = to_scsi_disk(dev);
- struct scsi_device *sdp = sdkp->device;
-@@ -212,10 +222,19 @@ sd_store_manage_start_stop(struct device
-
- return count;
- }
-+static DEVICE_ATTR_RW(manage_start_stop);
-+
-+static ssize_t
-+allow_restart_show(struct device *dev, struct device_attribute *attr, char *buf)
-+{
-+ struct scsi_disk *sdkp = to_scsi_disk(dev);
-+
-+ return snprintf(buf, 40, "%d\n", sdkp->device->allow_restart);
-+}
-
- static ssize_t
--sd_store_allow_restart(struct device *dev, struct device_attribute *attr,
-- const char *buf, size_t count)
-+allow_restart_store(struct device *dev, struct device_attribute *attr,
-+ const char *buf, size_t count)
- {
- struct scsi_disk *sdkp = to_scsi_disk(dev);
- struct scsi_device *sdp = sdkp->device;
-@@ -230,47 +249,30 @@ sd_store_allow_restart(struct device *de
-
- return count;
- }
-+static DEVICE_ATTR_RW(allow_restart);
-
- static ssize_t
--sd_show_cache_type(struct device *dev, struct device_attribute *attr,
-- char *buf)
-+cache_type_show(struct device *dev, struct device_attribute *attr, char *buf)
- {
- struct scsi_disk *sdkp = to_scsi_disk(dev);
- int ct = sdkp->RCD + 2*sdkp->WCE;
-
- return snprintf(buf, 40, "%s\n", sd_cache_types[ct]);
- }
-+static DEVICE_ATTR_RW(cache_type);
-
- static ssize_t
--sd_show_fua(struct device *dev, struct device_attribute *attr, char *buf)
-+FUA_show(struct device *dev, struct device_attribute *attr, char *buf)
- {
- struct scsi_disk *sdkp = to_scsi_disk(dev);
-
- return snprintf(buf, 20, "%u\n", sdkp->DPOFUA);
- }
-+static DEVICE_ATTR_RO(FUA);
-
- static ssize_t
--sd_show_manage_start_stop(struct device *dev, struct device_attribute *attr,
-- char *buf)
--{
-- struct scsi_disk *sdkp = to_scsi_disk(dev);
-- struct scsi_device *sdp = sdkp->device;
--
-- return snprintf(buf, 20, "%u\n", sdp->manage_start_stop);
--}
--
--static ssize_t
--sd_show_allow_restart(struct device *dev, struct device_attribute *attr,
-- char *buf)
--{
-- struct scsi_disk *sdkp = to_scsi_disk(dev);
--
-- return snprintf(buf, 40, "%d\n", sdkp->device->allow_restart);
--}
--
--static ssize_t
--sd_show_protection_type(struct device *dev, struct device_attribute *attr,
-- char *buf)
-+protection_type_show(struct device *dev, struct device_attribute *attr,
-+ char *buf)
- {
- struct scsi_disk *sdkp = to_scsi_disk(dev);
-
-@@ -278,8 +280,8 @@ sd_show_protection_type(struct device *d
- }
-
- static ssize_t
--sd_store_protection_type(struct device *dev, struct device_attribute *attr,
-- const char *buf, size_t count)
-+protection_type_store(struct device *dev, struct device_attribute *attr,
-+ const char *buf, size_t count)
- {
- struct scsi_disk *sdkp = to_scsi_disk(dev);
- unsigned int val;
-@@ -298,10 +300,11 @@ sd_store_protection_type(struct device *
-
- return count;
- }
-+static DEVICE_ATTR_RW(protection_type);
-
- static ssize_t
--sd_show_protection_mode(struct device *dev, struct device_attribute *attr,
-- char *buf)
-+protection_mode_show(struct device *dev, struct device_attribute *attr,
-+ char *buf)
- {
- struct scsi_disk *sdkp = to_scsi_disk(dev);
- struct scsi_device *sdp = sdkp->device;
-@@ -320,24 +323,26 @@ sd_show_protection_mode(struct device *d
-
- return snprintf(buf, 20, "%s%u\n", dix ? "dix" : "dif", dif);
- }
-+static DEVICE_ATTR_RO(protection_mode);
-
- static ssize_t
--sd_show_app_tag_own(struct device *dev, struct device_attribute *attr,
-- char *buf)
-+app_tag_own_show(struct device *dev, struct device_attribute *attr, char *buf)
- {
- struct scsi_disk *sdkp = to_scsi_disk(dev);
-
- return snprintf(buf, 20, "%u\n", sdkp->ATO);
- }
-+static DEVICE_ATTR_RO(app_tag_own);
-
- static ssize_t
--sd_show_thin_provisioning(struct device *dev, struct device_attribute *attr,
-- char *buf)
-+thin_provisioning_show(struct device *dev, struct device_attribute *attr,
-+ char *buf)
- {
- struct scsi_disk *sdkp = to_scsi_disk(dev);
-
- return snprintf(buf, 20, "%u\n", sdkp->lbpme);
- }
-+static DEVICE_ATTR_RO(thin_provisioning);
-
- static const char *lbp_mode[] = {
- [SD_LBP_FULL] = "full",
-@@ -349,8 +354,8 @@ static const char *lbp_mode[] = {
- };
-
- static ssize_t
--sd_show_provisioning_mode(struct device *dev, struct device_attribute *attr,
-- char *buf)
-+provisioning_mode_show(struct device *dev, struct device_attribute *attr,
-+ char *buf)
- {
- struct scsi_disk *sdkp = to_scsi_disk(dev);
-
-@@ -358,8 +363,8 @@ sd_show_provisioning_mode(struct device
- }
-
- static ssize_t
--sd_store_provisioning_mode(struct device *dev, struct device_attribute *attr,
-- const char *buf, size_t count)
-+provisioning_mode_store(struct device *dev, struct device_attribute *attr,
-+ const char *buf, size_t count)
- {
- struct scsi_disk *sdkp = to_scsi_disk(dev);
- struct scsi_device *sdp = sdkp->device;
-@@ -385,10 +390,11 @@ sd_store_provisioning_mode(struct device
-
- return count;
- }
-+static DEVICE_ATTR_RW(provisioning_mode);
-
- static ssize_t
--sd_show_max_medium_access_timeouts(struct device *dev,
-- struct device_attribute *attr, char *buf)
-+max_medium_access_timeouts_show(struct device *dev,
-+ struct device_attribute *attr, char *buf)
- {
- struct scsi_disk *sdkp = to_scsi_disk(dev);
-
-@@ -396,9 +402,9 @@ sd_show_max_medium_access_timeouts(struc
- }
-
- static ssize_t
--sd_store_max_medium_access_timeouts(struct device *dev,
-- struct device_attribute *attr,
-- const char *buf, size_t count)
-+max_medium_access_timeouts_store(struct device *dev,
-+ struct device_attribute *attr, const char *buf,
-+ size_t count)
- {
- struct scsi_disk *sdkp = to_scsi_disk(dev);
- int err;
-@@ -410,10 +416,11 @@ sd_store_max_medium_access_timeouts(stru
-
- return err ? err : count;
- }
-+static DEVICE_ATTR_RW(max_medium_access_timeouts);
-
- static ssize_t
--sd_show_write_same_blocks(struct device *dev, struct device_attribute *attr,
-- char *buf)
-+max_write_same_blocks_show(struct device *dev, struct device_attribute *attr,
-+ char *buf)
- {
- struct scsi_disk *sdkp = to_scsi_disk(dev);
-
-@@ -421,8 +428,8 @@ sd_show_write_same_blocks(struct device
- }
-
- static ssize_t
--sd_store_write_same_blocks(struct device *dev, struct device_attribute *attr,
-- const char *buf, size_t count)
-+max_write_same_blocks_store(struct device *dev, struct device_attribute *attr,
-+ const char *buf, size_t count)
- {
- struct scsi_disk *sdkp = to_scsi_disk(dev);
- struct scsi_device *sdp = sdkp->device;
-@@ -451,35 +458,29 @@ sd_store_write_same_blocks(struct device
-
- return count;
- }
-+static DEVICE_ATTR_RW(max_write_same_blocks);
-
--static struct device_attribute sd_disk_attrs[] = {
-- __ATTR(cache_type, S_IRUGO|S_IWUSR, sd_show_cache_type,
-- sd_store_cache_type),
-- __ATTR(FUA, S_IRUGO, sd_show_fua, NULL),
-- __ATTR(allow_restart, S_IRUGO|S_IWUSR, sd_show_allow_restart,
-- sd_store_allow_restart),
-- __ATTR(manage_start_stop, S_IRUGO|S_IWUSR, sd_show_manage_start_stop,
-- sd_store_manage_start_stop),
-- __ATTR(protection_type, S_IRUGO|S_IWUSR, sd_show_protection_type,
-- sd_store_protection_type),
-- __ATTR(protection_mode, S_IRUGO, sd_show_protection_mode, NULL),
-- __ATTR(app_tag_own, S_IRUGO, sd_show_app_tag_own, NULL),
-- __ATTR(thin_provisioning, S_IRUGO, sd_show_thin_provisioning, NULL),
-- __ATTR(provisioning_mode, S_IRUGO|S_IWUSR, sd_show_provisioning_mode,
-- sd_store_provisioning_mode),
-- __ATTR(max_write_same_blocks, S_IRUGO|S_IWUSR,
-- sd_show_write_same_blocks, sd_store_write_same_blocks),
-- __ATTR(max_medium_access_timeouts, S_IRUGO|S_IWUSR,
-- sd_show_max_medium_access_timeouts,
-- sd_store_max_medium_access_timeouts),
-- __ATTR_NULL,
-+static struct attribute *sd_disk_attrs[] = {
-+ &dev_attr_cache_type.attr,
-+ &dev_attr_FUA.attr,
-+ &dev_attr_allow_restart.attr,
-+ &dev_attr_manage_start_stop.attr,
-+ &dev_attr_protection_type.attr,
-+ &dev_attr_protection_mode.attr,
-+ &dev_attr_app_tag_own.attr,
-+ &dev_attr_thin_provisioning.attr,
-+ &dev_attr_provisioning_mode.attr,
-+ &dev_attr_max_write_same_blocks.attr,
-+ &dev_attr_max_medium_access_timeouts.attr,
-+ NULL,
- };
-+ATTRIBUTE_GROUPS(sd_disk);
-
- static struct class sd_disk_class = {
- .name = "scsi_disk",
- .owner = THIS_MODULE,
- .dev_release = scsi_disk_release,
-- .dev_attrs = sd_disk_attrs,
-+ .dev_groups = sd_disk_groups,
- };
-
- static const struct dev_pm_ops sd_pm_ops = {
---- a/drivers/scsi/st.c
-+++ b/drivers/scsi/st.c
-@@ -82,7 +82,7 @@ static int try_rdio = 1;
- static int try_wdio = 1;
-
- static struct class st_sysfs_class;
--static struct device_attribute st_dev_attrs[];
-+static const struct attribute_group *st_dev_groups[];
-
- MODULE_AUTHOR("Kai Makisara");
- MODULE_DESCRIPTION("SCSI tape (st) driver");
-@@ -4274,7 +4274,7 @@ static void scsi_tape_release(struct kre
-
- static struct class st_sysfs_class = {
- .name = "scsi_tape",
-- .dev_attrs = st_dev_attrs,
-+ .dev_groups = st_dev_groups,
- };
-
- static int __init init_st(void)
-@@ -4408,6 +4408,7 @@ defined_show(struct device *dev, struct
- l = snprintf(buf, PAGE_SIZE, "%d\n", STm->defined);
- return l;
- }
-+static DEVICE_ATTR_RO(defined);
-
- static ssize_t
- default_blksize_show(struct device *dev, struct device_attribute *attr,
-@@ -4419,7 +4420,7 @@ default_blksize_show(struct device *dev,
- l = snprintf(buf, PAGE_SIZE, "%d\n", STm->default_blksize);
- return l;
- }
--
-+static DEVICE_ATTR_RO(default_blksize);
-
- static ssize_t
- default_density_show(struct device *dev, struct device_attribute *attr,
-@@ -4433,6 +4434,7 @@ default_density_show(struct device *dev,
- l = snprintf(buf, PAGE_SIZE, fmt, STm->default_density);
- return l;
- }
-+static DEVICE_ATTR_RO(default_density);
-
- static ssize_t
- default_compression_show(struct device *dev, struct device_attribute *attr,
-@@ -4444,6 +4446,7 @@ default_compression_show(struct device *
- l = snprintf(buf, PAGE_SIZE, "%d\n", STm->default_compression - 1);
- return l;
- }
-+static DEVICE_ATTR_RO(default_compression);
-
- static ssize_t
- options_show(struct device *dev, struct device_attribute *attr, char *buf)
-@@ -4472,15 +4475,17 @@ options_show(struct device *dev, struct
- l = snprintf(buf, PAGE_SIZE, "0x%08x\n", options);
- return l;
- }
-+static DEVICE_ATTR_RO(options);
-
--static struct device_attribute st_dev_attrs[] = {
-- __ATTR_RO(defined),
-- __ATTR_RO(default_blksize),
-- __ATTR_RO(default_density),
-- __ATTR_RO(default_compression),
-- __ATTR_RO(options),
-- __ATTR_NULL,
-+static struct attribute *st_dev_attrs[] = {
-+ &dev_attr_defined.attr,
-+ &dev_attr_default_blksize.attr,
-+ &dev_attr_default_density.attr,
-+ &dev_attr_default_compression.attr,
-+ &dev_attr_options.attr,
-+ NULL,
- };
-+ATTRIBUTE_GROUPS(st_dev);
-
- /* The following functions may be useful for a larger audience. */
- static int sgl_map_user_pages(struct st_buffer *STbp,
---- a/drivers/staging/comedi/comedi_fops.c
-+++ b/drivers/staging/comedi/comedi_fops.c
-@@ -262,7 +262,7 @@ static int resize_async_buffer(struct co
-
- /* sysfs attribute files */
-
--static ssize_t show_max_read_buffer_kb(struct device *csdev,
-+static ssize_t max_read_buffer_kb_show(struct device *csdev,
- struct device_attribute *attr, char *buf)
- {
- unsigned int minor = MINOR(csdev->devt);
-@@ -283,7 +283,7 @@ static ssize_t show_max_read_buffer_kb(s
- return snprintf(buf, PAGE_SIZE, "%i\n", size);
- }
-
--static ssize_t store_max_read_buffer_kb(struct device *csdev,
-+static ssize_t max_read_buffer_kb_store(struct device *csdev,
- struct device_attribute *attr,
- const char *buf, size_t count)
- {
-@@ -314,8 +314,9 @@ static ssize_t store_max_read_buffer_kb(
-
- return err ? err : count;
- }
-+static DEVICE_ATTR_RW(max_read_buffer_kb);
-
--static ssize_t show_read_buffer_kb(struct device *csdev,
-+static ssize_t read_buffer_kb_show(struct device *csdev,
- struct device_attribute *attr, char *buf)
- {
- unsigned int minor = MINOR(csdev->devt);
-@@ -336,7 +337,7 @@ static ssize_t show_read_buffer_kb(struc
- return snprintf(buf, PAGE_SIZE, "%i\n", size);
- }
-
--static ssize_t store_read_buffer_kb(struct device *csdev,
-+static ssize_t read_buffer_kb_store(struct device *csdev,
- struct device_attribute *attr,
- const char *buf, size_t count)
- {
-@@ -367,8 +368,9 @@ static ssize_t store_read_buffer_kb(stru
-
- return err ? err : count;
- }
-+static DEVICE_ATTR_RW(read_buffer_kb);
-
--static ssize_t show_max_write_buffer_kb(struct device *csdev,
-+static ssize_t max_write_buffer_kb_show(struct device *csdev,
- struct device_attribute *attr,
- char *buf)
- {
-@@ -390,7 +392,7 @@ static ssize_t show_max_write_buffer_kb(
- return snprintf(buf, PAGE_SIZE, "%i\n", size);
- }
-
--static ssize_t store_max_write_buffer_kb(struct device *csdev,
-+static ssize_t max_write_buffer_kb_store(struct device *csdev,
- struct device_attribute *attr,
- const char *buf, size_t count)
- {
-@@ -421,8 +423,9 @@ static ssize_t store_max_write_buffer_kb
-
- return err ? err : count;
- }
-+static DEVICE_ATTR_RW(max_write_buffer_kb);
-
--static ssize_t show_write_buffer_kb(struct device *csdev,
-+static ssize_t write_buffer_kb_show(struct device *csdev,
- struct device_attribute *attr, char *buf)
- {
- unsigned int minor = MINOR(csdev->devt);
-@@ -443,7 +446,7 @@ static ssize_t show_write_buffer_kb(stru
- return snprintf(buf, PAGE_SIZE, "%i\n", size);
- }
-
--static ssize_t store_write_buffer_kb(struct device *csdev,
-+static ssize_t write_buffer_kb_store(struct device *csdev,
- struct device_attribute *attr,
- const char *buf, size_t count)
- {
-@@ -474,18 +477,16 @@ static ssize_t store_write_buffer_kb(str
-
- return err ? err : count;
- }
-+static DEVICE_ATTR_RW(write_buffer_kb);
-
--static struct device_attribute comedi_dev_attrs[] = {
-- __ATTR(max_read_buffer_kb, S_IRUGO | S_IWUSR,
-- show_max_read_buffer_kb, store_max_read_buffer_kb),
-- __ATTR(read_buffer_kb, S_IRUGO | S_IWUSR | S_IWGRP,
-- show_read_buffer_kb, store_read_buffer_kb),
-- __ATTR(max_write_buffer_kb, S_IRUGO | S_IWUSR,
-- show_max_write_buffer_kb, store_max_write_buffer_kb),
-- __ATTR(write_buffer_kb, S_IRUGO | S_IWUSR | S_IWGRP,
-- show_write_buffer_kb, store_write_buffer_kb),
-- __ATTR_NULL
-+static struct attribute *comedi_dev_attrs[] = {
-+ &dev_attr_max_read_buffer_kb.attr,
-+ &dev_attr_read_buffer_kb.attr,
-+ &dev_attr_max_write_buffer_kb.attr,
-+ &dev_attr_write_buffer_kb.attr,
-+ NULL,
- };
-+ATTRIBUTE_GROUPS(comedi_dev);
-
- static void comedi_set_subdevice_runflags(struct comedi_subdevice *s,
- unsigned mask, unsigned bits)
-@@ -2554,7 +2555,7 @@ static int __init comedi_init(void)
- return PTR_ERR(comedi_class);
- }
-
-- comedi_class->dev_attrs = comedi_dev_attrs;
-+ comedi_class->dev_groups = comedi_dev_groups;
-
- /* XXX requires /proc interface */
- comedi_proc_init();
--- a/drivers/uio/uio.c
+++ b/drivers/uio/uio.c
@@ -224,38 +224,42 @@ static struct kobj_type portio_attr_type
@@ -2319,949 +56,3 @@ Subject: meta-patch of all of the dev_attr conversions
};
/*
---- a/drivers/video/backlight/backlight.c
-+++ b/drivers/video/backlight/backlight.c
-@@ -103,16 +103,16 @@ static void backlight_generate_event(str
- sysfs_notify(&bd->dev.kobj, NULL, "actual_brightness");
- }
-
--static ssize_t backlight_show_power(struct device *dev,
-- struct device_attribute *attr, char *buf)
-+static ssize_t bl_power_show(struct device *dev, struct device_attribute *attr,
-+ char *buf)
- {
- struct backlight_device *bd = to_backlight_device(dev);
-
- return sprintf(buf, "%d\n", bd->props.power);
- }
-
--static ssize_t backlight_store_power(struct device *dev,
-- struct device_attribute *attr, const char *buf, size_t count)
-+static ssize_t bl_power_store(struct device *dev, struct device_attribute *attr,
-+ const char *buf, size_t count)
- {
- int rc;
- struct backlight_device *bd = to_backlight_device(dev);
-@@ -136,8 +136,9 @@ static ssize_t backlight_store_power(str
-
- return rc;
- }
-+static DEVICE_ATTR_RW(bl_power);
-
--static ssize_t backlight_show_brightness(struct device *dev,
-+static ssize_t brightness_show(struct device *dev,
- struct device_attribute *attr, char *buf)
- {
- struct backlight_device *bd = to_backlight_device(dev);
-@@ -145,7 +146,7 @@ static ssize_t backlight_show_brightness
- return sprintf(buf, "%d\n", bd->props.brightness);
- }
-
--static ssize_t backlight_store_brightness(struct device *dev,
-+static ssize_t brightness_store(struct device *dev,
- struct device_attribute *attr, const char *buf, size_t count)
- {
- int rc;
-@@ -175,24 +176,27 @@ static ssize_t backlight_store_brightnes
-
- return rc;
- }
-+static DEVICE_ATTR_RW(brightness);
-
--static ssize_t backlight_show_type(struct device *dev,
-- struct device_attribute *attr, char *buf)
-+static ssize_t type_show(struct device *dev, struct device_attribute *attr,
-+ char *buf)
- {
- struct backlight_device *bd = to_backlight_device(dev);
-
- return sprintf(buf, "%s\n", backlight_types[bd->props.type]);
- }
-+static DEVICE_ATTR_RO(type);
-
--static ssize_t backlight_show_max_brightness(struct device *dev,
-+static ssize_t max_brightness_show(struct device *dev,
- struct device_attribute *attr, char *buf)
- {
- struct backlight_device *bd = to_backlight_device(dev);
-
- return sprintf(buf, "%d\n", bd->props.max_brightness);
- }
-+static DEVICE_ATTR_RO(max_brightness);
-
--static ssize_t backlight_show_actual_brightness(struct device *dev,
-+static ssize_t actual_brightness_show(struct device *dev,
- struct device_attribute *attr, char *buf)
- {
- int rc = -ENXIO;
-@@ -205,6 +209,7 @@ static ssize_t backlight_show_actual_bri
-
- return rc;
- }
-+static DEVICE_ATTR_RO(actual_brightness);
-
- static struct class *backlight_class;
-
-@@ -247,16 +252,15 @@ static void bl_device_release(struct dev
- kfree(bd);
- }
-
--static struct device_attribute bl_device_attributes[] = {
-- __ATTR(bl_power, 0644, backlight_show_power, backlight_store_power),
-- __ATTR(brightness, 0644, backlight_show_brightness,
-- backlight_store_brightness),
-- __ATTR(actual_brightness, 0444, backlight_show_actual_brightness,
-- NULL),
-- __ATTR(max_brightness, 0444, backlight_show_max_brightness, NULL),
-- __ATTR(type, 0444, backlight_show_type, NULL),
-- __ATTR_NULL,
-+static struct attribute *bl_device_attrs[] = {
-+ &dev_attr_bl_power.attr,
-+ &dev_attr_brightness.attr,
-+ &dev_attr_actual_brightness.attr,
-+ &dev_attr_max_brightness.attr,
-+ &dev_attr_type.attr,
-+ NULL,
- };
-+ATTRIBUTE_GROUPS(bl_device);
-
- /**
- * backlight_force_update - tell the backlight subsystem that hardware state
-@@ -493,7 +497,7 @@ static int __init backlight_class_init(v
- return PTR_ERR(backlight_class);
- }
-
-- backlight_class->dev_attrs = bl_device_attributes;
-+ backlight_class->dev_groups = bl_device_groups;
- backlight_class->pm = &backlight_class_dev_pm_ops;
- return 0;
- }
---- a/drivers/video/backlight/lcd.c
-+++ b/drivers/video/backlight/lcd.c
-@@ -89,7 +89,7 @@ static inline void lcd_unregister_fb(str
- }
- #endif /* CONFIG_FB */
-
--static ssize_t lcd_show_power(struct device *dev, struct device_attribute *attr,
-+static ssize_t lcd_power_show(struct device *dev, struct device_attribute *attr,
- char *buf)
- {
- int rc;
-@@ -105,7 +105,7 @@ static ssize_t lcd_show_power(struct dev
- return rc;
- }
-
--static ssize_t lcd_store_power(struct device *dev,
-+static ssize_t lcd_power_store(struct device *dev,
- struct device_attribute *attr, const char *buf, size_t count)
- {
- int rc;
-@@ -128,8 +128,9 @@ static ssize_t lcd_store_power(struct de
-
- return rc;
- }
-+static DEVICE_ATTR_RW(lcd_power);
-
--static ssize_t lcd_show_contrast(struct device *dev,
-+static ssize_t contrast_show(struct device *dev,
- struct device_attribute *attr, char *buf)
- {
- int rc = -ENXIO;
-@@ -143,7 +144,7 @@ static ssize_t lcd_show_contrast(struct
- return rc;
- }
-
--static ssize_t lcd_store_contrast(struct device *dev,
-+static ssize_t contrast_store(struct device *dev,
- struct device_attribute *attr, const char *buf, size_t count)
- {
- int rc;
-@@ -166,14 +167,16 @@ static ssize_t lcd_store_contrast(struct
-
- return rc;
- }
-+static DEVICE_ATTR_RW(contrast);
-
--static ssize_t lcd_show_max_contrast(struct device *dev,
-+static ssize_t max_contrast_show(struct device *dev,
- struct device_attribute *attr, char *buf)
- {
- struct lcd_device *ld = to_lcd_device(dev);
-
- return sprintf(buf, "%d\n", ld->props.max_contrast);
- }
-+static DEVICE_ATTR_RO(max_contrast);
-
- static struct class *lcd_class;
-
-@@ -183,12 +186,13 @@ static void lcd_device_release(struct de
- kfree(ld);
- }
-
--static struct device_attribute lcd_device_attributes[] = {
-- __ATTR(lcd_power, 0644, lcd_show_power, lcd_store_power),
-- __ATTR(contrast, 0644, lcd_show_contrast, lcd_store_contrast),
-- __ATTR(max_contrast, 0444, lcd_show_max_contrast, NULL),
-- __ATTR_NULL,
-+static struct attribute *lcd_device_attrs[] = {
-+ &dev_attr_lcd_power.attr,
-+ &dev_attr_contrast.attr,
-+ &dev_attr_max_contrast.attr,
-+ NULL,
- };
-+ATTRIBUTE_GROUPS(lcd_device);
-
- /**
- * lcd_device_register - register a new object of lcd_device class.
-@@ -344,7 +348,7 @@ static int __init lcd_class_init(void)
- return PTR_ERR(lcd_class);
- }
-
-- lcd_class->dev_attrs = lcd_device_attributes;
-+ lcd_class->dev_groups = lcd_device_groups;
- return 0;
- }
-
---- a/drivers/video/output.c
-+++ b/drivers/video/output.c
-@@ -32,8 +32,8 @@ MODULE_DESCRIPTION("Display Output Switc
- MODULE_LICENSE("GPL");
- MODULE_AUTHOR("Luming Yu <luming.yu@intel.com>");
-
--static ssize_t video_output_show_state(struct device *dev,
-- struct device_attribute *attr, char *buf)
-+static ssize_t state_show(struct device *dev, struct device_attribute *attr,
-+ char *buf)
- {
- ssize_t ret_size = 0;
- struct output_device *od = to_output_device(dev);
-@@ -42,9 +42,8 @@ static ssize_t video_output_show_state(s
- return ret_size;
- }
-
--static ssize_t video_output_store_state(struct device *dev,
-- struct device_attribute *attr,
-- const char *buf,size_t count)
-+static ssize_t state_store(struct device *dev, struct device_attribute *attr,
-+ const char *buf,size_t count)
- {
- char *endp;
- struct output_device *od = to_output_device(dev);
-@@ -62,6 +61,7 @@ static ssize_t video_output_store_state(
- }
- return count;
- }
-+static DEVICE_ATTR_RW(state);
-
- static void video_output_release(struct device *dev)
- {
-@@ -69,16 +69,16 @@ static void video_output_release(struct
- kfree(od);
- }
-
--static struct device_attribute video_output_attributes[] = {
-- __ATTR(state, 0644, video_output_show_state, video_output_store_state),
-- __ATTR_NULL,
-+static struct attribute *video_output_attrs[] = {
-+ &dev_attr_state.attr,
-+ NULL,
- };
--
-+ATTRIBUTE_GROUPS(video_output);
-
- static struct class video_output_class = {
- .name = "video_output",
- .dev_release = video_output_release,
-- .dev_attrs = video_output_attributes,
-+ .dev_groups = video_output_groups,
- };
-
- struct output_device *video_output_register(const char *name,
---- a/fs/fuse/cuse.c
-+++ b/fs/fuse/cuse.c
-@@ -568,6 +568,7 @@ static ssize_t cuse_class_waiting_show(s
-
- return sprintf(buf, "%d\n", atomic_read(&cc->fc.num_waiting));
- }
-+static DEVICE_ATTR(waiting, S_IFREG | 0400, cuse_class_waiting_show, NULL);
-
- static ssize_t cuse_class_abort_store(struct device *dev,
- struct device_attribute *attr,
-@@ -578,12 +579,14 @@ static ssize_t cuse_class_abort_store(st
- fuse_abort_conn(&cc->fc);
- return count;
- }
-+static DEVICE_ATTR(abort, S_IFREG | 0200, NULL, cuse_class_abort_store);
-
--static struct device_attribute cuse_class_dev_attrs[] = {
-- __ATTR(waiting, S_IFREG | 0400, cuse_class_waiting_show, NULL),
-- __ATTR(abort, S_IFREG | 0200, NULL, cuse_class_abort_store),
-- { }
-+static struct attribute *cuse_class_dev_attrs[] = {
-+ &dev_attr_waiting.attr,
-+ &dev_attr_abort.attr,
-+ NULL,
- };
-+ATTRIBUTE_GROUPS(cuse_class_dev);
-
- static struct miscdevice cuse_miscdev = {
- .minor = MISC_DYNAMIC_MINOR,
-@@ -609,7 +612,7 @@ static int __init cuse_init(void)
- if (IS_ERR(cuse_class))
- return PTR_ERR(cuse_class);
-
-- cuse_class->dev_attrs = cuse_class_dev_attrs;
-+ cuse_class->dev_groups = cuse_class_dev_groups;
-
- rc = misc_register(&cuse_miscdev);
- if (rc) {
---- a/include/linux/pps_kernel.h
-+++ b/include/linux/pps_kernel.h
-@@ -80,7 +80,7 @@ struct pps_device {
- * Global variables
- */
-
--extern struct device_attribute pps_attrs[];
-+extern const struct attribute_group *pps_groups[];
-
- /*
- * Internal functions.
---- a/mm/backing-dev.c
-+++ b/mm/backing-dev.c
-@@ -180,7 +180,8 @@ static ssize_t name##_show(struct device
- struct backing_dev_info *bdi = dev_get_drvdata(dev); \
- \
- return snprintf(page, PAGE_SIZE-1, "%lld\n", (long long)expr); \
--}
-+} \
-+static DEVICE_ATTR_RW(name);
-
- BDI_SHOW(read_ahead_kb, K(bdi->ra_pages))
-
-@@ -231,14 +232,16 @@ static ssize_t stable_pages_required_sho
- return snprintf(page, PAGE_SIZE-1, "%d\n",
- bdi_cap_stable_pages_required(bdi) ? 1 : 0);
- }
-+static DEVICE_ATTR_RO(stable_pages_required);
-
--static struct device_attribute bdi_dev_attrs[] = {
-- __ATTR_RW(read_ahead_kb),
-- __ATTR_RW(min_ratio),
-- __ATTR_RW(max_ratio),
-- __ATTR_RO(stable_pages_required),
-- __ATTR_NULL,
-+static struct attribute *bdi_dev_attrs[] = {
-+ &dev_attr_read_ahead_kb.attr,
-+ &dev_attr_min_ratio.attr,
-+ &dev_attr_max_ratio.attr,
-+ &dev_attr_stable_pages_required.attr,
-+ NULL,
- };
-+ATTRIBUTE_GROUPS(bdi_dev);
-
- static __init int bdi_class_init(void)
- {
-@@ -246,7 +249,7 @@ static __init int bdi_class_init(void)
- if (IS_ERR(bdi_class))
- return PTR_ERR(bdi_class);
-
-- bdi_class->dev_attrs = bdi_dev_attrs;
-+ bdi_class->dev_groups = bdi_dev_groups;
- bdi_debug_init();
- return 0;
- }
---- a/net/core/net-sysfs.c
-+++ b/net/core/net-sysfs.c
-@@ -60,12 +60,19 @@ static ssize_t format_##field(const stru
- { \
- return sprintf(buf, format_string, net->field); \
- } \
--static ssize_t show_##field(struct device *dev, \
-+static ssize_t field##_show(struct device *dev, \
- struct device_attribute *attr, char *buf) \
- { \
- return netdev_show(dev, attr, buf, format_##field); \
--}
-+} \
-
-+#define NETDEVICE_SHOW_RO(field, format_string) \
-+NETDEVICE_SHOW(field, format_string); \
-+static DEVICE_ATTR_RO(field)
-+
-+#define NETDEVICE_SHOW_RW(field, format_string) \
-+NETDEVICE_SHOW(field, format_string); \
-+static DEVICE_ATTR_RW(field)
-
- /* use same locking and permission rules as SIF* ioctl's */
- static ssize_t netdev_store(struct device *dev, struct device_attribute *attr,
-@@ -96,16 +103,16 @@ static ssize_t netdev_store(struct devic
- return ret;
- }
-
--NETDEVICE_SHOW(dev_id, fmt_hex);
--NETDEVICE_SHOW(addr_assign_type, fmt_dec);
--NETDEVICE_SHOW(addr_len, fmt_dec);
--NETDEVICE_SHOW(iflink, fmt_dec);
--NETDEVICE_SHOW(ifindex, fmt_dec);
--NETDEVICE_SHOW(type, fmt_dec);
--NETDEVICE_SHOW(link_mode, fmt_dec);
-+NETDEVICE_SHOW_RO(dev_id, fmt_hex);
-+NETDEVICE_SHOW_RO(addr_assign_type, fmt_dec);
-+NETDEVICE_SHOW_RO(addr_len, fmt_dec);
-+NETDEVICE_SHOW_RO(iflink, fmt_dec);
-+NETDEVICE_SHOW_RO(ifindex, fmt_dec);
-+NETDEVICE_SHOW_RO(type, fmt_dec);
-+NETDEVICE_SHOW_RO(link_mode, fmt_dec);
-
- /* use same locking rules as GIFHWADDR ioctl's */
--static ssize_t show_address(struct device *dev, struct device_attribute *attr,
-+static ssize_t address_show(struct device *dev, struct device_attribute *attr,
- char *buf)
- {
- struct net_device *net = to_net_dev(dev);
-@@ -117,15 +124,17 @@ static ssize_t show_address(struct devic
- read_unlock(&dev_base_lock);
- return ret;
- }
-+static DEVICE_ATTR_RO(address);
-
--static ssize_t show_broadcast(struct device *dev,
-- struct device_attribute *attr, char *buf)
-+static ssize_t broadcast_show(struct device *dev,
-+ struct device_attribute *attr, char *buf)
- {
- struct net_device *net = to_net_dev(dev);
- if (dev_isalive(net))
- return sysfs_format_mac(buf, net->broadcast, net->addr_len);
- return -EINVAL;
- }
-+static DEVICE_ATTR_RO(broadcast);
-
- static int change_carrier(struct net_device *net, unsigned long new_carrier)
- {
-@@ -134,13 +143,13 @@ static int change_carrier(struct net_dev
- return dev_change_carrier(net, (bool) new_carrier);
- }
-
--static ssize_t store_carrier(struct device *dev, struct device_attribute *attr,
-- const char *buf, size_t len)
-+static ssize_t carrier_store(struct device *dev, struct device_attribute *attr,
-+ const char *buf, size_t len)
- {
- return netdev_store(dev, attr, buf, len, change_carrier);
- }
-
--static ssize_t show_carrier(struct device *dev,
-+static ssize_t carrier_show(struct device *dev,
- struct device_attribute *attr, char *buf)
- {
- struct net_device *netdev = to_net_dev(dev);
-@@ -149,8 +158,9 @@ static ssize_t show_carrier(struct devic
- }
- return -EINVAL;
- }
-+static DEVICE_ATTR_RW(carrier);
-
--static ssize_t show_speed(struct device *dev,
-+static ssize_t speed_show(struct device *dev,
- struct device_attribute *attr, char *buf)
- {
- struct net_device *netdev = to_net_dev(dev);
-@@ -167,8 +177,9 @@ static ssize_t show_speed(struct device
- rtnl_unlock();
- return ret;
- }
-+static DEVICE_ATTR_RO(speed);
-
--static ssize_t show_duplex(struct device *dev,
-+static ssize_t duplex_show(struct device *dev,
- struct device_attribute *attr, char *buf)
- {
- struct net_device *netdev = to_net_dev(dev);
-@@ -198,8 +209,9 @@ static ssize_t show_duplex(struct device
- rtnl_unlock();
- return ret;
- }
-+static DEVICE_ATTR_RO(duplex);
-
--static ssize_t show_dormant(struct device *dev,
-+static ssize_t dormant_show(struct device *dev,
- struct device_attribute *attr, char *buf)
- {
- struct net_device *netdev = to_net_dev(dev);
-@@ -209,6 +221,7 @@ static ssize_t show_dormant(struct devic
-
- return -EINVAL;
- }
-+static DEVICE_ATTR_RO(dormant);
-
- static const char *const operstates[] = {
- "unknown",
-@@ -220,7 +233,7 @@ static const char *const operstates[] =
- "up"
- };
-
--static ssize_t show_operstate(struct device *dev,
-+static ssize_t operstate_show(struct device *dev,
- struct device_attribute *attr, char *buf)
- {
- const struct net_device *netdev = to_net_dev(dev);
-@@ -237,35 +250,33 @@ static ssize_t show_operstate(struct dev
-
- return sprintf(buf, "%s\n", operstates[operstate]);
- }
-+static DEVICE_ATTR_RO(operstate);
-
- /* read-write attributes */
--NETDEVICE_SHOW(mtu, fmt_dec);
-
- static int change_mtu(struct net_device *net, unsigned long new_mtu)
- {
- return dev_set_mtu(net, (int) new_mtu);
- }
-
--static ssize_t store_mtu(struct device *dev, struct device_attribute *attr,
-+static ssize_t mtu_store(struct device *dev, struct device_attribute *attr,
- const char *buf, size_t len)
- {
- return netdev_store(dev, attr, buf, len, change_mtu);
- }
--
--NETDEVICE_SHOW(flags, fmt_hex);
-+NETDEVICE_SHOW_RW(mtu, fmt_dec);
-
- static int change_flags(struct net_device *net, unsigned long new_flags)
- {
- return dev_change_flags(net, (unsigned int) new_flags);
- }
-
--static ssize_t store_flags(struct device *dev, struct device_attribute *attr,
-+static ssize_t flags_store(struct device *dev, struct device_attribute *attr,
- const char *buf, size_t len)
- {
- return netdev_store(dev, attr, buf, len, change_flags);
- }
--
--NETDEVICE_SHOW(tx_queue_len, fmt_ulong);
-+NETDEVICE_SHOW_RW(flags, fmt_hex);
-
- static int change_tx_queue_len(struct net_device *net, unsigned long new_len)
- {
-@@ -273,7 +284,7 @@ static int change_tx_queue_len(struct ne
- return 0;
- }
-
--static ssize_t store_tx_queue_len(struct device *dev,
-+static ssize_t tx_queue_len_store(struct device *dev,
- struct device_attribute *attr,
- const char *buf, size_t len)
- {
-@@ -282,8 +293,9 @@ static ssize_t store_tx_queue_len(struct
-
- return netdev_store(dev, attr, buf, len, change_tx_queue_len);
- }
-+NETDEVICE_SHOW_RW(tx_queue_len, fmt_ulong);
-
--static ssize_t store_ifalias(struct device *dev, struct device_attribute *attr,
-+static ssize_t ifalias_store(struct device *dev, struct device_attribute *attr,
- const char *buf, size_t len)
- {
- struct net_device *netdev = to_net_dev(dev);
-@@ -306,7 +318,7 @@ static ssize_t store_ifalias(struct devi
- return ret < 0 ? ret : len;
- }
-
--static ssize_t show_ifalias(struct device *dev,
-+static ssize_t ifalias_show(struct device *dev,
- struct device_attribute *attr, char *buf)
- {
- const struct net_device *netdev = to_net_dev(dev);
-@@ -319,8 +331,7 @@ static ssize_t show_ifalias(struct devic
- rtnl_unlock();
- return ret;
- }
--
--NETDEVICE_SHOW(group, fmt_dec);
-+static DEVICE_ATTR_RW(ifalias);
-
- static int change_group(struct net_device *net, unsigned long new_group)
- {
-@@ -328,35 +339,37 @@ static int change_group(struct net_devic
- return 0;
- }
-
--static ssize_t store_group(struct device *dev, struct device_attribute *attr,
-- const char *buf, size_t len)
-+static ssize_t group_store(struct device *dev, struct device_attribute *attr,
-+ const char *buf, size_t len)
- {
- return netdev_store(dev, attr, buf, len, change_group);
- }
-+NETDEVICE_SHOW(group, fmt_dec);
-+static DEVICE_ATTR(netdev_group, S_IRUGO | S_IWUSR, group_show, group_store);
-
--static struct device_attribute net_class_attributes[] = {
-- __ATTR(addr_assign_type, S_IRUGO, show_addr_assign_type, NULL),
-- __ATTR(addr_len, S_IRUGO, show_addr_len, NULL),
-- __ATTR(dev_id, S_IRUGO, show_dev_id, NULL),
-- __ATTR(ifalias, S_IRUGO | S_IWUSR, show_ifalias, store_ifalias),
-- __ATTR(iflink, S_IRUGO, show_iflink, NULL),
-- __ATTR(ifindex, S_IRUGO, show_ifindex, NULL),
-- __ATTR(type, S_IRUGO, show_type, NULL),
-- __ATTR(link_mode, S_IRUGO, show_link_mode, NULL),
-- __ATTR(address, S_IRUGO, show_address, NULL),
-- __ATTR(broadcast, S_IRUGO, show_broadcast, NULL),
-- __ATTR(carrier, S_IRUGO | S_IWUSR, show_carrier, store_carrier),
-- __ATTR(speed, S_IRUGO, show_speed, NULL),
-- __ATTR(duplex, S_IRUGO, show_duplex, NULL),
-- __ATTR(dormant, S_IRUGO, show_dormant, NULL),
-- __ATTR(operstate, S_IRUGO, show_operstate, NULL),
-- __ATTR(mtu, S_IRUGO | S_IWUSR, show_mtu, store_mtu),
-- __ATTR(flags, S_IRUGO | S_IWUSR, show_flags, store_flags),
-- __ATTR(tx_queue_len, S_IRUGO | S_IWUSR, show_tx_queue_len,
-- store_tx_queue_len),
-- __ATTR(netdev_group, S_IRUGO | S_IWUSR, show_group, store_group),
-- {}
-+static struct attribute *net_class_attrs[] = {
-+ &dev_attr_netdev_group.attr,
-+ &dev_attr_type.attr,
-+ &dev_attr_dev_id.attr,
-+ &dev_attr_iflink.attr,
-+ &dev_attr_ifindex.attr,
-+ &dev_attr_addr_assign_type.attr,
-+ &dev_attr_addr_len.attr,
-+ &dev_attr_link_mode.attr,
-+ &dev_attr_address.attr,
-+ &dev_attr_broadcast.attr,
-+ &dev_attr_speed.attr,
-+ &dev_attr_duplex.attr,
-+ &dev_attr_dormant.attr,
-+ &dev_attr_operstate.attr,
-+ &dev_attr_ifalias.attr,
-+ &dev_attr_carrier.attr,
-+ &dev_attr_mtu.attr,
-+ &dev_attr_flags.attr,
-+ &dev_attr_tx_queue_len.attr,
-+ NULL,
- };
-+ATTRIBUTE_GROUPS(net_class);
-
- /* Show a given an attribute in the statistics group */
- static ssize_t netstat_show(const struct device *d,
-@@ -382,13 +395,13 @@ static ssize_t netstat_show(const struct
-
- /* generate a read-only statistics attribute */
- #define NETSTAT_ENTRY(name) \
--static ssize_t show_##name(struct device *d, \
-+static ssize_t name##_show(struct device *d, \
- struct device_attribute *attr, char *buf) \
- { \
- return netstat_show(d, attr, buf, \
- offsetof(struct rtnl_link_stats64, name)); \
- } \
--static DEVICE_ATTR(name, S_IRUGO, show_##name, NULL)
-+static DEVICE_ATTR_RO(name)
-
- NETSTAT_ENTRY(rx_packets);
- NETSTAT_ENTRY(tx_packets);
-@@ -457,6 +470,9 @@ static struct attribute_group wireless_g
- .attrs = wireless_attrs,
- };
- #endif
-+
-+#else /* CONFIG_SYSFS */
-+#define net_class_groups NULL
- #endif /* CONFIG_SYSFS */
-
- #ifdef CONFIG_RPS
-@@ -1229,9 +1245,7 @@ static const void *net_namespace(struct
- static struct class net_class = {
- .name = "net",
- .dev_release = netdev_release,
--#ifdef CONFIG_SYSFS
-- .dev_attrs = net_class_attributes,
--#endif /* CONFIG_SYSFS */
-+ .dev_groups = net_class_groups,
- .dev_uevent = netdev_uevent,
- .ns_type = &net_ns_type_operations,
- .namespace = net_namespace,
---- a/net/ieee802154/wpan-class.c
-+++ b/net/ieee802154/wpan-class.c
-@@ -36,7 +36,8 @@ static ssize_t name ## _show(struct devi
- ret = snprintf(buf, PAGE_SIZE, format_string "\n", args); \
- mutex_unlock(&phy->pib_lock); \
- return ret; \
--}
-+} \
-+static DEVICE_ATTR_RO(name);
-
- #define MASTER_SHOW(field, format_string) \
- MASTER_SHOW_COMPLEX(field, format_string, phy->field)
-@@ -66,15 +67,17 @@ static ssize_t channels_supported_show(s
- mutex_unlock(&phy->pib_lock);
- return len;
- }
-+static DEVICE_ATTR_RO(channels_supported);
-
--static struct device_attribute pmib_attrs[] = {
-- __ATTR_RO(current_channel),
-- __ATTR_RO(current_page),
-- __ATTR_RO(channels_supported),
-- __ATTR_RO(transmit_power),
-- __ATTR_RO(cca_mode),
-- {},
-+static struct attribute *pmib_attrs[] = {
-+ &dev_attr_current_channel.attr,
-+ &dev_attr_current_page.attr,
-+ &dev_attr_channels_supported.attr,
-+ &dev_attr_transmit_power.attr,
-+ &dev_attr_cca_mode.attr,
-+ NULL,
- };
-+ATTRIBUTE_GROUPS(pmib);
-
- static void wpan_phy_release(struct device *d)
- {
-@@ -85,7 +88,7 @@ static void wpan_phy_release(struct devi
- static struct class wpan_phy_class = {
- .name = "ieee802154",
- .dev_release = wpan_phy_release,
-- .dev_attrs = pmib_attrs,
-+ .dev_groups = pmib_groups,
- };
-
- static DEFINE_MUTEX(wpan_phy_mutex);
---- a/net/rfkill/core.c
-+++ b/net/rfkill/core.c
-@@ -576,14 +576,14 @@ void rfkill_set_states(struct rfkill *rf
- }
- EXPORT_SYMBOL(rfkill_set_states);
-
--static ssize_t rfkill_name_show(struct device *dev,
-- struct device_attribute *attr,
-- char *buf)
-+static ssize_t name_show(struct device *dev, struct device_attribute *attr,
-+ char *buf)
- {
- struct rfkill *rfkill = to_rfkill(dev);
-
- return sprintf(buf, "%s\n", rfkill->name);
- }
-+static DEVICE_ATTR_RO(name);
-
- static const char *rfkill_get_type_str(enum rfkill_type type)
- {
-@@ -611,54 +611,52 @@ static const char *rfkill_get_type_str(e
- }
- }
-
--static ssize_t rfkill_type_show(struct device *dev,
-- struct device_attribute *attr,
-- char *buf)
-+static ssize_t type_show(struct device *dev, struct device_attribute *attr,
-+ char *buf)
- {
- struct rfkill *rfkill = to_rfkill(dev);
-
- return sprintf(buf, "%s\n", rfkill_get_type_str(rfkill->type));
- }
-+static DEVICE_ATTR_RO(type);
-
--static ssize_t rfkill_idx_show(struct device *dev,
-- struct device_attribute *attr,
-- char *buf)
-+static ssize_t index_show(struct device *dev, struct device_attribute *attr,
-+ char *buf)
- {
- struct rfkill *rfkill = to_rfkill(dev);
-
- return sprintf(buf, "%d\n", rfkill->idx);
- }
-+static DEVICE_ATTR_RO(index);
-
--static ssize_t rfkill_persistent_show(struct device *dev,
-- struct device_attribute *attr,
-- char *buf)
-+static ssize_t persistent_show(struct device *dev,
-+ struct device_attribute *attr, char *buf)
- {
- struct rfkill *rfkill = to_rfkill(dev);
-
- return sprintf(buf, "%d\n", rfkill->persistent);
- }
-+static DEVICE_ATTR_RO(persistent);
-
--static ssize_t rfkill_hard_show(struct device *dev,
-- struct device_attribute *attr,
-- char *buf)
-+static ssize_t hard_show(struct device *dev, struct device_attribute *attr,
-+ char *buf)
- {
- struct rfkill *rfkill = to_rfkill(dev);
-
- return sprintf(buf, "%d\n", (rfkill->state & RFKILL_BLOCK_HW) ? 1 : 0 );
- }
-+static DEVICE_ATTR_RO(hard);
-
--static ssize_t rfkill_soft_show(struct device *dev,
-- struct device_attribute *attr,
-- char *buf)
-+static ssize_t soft_show(struct device *dev, struct device_attribute *attr,
-+ char *buf)
- {
- struct rfkill *rfkill = to_rfkill(dev);
-
- return sprintf(buf, "%d\n", (rfkill->state & RFKILL_BLOCK_SW) ? 1 : 0 );
- }
-
--static ssize_t rfkill_soft_store(struct device *dev,
-- struct device_attribute *attr,
-- const char *buf, size_t count)
-+static ssize_t soft_store(struct device *dev, struct device_attribute *attr,
-+ const char *buf, size_t count)
- {
- struct rfkill *rfkill = to_rfkill(dev);
- unsigned long state;
-@@ -680,6 +678,7 @@ static ssize_t rfkill_soft_store(struct
-
- return count;
- }
-+static DEVICE_ATTR_RW(soft);
-
- static u8 user_state_from_blocked(unsigned long state)
- {
-@@ -691,18 +690,16 @@ static u8 user_state_from_blocked(unsign
- return RFKILL_USER_STATE_UNBLOCKED;
- }
-
--static ssize_t rfkill_state_show(struct device *dev,
-- struct device_attribute *attr,
-- char *buf)
-+static ssize_t state_show(struct device *dev, struct device_attribute *attr,
-+ char *buf)
- {
- struct rfkill *rfkill = to_rfkill(dev);
-
- return sprintf(buf, "%d\n", user_state_from_blocked(rfkill->state));
- }
-
--static ssize_t rfkill_state_store(struct device *dev,
-- struct device_attribute *attr,
-- const char *buf, size_t count)
-+static ssize_t state_store(struct device *dev, struct device_attribute *attr,
-+ const char *buf, size_t count)
- {
- struct rfkill *rfkill = to_rfkill(dev);
- unsigned long state;
-@@ -725,32 +722,27 @@ static ssize_t rfkill_state_store(struct
-
- return count;
- }
-+static DEVICE_ATTR_RW(state);
-
--static ssize_t rfkill_claim_show(struct device *dev,
-- struct device_attribute *attr,
-- char *buf)
-+static ssize_t claim_show(struct device *dev, struct device_attribute *attr,
-+ char *buf)
- {
- return sprintf(buf, "%d\n", 0);
- }
-+static DEVICE_ATTR_RO(claim);
-
--static ssize_t rfkill_claim_store(struct device *dev,
-- struct device_attribute *attr,
-- const char *buf, size_t count)
--{
-- return -EOPNOTSUPP;
--}
--
--static struct device_attribute rfkill_dev_attrs[] = {
-- __ATTR(name, S_IRUGO, rfkill_name_show, NULL),
-- __ATTR(type, S_IRUGO, rfkill_type_show, NULL),
-- __ATTR(index, S_IRUGO, rfkill_idx_show, NULL),
-- __ATTR(persistent, S_IRUGO, rfkill_persistent_show, NULL),
-- __ATTR(state, S_IRUGO|S_IWUSR, rfkill_state_show, rfkill_state_store),
-- __ATTR(claim, S_IRUGO|S_IWUSR, rfkill_claim_show, rfkill_claim_store),
-- __ATTR(soft, S_IRUGO|S_IWUSR, rfkill_soft_show, rfkill_soft_store),
-- __ATTR(hard, S_IRUGO, rfkill_hard_show, NULL),
-- __ATTR_NULL
-+static struct attribute *rfkill_dev_attrs[] = {
-+ &dev_attr_name.attr,
-+ &dev_attr_type.attr,
-+ &dev_attr_index.attr,
-+ &dev_attr_persistent.attr,
-+ &dev_attr_state.attr,
-+ &dev_attr_claim.attr,
-+ &dev_attr_soft.attr,
-+ &dev_attr_hard.attr,
-+ NULL,
- };
-+ATTRIBUTE_GROUPS(rfkill_dev);
-
- static void rfkill_release(struct device *dev)
- {
-@@ -830,7 +822,7 @@ static int rfkill_resume(struct device *
- static struct class rfkill_class = {
- .name = "rfkill",
- .dev_release = rfkill_release,
-- .dev_attrs = rfkill_dev_attrs,
-+ .dev_groups = rfkill_dev_groups,
- .dev_uevent = rfkill_dev_uevent,
- .suspend = rfkill_suspend,
- .resume = rfkill_resume,
---- a/net/wireless/sysfs.c
-+++ b/net/wireless/sysfs.c
-@@ -30,7 +30,8 @@ static ssize_t name ## _show(struct devi
- char *buf) \
- { \
- return sprintf(buf, fmt "\n", dev_to_rdev(dev)->member); \
--}
-+} \
-+static DEVICE_ATTR_RO(name)
-
- SHOW_FMT(index, "%d", wiphy_idx);
- SHOW_FMT(macaddress, "%pM", wiphy.perm_addr);
-@@ -42,7 +43,7 @@ static ssize_t name_show(struct device *
- struct wiphy *wiphy = &dev_to_rdev(dev)->wiphy;
- return sprintf(buf, "%s\n", dev_name(&wiphy->dev));
- }
--
-+static DEVICE_ATTR_RO(name);
-
- static ssize_t addresses_show(struct device *dev,
- struct device_attribute *attr,
-@@ -60,15 +61,17 @@ static ssize_t addresses_show(struct dev
-
- return buf - start;
- }
-+static DEVICE_ATTR_RO(addresses);
-
--static struct device_attribute ieee80211_dev_attrs[] = {
-- __ATTR_RO(index),
-- __ATTR_RO(macaddress),
-- __ATTR_RO(address_mask),
-- __ATTR_RO(addresses),
-- __ATTR_RO(name),
-- {}
-+static struct attribute *ieee80211_attrs[] = {
-+ &dev_attr_index.attr,
-+ &dev_attr_macaddress.attr,
-+ &dev_attr_address_mask.attr,
-+ &dev_attr_addresses.attr,
-+ &dev_attr_name.attr,
-+ NULL,
- };
-+ATTRIBUTE_GROUPS(ieee80211);
-
- static void wiphy_dev_release(struct device *dev)
- {
-@@ -144,7 +147,7 @@ struct class ieee80211_class = {
- .name = "ieee80211",
- .owner = THIS_MODULE,
- .dev_release = wiphy_dev_release,
-- .dev_attrs = ieee80211_dev_attrs,
-+ .dev_groups = ieee80211_groups,
- .dev_uevent = wiphy_uevent,
- .suspend = wiphy_suspend,
- .resume = wiphy_resume,