sdm: Pass dpps control intf to ColorManager and HDR Lib

Dpps control interface is passed from DisplayBase to
ColorManagerProxy, and sent to ColorManager and HDR Lib.
Change supports HDR Lib to get Dpps control interface to
send Dpps commands. And move dpps_control_interface.h to
public including header file from private header file.

Change-Id: I9175a50cd934b4ac1f0198397d6d1349367a68b1
diff --git a/include/Android.mk b/include/Android.mk
index f787fbc..51f742c 100644
--- a/include/Android.mk
+++ b/include/Android.mk
@@ -9,6 +9,7 @@
 LOCAL_COPY_HEADERS_TO         := $(common_header_export_path)
 LOCAL_COPY_HEADERS            := display_color_processing.h \
                                  display_properties.h \
+                                 dpps_control_interface.h \
                                  ../libqdutils/qd_utils.h \
                                  ../libqdutils/display_config.h \
                                  ../libqservice/QServiceUtils.h \
diff --git a/include/display_color_processing.h b/include/display_color_processing.h
index 4ff1a77..ce6ea21 100644
--- a/include/display_color_processing.h
+++ b/include/display_color_processing.h
@@ -84,6 +84,52 @@
   struct rgb entries[LUT1D_ENTRIES_SIZE];
 };
 
+static const uint32_t kDeTuningFlagSharpFactor = 0x01;
+static const uint32_t kDeTuningFlagClip = 0x02;
+static const uint32_t kDeTuningFlagThrQuiet = 0x04;
+static const uint32_t kDeTuningFlagThrDieout = 0x08;
+static const uint32_t kDeTuningFlagThrLow = 0x10;
+static const uint32_t kDeTuningFlagThrHigh = 0x20;
+static const uint32_t kDeTuningFlagContentQualLevel = 0x40;
+static const uint32_t kDeTuningFlagDeBlend = 0x80;
+
+typedef enum {
+  kDeContentQualUnknown,
+  kDeContentQualLow,
+  kDeContentQualMedium,
+  kDeContentQualHigh,
+  kDeContentQualMax,
+} PPDEContentQualLevel;
+
+typedef enum {
+  kDeContentTypeUnknown,
+  kDeContentTypeVideo,
+  kDeContentTypeGraphics,
+  kDeContentTypeMax,
+} PPDEContentType;
+
+/*
+struct PPDETuningCfg
+*/
+struct PPDETuningCfg {
+  uint32_t flags;
+  int32_t sharp_factor;
+  uint16_t thr_quiet;
+  uint16_t thr_dieout;
+  uint16_t thr_low;
+  uint16_t thr_high;
+  uint16_t clip;
+  PPDEContentQualLevel quality;
+  PPDEContentType content_type;
+  uint32_t de_blend;
+};
+
+struct PPDETuningCfgData {
+  uint32_t cfg_en;
+  struct PPDETuningCfg params;
+  bool cfg_pending;
+};
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sdm/include/private/dpps_control_interface.h b/include/dpps_control_interface.h
similarity index 89%
rename from sdm/include/private/dpps_control_interface.h
rename to include/dpps_control_interface.h
index 8a44907..df27e65 100644
--- a/sdm/include/private/dpps_control_interface.h
+++ b/include/dpps_control_interface.h
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2016, The Linux Foundation. All rights reserved.
+* Copyright (c) 2016, 2019, The Linux Foundation. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are permitted
 * provided that the following conditions are met:
@@ -25,13 +25,16 @@
 #ifndef __DPPS_CONTROL_INTERFACE_H__
 #define __DPPS_CONTROL_INTERFACE_H__
 
+#include <string>
+
 namespace sdm {
 
 class DppsControlInterface {
  public:
   virtual ~DppsControlInterface() { }
-  virtual DisplayError On() = 0;
-  virtual DisplayError Off() = 0;
+  virtual int On() = 0;
+  virtual int Off() = 0;
+  virtual int ApplyCommand(const std::string &command) = 0;
 };
 
 }  // namespace sdm
diff --git a/sdm/include/private/color_params.h b/sdm/include/private/color_params.h
index 573e741..cdc6577 100644
--- a/sdm/include/private/color_params.h
+++ b/sdm/include/private/color_params.h
@@ -32,6 +32,8 @@
 
 #include <stdio.h>
 #include <string.h>
+#include <display_color_processing.h>
+#include <dpps_control_interface.h>
 #include <utils/locker.h>
 #include <utils/constants.h>
 #include <core/sdm_types.h>
@@ -186,9 +188,11 @@
 struct PPHWAttributes : HWResourceInfo, HWPanelInfo, DisplayConfigVariableInfo {
   char panel_name[256] = "generic_panel";
   PPFeatureVersion version;
+  DppsControlInterface *dpps_intf = NULL;
 
   void Set(const HWResourceInfo &hw_res, const HWPanelInfo &panel_info,
-           const DisplayConfigVariableInfo &attr, const PPFeatureVersion &feature_ver);
+           const DisplayConfigVariableInfo &attr, const PPFeatureVersion &feature_ver,
+           DppsControlInterface *dpps_intf);
 };
 
 struct PPDisplayAPIPayload {
@@ -272,49 +276,6 @@
   uint32_t buffer_size;
 };
 
-static const uint32_t kDeTuningFlagSharpFactor = 0x01;
-static const uint32_t kDeTuningFlagClip = 0x02;
-static const uint32_t kDeTuningFlagThrQuiet = 0x04;
-static const uint32_t kDeTuningFlagThrDieout = 0x08;
-static const uint32_t kDeTuningFlagThrLow = 0x10;
-static const uint32_t kDeTuningFlagThrHigh = 0x20;
-static const uint32_t kDeTuningFlagContentQualLevel = 0x40;
-static const uint32_t kDeTuningFlagDeBlend = 0x80;
-
-typedef enum {
-  kDeContentQualUnknown,
-  kDeContentQualLow,
-  kDeContentQualMedium,
-  kDeContentQualHigh,
-  kDeContentQualMax,
-} PPDEContentQualLevel;
-
-typedef enum {
-  kDeContentTypeUnknown,
-  kDeContentTypeVideo,
-  kDeContentTypeGraphics,
-  kDeContentTypeMax,
-} PPDEContentType;
-
-struct PPDETuningCfg {
-  uint32_t flags = 0;
-  int32_t sharp_factor = 0;
-  uint16_t thr_quiet = 0;
-  uint16_t thr_dieout = 0;
-  uint16_t thr_low = 0;
-  uint16_t thr_high = 0;
-  uint16_t clip = 0;
-  PPDEContentQualLevel quality = kDeContentQualUnknown;
-  PPDEContentType content_type = kDeContentTypeUnknown;
-  uint32_t de_blend = 0;
-};
-
-struct PPDETuningCfgData {
-  uint32_t cfg_en = 0;
-  PPDETuningCfg params;
-  bool cfg_pending = false;
-};
-
 struct SDEGamutCfg {
   static const int kGamutTableNum = 4;
   static const int kGamutScaleoffTableNum = 3;
diff --git a/sdm/libs/core/Android.mk b/sdm/libs/core/Android.mk
index 5b88f60..5840821 100644
--- a/sdm/libs/core/Android.mk
+++ b/sdm/libs/core/Android.mk
@@ -74,6 +74,5 @@
                                  $(SDM_HEADER_PATH)/private/hw_info_types.h \
                                  $(SDM_HEADER_PATH)/private/partial_update_interface.h \
                                  $(SDM_HEADER_PATH)/private/resource_interface.h \
-                                 $(SDM_HEADER_PATH)/private/strategy_interface.h \
-                                 $(SDM_HEADER_PATH)/private/dpps_control_interface.h
+                                 $(SDM_HEADER_PATH)/private/strategy_interface.h
 include $(BUILD_COPY_HEADERS)
diff --git a/sdm/libs/core/color_manager.cpp b/sdm/libs/core/color_manager.cpp
index 14b455f..bc74cf0 100644
--- a/sdm/libs/core/color_manager.cpp
+++ b/sdm/libs/core/color_manager.cpp
@@ -252,7 +252,8 @@
 ColorManagerProxy *ColorManagerProxy::CreateColorManagerProxy(DisplayType type,
                                                               HWInterface *hw_intf,
                                                               const HWDisplayAttributes &attribute,
-                                                              const HWPanelInfo &panel_info) {
+                                                              const HWPanelInfo &panel_info,
+                                                              DppsControlInterface *dpps_intf) {
   DisplayError error = kErrorNone;
   PPFeatureVersion versions;
   int32_t display_id = -1;
@@ -274,7 +275,7 @@
     if (error != kErrorNone) {
       DLOGW("Fail to get DSPP feature versions");
     } else {
-      hw_attr.Set(hw_res_info_, panel_info, attribute, versions);
+      hw_attr.Set(hw_res_info_, panel_info, attribute, versions, dpps_intf);
       DLOGI("PAV2 version is versions = %d, version = %d ",
             hw_attr.version.version[kGlobalColorFeaturePaV2],
             versions.version[kGlobalColorFeaturePaV2]);
@@ -371,7 +372,8 @@
 void PPHWAttributes::Set(const HWResourceInfo &hw_res,
                          const HWPanelInfo &panel_info,
                          const DisplayConfigVariableInfo &attr,
-                         const PPFeatureVersion &feature_ver) {
+                         const PPFeatureVersion &feature_ver,
+                         DppsControlInterface *intf) {
   HWResourceInfo &res = *this;
   res = hw_res;
   HWPanelInfo &panel = *this;
@@ -379,6 +381,7 @@
   DisplayConfigVariableInfo &attributes = *this;
   attributes = attr;
   version = feature_ver;
+  dpps_intf = intf;
 
   if (strlen(panel_info.panel_name)) {
     snprintf(&panel_name[0], sizeof(panel_name), "%s", &panel_info.panel_name[0]);
diff --git a/sdm/libs/core/color_manager.h b/sdm/libs/core/color_manager.h
index c84c032..c8f47e9 100644
--- a/sdm/libs/core/color_manager.h
+++ b/sdm/libs/core/color_manager.h
@@ -128,7 +128,8 @@
    */
   static ColorManagerProxy *CreateColorManagerProxy(DisplayType type, HWInterface *hw_intf,
                                                     const HWDisplayAttributes &attribute,
-                                                    const HWPanelInfo &panel_info);
+                                                    const HWPanelInfo &panel_info,
+                                                    DppsControlInterface *dpps_intf);
 
   /* need reverse the effect of CreateColorManagerProxy. */
   ~ColorManagerProxy();
diff --git a/sdm/libs/core/comp_manager.cpp b/sdm/libs/core/comp_manager.cpp
index 919e57f..6980820 100644
--- a/sdm/libs/core/comp_manager.cpp
+++ b/sdm/libs/core/comp_manager.cpp
@@ -559,7 +559,15 @@
   // DPPS feature and HDR using SSPP tone mapping can co-exist
   // DPPS feature and HDR using DSPP tone mapping are mutually exclusive
   if (dpps_ctrl_intf_ && hw_res_info_.src_tone_map.none()) {
-    return enable ? dpps_ctrl_intf_->On() : dpps_ctrl_intf_->Off();
+    int err = 0;
+    if (enable) {
+      err = dpps_ctrl_intf_->On();
+    } else {
+      err = dpps_ctrl_intf_->Off();
+    }
+    if (err) {
+      return kErrorUndefined;
+    }
   }
 
   return kErrorNone;
diff --git a/sdm/libs/core/comp_manager.h b/sdm/libs/core/comp_manager.h
index d804cd0..b7a15c3 100644
--- a/sdm/libs/core/comp_manager.h
+++ b/sdm/libs/core/comp_manager.h
@@ -87,6 +87,7 @@
   bool IsSafeMode() { return safe_mode_; }
   void GenerateROI(Handle display_ctx, HWLayers *hw_layers);
   DisplayError CheckEnforceSplit(Handle comp_handle, uint32_t new_refresh_rate);
+  DppsControlInterface* GetDppsControlIntf() { return dpps_ctrl_intf_; }
 
  private:
   static const int kMaxThermalLevel = 3;
diff --git a/sdm/libs/core/display_base.cpp b/sdm/libs/core/display_base.cpp
index ba49937..e454188 100644
--- a/sdm/libs/core/display_base.cpp
+++ b/sdm/libs/core/display_base.cpp
@@ -132,8 +132,10 @@
 
   // ColorManager supported for built-in display.
   if (kBuiltIn == display_type_) {
+    DppsControlInterface *dpps_intf = comp_manager_->GetDppsControlIntf();
     color_mgr_ = ColorManagerProxy::CreateColorManagerProxy(display_type_, hw_intf_,
-                                                            display_attributes_, hw_panel_info_);
+                                                            display_attributes_, hw_panel_info_,
+                                                            dpps_intf);
 
     if (color_mgr_) {
       if (InitializeColorModes() != kErrorNone) {