diff --git a/drivers/graphics/driver-graphics/src/lib.rs b/drivers/graphics/driver-graphics/src/lib.rs index 741a4c3dfc..0c4710f125 100644 --- a/drivers/graphics/driver-graphics/src/lib.rs +++ b/drivers/graphics/driver-graphics/src/lib.rs @@ -609,12 +609,8 @@ impl SchemeSync for GraphicsSchemeInner { let connector = self .objects .get_connector(DrmObjectId(data.connector_id()))?; - data.set_connection(connector.connection as u32); - data.set_modes_ptr(&connector.modes); - data.set_mm_width(connector.mm_width); - data.set_mm_height(connector.mm_width); - data.set_subpixel(connector.subpixel as u32); data.set_encoders_ptr(&[connector.encoder_id.0]); + data.set_modes_ptr(&connector.modes); let props = self .objects .get_object_properties(DrmObjectId(data.connector_id()))?; @@ -622,6 +618,12 @@ impl SchemeSync for GraphicsSchemeInner { data.set_prop_values_ptr( &props.iter().map(|&(_, value)| value).collect::>(), ); + data.set_connector_type(data.connector_type()); + data.set_connector_type_id(data.connector_type_id()); + data.set_connection(connector.connection as u32); + data.set_mm_width(connector.mm_width); + data.set_mm_height(connector.mm_width); + data.set_subpixel(connector.subpixel as u32); Ok(0) }), ipc::MODE_GET_PROPERTY => ipc::DrmModeGetProperty::with(payload, |mut data| { diff --git a/drivers/graphics/driver-graphics/src/objects.rs b/drivers/graphics/driver-graphics/src/objects.rs index a7d04a949e..03d825f430 100644 --- a/drivers/graphics/driver-graphics/src/objects.rs +++ b/drivers/graphics/driver-graphics/src/objects.rs @@ -3,7 +3,10 @@ use std::collections::HashMap; use std::fmt::Debug; use std::marker::PhantomData; -use drm_sys::{drm_mode_modeinfo, DRM_MODE_OBJECT_CONNECTOR, DRM_MODE_OBJECT_ENCODER}; +use drm_sys::{ + drm_mode_modeinfo, DRM_MODE_CONNECTOR_Unknown, DRM_MODE_OBJECT_CONNECTOR, + DRM_MODE_OBJECT_ENCODER, +}; use syscall::{Error, Result, EINVAL}; use crate::GraphicsAdapter; @@ -69,15 +72,15 @@ impl DrmObjects { let encoder_id = self.add(DrmEncoder { crtc_id: DrmObjectId::INVALID, possible_crtcs: 0, - possible_clones: 0, + possible_clones: 1 << self.encoders.len(), }); self.encoders.push(encoder_id); let connector_id = self.add(DrmConnector { - modes: vec![], encoder_id, - connector_type: 0, - connector_type_id: 0, + modes: vec![], + connector_type: DRM_MODE_CONNECTOR_Unknown, + connector_type_id: self.connectors.len() as u32, // FIXME maybe pick unique id within connector type? connection: DrmConnectorStatus::Unknown, mm_width: 0, mm_height: 0, @@ -146,8 +149,8 @@ pub trait DrmObject: Any + Debug { #[derive(Debug)] pub struct DrmConnector { - pub modes: Vec, pub encoder_id: DrmObjectId, + pub modes: Vec, pub connector_type: u32, pub connector_type_id: u32, pub connection: DrmConnectorStatus,