From 4ba62103a6856b1b4ee0623c427e5e235fa1b6f8 Mon Sep 17 00:00:00 2001 From: Marco Felsch Date: Wed, 14 May 2025 11:13:15 +0200 Subject: [PATCH] backend-drm: set DRM_MODE_ATOMIC_ALLOW_MODESET during head disable A change in the connector state require a possible full modest depending on the hardware. The connector wasn't set to unconnect if the head was detached while the output is still enabled. Fix this by always checking the disable_head_link list during drm_output_apply_state_atomic(). Signed-off-by: Marco Felsch --- libweston/backend-drm/kms.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/libweston/backend-drm/kms.c b/libweston/backend-drm/kms.c index 9cb725f2e..76dcd5886 100644 --- a/libweston/backend-drm/kms.c +++ b/libweston/backend-drm/kms.c @@ -1374,15 +1374,15 @@ drm_output_apply_state_atomic(struct drm_output_state *state, wl_list_for_each(head, &output->base.head_list, base.output_link) ret |= connector_add_prop(req, &head->connector, WDRM_CONNECTOR_CRTC_ID, 0); + } - wl_list_for_each_safe(head, tmp, &output->disable_head, - disable_head_link) { - ret |= connector_add_prop(req, &head->connector, - WDRM_CONNECTOR_CRTC_ID, 0); - if (!(*flags & DRM_MODE_ATOMIC_TEST_ONLY)) { - wl_list_remove(&head->disable_head_link); - wl_list_init(&head->disable_head_link); - } + wl_list_for_each_safe(head, tmp, &output->disable_head, disable_head_link) { + ret |= connector_add_prop(req, &head->connector, + WDRM_CONNECTOR_CRTC_ID, 0); + *flags |= DRM_MODE_ATOMIC_ALLOW_MODESET; + if (!(*flags & DRM_MODE_ATOMIC_TEST_ONLY)) { + wl_list_remove(&head->disable_head_link); + wl_list_init(&head->disable_head_link); } }