Merge "sdm: Disable VBlank for secondary displays"
diff --git a/sdm/libs/core/drm/hw_device_drm.h b/sdm/libs/core/drm/hw_device_drm.h
index 965ff3b..391e699 100644
--- a/sdm/libs/core/drm/hw_device_drm.h
+++ b/sdm/libs/core/drm/hw_device_drm.h
@@ -55,6 +55,7 @@
virtual DisplayError Init();
virtual DisplayError Deinit();
void GetDRMDisplayToken(sde_drm::DRMDisplayToken *token) const;
+ bool IsPrimaryDisplay() const { return hw_panel_info_.is_primary_panel; }
protected:
// From HWInterface
diff --git a/sdm/libs/core/drm/hw_events_drm.cpp b/sdm/libs/core/drm/hw_events_drm.cpp
index 7487c8a..33f4d3d 100644
--- a/sdm/libs/core/drm/hw_events_drm.cpp
+++ b/sdm/libs/core/drm/hw_events_drm.cpp
@@ -62,6 +62,11 @@
switch (event_data.event_type) {
case HWEvent::VSYNC: {
+ if (!is_primary_) {
+ // TODO(user): Once secondary support is added, use a different fd by calling drmOpen
+ break;
+ }
+
poll_fds_[i].events = POLLIN | POLLPRI | POLLERR;
DRMMaster *master = nullptr;
int ret = DRMMaster::GetInstance(&master);
@@ -146,6 +151,8 @@
return kErrorParameters;
static_cast<const HWDeviceDRM *>(hw_intf)->GetDRMDisplayToken(&token_);
+ is_primary_ = static_cast<const HWDeviceDRM *>(hw_intf)->IsPrimaryDisplay();
+ vsync_enabled_ = is_primary_;
DLOGI("Setup event handler for display %d, CRTC %d, Connector %d",
display_type, token_.crtc_id, token_.conn_id);
@@ -177,6 +184,9 @@
DisplayError HWEventsDRM::SetEventState(HWEvent event, bool enable, void *arg) {
switch (event) {
case HWEvent::VSYNC:
+ if (!is_primary_) {
+ break;
+ }
vsync_enabled_ = enable;
if (enable) {
WakeUpEventThread();
@@ -208,6 +218,7 @@
for (uint32_t i = 0; i < event_data_list_.size(); i++) {
switch (event_data_list_[i].event_type) {
case HWEvent::VSYNC:
+ // TODO(user): close for secondary
poll_fds_[i].fd = -1;
break;
case HWEvent::EXIT:
@@ -287,6 +298,7 @@
}
DisplayError HWEventsDRM::RegisterVSync() {
+ // TODO(user): For secondary use DRM_VBLANK_HIGH_CRTC_MASK and DRM_VBLANK_HIGH_CRTC_SHIFT
drmVBlank vblank{};
vblank.request.type = (drmVBlankSeqType)(DRM_VBLANK_RELATIVE | DRM_VBLANK_EVENT);
vblank.request.sequence = 1;
diff --git a/sdm/libs/core/drm/hw_events_drm.h b/sdm/libs/core/drm/hw_events_drm.h
index 206751b..1d04153 100644
--- a/sdm/libs/core/drm/hw_events_drm.h
+++ b/sdm/libs/core/drm/hw_events_drm.h
@@ -89,8 +89,9 @@
std::string event_thread_name_ = "SDM_EventThread";
bool exit_threads_ = false;
uint32_t vsync_index_ = 0;
- bool vsync_enabled_ = true;
+ bool vsync_enabled_ = false;
sde_drm::DRMDisplayToken token_ = {};
+ bool is_primary_ = false;
};
} // namespace sdm