Merge "sdm: Fix topology after adding new mode"
diff --git a/sdm/libs/core/drm/hw_device_drm.cpp b/sdm/libs/core/drm/hw_device_drm.cpp
index e76562f..96ad8a3 100644
--- a/sdm/libs/core/drm/hw_device_drm.cpp
+++ b/sdm/libs/core/drm/hw_device_drm.cpp
@@ -346,7 +346,6 @@
}
drm_mgr_intf_->CreateAtomicReq(token_, &drm_atomic_intf_);
- drm_mgr_intf_->GetConnectorInfo(token_.conn_id, &connector_info_);
} else {
display_attributes_.push_back(HWDisplayAttributes());
PopulateDisplayAttributes(current_mode_index_);
diff --git a/sdm/libs/core/drm/hw_peripheral_drm.cpp b/sdm/libs/core/drm/hw_peripheral_drm.cpp
index 92669e1..667cd88 100644
--- a/sdm/libs/core/drm/hw_peripheral_drm.cpp
+++ b/sdm/libs/core/drm/hw_peripheral_drm.cpp
@@ -57,6 +57,7 @@
scalar_data_.resize(hw_resource_.hw_dest_scalar_info.count);
+ drm_mgr_intf_->GetConnectorInfo(token_.conn_id, &connector_info_);
if (connector_info_.topology == DRMTopology::UNKNOWN) {
connector_info_.topology = DRMTopology::DUAL_LM;
}
diff --git a/sdm/libs/core/drm/hw_tv_drm.cpp b/sdm/libs/core/drm/hw_tv_drm.cpp
index 1eef1e8..b2075a8 100644
--- a/sdm/libs/core/drm/hw_tv_drm.cpp
+++ b/sdm/libs/core/drm/hw_tv_drm.cpp
@@ -73,6 +73,7 @@
DLOGE("Init failed for %s", device_name_);
return error;
}
+ drm_mgr_intf_->GetConnectorInfo(token_.conn_id, &connector_info_);
InitializeConfigs();
diff --git a/sdm/libs/core/drm/hw_virtual_drm.cpp b/sdm/libs/core/drm/hw_virtual_drm.cpp
index 626beea..5f07fd3 100644
--- a/sdm/libs/core/drm/hw_virtual_drm.cpp
+++ b/sdm/libs/core/drm/hw_virtual_drm.cpp
@@ -55,28 +55,6 @@
HWDeviceDRM::disp_type_ = DRMDisplayType::VIRTUAL;
}
-DisplayError HWVirtualDRM::Init() {
- DisplayError err = HWDeviceDRM::Init();
- if (err != kErrorNone) {
- return err;
- }
- // TODO(user): Remove this code once driver populates appropriate topology based on virtual
- // display configuration
- if (connector_info_.topology == sde_drm::DRMTopology::UNKNOWN) {
- uint32_t max_width = 0;
- for (uint32_t i = 0; i < (uint32_t)connector_info_.modes.size(); i++) {
- max_width = std::max(max_width, UINT32(connector_info_.modes[i].hdisplay));
- }
- connector_info_.topology = sde_drm::DRMTopology::SINGLE_LM;
- if (max_width > hw_resource_.max_mixer_width) {
- connector_info_.topology = sde_drm::DRMTopology::DUAL_LM_MERGE;
- }
- }
- InitializeConfigs();
-
- return kErrorNone;
-}
-
void HWVirtualDRM::ConfigureWbConnectorFbId(uint32_t fb_id) {
drm_atomic_intf_->Perform(DRMOps::CONNECTOR_SET_OUTPUT_FB_ID, token_.conn_id, fb_id);
return;
@@ -133,6 +111,18 @@
}
// Reload connector info for updated info after null commit
drm_mgr_intf_->GetConnectorInfo(token_.conn_id, &connector_info_);
+ // TODO(user): Remove this code once driver populates appropriate topology based on virtual
+ // display configuration
+ if (connector_info_.topology == sde_drm::DRMTopology::UNKNOWN) {
+ uint32_t max_width = 0;
+ for (uint32_t i = 0; i < (uint32_t)connector_info_.modes.size(); i++) {
+ max_width = std::max(max_width, UINT32(connector_info_.modes[i].hdisplay));
+ }
+ connector_info_.topology = sde_drm::DRMTopology::SINGLE_LM;
+ if (max_width > hw_resource_.max_mixer_width) {
+ connector_info_.topology = sde_drm::DRMTopology::DUAL_LM_MERGE;
+ }
+ }
InitializeConfigs();
GetModeIndex(display_attributes, &mode_index);
diff --git a/sdm/libs/core/drm/hw_virtual_drm.h b/sdm/libs/core/drm/hw_virtual_drm.h
index 53e5b56..29ef7b2 100644
--- a/sdm/libs/core/drm/hw_virtual_drm.h
+++ b/sdm/libs/core/drm/hw_virtual_drm.h
@@ -50,7 +50,6 @@
virtual DisplayError PowerOn();
protected:
- virtual DisplayError Init();
virtual DisplayError Validate(HWLayers *hw_layers);
virtual DisplayError Commit(HWLayers *hw_layers);
virtual DisplayError GetPPFeaturesVersion(PPFeatureVersion *vers);