1From 177aeda60a88f14b9aca1a2daad5d2e98b548553 Mon Sep 17 00:00:00 2001
2From: Jeffy Chen <jeffy.chen@rock-chips.com>
3Date: Wed, 6 Jan 2021 10:13:40 +0800
4Subject: [PATCH 41/93] backend-drm: Fix disabling output error when using
5 atomic
6
7Disabling output in async mode is not allow by drm driver's
8drm_atomic_crtc_check() for "requesting event but off" error.
9
10Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
11---
12 libweston/backend-drm/kms.c | 10 ++++++++--
13 1 file changed, 8 insertions(+), 2 deletions(-)
14
15diff --git a/libweston/backend-drm/kms.c b/libweston/backend-drm/kms.c
16index 61dadef..3d97df2 100644
17--- a/libweston/backend-drm/kms.c
18+++ b/libweston/backend-drm/kms.c
19@@ -1167,6 +1167,14 @@ drm_pending_state_apply_atomic(struct drm_pending_state *pending_state,
20 	if (!req)
21 		return -1;
22
23+	wl_list_for_each(output_state, &pending_state->output_list, link) {
24+		if (output_state->output->virtual)
25+			continue;
26+		if (output_state->dpms == WESTON_DPMS_OFF &&
27+		    mode == DRM_STATE_APPLY_ASYNC)
28+			mode = DRM_STATE_APPLY_SYNC;
29+	}
30+
31 	switch (mode) {
32 	case DRM_STATE_APPLY_SYNC:
33 		flags = 0;
34@@ -1269,8 +1277,6 @@ drm_pending_state_apply_atomic(struct drm_pending_state *pending_state,
35 	wl_list_for_each(output_state, &pending_state->output_list, link) {
36 		if (output_state->output->virtual)
37 			continue;
38-		if (mode == DRM_STATE_APPLY_SYNC)
39-			assert(output_state->dpms == WESTON_DPMS_OFF);
40 		ret |= drm_output_apply_state_atomic(output_state, req, &flags);
41 	}
42
43--
442.20.1
45
46