Pend the change of active config until the next Screen On am: c4c8de6a20
am: 2f327860cd

Change-Id: Icedefe1b37991f73c333c79c794fcb59f38bba4f
diff --git a/sdm/libs/core/display_builtin.cpp b/sdm/libs/core/display_builtin.cpp
index 70f0146..fa6d965 100644
--- a/sdm/libs/core/display_builtin.cpp
+++ b/sdm/libs/core/display_builtin.cpp
@@ -243,11 +243,38 @@
   // Set vsync enable state to false, as driver disables vsync during display power off.
   if (state == kStateOff) {
     vsync_enable_ = false;
+  } else if (state == kStateOn && pendingActiveConfig != UINT_MAX) {
+    DisplayBase::SetActiveConfig(pendingActiveConfig);
+    pendingActiveConfig = UINT_MAX;
   }
 
   return kErrorNone;
 }
 
+DisplayError DisplayBuiltIn::SetActiveConfig(uint32_t index) {
+  lock_guard<recursive_mutex> obj(recursive_mutex_);
+  DisplayState state;
+
+  if (DisplayBase::GetDisplayState(&state) == kErrorNone) {
+    if (state != kStateOn) {
+      pendingActiveConfig = index;
+      return kErrorNone;
+    }
+  }
+
+  pendingActiveConfig = UINT_MAX;
+  return DisplayBase::SetActiveConfig(index);
+}
+
+DisplayError DisplayBuiltIn::GetActiveConfig(uint32_t *index) {
+  lock_guard<recursive_mutex> obj(recursive_mutex_);
+  if (index && pendingActiveConfig != UINT_MAX) {
+    *index = pendingActiveConfig;
+    return kErrorNone;
+  }
+  return DisplayBase::GetActiveConfig(index);
+}
+
 void DisplayBuiltIn::SetIdleTimeoutMs(uint32_t active_ms) {
   lock_guard<recursive_mutex> obj(recursive_mutex_);
   comp_manager_->SetIdleTimeoutMs(display_comp_ctx_, active_ms);
diff --git a/sdm/libs/core/display_builtin.h b/sdm/libs/core/display_builtin.h
index 900d277..87a0562 100644
--- a/sdm/libs/core/display_builtin.h
+++ b/sdm/libs/core/display_builtin.h
@@ -65,6 +65,8 @@
   virtual DisplayError DisablePartialUpdateOneFrame();
   virtual DisplayError SetDisplayState(DisplayState state, bool teardown,
                                        int *release_fence);
+  virtual DisplayError SetActiveConfig(uint32_t index) override;
+  virtual DisplayError GetActiveConfig(uint32_t *index) override;
   virtual void SetIdleTimeoutMs(uint32_t active_ms);
   virtual DisplayError SetDisplayMode(uint32_t mode);
   virtual DisplayError GetRefreshRateRange(uint32_t *min_refresh_rate, uint32_t *max_refresh_rate);
@@ -120,6 +122,8 @@
   LayerRect right_frame_roi_ = {};
   Locker dpps_pu_lock_;
   bool dpps_pu_nofiy_pending_ = false;
+
+  uint32_t pendingActiveConfig = UINT_MAX;
 };
 
 }  // namespace sdm