if (dev->driver->unload)
                dev->driver->unload(dev);
  err_primary_node:
-       drm_put_minor(dev->primary);
+       drm_unplug_minor(dev->primary);
  err_render_node:
-       drm_put_minor(dev->render);
+       drm_unplug_minor(dev->render);
  err_control_node:
-       drm_put_minor(dev->control);
+       drm_unplug_minor(dev->control);
 -err_agp:
 -      if (dev->driver->bus->agp_destroy)
 -              dev->driver->bus->agp_destroy(dev);
  out_unlock:
        mutex_unlock(&drm_global_mutex);
        return ret;
 
         */
        imxdrm->drm->vblank_disable_allowed = true;
  
-       if (!imx_drm_device_get())
+       if (!imx_drm_device_get()) {
                ret = -EINVAL;
+               goto err_vblank;
+       }
  
 +      platform_set_drvdata(drm->platformdev, drm);
+       mutex_unlock(&imxdrm->mutex);
+       return 0;
  
-       ret = 0;
- 
- err_init:
+ err_vblank:
+       drm_vblank_cleanup(drm);
+ err_kms:
+       drm_kms_helper_poll_fini(drm);
+       drm_mode_config_cleanup(drm);
        mutex_unlock(&imxdrm->mutex);
  
        return ret;