sdm:fb: update cdm csc_type during HDR playback

The CSC matrix used in CDM block should be updated to
BT2020 format from default value during HDR playback.

CRs-Fixed: 2115066
Change-Id: I358608e68cdd2553a168e4bfc2bfdc968a0945ec
diff --git a/sdm/libs/core/fb/hw_hdmi.cpp b/sdm/libs/core/fb/hw_hdmi.cpp
index c69e615..e1d7ba1 100644
--- a/sdm/libs/core/fb/hw_hdmi.cpp
+++ b/sdm/libs/core/fb/hw_hdmi.cpp
@@ -190,6 +190,7 @@
   (void)hdr_reset_start_;
   (void)hdr_reset_end_;
   (void)reset_hdr_flag_;
+  (void)cdm_color_space_;
 }
 
 DisplayError HWHDMI::Init() {
@@ -440,8 +441,19 @@
   if (error != kErrorNone) {
     return error;
   }
+  if (cdm_color_space_commit_) {
+#ifdef MDP_COMMIT_UPDATE_CDM_COLOR_SPACE
+    mdp_layer_commit_v1 &mdp_commit = mdp_disp_commit_.commit_v1;
+    mdp_commit.cdm_color_space = cdm_color_space_;
+    mdp_commit.flags |= MDP_COMMIT_UPDATE_CDM_COLOR_SPACE;
+#endif
+  }
 
-  return HWDevice::Commit(hw_layers);
+  error = HWDevice::Commit(hw_layers);
+  if (cdm_color_space_commit_)
+    cdm_color_space_commit_ = false;
+
+  return error;
 }
 
 DisplayError HWHDMI::GetHWScanInfo(HWScanInfo *scan_info) {
@@ -1032,6 +1044,10 @@
     hdr_ctrl.hdr_stream.max_average_light_level = light_level.minPicAverageLightLevel;
     hdr_ctrl.hdr_state = HDR_ENABLE;
     reset_hdr_flag_ = false;
+#ifdef MDP_COMMIT_UPDATE_CDM_COLOR_SPACE
+    HWDevice::SetCSC(layer_buffer->color_metadata, &cdm_color_space_);
+    cdm_color_space_commit_ = true;
+#endif
     // DP related
     int32_t pixel_encoding = GetPixelEncoding(hdr_layer.input_buffer);
     hdr_ctrl.hdr_stream.pixel_encoding = (pixel_encoding < 0) ? 0 : UINT32(pixel_encoding);
@@ -1063,6 +1079,10 @@
     hdr_ctrl.hdr_state = HDR_RESET;
     reset_hdr_flag_ = true;
     hdr_reset_start_ = time(NULL);
+#ifdef MDP_COMMIT_UPDATE_CDM_COLOR_SPACE
+    cdm_color_space_ = (mdp_color_space) MDP_CSC_DEFAULT;
+    cdm_color_space_commit_ = true;
+#endif
     DLOGV_IF(kTagDriverConfig, "kReset: HDR Stream: HDR_RESET");
   } else if (hdr_layer_info.operation == HWHDRLayerInfo::kNoOp) {
      if (reset_hdr_flag_) {
diff --git a/sdm/libs/core/fb/hw_hdmi.h b/sdm/libs/core/fb/hw_hdmi.h
index 80d289a..183e9db 100644
--- a/sdm/libs/core/fb/hw_hdmi.h
+++ b/sdm/libs/core/fb/hw_hdmi.h
@@ -121,6 +121,8 @@
   uint32_t frame_rate_ = 0;
   time_t hdr_reset_start_ = 0, hdr_reset_end_ = 0;
   bool reset_hdr_flag_ = false;
+  mdp_color_space cdm_color_space_ = {};
+  bool cdm_color_space_commit_ = false;
 };
 
 }  // namespace sdm