drm: Don't swallow error codes in drm_dev_alloc()
[cascardo/linux.git] / drivers / gpu / drm / mediatek / mtk_drm_drv.c
index eebb7d8..cf83f65 100644 (file)
@@ -61,10 +61,27 @@ static void mtk_atomic_complete(struct mtk_drm_private *private,
 
        mtk_atomic_wait_for_fences(state);
 
+       /*
+        * Mediatek drm supports runtime PM, so plane registers cannot be
+        * written when their crtc is disabled.
+        *
+        * The comment for drm_atomic_helper_commit states:
+        *     For drivers supporting runtime PM the recommended sequence is
+        *
+        *     drm_atomic_helper_commit_modeset_disables(dev, state);
+        *     drm_atomic_helper_commit_modeset_enables(dev, state);
+        *     drm_atomic_helper_commit_planes(dev, state,
+        *                                     DRM_PLANE_COMMIT_ACTIVE_ONLY);
+        *
+        * See the kerneldoc entries for these three functions for more details.
+        */
        drm_atomic_helper_commit_modeset_disables(drm, state);
-       drm_atomic_helper_commit_planes(drm, state, false);
        drm_atomic_helper_commit_modeset_enables(drm, state);
+       drm_atomic_helper_commit_planes(drm, state,
+                                       DRM_PLANE_COMMIT_ACTIVE_ONLY);
+
        drm_atomic_helper_wait_for_vblanks(drm, state);
+
        drm_atomic_helper_cleanup_planes(drm, state);
        drm_atomic_state_free(state);
 }
@@ -277,8 +294,8 @@ static int mtk_drm_bind(struct device *dev)
        int ret;
 
        drm = drm_dev_alloc(&mtk_drm_driver, dev);
-       if (!drm)
-               return -ENOMEM;
+       if (IS_ERR(drm))
+               return PTR_ERR(drm);
 
        drm->dev_private = private;
        private->drm = drm;