From dede55c7f913f571708b5f6de8ce2786933bf317 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sun, 12 Mar 2023 14:46:19 -0500 Subject: [PATCH] Allow modesets for HDR entry/exit --- src/video/rk.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/video/rk.c b/src/video/rk.c index 78e2493..67cd2f6 100644 --- a/src/video/rk.c +++ b/src/video/rk.c @@ -183,8 +183,11 @@ void *display_thread(void *param) { ret = pthread_mutex_unlock(&mutex); assert(!ret); - // show DRM FB in overlay plane (auto vsynced/atomic !) - ret = drmModeAtomicCommit(fd, drm_request, 0, NULL); + // Commit the updates to the display hardware + // + // Note: DRM_MODE_ATOMIC_ALLOW_MODESET is used because a modeset may be required to switch + // between HDR and SDR mode. + ret = drmModeAtomicCommit(fd, drm_request, DRM_MODE_ATOMIC_NONBLOCK | DRM_MODE_ATOMIC_ALLOW_MODESET, NULL); assert(!ret); } @@ -574,7 +577,7 @@ void rk_cleanup() { drmModeAtomicSetCursor(drm_request, 0); set_atomic_property(drm_request, conn_id, conn_props, "HDR_OUTPUT_METADATA", 0); set_atomic_property(drm_request, conn_id, conn_props, "allm_enable", 0); - drmModeAtomicCommit(fd, drm_request, 0, NULL); + drmModeAtomicCommit(fd, drm_request, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL); if (hdr_metadata_blob_id) { drmModeDestroyPropertyBlob(fd, hdr_metadata_blob_id);