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;