diff --git a/libdrmutils/drm_interface.h b/libdrmutils/drm_interface.h
index 2aeb337..b552a57 100644
--- a/libdrmutils/drm_interface.h
+++ b/libdrmutils/drm_interface.h
@@ -351,13 +351,20 @@
    * Arg: uint32_t - Connector ID
    * DRMPPFeatureInfo * - PP feature data pointer
    */
-   CONNECTOR_SET_POST_PROC,
+  CONNECTOR_SET_POST_PROC,
   /*
    * Op: Sets connector hdr metadata
    * Arg: uint32_t - Connector ID
    *      drm_msm_ext_hdr_metadata - hdr_metadata
    */
   CONNECTOR_SET_HDR_METADATA,
+  /*
+   * Op: Cache Dpps features.
+   * Arg: uint32_t - Object ID
+          uint32_t - Feature ID
+   *      uint64_t - Pointer to feature config data
+   */
+  DPPS_CACHE_FEATURE,
 };
 
 enum struct DRMRotation {
@@ -601,6 +608,56 @@
   uint32_t object_type;
 };
 
+enum DRMDPPSFeatureID {
+  // Ad4 properties
+  kFeatureAd4Mode,
+  kFeatureAd4Init,
+  kFeatureAd4Cfg,
+  kFeatureAd4Input,
+  kFeatureAd4Backlight,
+  kFeatureAd4Assertiveness,
+  kFeatureAd4ManualStrength,
+  // ABA properties
+  kFeatureAbaHistCtrl,
+  kFeatureAbaHistIRQ,
+  kFeatureAbaLut,
+  // BL scale properties
+  kFeatureAd4BlScale,
+  kFeatureBacklightScale,
+  // Events
+  kFeaturePowerEvent,
+  kFeatureAbaHistEvent,
+  kFeatureBackLightEvent,
+  kFeatureAdAttBlEvent,
+  // Insert features above
+  kDppsFeaturesMax,
+};
+
+struct DRMDppsFeatureInfo {
+  DRMDPPSFeatureID id;
+  uint32_t version;
+};
+
+enum AD4Modes {
+  kAd4Off,
+  kAd4AutoStrength,
+  kAd4Calibration,
+  kAd4Manual,
+  kAd4ModeMax,
+};
+
+enum HistModes {
+  kHistDisabled,
+  kHistEnabled,
+};
+
+struct DRMDppsEventInfo {
+  uint32_t object_type;
+  uint32_t event_type;
+  int drm_fd;
+  bool enable;
+};
+
 enum DRMCscType {
   kCscYuv2Rgb601L,
   kCscYuv2Rgb601FR,
@@ -638,16 +695,16 @@
 };
 
 struct DRMSolidfillStage {
- DRMRect bounding_rect {};
- bool is_exclusion_rect = false;
- uint32_t color = 0xff000000; // in 8bit argb
- uint32_t red = 0;
- uint32_t blue = 0;
- uint32_t green = 0;
- uint32_t alpha = 0xff;
- uint32_t color_bit_depth = 0;
- uint32_t z_order = 0;
- uint32_t plane_alpha = 0xff;
+  DRMRect bounding_rect {};
+  bool is_exclusion_rect = false;
+  uint32_t color = 0xff000000;  // in 8bit argb
+  uint32_t red = 0;
+  uint32_t blue = 0;
+  uint32_t green = 0;
+  uint32_t alpha = 0xff;
+  uint32_t color_bit_depth = 0;
+  uint32_t z_order = 0;
+  uint32_t plane_alpha = 0xff;
 };
 
 /* DRM Atomic Request Property Set.
@@ -767,6 +824,13 @@
    * [return]: Error code if the API fails, 0 on success.
    */
   virtual int SetScalerLUT(const DRMScalerLUTInfo &lut_info) = 0;
+
+  /*
+   * Get the DPPS feature info
+   * [input]: Dpps feature id, info->id
+   * [output]: Dpps feature version, info->version
+   */
+  virtual void GetDppsFeatureInfo(DRMDppsFeatureInfo *info) = 0;
 };
 
 }  // namespace sde_drm
diff --git a/sdm/include/core/dpps_interface.h b/sdm/include/core/dpps_interface.h
new file mode 100644
index 0000000..d3d3d02
--- /dev/null
+++ b/sdm/include/core/dpps_interface.h
@@ -0,0 +1,70 @@
+/*
+* Copyright (c) 2018, 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:
+*  * Redistributions of source code must retain the above copyright
+*    notice, this list of conditions and the following disclaimer.
+*  * Redistributions in binary form must reproduce the above
+*    copyright notice, this list of conditions and the following
+*    disclaimer in the documentation and/or other materials provided
+*    with the distribution.
+*  * Neither the name of The Linux Foundation nor the names of its
+*    contributors may be used to endorse or promote products derived
+*    from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef __DPPS_INTERFACE_H__
+#define __DPPS_INTERFACE_H__
+
+#include <core/sdm_types.h>
+
+namespace sdm {
+
+class DppsPropIntf {
+ public:
+  virtual DisplayError SetDppsFeature(uint32_t object_type,
+                                      uint32_t feature_id, uint64_t value) = 0;
+  virtual DisplayError GetDppsFeatureInfo(void *info) = 0;
+
+ protected:
+  virtual ~DppsPropIntf() { }
+};
+
+class DppsInterface {
+ public:
+  virtual int Init(DppsPropIntf* intf) = 0;
+  virtual int Deinit() = 0;
+
+ protected:
+  virtual ~DppsInterface() { }
+};
+
+class DppsDummyImpl : public DppsInterface {
+ public:
+  int Init(DppsPropIntf* intf) {
+    (void)intf;
+    return 0;
+  }
+  int Deinit() {
+    delete this;
+    return 0;
+  }
+};
+
+}  // namespace sdm
+
+#endif  // __DPPS_INTERFACE_H__
diff --git a/sdm/libs/core/Android.mk b/sdm/libs/core/Android.mk
index d4aa933..8256d2f 100644
--- a/sdm/libs/core/Android.mk
+++ b/sdm/libs/core/Android.mk
@@ -69,7 +69,8 @@
                                  $(SDM_HEADER_PATH)/core/layer_buffer.h \
                                  $(SDM_HEADER_PATH)/core/layer_stack.h \
                                  $(SDM_HEADER_PATH)/core/sdm_types.h \
-                                 $(SDM_HEADER_PATH)/core/socket_handler.h
+                                 $(SDM_HEADER_PATH)/core/socket_handler.h \
+                                 $(SDM_HEADER_PATH)/core/dpps_interface.h
 include $(BUILD_COPY_HEADERS)
 
 include $(CLEAR_VARS)
diff --git a/sdm/libs/core/display_primary.cpp b/sdm/libs/core/display_primary.cpp
index d9fef33..fe38fcd 100644
--- a/sdm/libs/core/display_primary.cpp
+++ b/sdm/libs/core/display_primary.cpp
@@ -101,6 +101,13 @@
   return error;
 }
 
+DisplayError DisplayPrimary::Deinit() {
+  lock_guard<recursive_mutex> obj(recursive_mutex_);
+
+  dpps_info_.Deinit();
+  return DisplayBase::Deinit();
+}
+
 DisplayError DisplayPrimary::Prepare(LayerStack *layer_stack) {
   lock_guard<recursive_mutex> obj(recursive_mutex_);
   DisplayError error = kErrorNone;
@@ -163,6 +170,8 @@
     ControlPartialUpdate(true /* enable */, &pending);
   }
 
+  dpps_info_.Init(this);
+
   return error;
 }
 
@@ -419,5 +428,61 @@
   }
 }
 
+DisplayError DisplayPrimary::SetDppsFeature(uint32_t object_type,
+                            uint32_t feature_id, uint64_t value) {
+    return hw_intf_->SetDppsFeature(object_type, feature_id, value);
+}
+
+DisplayError DisplayPrimary::GetDppsFeatureInfo(void *info) {
+    return hw_intf_->GetDppsFeatureInfo(info);
+}
+
+void DppsInfo::Init(DppsPropIntf* intf) {
+  int error = 0;
+
+  if (dpps_initialized_) {
+    return;
+  }
+
+  if (!dpps_impl_lib.Open(kDppsLib)) {
+    DLOGW("Failed to load Dpps lib %s", kDppsLib);
+    goto exit;
+  }
+
+  if (!dpps_impl_lib.Sym("GetDppsInterface",
+         reinterpret_cast<void **>(&GetDppsInterface))) {
+    DLOGE("GetDppsInterface not found!, err %s", dlerror());
+    goto exit;
+  }
+
+  dpps_intf = GetDppsInterface();
+  if (!dpps_intf) {
+    DLOGE("Failed to get Dpps Interface!");
+    goto exit;
+  }
+
+  error = dpps_intf->Init(intf);
+  if (!error) {
+    DLOGI("DPPS Interface init successfully");
+    dpps_initialized_ = true;
+    return;
+  } else {
+    DLOGE("DPPS Interface init failure with err %d", error);
+  }
+
+exit:
+  Deinit();
+  dpps_intf = new DppsDummyImpl();
+  dpps_initialized_ = true;
+}
+
+void DppsInfo::Deinit() {
+  if (dpps_intf) {
+    dpps_intf->Deinit();
+    dpps_intf = NULL;
+  }
+  dpps_impl_lib.~DynLib();
+}
+
 }  // namespace sdm
 
diff --git a/sdm/libs/core/display_primary.h b/sdm/libs/core/display_primary.h
index e14c6d7..ff5ba69 100644
--- a/sdm/libs/core/display_primary.h
+++ b/sdm/libs/core/display_primary.h
@@ -25,6 +25,7 @@
 #ifndef __DISPLAY_PRIMARY_H__
 #define __DISPLAY_PRIMARY_H__
 
+#include <core/dpps_interface.h>
 #include <vector>
 
 #include "display_base.h"
@@ -34,12 +35,26 @@
 
 class HWPrimaryInterface;
 
-class DisplayPrimary : public DisplayBase, HWEventHandler {
+class DppsInfo {
+ public:
+  void Init(DppsPropIntf* intf);
+  void Deinit();
+
+ private:
+  const char *kDppsLib = "libdpps.so";
+  DynLib dpps_impl_lib;
+  DppsInterface* dpps_intf = NULL;
+  DppsInterface* (*GetDppsInterface)() = NULL;
+  bool dpps_initialized_ = false;
+};
+
+class DisplayPrimary : public DisplayBase, HWEventHandler, DppsPropIntf {
  public:
   DisplayPrimary(DisplayEventHandler *event_handler, HWInfoInterface *hw_info_intf,
                  BufferSyncHandler *buffer_sync_handler, BufferAllocator *buffer_allocator,
                  CompManager *comp_manager);
   virtual DisplayError Init();
+  virtual DisplayError Deinit();
   virtual DisplayError Prepare(LayerStack *layer_stack);
   virtual DisplayError Commit(LayerStack *layer_stack);
   virtual DisplayError ControlPartialUpdate(bool enable, uint32_t *pending);
@@ -63,6 +78,11 @@
   virtual void PingPongTimeout();
   virtual void PanelDead();
 
+  // Implement the DppsPropIntf
+  virtual DisplayError SetDppsFeature(uint32_t object_type,
+                                      uint32_t feature_id, uint64_t value);
+  virtual DisplayError GetDppsFeatureInfo(void *info);
+
  private:
   bool NeedsAVREnable();
   void ResetPanel();
@@ -73,6 +93,7 @@
   bool handle_idle_timeout_ = false;
   uint32_t current_refresh_rate_ = 0;
   bool reset_panel_ = false;
+  DppsInfo dpps_info_ = {};
 };
 
 }  // namespace sdm
diff --git a/sdm/libs/core/drm/hw_device_drm.h b/sdm/libs/core/drm/hw_device_drm.h
index a0782c4..809fd96 100644
--- a/sdm/libs/core/drm/hw_device_drm.h
+++ b/sdm/libs/core/drm/hw_device_drm.h
@@ -105,6 +105,9 @@
   virtual void InitializeConfigs();
   virtual DisplayError DumpDebugData() { return kErrorNone; }
   virtual void PopulateHWPanelInfo();
+  virtual DisplayError SetDppsFeature(uint32_t object_type, uint32_t feature_id,
+                                      uint64_t value) { return kErrorNotSupported; }
+  virtual DisplayError GetDppsFeatureInfo(void *info) { return kErrorNotSupported; }
 
   enum {
     kHWEventVSync,
diff --git a/sdm/libs/core/drm/hw_peripheral_drm.cpp b/sdm/libs/core/drm/hw_peripheral_drm.cpp
index 44c22e7..35537a5 100644
--- a/sdm/libs/core/drm/hw_peripheral_drm.cpp
+++ b/sdm/libs/core/drm/hw_peripheral_drm.cpp
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2017, The Linux Foundation. All rights reserved.
+Copyright (c) 2017-2018, 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
@@ -36,6 +36,7 @@
 using sde_drm::DRMDisplayType;
 using sde_drm::DRMOps;
 using sde_drm::DRMPowerMode;
+using sde_drm::DRMDppsFeatureInfo;
 
 namespace sdm {
 
@@ -131,5 +132,27 @@
   return kErrorNone;
 }
 
+DisplayError HWPeripheralDRM::SetDppsFeature(uint32_t object_type,
+        uint32_t feature_id, uint64_t value) {
+  uint32_t obj_id;
+
+  if (object_type == DRM_MODE_OBJECT_CRTC) {
+    obj_id = token_.crtc_id;
+  } else if (object_type == DRM_MODE_OBJECT_CONNECTOR) {
+    obj_id = token_.conn_id;
+  } else {
+    DLOGE("invalid object type 0x%x", object_type);
+    return kErrorUndefined;
+  }
+
+  drm_atomic_intf_->Perform(DRMOps::DPPS_CACHE_FEATURE, obj_id, feature_id, value);
+  return kErrorNone;
+}
+
+DisplayError HWPeripheralDRM::GetDppsFeatureInfo(void *info) {
+  DRMDppsFeatureInfo *feature_info = reinterpret_cast<DRMDppsFeatureInfo *>(info);
+  drm_mgr_intf_->GetDppsFeatureInfo(feature_info);
+  return kErrorNone;
+}
 
 }  // namespace sdm
diff --git a/sdm/libs/core/drm/hw_peripheral_drm.h b/sdm/libs/core/drm/hw_peripheral_drm.h
index e4b33cf..6da6249 100644
--- a/sdm/libs/core/drm/hw_peripheral_drm.h
+++ b/sdm/libs/core/drm/hw_peripheral_drm.h
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2017, The Linux Foundation. All rights reserved.
+Copyright (c) 2017-2018, 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
@@ -47,6 +47,9 @@
   virtual DisplayError Validate(HWLayers *hw_layers);
   virtual DisplayError Commit(HWLayers *hw_layers);
   virtual DisplayError Flush();
+  virtual DisplayError SetDppsFeature(uint32_t object_type, uint32_t feature_id,
+                                      uint64_t value);
+  virtual DisplayError GetDppsFeatureInfo(void *info);
  private:
   void SetDestScalarData(HWLayersInfo hw_layer_info);
   void ResetDisplayParams();
diff --git a/sdm/libs/core/fb/hw_device.h b/sdm/libs/core/fb/hw_device.h
index 353cce5..08f9230 100644
--- a/sdm/libs/core/fb/hw_device.h
+++ b/sdm/libs/core/fb/hw_device.h
@@ -98,6 +98,9 @@
   virtual DisplayError SetMixerAttributes(const HWMixerAttributes &mixer_attributes);
   virtual DisplayError GetMixerAttributes(HWMixerAttributes *mixer_attributes);
   virtual DisplayError DumpDebugData();
+  virtual DisplayError SetDppsFeature(uint32_t object_type, uint32_t feature_id,
+                                      uint64_t value) { return kErrorNotSupported; }
+  virtual DisplayError GetDppsFeatureInfo(void *info) { return kErrorNotSupported; }
 
   enum {
     kHWEventVSync,
diff --git a/sdm/libs/core/hw_interface.h b/sdm/libs/core/hw_interface.h
index 483a4df..fdb901f 100644
--- a/sdm/libs/core/hw_interface.h
+++ b/sdm/libs/core/hw_interface.h
@@ -113,6 +113,9 @@
   virtual DisplayError SetMixerAttributes(const HWMixerAttributes &mixer_attributes) = 0;
   virtual DisplayError GetMixerAttributes(HWMixerAttributes *mixer_attributes) = 0;
   virtual DisplayError DumpDebugData() = 0;
+  virtual DisplayError SetDppsFeature(uint32_t object_type,
+                                      uint32_t feature_id, uint64_t value) = 0;
+  virtual DisplayError GetDppsFeatureInfo(void *info) = 0;
 
  protected:
   virtual ~HWInterface() { }
