sdm: Disable skip validate on Panel Dead event

- Disable skip validate on Panel Dead event.
- Register to panel dead event only if supported.

CRs-Fixed: 2122298

Change-Id: I1380eaf6899f0733ed1ba8a69eb6ee797de24bd5
diff --git a/sdm/include/core/display_interface.h b/sdm/include/core/display_interface.h
index 2f25bde..080f7a1 100644
--- a/sdm/include/core/display_interface.h
+++ b/sdm/include/core/display_interface.h
@@ -140,6 +140,7 @@
   kIdleTimeout,        // Event triggered by Idle Timer.
   kThermalEvent,       // Event triggered by Thermal.
   kIdlePowerCollapse,  // Event triggered by Idle Power Collapse.
+  kPanelDeadEvent,     // Event triggered by ESD.
 };
 
 /*! @brief This structure defines configuration for fixed properties of a display device.
diff --git a/sdm/libs/core/display_primary.cpp b/sdm/libs/core/display_primary.cpp
index 768d994..1135475 100644
--- a/sdm/libs/core/display_primary.cpp
+++ b/sdm/libs/core/display_primary.cpp
@@ -315,6 +315,7 @@
 }
 
 void DisplayPrimary::PanelDead() {
+  event_handler_->HandleEvent(kPanelDeadEvent);
   event_handler_->Refresh();
   {
     lock_guard<recursive_mutex> obj(recursive_mutex_);
diff --git a/sdm/libs/core/drm/hw_events_drm.cpp b/sdm/libs/core/drm/hw_events_drm.cpp
index ca0b2ea..2745ee7 100644
--- a/sdm/libs/core/drm/hw_events_drm.cpp
+++ b/sdm/libs/core/drm/hw_events_drm.cpp
@@ -99,7 +99,7 @@
           DLOGE("drmOpen failed with error %d", poll_fds_[i].fd);
           return kErrorResources;
         }
-        poll_fds_[i].events = POLLIN | POLLPRI | POLLERR;;
+        poll_fds_[i].events = POLLIN | POLLPRI | POLLERR;
         panel_dead_index_ = i;
       } break;
     }
@@ -294,7 +294,7 @@
       switch (event_data_list_[i].event_type) {
         case HWEvent::VSYNC:
         case HWEvent::PANEL_DEAD:
-          if (poll_fd.revents & (POLLIN | POLLPRI)) {
+          if (poll_fd.revents & (POLLIN | POLLPRI | POLLERR)) {
             (this->*(event_data_list_[i]).event_parser)(nullptr);
           }
           break;
@@ -342,6 +342,18 @@
 }
 
 DisplayError HWEventsDRM::RegisterPanelDead(bool enable) {
+  uint32_t i = 0;
+  for (; i < event_data_list_.size(); i++) {
+    if (event_data_list_[i].event_type == HWEvent::PANEL_DEAD) {
+      break;
+    }
+  }
+
+  if (i == event_data_list_.size()) {
+    DLOGI("panel dead is not supported event");
+    return kErrorNone;
+  }
+
   struct drm_msm_event_req req = {};
   int ret = 0;
 
diff --git a/sdm/libs/hwc2/hwc_display.cpp b/sdm/libs/hwc2/hwc_display.cpp
index af02c56..3a02983 100644
--- a/sdm/libs/hwc2/hwc_display.cpp
+++ b/sdm/libs/hwc2/hwc_display.cpp
@@ -948,7 +948,8 @@
   switch (event) {
     case kIdleTimeout:
     case kThermalEvent:
-    case kIdlePowerCollapse: {
+    case kIdlePowerCollapse:
+    case kPanelDeadEvent: {
       SEQUENCE_WAIT_SCOPE_LOCK(HWCSession::locker_[type_]);
       validated_ = false;
     } break;