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

Commit 47c0cf0c authored by Jayant Shekhar's avatar Jayant Shekhar Committed by Gerrit - the friendly Code Review server
Browse files

drm/msm/sde: Use kthread API to initialize idle delay work



Prevent initializing delayed work during variable refresh
rate trigger. Avoid setting kthread kernel struct variable
directly. Use kthread API instead.

Change-Id: Iac3865ead22fbb2278c4da2df144d353da279d99
Signed-off-by: default avatarJayant Shekhar <jshekhar@codeaurora.org>
parent 38ec7e0c
Loading
Loading
Loading
Loading
+19 −15
Original line number Diff line number Diff line
@@ -2708,6 +2708,21 @@ void sde_encoder_virt_restore(struct drm_encoder *drm_enc)
	_sde_encoder_virt_enable_helper(drm_enc);
}

static void sde_encoder_off_work(struct kthread_work *work)
{
	struct sde_encoder_virt *sde_enc = container_of(work,
			struct sde_encoder_virt, delayed_off_work.work);
	struct drm_encoder *drm_enc;

	if (!sde_enc) {
		SDE_ERROR("invalid sde encoder\n");
		return;
	}
	drm_enc = &sde_enc->base;

	sde_encoder_idle_request(drm_enc);
}

static void sde_encoder_virt_enable(struct drm_encoder *drm_enc)
{
	struct sde_encoder_virt *sde_enc = NULL;
@@ -2768,6 +2783,10 @@ static void sde_encoder_virt_enable(struct drm_encoder *drm_enc)
			sde_enc->input_handler_registered = true;
	}

	if (!msm_is_mode_seamless_vrr(cur_mode))
		kthread_init_delayed_work(&sde_enc->delayed_off_work,
			sde_encoder_off_work);

	ret = sde_encoder_resource_control(drm_enc, SDE_ENC_RC_EVENT_KICKOFF);
	if (ret) {
		SDE_ERROR_ENC(sde_enc, "sde resource control failed: %d\n",
@@ -3094,21 +3113,6 @@ int sde_encoder_idle_request(struct drm_encoder *drm_enc)
	return 0;
}

static void sde_encoder_off_work(struct kthread_work *work)
{
	struct sde_encoder_virt *sde_enc = container_of(work,
			struct sde_encoder_virt, delayed_off_work.work);
	struct drm_encoder *drm_enc;

	if (!sde_enc) {
		SDE_ERROR("invalid sde encoder\n");
		return;
	}
	drm_enc = &sde_enc->base;

	sde_encoder_idle_request(drm_enc);
}

/**
 * _sde_encoder_trigger_flush - trigger flush for a physical encoder
 * drm_enc: Pointer to drm encoder structure