struct malidp_drm *malidp = drm_to_malidp(drm);
        struct malidp_hw_device *hwdev = malidp->dev;
 
-       drm_mode_config_init(drm);
+       ret = drmm_mode_config_init(drm);
+       if (ret)
+               goto out;
 
        drm->mode_config.min_width = hwdev->min_line_size;
        drm->mode_config.min_height = hwdev->min_line_size;
 
        ret = malidp_crtc_init(drm);
        if (ret)
-               goto crtc_fail;
+               goto out;
 
        ret = malidp_mw_connector_init(drm);
        if (ret)
-               goto crtc_fail;
-
-       return 0;
+               goto out;
 
-crtc_fail:
-       drm_mode_config_cleanup(drm);
+out:
        return ret;
 }
 
-static void malidp_fini(struct drm_device *drm)
-{
-       drm_mode_config_cleanup(drm);
-}
-
 static int malidp_irq_init(struct platform_device *pdev)
 {
        int irq_de, irq_se, ret = 0;
 bind_fail:
        of_node_put(malidp->crtc.port);
        malidp->crtc.port = NULL;
-       malidp_fini(drm);
 query_hw_fail:
        pm_runtime_put(dev);
        if (pm_runtime_enabled(dev))
        component_unbind_all(dev, drm);
        of_node_put(malidp->crtc.port);
        malidp->crtc.port = NULL;
-       malidp_fini(drm);
        pm_runtime_put(dev);
        if (pm_runtime_enabled(dev))
                pm_runtime_disable(dev);