diff options
Diffstat (limited to 'backend/drm/backend.c')
-rw-r--r-- | backend/drm/backend.c | 39 |
1 files changed, 1 insertions, 38 deletions
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) { |