|
@@ -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);
|