Commit 291257cf authored by Inki Dae's avatar Inki Dae
Browse files

drm/exynos: support drm_wait_vblank feature for VIDI



this patch adds drm_wait_vblank support to Virtual Display module
so user can use DRM_IOCT_WAIT_VBLANK ioctl with this patch.
for this, you should set _DRM_VBLANK_EXYNOS_VIDI flags to
vblwait->request.type

Signed-off-by: default avatarInki Dae <inki.dae@samsung.com>
Signed-off-by: default avatarKyungmin Park <kyungmin.park@samsung.com>
parent 32aeab17
Loading
Loading
Loading
Loading
+21 −1
Original line number Diff line number Diff line
@@ -56,6 +56,7 @@ struct vidi_context {
	unsigned int			connected;
	bool				vblank_on;
	bool				suspended;
	bool				direct_vblank;
	struct work_struct		work;
	struct mutex			lock;
};
@@ -224,6 +225,15 @@ static int vidi_enable_vblank(struct device *dev)
	if (!test_and_set_bit(0, &ctx->irq_flags))
		ctx->vblank_on = true;

	ctx->direct_vblank = true;

	/*
	 * in case of page flip request, vidi_finish_pageflip function
	 * will not be called because direct_vblank is true and then
	 * that function will be called by overlay_ops->commit callback
	 */
	schedule_work(&ctx->work);

	return 0;
}

@@ -425,7 +435,17 @@ static void vidi_fake_vblank_handler(struct work_struct *work)
	/* refresh rate is about 50Hz. */
	usleep_range(16000, 20000);

	mutex_lock(&ctx->lock);

	if (ctx->direct_vblank) {
		drm_handle_vblank(subdrv->drm_dev, manager->pipe);
		ctx->direct_vblank = false;
		mutex_unlock(&ctx->lock);
		return;
	}

	mutex_unlock(&ctx->lock);

	vidi_finish_pageflip(subdrv->drm_dev, manager->pipe);
}

+10 −0
Original line number Diff line number Diff line
@@ -107,6 +107,16 @@ struct drm_exynos_vidi_connection {
	uint64_t edid;
};

/* Indicate Exynos specific vblank flags */
enum e_drm_exynos_vblank {
	/*
	 * this flags is used for Virtual Display module
	 * to use DRM_IOCTL_WAIT_VBLANK feature. for this,
	 * user should set this flag to vblwait->request.type
	 */
	_DRM_VBLANK_EXYNOS_VIDI	= 2,
};

/* memory type definitions. */
enum e_drm_exynos_gem_mem_type {
	/* Physically Continuous memory and used as default. */