diff --git a/drivers/gpu/drm/rvkms/output.rs b/drivers/gpu/drm/rvkms/output.rs index d5ee58cbfa5a329562095b6af9597c45d7ee022d..dc3c1285a0e4d4c23f6b9c163a04f7ba3ccd823d 100644 --- a/drivers/gpu/drm/rvkms/output.rs +++ b/drivers/gpu/drm/rvkms/output.rs @@ -1,3 +1,53 @@ +// SPDX-License-Identifier: GPL-2.0 +use crate::{ + crtc::UnregisteredCrtc, + plane::UnregisteredPlane, + connector::UnregisteredConnector, + encoder::UnregisteredEncoder, + RvkmsDevice, + RvkmsDriver +}; +use kernel::{ + drm::{ + fourcc::*, + kms::{ + connector, + encoder, + plane, + framebuffer::*, + UnregisteredKmsDevice, + }, + }, + sync::Arc, + prelude::*, + types::ARef, +}; -Type -Type +pub(crate) fn create_output(dev: &UnregisteredKmsDevice<'_, RvkmsDriver>, index: u8) -> Result { + let possible_crtcs = 1 << index; + + let primary = UnregisteredPlane::new( + dev, + possible_crtcs, + &[XRGB888], + None, + plane::Type::Primary, + None, + () + )?; + + let crtc = UnregisteredCrtc::new(dev, primary, Option::<&UnregisteredPlane>::None, None, ())?; + + let connector = UnregisteredConnector::new(dev, connector::Type::Virtual, ())?; + + let encoder = UnregisteredEncoder::new( + dev, + encoder::Type::Virtual, + possible_crtcs, + 0, + None, + () + )?; + + connector.attach_encoder(encoder) +}