diff --git a/sdm/include/core/display_interface.h b/sdm/include/core/display_interface.h
index eca709a..7d22519 100644
--- a/sdm/include/core/display_interface.h
+++ b/sdm/include/core/display_interface.h
@@ -499,14 +499,6 @@
   */
   virtual DisplayError SetPanelBrightness(int level) = 0;
 
-  /*! @brief Method to cache brightness of the primary display.
-
-    @param[in] level the new backlight level.
-
-    @return \link DisplayError \endlink
-  */
-  virtual DisplayError CachePanelBrightness(int level) = 0;
-
   /*! @brief Method to notify display about change in min HDCP encryption level.
 
     @param[in] min_enc_level minimum encryption level value.
diff --git a/sdm/include/private/color_params.h b/sdm/include/private/color_params.h
index 9a7f575..dbe7a97 100644
--- a/sdm/include/private/color_params.h
+++ b/sdm/include/private/color_params.h
@@ -54,7 +54,6 @@
   kEnableFrameCapture = BITMAP(6),
   kDisableFrameCapture = BITMAP(7),
   kConfigureDetailedEnhancer = BITMAP(8),
-  kInvalidatingAndkSetPanelBrightness = BITMAP(9),
   kModeSet = BITMAP(10),
   kGetDetailedEnhancerData = BITMAP(21),
   kNoAction = BITMAP(31),
diff --git a/sdm/libs/core/display_base.h b/sdm/libs/core/display_base.h
index ca873b0..930ddce 100644
--- a/sdm/libs/core/display_base.h
+++ b/sdm/libs/core/display_base.h
@@ -83,9 +83,6 @@
   virtual DisplayError SetPanelBrightness(int level) {
     return kErrorNotSupported;
   }
-  virtual DisplayError CachePanelBrightness(int level) {
-    return kErrorNotSupported;
-  }
   virtual DisplayError OnMinHdcpEncryptionLevelChange(uint32_t min_enc_level) {
     return kErrorNotSupported;
   }
diff --git a/sdm/libs/core/display_primary.cpp b/sdm/libs/core/display_primary.cpp
index f7da4de..cf3e73c 100644
--- a/sdm/libs/core/display_primary.cpp
+++ b/sdm/libs/core/display_primary.cpp
@@ -253,11 +253,6 @@
   return hw_intf_->SetPanelBrightness(level);
 }
 
-DisplayError DisplayPrimary::CachePanelBrightness(int level) {
-  lock_guard<recursive_mutex> obj(recursive_mutex_);
-  return hw_intf_->CachePanelBrightness(level);
-}
-
 DisplayError DisplayPrimary::GetRefreshRateRange(uint32_t *min_refresh_rate,
                                                  uint32_t *max_refresh_rate) {
   lock_guard<recursive_mutex> obj(recursive_mutex_);
diff --git a/sdm/libs/core/display_primary.h b/sdm/libs/core/display_primary.h
index 2da6712..a1887bd 100644
--- a/sdm/libs/core/display_primary.h
+++ b/sdm/libs/core/display_primary.h
@@ -67,7 +67,6 @@
   virtual DisplayError SetRefreshRate(uint32_t refresh_rate, bool final_rate);
   virtual DisplayError SetPanelBrightness(int level);
   virtual DisplayError GetPanelBrightness(int *level);
-  virtual DisplayError CachePanelBrightness(int level);
   virtual DisplayError HandleSecureEvent(SecureEvent secure_event);
 
   // Implement the HWEventHandlers
diff --git a/sdm/libs/core/drm/hw_device_drm.cpp b/sdm/libs/core/drm/hw_device_drm.cpp
index dca25db..8ff6ec6 100644
--- a/sdm/libs/core/drm/hw_device_drm.cpp
+++ b/sdm/libs/core/drm/hw_device_drm.cpp
@@ -1504,10 +1504,6 @@
   return err;
 }
 
-DisplayError HWDeviceDRM::CachePanelBrightness(int level) {
-  return kErrorNotSupported;
-}
-
 DisplayError HWDeviceDRM::GetHWScanInfo(HWScanInfo *scan_info) {
   return kErrorNotSupported;
 }
diff --git a/sdm/libs/core/drm/hw_device_drm.h b/sdm/libs/core/drm/hw_device_drm.h
index 5139c66..718cc15 100644
--- a/sdm/libs/core/drm/hw_device_drm.h
+++ b/sdm/libs/core/drm/hw_device_drm.h
@@ -90,7 +90,6 @@
   virtual DisplayError SetDisplayMode(const HWDisplayMode hw_display_mode);
   virtual DisplayError SetRefreshRate(uint32_t refresh_rate);
   virtual DisplayError SetPanelBrightness(int level);
-  virtual DisplayError CachePanelBrightness(int level);
   virtual DisplayError GetHWScanInfo(HWScanInfo *scan_info);
   virtual DisplayError GetVideoFormat(uint32_t config_index, uint32_t *video_format);
   virtual DisplayError GetMaxCEAFormat(uint32_t *max_cea_format);
diff --git a/sdm/libs/core/fb/hw_device.cpp b/sdm/libs/core/fb/hw_device.cpp
index 8dddc51..427cb89 100644
--- a/sdm/libs/core/fb/hw_device.cpp
+++ b/sdm/libs/core/fb/hw_device.cpp
@@ -503,12 +503,6 @@
   if (synchronous_commit_) {
     mdp_commit.flags |= MDP_COMMIT_WAIT_FOR_FINISH;
   }
-  if (bl_update_commit && bl_level_update_commit >= 0) {
-#ifdef MDP_COMMIT_UPDATE_BRIGHTNESS
-    mdp_commit.bl_level = (uint32_t)bl_level_update_commit;
-    mdp_commit.flags |= MDP_COMMIT_UPDATE_BRIGHTNESS;
-#endif
-  }
   if (Sys::ioctl_(device_fd_, INT(MSMFB_ATOMIC_COMMIT), &mdp_disp_commit_) < 0) {
     if (errno == ESHUTDOWN) {
       DLOGI_IF(kTagDriverConfig, "Driver is processing shutdown sequence");
@@ -563,9 +557,6 @@
     synchronous_commit_ = false;
   }
 
-  if (bl_update_commit)
-    bl_update_commit = false;
-
   return kErrorNone;
 }
 
@@ -1207,10 +1198,6 @@
   return kErrorNotSupported;
 }
 
-DisplayError HWDevice::CachePanelBrightness(int level) {
-  return kErrorNotSupported;
-}
-
 DisplayError HWDevice::GetHWScanInfo(HWScanInfo *scan_info) {
   return kErrorNotSupported;
 }
diff --git a/sdm/libs/core/fb/hw_device.h b/sdm/libs/core/fb/hw_device.h
index 7dd7f7a..39ceb2c 100644
--- a/sdm/libs/core/fb/hw_device.h
+++ b/sdm/libs/core/fb/hw_device.h
@@ -85,7 +85,6 @@
   virtual DisplayError SetDisplayMode(const HWDisplayMode hw_display_mode);
   virtual DisplayError SetRefreshRate(uint32_t refresh_rate);
   virtual DisplayError SetPanelBrightness(int level);
-  virtual DisplayError CachePanelBrightness(int level);
   virtual DisplayError GetHWScanInfo(HWScanInfo *scan_info);
   virtual DisplayError GetVideoFormat(uint32_t config_index, uint32_t *video_format);
   virtual DisplayError GetMaxCEAFormat(uint32_t *max_cea_format);
@@ -162,8 +161,6 @@
   HWDisplayAttributes display_attributes_ = {};
   HWMixerAttributes mixer_attributes_ = {};
   std::vector<mdp_destination_scaler_data> mdp_dest_scalar_data_;
-  int bl_level_update_commit = -1;
-  bool bl_update_commit = false;
 };
 
 }  // namespace sdm
diff --git a/sdm/libs/core/fb/hw_primary.cpp b/sdm/libs/core/fb/hw_primary.cpp
index 3f3c28e..4c72402 100644
--- a/sdm/libs/core/fb/hw_primary.cpp
+++ b/sdm/libs/core/fb/hw_primary.cpp
@@ -570,12 +570,6 @@
   return kErrorNone;
 }
 
-DisplayError HWPrimary::CachePanelBrightness(int level) {
-  bl_level_update_commit = level;
-  bl_update_commit = true;
-  return kErrorNone;
-}
-
 DisplayError HWPrimary::SetAutoRefresh(bool enable) {
   const int kWriteLength = 2;
   char buffer[kWriteLength] = {'\0'};
diff --git a/sdm/libs/core/fb/hw_primary.h b/sdm/libs/core/fb/hw_primary.h
index c6ca5a9..b385109 100644
--- a/sdm/libs/core/fb/hw_primary.h
+++ b/sdm/libs/core/fb/hw_primary.h
@@ -55,7 +55,6 @@
   virtual DisplayError SetDisplayMode(const HWDisplayMode hw_display_mode);
   virtual DisplayError SetRefreshRate(uint32_t refresh_rate);
   virtual DisplayError SetPanelBrightness(int level);
-  virtual DisplayError CachePanelBrightness(int level);
   virtual DisplayError GetPPFeaturesVersion(PPFeatureVersion *vers);
   virtual DisplayError SetPPFeatures(PPFeaturesConfig *feature_list);
   virtual DisplayError GetPanelBrightness(int *level);
diff --git a/sdm/libs/core/hw_interface.h b/sdm/libs/core/hw_interface.h
index 3cc483b..d02b0ba 100644
--- a/sdm/libs/core/hw_interface.h
+++ b/sdm/libs/core/hw_interface.h
@@ -101,7 +101,6 @@
   virtual DisplayError SetDisplayMode(const HWDisplayMode hw_display_mode) = 0;
   virtual DisplayError SetRefreshRate(uint32_t refresh_rate) = 0;
   virtual DisplayError SetPanelBrightness(int level) = 0;
-  virtual DisplayError CachePanelBrightness(int level) = 0;
   virtual DisplayError GetHWScanInfo(HWScanInfo *scan_info) = 0;
   virtual DisplayError GetVideoFormat(uint32_t config_index, uint32_t *video_format) = 0;
   virtual DisplayError GetMaxCEAFormat(uint32_t *max_cea_format) = 0;
