sdm: color-manager: Detail Enhancer Enhancements.

Add Detail Enhancer configuration support in color-mode set
operation.

Change-Id: Ibdf3f70db911358db515d8d027cff312ec73e424
CRs-Fixed: 1075087
diff --git a/sdm/include/private/color_params.h b/sdm/include/private/color_params.h
index fdd0c9e..d2f8094 100644
--- a/sdm/include/private/color_params.h
+++ b/sdm/include/private/color_params.h
@@ -238,6 +238,7 @@
 struct PPDETuningCfgData {
   uint32_t cfg_en = 0;
   PPDETuningCfg params;
+  bool cfg_pending = false;
 };
 
 struct SDEGamutCfg {
diff --git a/sdm/libs/hwc/hwc_color_manager.cpp b/sdm/libs/hwc/hwc_color_manager.cpp
index 1200de3..7bf49ff 100644
--- a/sdm/libs/hwc/hwc_color_manager.cpp
+++ b/sdm/libs/hwc/hwc_color_manager.cpp
@@ -423,65 +423,67 @@
   DisplayDetailEnhancerData de_data;
 
   PPDETuningCfgData *de_tuning_cfg_data = reinterpret_cast<PPDETuningCfgData*>(params);
-  if (!de_tuning_cfg_data->cfg_en) {
-    de_data.override_flags = kOverrideDEEnable;
-    de_data.enable = 0;
-  } else {
-    de_data.override_flags = kOverrideDEEnable;
-    de_data.enable = 1;
+  if (de_tuning_cfg_data->cfg_pending == true) {
+    if (!de_tuning_cfg_data->cfg_en) {
+      de_data.override_flags = kOverrideDEEnable;
+      de_data.enable = 0;
+    } else {
+      de_data.override_flags = kOverrideDEEnable;
+      de_data.enable = 1;
 
-    if (de_tuning_cfg_data->params.flags & kDeTuningFlagSharpFactor) {
-      de_data.override_flags |= kOverrideDEEnable;
-      de_data.sharp_factor = de_tuning_cfg_data->params.sharp_factor;
-    }
+      if (de_tuning_cfg_data->params.flags & kDeTuningFlagSharpFactor) {
+        de_data.override_flags |= kOverrideDESharpen1;
+        de_data.sharp_factor = de_tuning_cfg_data->params.sharp_factor;
+      }
 
-    if (de_tuning_cfg_data->params.flags & kDeTuningFlagClip) {
-      de_data.override_flags |= kOverrideDEEnable;
-      de_data.clip = de_tuning_cfg_data->params.clip;
-    }
+      if (de_tuning_cfg_data->params.flags & kDeTuningFlagClip) {
+        de_data.override_flags |= kOverrideDEClip;
+        de_data.clip = de_tuning_cfg_data->params.clip;
+      }
 
-    if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrQuiet) {
-      de_data.override_flags |= kOverrideDEEnable;
-      de_data.thr_quiet = de_tuning_cfg_data->params.thr_quiet;
-    }
+      if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrQuiet) {
+        de_data.override_flags |= kOverrideDEThrQuiet;
+        de_data.thr_quiet = de_tuning_cfg_data->params.thr_quiet;
+      }
 
-    if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrDieout) {
-      de_data.override_flags |= kOverrideDEEnable;
-      de_data.thr_dieout = de_tuning_cfg_data->params.thr_dieout;
-    }
+      if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrDieout) {
+        de_data.override_flags |= kOverrideDEThrDieout;
+        de_data.thr_dieout = de_tuning_cfg_data->params.thr_dieout;
+      }
 
-    if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrLow) {
-      de_data.override_flags |= kOverrideDEEnable;
-      de_data.thr_low = de_tuning_cfg_data->params.thr_low;
-    }
+      if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrLow) {
+        de_data.override_flags |= kOverrideDEThrLow;
+        de_data.thr_low = de_tuning_cfg_data->params.thr_low;
+      }
 
-    if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrHigh) {
-      de_data.override_flags |= kOverrideDEEnable;
-      de_data.thr_high = de_tuning_cfg_data->params.thr_high;
-    }
+      if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrHigh) {
+        de_data.override_flags |= kOverrideDEThrHigh;
+        de_data.thr_high = de_tuning_cfg_data->params.thr_high;
+      }
 
-    if (de_tuning_cfg_data->params.flags & kDeTuningFlagContentQualLevel) {
-      de_data.override_flags |= kOverrideDEEnable;
-      switch (de_tuning_cfg_data->params.quality) {
-        case kDeContentQualLow:
-          de_data.quality_level = kContentQualityLow;
-          break;
-        case kDeContentQualMedium:
-          de_data.quality_level = kContentQualityMedium;
-          break;
-        case kDeContentQualHigh:
-          de_data.quality_level = kContentQualityHigh;
-          break;
-        case kDeContentQualUnknown:
-        default:
-          de_data.quality_level = kContentQualityUnknown;
-          break;
+      if (de_tuning_cfg_data->params.flags & kDeTuningFlagContentQualLevel) {
+        switch (de_tuning_cfg_data->params.quality) {
+          case kDeContentQualLow:
+            de_data.quality_level = kContentQualityLow;
+            break;
+          case kDeContentQualMedium:
+            de_data.quality_level = kContentQualityMedium;
+            break;
+          case kDeContentQualHigh:
+            de_data.quality_level = kContentQualityHigh;
+            break;
+          case kDeContentQualUnknown:
+          default:
+            de_data.quality_level = kContentQualityUnknown;
+            break;
+        }
       }
     }
-  }
-  err = hwc_display->SetDetailEnhancerConfig(de_data);
-  if (err) {
-    DLOGW("SetDetailEnhancerConfig failed. err = %d", err);
+    err = hwc_display->SetDetailEnhancerConfig(de_data);
+    if (err) {
+      DLOGW("SetDetailEnhancerConfig failed. err = %d", err);
+    }
+    de_tuning_cfg_data->cfg_pending = false;
   }
 
   return err;
diff --git a/sdm/libs/hwc2/hwc_color_manager.cpp b/sdm/libs/hwc2/hwc_color_manager.cpp
index ec0dffe..c76f540 100644
--- a/sdm/libs/hwc2/hwc_color_manager.cpp
+++ b/sdm/libs/hwc2/hwc_color_manager.cpp
@@ -279,65 +279,67 @@
   DisplayDetailEnhancerData de_data;
 
   PPDETuningCfgData *de_tuning_cfg_data = reinterpret_cast<PPDETuningCfgData*>(params);
-  if (!de_tuning_cfg_data->cfg_en) {
-    de_data.override_flags = kOverrideDEEnable;
-    de_data.enable = 0;
-  } else {
-    de_data.override_flags = kOverrideDEEnable;
-    de_data.enable = 1;
+  if (de_tuning_cfg_data->cfg_pending == true) {
+    if (!de_tuning_cfg_data->cfg_en) {
+      de_data.override_flags = kOverrideDEEnable;
+      de_data.enable = 0;
+    } else {
+      de_data.override_flags = kOverrideDEEnable;
+      de_data.enable = 1;
 
-    if (de_tuning_cfg_data->params.flags & kDeTuningFlagSharpFactor) {
-      de_data.override_flags |= kOverrideDEEnable;
-      de_data.sharp_factor = de_tuning_cfg_data->params.sharp_factor;
-    }
+      if (de_tuning_cfg_data->params.flags & kDeTuningFlagSharpFactor) {
+        de_data.override_flags |= kOverrideDESharpen1;
+        de_data.sharp_factor = de_tuning_cfg_data->params.sharp_factor;
+      }
 
-    if (de_tuning_cfg_data->params.flags & kDeTuningFlagClip) {
-      de_data.override_flags |= kOverrideDEEnable;
-      de_data.clip = de_tuning_cfg_data->params.clip;
-    }
+      if (de_tuning_cfg_data->params.flags & kDeTuningFlagClip) {
+        de_data.override_flags |= kOverrideDEClip;
+        de_data.clip = de_tuning_cfg_data->params.clip;
+      }
 
-    if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrQuiet) {
-      de_data.override_flags |= kOverrideDEEnable;
-      de_data.thr_quiet = de_tuning_cfg_data->params.thr_quiet;
-    }
+      if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrQuiet) {
+        de_data.override_flags |= kOverrideDEThrQuiet;
+        de_data.thr_quiet = de_tuning_cfg_data->params.thr_quiet;
+      }
 
-    if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrDieout) {
-      de_data.override_flags |= kOverrideDEEnable;
-      de_data.thr_dieout = de_tuning_cfg_data->params.thr_dieout;
-    }
+      if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrDieout) {
+        de_data.override_flags |= kOverrideDEThrDieout;
+        de_data.thr_dieout = de_tuning_cfg_data->params.thr_dieout;
+      }
 
-    if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrLow) {
-      de_data.override_flags |= kOverrideDEEnable;
-      de_data.thr_low = de_tuning_cfg_data->params.thr_low;
-    }
+      if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrLow) {
+        de_data.override_flags |= kOverrideDEThrLow;
+        de_data.thr_low = de_tuning_cfg_data->params.thr_low;
+      }
 
-    if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrHigh) {
-      de_data.override_flags |= kOverrideDEEnable;
-      de_data.thr_high = de_tuning_cfg_data->params.thr_high;
-    }
+      if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrHigh) {
+        de_data.override_flags |= kOverrideDEThrHigh;
+        de_data.thr_high = de_tuning_cfg_data->params.thr_high;
+      }
 
-    if (de_tuning_cfg_data->params.flags & kDeTuningFlagContentQualLevel) {
-      de_data.override_flags |= kOverrideDEEnable;
-      switch (de_tuning_cfg_data->params.quality) {
-        case kDeContentQualLow:
-          de_data.quality_level = kContentQualityLow;
-          break;
-        case kDeContentQualMedium:
-          de_data.quality_level = kContentQualityMedium;
-          break;
-        case kDeContentQualHigh:
-          de_data.quality_level = kContentQualityHigh;
-          break;
-        case kDeContentQualUnknown:
-        default:
-          de_data.quality_level = kContentQualityUnknown;
-          break;
+      if (de_tuning_cfg_data->params.flags & kDeTuningFlagContentQualLevel) {
+        switch (de_tuning_cfg_data->params.quality) {
+          case kDeContentQualLow:
+            de_data.quality_level = kContentQualityLow;
+            break;
+          case kDeContentQualMedium:
+            de_data.quality_level = kContentQualityMedium;
+            break;
+          case kDeContentQualHigh:
+            de_data.quality_level = kContentQualityHigh;
+            break;
+          case kDeContentQualUnknown:
+          default:
+            de_data.quality_level = kContentQualityUnknown;
+            break;
+        }
       }
     }
-  }
-  err = hwc_display->SetDetailEnhancerConfig(de_data);
-  if (err) {
-    DLOGW("SetDetailEnhancerConfig failed. err = %d", err);
+    err = hwc_display->SetDetailEnhancerConfig(de_data);
+    if (err) {
+      DLOGW("SetDetailEnhancerConfig failed. err = %d", err);
+    }
+    de_tuning_cfg_data->cfg_pending = false;
   }
 
   return err;