media: utilize new cdev_device_add helper function
authorLogan Gunthorpe <logang@deltatee.com>
Fri, 17 Mar 2017 18:48:18 +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>
Acked-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/media/cec/cec-core.c
drivers/media/media-devnode.c

index 37217e205040e6748b5b8f7d955063d213ec94e6..3163e038a3641397e1ddbfbdc28d881a6bec64cc 100644 (file)
@@ -137,24 +137,17 @@ static int __must_check cec_devnode_register(struct cec_devnode *devnode,
 
        /* Part 2: Initialize and register the character device */
        cdev_init(&devnode->cdev, &cec_devnode_fops);
-       devnode->cdev.kobj.parent = &devnode->dev.kobj;
        devnode->cdev.owner = owner;
 
-       ret = cdev_add(&devnode->cdev, devnode->dev.devt, 1);
-       if (ret < 0) {
-               pr_err("%s: cdev_add failed\n", __func__);
+       ret = cdev_device_add(&devnode->cdev, &devnode->dev);
+       if (ret) {
+               pr_err("%s: cdev_device_add failed\n", __func__);
                goto clr_bit;
        }
 
-       ret = device_add(&devnode->dev);
-       if (ret)
-               goto cdev_del;
-
        devnode->registered = true;
        return 0;
 
-cdev_del:
-       cdev_del(&devnode->cdev);
 clr_bit:
        mutex_lock(&cec_devnode_lock);
        clear_bit(devnode->minor, cec_devnode_nums);
@@ -190,8 +183,7 @@ static void cec_devnode_unregister(struct cec_devnode *devnode)
        devnode->unregistered = true;
        mutex_unlock(&devnode->lock);
 
-       device_del(&devnode->dev);
-       cdev_del(&devnode->cdev);
+       cdev_device_del(&devnode->cdev, &devnode->dev);
        put_device(&devnode->dev);
 }
 
index ae46753c90cbe96a2bb359eca45fa27d9f576284..423248f577b60b7c1db7f9c5471e523c236a93e5 100644 (file)
@@ -248,31 +248,22 @@ int __must_check media_devnode_register(struct media_device *mdev,
        dev_set_name(&devnode->dev, "media%d", devnode->minor);
        device_initialize(&devnode->dev);
 
-       /* Part 2: Initialize and register the character device */
+       /* Part 2: Initialize the character device */
        cdev_init(&devnode->cdev, &media_devnode_fops);
        devnode->cdev.owner = owner;
-       devnode->cdev.kobj.parent = &devnode->dev.kobj;
 
-       ret = cdev_add(&devnode->cdev, MKDEV(MAJOR(media_dev_t), devnode->minor), 1);
+       /* Part 3: Add the media and char device */
+       ret = cdev_device_add(&devnode->cdev, &devnode->dev);
        if (ret < 0) {
-               pr_err("%s: cdev_add failed\n", __func__);
+               pr_err("%s: cdev_device_add failed\n", __func__);
                goto cdev_add_error;
        }
 
-       /* Part 3: Add the media device */
-       ret = device_add(&devnode->dev);
-       if (ret < 0) {
-               pr_err("%s: device_add failed\n", __func__);
-               goto device_add_error;
-       }
-
        /* Part 4: Activate this minor. The char device can now be used. */
        set_bit(MEDIA_FLAG_REGISTERED, &devnode->flags);
 
        return 0;
 
-device_add_error:
-       cdev_del(&devnode->cdev);
 cdev_add_error:
        mutex_lock(&media_devnode_lock);
        clear_bit(devnode->minor, media_devnode_nums);
@@ -298,9 +289,8 @@ void media_devnode_unregister(struct media_devnode *devnode)
 {
        mutex_lock(&media_devnode_lock);
        /* Delete the cdev on this minor as well */
-       cdev_del(&devnode->cdev);
+       cdev_device_del(&devnode->cdev, &devnode->dev);
        mutex_unlock(&media_devnode_lock);
-       device_del(&devnode->dev);
        devnode->media_dev = NULL;
        put_device(&devnode->dev);
 }