diff options
| -rw-r--r-- | drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c index c01a380e3bb9..12854ac9d542 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c | |||
| @@ -499,10 +499,25 @@ err_disable_hclk: | |||
| 499 | static void vop_crtc_disable(struct drm_crtc *crtc) | 499 | static void vop_crtc_disable(struct drm_crtc *crtc) |
| 500 | { | 500 | { |
| 501 | struct vop *vop = to_vop(crtc); | 501 | struct vop *vop = to_vop(crtc); |
| 502 | int i; | ||
| 502 | 503 | ||
| 503 | if (!vop->is_enabled) | 504 | if (!vop->is_enabled) |
| 504 | return; | 505 | return; |
| 505 | 506 | ||
| 507 | /* | ||
| 508 | * We need to make sure that all windows are disabled before we | ||
| 509 | * disable that crtc. Otherwise we might try to scan from a destroyed | ||
| 510 | * buffer later. | ||
| 511 | */ | ||
| 512 | for (i = 0; i < vop->data->win_size; i++) { | ||
| 513 | struct vop_win *vop_win = &vop->win[i]; | ||
| 514 | const struct vop_win_data *win = vop_win->data; | ||
| 515 | |||
| 516 | spin_lock(&vop->reg_lock); | ||
| 517 | VOP_WIN_SET(vop, win, enable, 0); | ||
| 518 | spin_unlock(&vop->reg_lock); | ||
| 519 | } | ||
| 520 | |||
| 506 | drm_crtc_vblank_off(crtc); | 521 | drm_crtc_vblank_off(crtc); |
| 507 | 522 | ||
| 508 | /* | 523 | /* |
