Merge tag 'hwmon-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck...
[firefly-linux-kernel-4.4.55.git] / drivers / s390 / char / vmlogrdr.c
index 524d988d89dd4c064cef8839370c692930d12352..c131bc40f96268a7a9163681a579a3a0a843dede 100644 (file)
@@ -1,5 +1,4 @@
 /*
- * drivers/s390/char/vmlogrdr.c
  *     character device driver for reading z/VM system service records
  *
  *
@@ -656,10 +655,19 @@ static ssize_t vmlogrdr_recording_status_show(struct device_driver *driver,
        len = strlen(buf);
        return len;
 }
-
-
 static DRIVER_ATTR(recording_status, 0444, vmlogrdr_recording_status_show,
                   NULL);
+static struct attribute *vmlogrdr_drv_attrs[] = {
+       &driver_attr_recording_status.attr,
+       NULL,
+};
+static struct attribute_group vmlogrdr_drv_attr_group = {
+       .attrs = vmlogrdr_drv_attrs,
+};
+static const struct attribute_group *vmlogrdr_drv_attr_groups[] = {
+       &vmlogrdr_drv_attr_group,
+       NULL,
+};
 
 static struct attribute *vmlogrdr_attrs[] = {
        &dev_attr_autopurge.attr,
@@ -668,6 +676,13 @@ static struct attribute *vmlogrdr_attrs[] = {
        &dev_attr_recording.attr,
        NULL,
 };
+static struct attribute_group vmlogrdr_attr_group = {
+       .attrs = vmlogrdr_attrs,
+};
+static const struct attribute_group *vmlogrdr_attr_groups[] = {
+       &vmlogrdr_attr_group,
+       NULL,
+};
 
 static int vmlogrdr_pm_prepare(struct device *dev)
 {
@@ -692,18 +707,14 @@ static const struct dev_pm_ops vmlogrdr_pm_ops = {
        .prepare = vmlogrdr_pm_prepare,
 };
 
-static struct attribute_group vmlogrdr_attr_group = {
-       .attrs = vmlogrdr_attrs,
-};
-
 static struct class *vmlogrdr_class;
 static struct device_driver vmlogrdr_driver = {
        .name = "vmlogrdr",
        .bus  = &iucv_bus,
        .pm = &vmlogrdr_pm_ops,
+       .groups = vmlogrdr_drv_attr_groups,
 };
 
-
 static int vmlogrdr_register_driver(void)
 {
        int ret;
@@ -717,21 +728,14 @@ static int vmlogrdr_register_driver(void)
        if (ret)
                goto out_iucv;
 
-       ret = driver_create_file(&vmlogrdr_driver,
-                                &driver_attr_recording_status);
-       if (ret)
-               goto out_driver;
-
        vmlogrdr_class = class_create(THIS_MODULE, "vmlogrdr");
        if (IS_ERR(vmlogrdr_class)) {
                ret = PTR_ERR(vmlogrdr_class);
                vmlogrdr_class = NULL;
-               goto out_attr;
+               goto out_driver;
        }
        return 0;
 
-out_attr:
-       driver_remove_file(&vmlogrdr_driver, &driver_attr_recording_status);
 out_driver:
        driver_unregister(&vmlogrdr_driver);
 out_iucv:
@@ -745,7 +749,6 @@ static void vmlogrdr_unregister_driver(void)
 {
        class_destroy(vmlogrdr_class);
        vmlogrdr_class = NULL;
-       driver_remove_file(&vmlogrdr_driver, &driver_attr_recording_status);
        driver_unregister(&vmlogrdr_driver);
        iucv_unregister(&vmlogrdr_iucv_handler, 1);
 }
@@ -762,6 +765,7 @@ static int vmlogrdr_register_device(struct vmlogrdr_priv_t *priv)
                dev->bus = &iucv_bus;
                dev->parent = iucv_root;
                dev->driver = &vmlogrdr_driver;
+               dev->groups = vmlogrdr_attr_groups;
                dev_set_drvdata(dev, priv);
                /*
                 * The release function could be called after the
@@ -779,11 +783,6 @@ static int vmlogrdr_register_device(struct vmlogrdr_priv_t *priv)
                return ret;
        }
 
-       ret = sysfs_create_group(&dev->kobj, &vmlogrdr_attr_group);
-       if (ret) {
-               device_unregister(dev);
-               return ret;
-       }
        priv->class_device = device_create(vmlogrdr_class, dev,
                                           MKDEV(vmlogrdr_major,
                                                 priv->minor_num),
@@ -791,7 +790,6 @@ static int vmlogrdr_register_device(struct vmlogrdr_priv_t *priv)
        if (IS_ERR(priv->class_device)) {
                ret = PTR_ERR(priv->class_device);
                priv->class_device=NULL;
-               sysfs_remove_group(&dev->kobj, &vmlogrdr_attr_group);
                device_unregister(dev);
                return ret;
        }
@@ -804,7 +802,6 @@ static int vmlogrdr_unregister_device(struct vmlogrdr_priv_t *priv)
 {
        device_destroy(vmlogrdr_class, MKDEV(vmlogrdr_major, priv->minor_num));
        if (priv->device != NULL) {
-               sysfs_remove_group(&priv->device->kobj, &vmlogrdr_attr_group);
                device_unregister(priv->device);
                priv->device=NULL;
        }