drivers/graphics: Avoid duplicate get_connector calls

This commit is contained in:
bjorn3
2026-05-09 12:07:58 +02:00
parent 15c3327adb
commit 2436639271
4 changed files with 16 additions and 12 deletions
+10 -5
View File
@@ -1,7 +1,7 @@
extern crate ransid;
use std::collections::VecDeque;
use std::convert::{TryFrom, TryInto};
use std::convert::TryFrom;
use std::{cmp, io, mem, ptr};
use drm::buffer::{Buffer, DrmFourcc};
@@ -59,8 +59,7 @@ pub struct V2DisplayMap {
impl V2DisplayMap {
pub fn new(display_handle: V2GraphicsHandle) -> io::Result<Self> {
let connector = display_handle.first_display().unwrap();
let connector_info = display_handle.get_connector(connector, true).unwrap();
let connector_info = display_handle.first_display().unwrap();
let mode = connector_info.modes()[0];
let (width, height) = mode.size();
@@ -81,11 +80,17 @@ impl V2DisplayMap {
)?;
let fb = display_handle.add_framebuffer(buffer.buffer(), 32, 32)?;
display_handle.set_crtc(crtc, Some(fb), (0, 0), &[connector], Some(mode))?;
display_handle.set_crtc(
crtc,
Some(fb),
(0, 0),
&[connector_info.handle()],
Some(mode),
)?;
Ok(Self {
display_handle,
connector,
connector: connector_info.handle(),
crtc,
fb,
buffer,
+1 -2
View File
@@ -3,7 +3,6 @@ use std::collections::VecDeque;
use console_draw::{Damage, TextScreen, V2DisplayMap};
use drm::buffer::Buffer;
use drm::control::Device;
use graphics_ipc::V2GraphicsHandle;
use inputd::ConsumerHandle;
use orbclient::{Event, EventOption};
@@ -147,7 +146,7 @@ impl FbbootlogScheme {
let mode = match map
.display_handle
.first_display()
.and_then(|handle| Ok(map.display_handle.get_connector(handle, true)?.modes()[0]))
.map(|info| info.modes()[0])
{
Ok(mode) => mode,
Err(err) => {
+1 -2
View File
@@ -1,6 +1,5 @@
use console_draw::{Damage, TextScreen, V2DisplayMap};
use drm::buffer::Buffer;
use drm::control::Device;
use graphics_ipc::V2GraphicsHandle;
use inputd::ConsumerHandle;
use std::io;
@@ -55,7 +54,7 @@ impl Display {
let mode = match map
.display_handle
.first_display()
.and_then(|handle| Ok(map.display_handle.get_connector(handle, true)?.modes()[0]))
.map(|info| info.modes()[0])
{
Ok(mode) => mode,
Err(err) => {
+4 -3
View File
@@ -33,10 +33,11 @@ impl V2GraphicsHandle {
Ok(handle)
}
pub fn first_display(&self) -> io::Result<connector::Handle> {
pub fn first_display(&self) -> io::Result<connector::Info> {
for &connector in self.resource_handles().unwrap().connectors() {
if self.get_connector(connector, true)?.state() == State::Connected {
return Ok(connector);
let info = self.get_connector(connector, true)?;
if info.state() == State::Connected {
return Ok(info);
}
}
Err(io::Error::other("no connected display"))