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

Commit 3ef62a01 authored by Yuan Zhao's avatar Yuan Zhao Committed by Gerrit - the friendly Code Review server
Browse files

drm/msm/sde: Send blank notification only when CRTC active changed



There are cases where multiple blank events are received
by driver. One such case is while dumping frames while
primary is on. So, add a check to notify blank events
only when CRTC active changed.

Change-Id: I5f7a2cb0019ecfb5a67f26434328124bd77eae9b
Signed-off-by: default avatarYuan Zhao <yzhao@codeaurora.org>
parent 8bd55c74
Loading
Loading
Loading
Loading
+18 −9
Original line number Diff line number Diff line
@@ -239,11 +239,14 @@ msm_disable_outputs(struct drm_device *dev, struct drm_atomic_state *old_state)
		DRM_DEBUG_ATOMIC("disabling [ENCODER:%d:%s]\n",
				 encoder->base.id, encoder->name);

		if (connector->state->crtc &&
			connector->state->crtc->state->active_changed) {
			blank = MSM_DRM_BLANK_POWERDOWN;
			notifier_data.data = &blank;
			notifier_data.id = crtc_idx;
			msm_drm_notifier_call_chain(MSM_DRM_EARLY_EVENT_BLANK,
						     &notifier_data);
		}
		/*
		 * Each encoder has at most one connector (since we always steal
		 * it away), so we won't call disable hooks twice.
@@ -259,9 +262,13 @@ msm_disable_outputs(struct drm_device *dev, struct drm_atomic_state *old_state)
			funcs->dpms(encoder, DRM_MODE_DPMS_OFF);

		drm_bridge_post_disable(encoder->bridge);
		if (connector->state->crtc &&
			connector->state->crtc->state->active_changed) {
			DRM_DEBUG_ATOMIC("Notify blank\n");
			msm_drm_notifier_call_chain(MSM_DRM_EVENT_BLANK,
						&notifier_data);
		}
	}

	for_each_crtc_in_state(old_state, crtc, old_crtc_state, i) {
		const struct drm_crtc_helper_funcs *funcs;
@@ -465,7 +472,8 @@ static void msm_atomic_helper_commit_modeset_enables(struct drm_device *dev,
		DRM_DEBUG_ATOMIC("enabling [ENCODER:%d:%s]\n",
				 encoder->base.id, encoder->name);

		if (connector->state->crtc->state->active_changed) {
		if (connector->state->crtc &&
			connector->state->crtc->state->active_changed) {
			blank = MSM_DRM_BLANK_UNBLANK;
			notifier_data.data = &blank;
			notifier_data.id =
@@ -522,7 +530,8 @@ static void msm_atomic_helper_commit_modeset_enables(struct drm_device *dev,
				 encoder->base.id, encoder->name);

		drm_bridge_enable(encoder->bridge);
		if (connector->state->crtc->state->active_changed) {
		if (connector->state->crtc &&
			connector->state->crtc->state->active_changed) {
			DRM_DEBUG_ATOMIC("Notify unblank\n");
			msm_drm_notifier_call_chain(MSM_DRM_EVENT_BLANK,
					    &notifier_data);