diff --git a/local/recipes/gpu/redox-drm/source/src/kms/atomic.rs b/local/recipes/gpu/redox-drm/source/src/kms/atomic.rs index 4ac0376d87..3d9bffbd39 100644 --- a/local/recipes/gpu/redox-drm/source/src/kms/atomic.rs +++ b/local/recipes/gpu/redox-drm/source/src/kms/atomic.rs @@ -1,6 +1,6 @@ -use super::{ConnectorInfo, ModeInfo}; +use super::{ConnectorInfo, ConnectorStatus, ModeInfo}; /// Maximum pixel clock in kHz that the display engine supports. const MAX_PIXEL_CLOCK_KHZ: u32 = 600_000; @@ -125,7 +125,7 @@ pub enum AtomicCheckResult { /// Validate the atomic state against hardware constraints. pub fn atomic_check( state: &AtomicState, - _available_connectors: &[ConnectorInfo], + available_connectors: &[ConnectorInfo], ) -> AtomicCheckResult { for crtc in &state.crtc_states { if !crtc.active { @@ -175,6 +175,22 @@ pub fn atomic_check( reason: "active CRTC has no framebuffer assigned".into(), }; } + + for conn_id in &crtc.connectors { + match available_connectors.iter().find(|c| c.id == *conn_id) { + None => { + return AtomicCheckResult::CrtcNotFound { + crtc_id: *conn_id, + }; + } + Some(conn) if conn.connection != ConnectorStatus::Connected => { + return AtomicCheckResult::ConnectorDisconnected { + connector_id: *conn_id, + }; + } + Some(_) => {} + } + } } AtomicCheckResult::Ok