From d2acd4c36271ed87c7f8849a4f3c957fb36666fa Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Wed, 14 Feb 2024 18:30:16 +0100 Subject: backend/drm: move restore logic to drm.c We'll need to use a bunch of internal functions from that file in the next commits. --- backend/drm/backend.c | 39 +-------------------------------------- 1 file changed, 1 insertion(+), 38 deletions(-) (limited to 'backend/drm/backend.c') diff --git a/backend/drm/backend.c b/backend/drm/backend.c index 43bfd9da..27e5585d 100644 --- a/backend/drm/backend.c +++ b/backend/drm/backend.c @@ -95,24 +95,6 @@ struct wlr_backend *wlr_drm_backend_get_parent(struct wlr_backend *backend) { return drm->parent ? &drm->parent->backend : NULL; } -static void build_current_connector_state(struct wlr_output_state *state, - struct wlr_drm_connector *conn) { - bool enabled = conn->status != DRM_MODE_DISCONNECTED && conn->output.enabled; - - wlr_output_state_init(state); - wlr_output_state_set_enabled(state, enabled); - if (!enabled) { - return; - } - - if (conn->output.current_mode != NULL) { - wlr_output_state_set_mode(state, conn->output.current_mode); - } else { - wlr_output_state_set_custom_mode(state, - conn->output.width, conn->output.height, conn->output.refresh); - } -} - static void handle_session_active(struct wl_listener *listener, void *data) { struct wlr_drm_backend *drm = wl_container_of(listener, drm, session_active); @@ -125,26 +107,7 @@ static void handle_session_active(struct wl_listener *listener, void *data) { } scan_drm_connectors(drm, NULL); - - // The previous DRM master leaves KMS in an undefined state. We need - // to restore out own state, but be careful to avoid invalid - // configurations. The connector/CRTC mapping may have changed, so - // first disable all CRTCs, then light up the ones we were using - // before the VT switch. - // TODO: better use the atomic API to improve restoration after a VT switch - if (!drm->iface->reset(drm)) { - wlr_log(WLR_ERROR, "Failed to reset state after VT switch"); - } - - struct wlr_drm_connector *conn; - wl_list_for_each(conn, &drm->connectors, link) { - struct wlr_output_state state; - build_current_connector_state(&state, conn); - if (!drm_connector_commit_state(conn, &state)) { - wlr_drm_conn_log(conn, WLR_ERROR, "Failed to restore state after VT switch"); - } - wlr_output_state_finish(&state); - } + restore_drm_device(drm); } static void handle_dev_change(struct wl_listener *listener, void *data) { -- cgit v1.2.3