drivers/graphics: Slightly improve accuracy of connector info

This commit is contained in:
bjorn3
2026-03-13 21:42:36 +01:00
parent efc2d688e3
commit 37264a9e96
2 changed files with 16 additions and 11 deletions
+7 -5
View File
@@ -609,12 +609,8 @@ impl<T: GraphicsAdapter> SchemeSync for GraphicsSchemeInner<T> {
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<T: GraphicsAdapter> SchemeSync for GraphicsSchemeInner<T> {
data.set_prop_values_ptr(
&props.iter().map(|&(_, value)| value).collect::<Vec<_>>(),
);
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| {
@@ -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<T: GraphicsAdapter> DrmObjects<T> {
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<T: Debug + 'static> {
pub modes: Vec<drm_mode_modeinfo>,
pub encoder_id: DrmObjectId,
pub modes: Vec<drm_mode_modeinfo>,
pub connector_type: u32,
pub connector_type_id: u32,
pub connection: DrmConnectorStatus,