USB: trancevibrator: convert to use dev_groups
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 6 Aug 2019 14:45:00 +0000 (16:45 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 9 Aug 2019 05:55:45 +0000 (07:55 +0200)
USB drivers now support the ability for the driver core to handle the
creation and removal of device-specific sysfs files in a race-free
manner.  Take advantage of that by converting the driver to use this by
moving the sysfs attributes into a group and assigning the dev_groups
pointer to it.

Cc: Ding Xiang <dingxiang@cmss.chinamobile.com>
Link: https://lore.kernel.org/r/20190806144502.17792-11-gregkh@linuxfoundation.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/misc/trancevibrator.c

index ac357ce..a3dfc77 100644 (file)
@@ -71,9 +71,14 @@ static ssize_t speed_store(struct device *dev, struct device_attribute *attr,
        }
        return count;
 }
-
 static DEVICE_ATTR_RW(speed);
 
+static struct attribute *tv_attrs[] = {
+       &dev_attr_speed.attr,
+       NULL,
+};
+ATTRIBUTE_GROUPS(tv);
+
 static int tv_probe(struct usb_interface *interface,
                    const struct usb_device_id *id)
 {
@@ -89,15 +94,9 @@ static int tv_probe(struct usb_interface *interface,
 
        dev->udev = usb_get_dev(udev);
        usb_set_intfdata(interface, dev);
-       retval = device_create_file(&interface->dev, &dev_attr_speed);
-       if (retval)
-               goto error_create_file;
 
        return 0;
 
-error_create_file:
-       usb_put_dev(udev);
-       usb_set_intfdata(interface, NULL);
 error:
        kfree(dev);
        return retval;
@@ -108,7 +107,6 @@ static void tv_disconnect(struct usb_interface *interface)
        struct trancevibrator *dev;
 
        dev = usb_get_intfdata (interface);
-       device_remove_file(&interface->dev, &dev_attr_speed);
        usb_set_intfdata(interface, NULL);
        usb_put_dev(dev->udev);
        kfree(dev);
@@ -120,6 +118,7 @@ static struct usb_driver tv_driver = {
        .probe =        tv_probe,
        .disconnect =   tv_disconnect,
        .id_table =     id_table,
+       .dev_groups =   tv_groups,
 };
 
 module_usb_driver(tv_driver);