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 <m.felsch@pengutronix.de>
This commit is contained in:
Marco Felsch 2025-05-14 11:13:15 +02:00 committed by Marius Vlad
parent 9c67c8c0d8
commit 4ba62103a6

View file

@ -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);
}
}