Merge airlied/drm-next into drm-misc-next
[linux-2.6-block.git] / drivers / gpu / drm / mediatek / mtk_drm_drv.c
index 41d2cffe953e59f220eb53de2821583d6211e7bc..c8163525d444f191e6fd7ffc9405850b1530b165 100644 (file)
@@ -48,11 +48,11 @@ static void mtk_atomic_schedule(struct mtk_drm_private *private,
 static void mtk_atomic_wait_for_fences(struct drm_atomic_state *state)
 {
        struct drm_plane *plane;
-       struct drm_plane_state *plane_state;
+       struct drm_plane_state *new_plane_state;
        int i;
 
-       for_each_plane_in_state(state, plane, plane_state, i)
-               mtk_fb_wait(plane->state->fb);
+       for_each_new_plane_in_state(state, plane, new_plane_state, i)
+               mtk_fb_wait(new_plane_state->fb);
 }
 
 static void mtk_atomic_complete(struct mtk_drm_private *private,
@@ -109,7 +109,12 @@ static int mtk_atomic_commit(struct drm_device *drm,
        mutex_lock(&private->commit.lock);
        flush_work(&private->commit.work);
 
-       drm_atomic_helper_swap_state(state, true);
+       ret = drm_atomic_helper_swap_state(state, true);
+       if (ret) {
+               mutex_unlock(&private->commit.lock);
+               drm_atomic_helper_cleanup_planes(drm, state);
+               return ret;
+       }
 
        drm_atomic_state_get(state);
        if (async)
@@ -266,7 +271,6 @@ static void mtk_drm_kms_deinit(struct drm_device *drm)
 {
        drm_kms_helper_poll_fini(drm);
 
-       drm_vblank_cleanup(drm);
        component_unbind_all(drm->dev, drm);
        drm_mode_config_cleanup(drm);
 }