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

Commit 9e17babe authored by Lakshmi Narayana Kalavala's avatar Lakshmi Narayana Kalavala
Browse files

disp: msm: sde: turn off/on vblank callbacks as per crtc



Current sde driver allows vblank enable and wait requests
even after crtc is disabled which would eventually lead to
enable of irq and timeouts in caller context. This change fixes
it by updating vblank callback status as 'on' during crtc enable
and shutdowns vblank callbacks before crtc disable is complete.

Change-Id: I52b74f685107f4dc8c83305c28f23cdcb4747730
Signed-off-by: default avatarPrabhanjan Kandula <pkandula@codeaurora.org>
Signed-off-by: default avatarLakshmi Narayana Kalavala <lkalaval@codeaurora.org>
parent 5af1fe18
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -699,6 +699,7 @@ static int msm_drm_init(struct device *dev, struct drm_driver *drv)
	struct msm_kms *kms = NULL;
	int ret;
	struct sched_param param = { 0 };
	struct drm_crtc *crtc;

	ddev = drm_dev_alloc(drv, dev);
	if (!ddev) {
@@ -770,6 +771,9 @@ static int msm_drm_init(struct device *dev, struct drm_driver *drv)
		goto fail;
	}

	drm_for_each_crtc(crtc, ddev)
		drm_crtc_vblank_reset(crtc);

	if (kms) {
		pm_runtime_get_sync(dev);
		ret = drm_irq_install(ddev, platform_get_irq(pdev, 0));
+4 −0
Original line number Diff line number Diff line
@@ -3978,6 +3978,8 @@ static void sde_crtc_disable(struct drm_crtc *crtc)

	SDE_DEBUG("crtc%d\n", crtc->base.id);

	drm_crtc_vblank_off(crtc);

	if (sde_kms_is_suspend_state(crtc->dev))
		_sde_crtc_set_suspend(crtc, true);

@@ -4116,6 +4118,8 @@ static void sde_crtc_enable(struct drm_crtc *crtc,
	SDE_EVT32_VERBOSE(DRMID(crtc));
	sde_crtc = to_sde_crtc(crtc);

	drm_crtc_vblank_on(crtc);

	mutex_lock(&sde_crtc->crtc_lock);
	SDE_EVT32(DRMID(crtc), sde_crtc->enabled, sde_crtc->suspend,
			sde_crtc->vblank_requested);