static void rvin_group_cleanup(struct rvin_group *group)
 {
-       media_device_unregister(&group->mdev);
        media_device_cleanup(&group->mdev);
        mutex_destroy(&group->lock);
 }
        struct media_device *mdev = &group->mdev;
        const struct of_device_id *match;
        struct device_node *np;
-       int ret;
 
        mutex_init(&group->lock);
 
 
        media_device_init(mdev);
 
-       ret = media_device_register(&group->mdev);
-       if (ret)
-               rvin_group_cleanup(group);
-
-       return ret;
+       return 0;
 }
 
 static void rvin_group_release(struct kref *kref)
        unsigned int i;
        int ret;
 
+       ret = media_device_register(&vin->group->mdev);
+       if (ret)
+               return ret;
+
        ret = v4l2_device_register_subdev_nodes(&vin->v4l2_dev);
        if (ret) {
                vin_err(vin, "Failed to register subdev nodes\n");
        }
 
        mutex_unlock(&vin->group->lock);
+
+       media_device_unregister(&vin->group->mdev);
 }
 
 static int rvin_group_notify_bound(struct v4l2_async_notifier *notifier,