summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVikas batchu <quic_vikabatc@quicinc.com>2022-07-25 17:31:54 +0530
committerVikas batchu <quic_vikabatc@quicinc.com>2022-07-25 18:31:41 +0530
commit2ebcf32f4ac1f430b1b9e2c9e8178d262ed73765 (patch)
treeb38584ad481a4457c4efde85321ee9cd4dcbd676
parent1d3fbf542c1afd13ce878949d452a0349e41d781 (diff)
sdm: populate retire fence on external display power off.
-- Observed errors with Register Vsync at external power on. -- Wait on appropriate retire fence at external power on and avoid errors due to register vsync getting called before power on is complete. Change-Id: I55b0b24f12b2d111e29f9a127f89d6a0cda2b1f6
-rw-r--r--sdm/libs/core/drm/hw_tv_drm.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/sdm/libs/core/drm/hw_tv_drm.cpp b/sdm/libs/core/drm/hw_tv_drm.cpp
index 67fe39db..4834a542 100644
--- a/sdm/libs/core/drm/hw_tv_drm.cpp
+++ b/sdm/libs/core/drm/hw_tv_drm.cpp
@@ -254,12 +254,19 @@ DisplayError HWTVDRM::PowerOff(bool teardown, SyncPoints *sync_points) {
// LP connecter prop N/A for External
drm_atomic_intf_->Perform(DRMOps::CRTC_SET_ACTIVE, token_.crtc_id, 0);
}
+
+ int64_t retire_fence_fd = -1;
+ drm_atomic_intf_->Perform(DRMOps::CONNECTOR_GET_RETIRE_FENCE, token_.conn_id, &retire_fence_fd);
+
int ret = drm_atomic_intf_->Commit(true /* synchronous */, false /* retain_planes*/);
+ shared_ptr<Fence> retire_fence = Fence::Create(INT(retire_fence_fd), "retire_power_off");
if (ret) {
DLOGE("%s failed with error %d", __FUNCTION__, ret);
return kErrorHardware;
}
+ sync_points->retire_fence = retire_fence;
+
return kErrorNone;
}