gpiolib: utilize new cdev_device_add helper function
authorLogan Gunthorpe <logang@deltatee.com>
Fri, 17 Mar 2017 18:48:12 +0000 (12:48 -0600)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 21 Mar 2017 05:44:33 +0000 (06:44 +0100)
Replace the open coded registration of the cdev and dev with the
new device_add_cdev() helper. The helper replaces a common pattern by
taking the proper reference against the parent device and adding both
the cdev and the device.

Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/gpio/gpiolib.c

index 8b4d721d6d6342cbc226b719f60a8c99d826a99b..3ce2a27ee78fa6fb07a2ca084464b306c7f27a57 100644 (file)
@@ -1035,18 +1035,14 @@ static int gpiochip_setup_dev(struct gpio_device *gdev)
 
        cdev_init(&gdev->chrdev, &gpio_fileops);
        gdev->chrdev.owner = THIS_MODULE;
-       gdev->chrdev.kobj.parent = &gdev->dev.kobj;
        gdev->dev.devt = MKDEV(MAJOR(gpio_devt), gdev->id);
-       status = cdev_add(&gdev->chrdev, gdev->dev.devt, 1);
-       if (status < 0)
-               chip_warn(gdev->chip, "failed to add char device %d:%d\n",
-                         MAJOR(gpio_devt), gdev->id);
-       else
-               chip_dbg(gdev->chip, "added GPIO chardev (%d:%d)\n",
-                        MAJOR(gpio_devt), gdev->id);
-       status = device_add(&gdev->dev);
+
+       status = cdev_device_add(&gdev->chrdev, &gdev->dev);
        if (status)
-               goto err_remove_chardev;
+               return status;
+
+       chip_dbg(gdev->chip, "added GPIO chardev (%d:%d)\n",
+                MAJOR(gpio_devt), gdev->id);
 
        status = gpiochip_sysfs_register(gdev);
        if (status)
@@ -1061,9 +1057,7 @@ static int gpiochip_setup_dev(struct gpio_device *gdev)
        return 0;
 
 err_remove_device:
-       device_del(&gdev->dev);
-err_remove_chardev:
-       cdev_del(&gdev->chrdev);
+       cdev_device_del(&gdev->chrdev, &gdev->dev);
        return status;
 }
 
@@ -1347,8 +1341,7 @@ void gpiochip_remove(struct gpio_chip *chip)
         * be removed, else it will be dangling until the last user is
         * gone.
         */
-       cdev_del(&gdev->chrdev);
-       device_del(&gdev->dev);
+       cdev_device_del(&gdev->chrdev, &gdev->dev);
        put_device(&gdev->dev);
 }
 EXPORT_SYMBOL_GPL(gpiochip_remove);