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