Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5b680403 authored by Sean Paul's avatar Sean Paul
Browse files

drm/rockchip: Enable vblank without event



vblank should be enabled regardless of whether an event
is expected back. This is especially important for a cursor
plane.

Reviewed-by: default avatarYakir Yang <ykk@rock-chips.com>
Tested-by: default avatarYakir Yang <ykk@rock-chip.com>
Signed-off-by: default avatarSean Paul <seanpaul@chromium.org>
parent d761b2df
Loading
Loading
Loading
Loading
+10 −5
Original line number Diff line number Diff line
@@ -110,6 +110,7 @@ struct vop {
	struct device *dev;
	struct drm_device *drm_dev;
	bool is_enabled;
	bool vblank_active;

	/* mutex vsync_ work */
	struct mutex vsync_mutex;
@@ -1090,10 +1091,11 @@ static void vop_crtc_atomic_begin(struct drm_crtc *crtc,
	struct vop *vop = to_vop(crtc);

	spin_lock_irq(&crtc->dev->event_lock);
	if (crtc->state->event) {
	vop->vblank_active = true;
	WARN_ON(drm_crtc_vblank_get(crtc) != 0);
	WARN_ON(vop->event);

	if (crtc->state->event) {
		vop->event = crtc->state->event;
		crtc->state->event = NULL;
	}
@@ -1180,12 +1182,14 @@ static void vop_handle_vblank(struct vop *vop)

	spin_lock_irqsave(&drm->event_lock, flags);
	if (vop->event) {

		drm_crtc_send_vblank_event(crtc, vop->event);
		drm_crtc_vblank_put(crtc);
		vop->event = NULL;

	}
	if (vop->vblank_active) {
		vop->vblank_active = false;
		drm_crtc_vblank_put(crtc);
	}
	spin_unlock_irqrestore(&drm->event_lock, flags);

	if (!completion_done(&vop->wait_update_complete))
@@ -1455,6 +1459,7 @@ static int vop_initial(struct vop *vop)
	clk_disable(vop->aclk);

	vop->is_enabled = false;
	vop->vblank_active = false;

	return 0;