TODO
diff --git a/drivers/gpu/drm/omapdrm/dss/dsi.c b/drivers/gpu/drm/omapdrm/dss/dsi.c
index 9723b2a..dce5d03 100644
--- a/drivers/gpu/drm/omapdrm/dss/dsi.c
+++ b/drivers/gpu/drm/omapdrm/dss/dsi.c
@@ -5523,8 +5523,12 @@ static int dsi_bind(struct device *dev, struct device *master, void *data)
 	dsi->dss = dss;
 	dsi->drm_dev = drm_dev;
 
-	drm_encoder_init(drm_dev, encoder, &omap_dsi_encoder_funcs,
+	r = drm_encoder_init(drm_dev, encoder, &omap_dsi_encoder_funcs,
 			 DRM_MODE_ENCODER_DSI, NULL);
+	if (r) {
+		dev_err(dev, "Failed to initialize encoder with drm\n");
+		return r;
+	}
 	drm_encoder_helper_add(encoder, &omap_dsi_encoder_helper_funcs);
 
 	connector->polled = DRM_CONNECTOR_POLL_HPD;
diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c
index 4861daf..568579d 100644
--- a/drivers/gpu/drm/omapdrm/omap_drv.c
+++ b/drivers/gpu/drm/omapdrm/omap_drv.c
@@ -237,8 +237,10 @@ static int omap_modeset_init(struct drm_device *dev)
 	int ret;
 	u32 plane_crtc_mask;
 
+#if 0
 	if (!omapdss_stack_is_ready())
 		return -EPROBE_DEFER;
+#endif
 
 	drm_mode_config_init(dev);
 
@@ -246,6 +248,10 @@ static int omap_modeset_init(struct drm_device *dev)
 	if (ret < 0)
 		return ret;
 
+	ret = dss_bind_components(priv->dss, dev);
+	if (ret)
+		return ret;
+
 	/*
 	 * This function creates exactly one connector, encoder, crtc,
 	 * and primary plane per each connected dss-device. Each
@@ -589,10 +595,6 @@ static int omapdrm_init(struct omap_drm_private *priv, struct device *dev)
 	priv->dispc = dispc_get_dispc(priv->dss);
 	priv->dispc_ops = dispc_get_ops(priv->dss);
 
-	ret = dss_bind_components(priv->dss, ddev);
-	if (ret)
-		goto err_ddev_deinit;
-
 	omap_crtc_pre_init(priv);
 
 	soc = soc_device_match(omapdrm_soc_devices);
@@ -652,9 +654,8 @@ static int omapdrm_init(struct omap_drm_private *priv, struct device *dev)
 	omap_gem_deinit(ddev);
 	destroy_workqueue(priv->wq);
 	omap_disconnect_pipelines(ddev);
-	omap_crtc_pre_uninit(priv);
 	dss_unbind_components(priv->dss, ddev);
-err_ddev_deinit:
+	omap_crtc_pre_uninit(priv);
 	drm_dev_put(ddev);
 	return ret;
 }
@@ -682,10 +683,11 @@ static void omapdrm_cleanup(struct omap_drm_private *priv)
 	destroy_workqueue(priv->wq);
 
 	omap_disconnect_pipelines(ddev);
-	omap_crtc_pre_uninit(priv);
 
 	dss_unbind_components(priv->dss, ddev);
 
+	omap_crtc_pre_uninit(priv);
+
 	drm_dev_put(ddev);
 }