hwc2: Register Composer 2.4 callbacks

Register SEAMLESS_POSSIBLE callback for Composer 2.4.

Change-Id: Iafbd37833df7d89e1d4d8fbc6efb3d2ba033dcee
diff --git a/sdm/libs/hwc2/hwc_callbacks.cpp b/sdm/libs/hwc2/hwc_callbacks.cpp
index 8085dcb..aec1d32 100644
--- a/sdm/libs/hwc2/hwc_callbacks.cpp
+++ b/sdm/libs/hwc2/hwc_callbacks.cpp
@@ -81,6 +81,16 @@
   return HWC2::Error::None;
 }
 
+HWC2::Error HWCCallbacks::SeamlessPossible(hwc2_display_t display) {
+  DTRACE_SCOPED();
+  if (!seamless_possible_) {
+    return HWC2::Error::NoResources;
+  }
+
+  seamless_possible_(seamless_possible_data_, display);
+  return HWC2::Error::None;
+}
+
 HWC2::Error HWCCallbacks::Register(HWC2::Callback descriptor, hwc2_callback_data_t callback_data,
                                    hwc2_function_pointer_t pointer) {
   switch (descriptor) {
@@ -105,6 +115,10 @@
       vsync_period_timing_changed_ =
           reinterpret_cast<HWC2_PFN_VSYNC_PERIOD_TIMING_CHANGED>(pointer);
       break;
+    case HWC2::Callback::SeamlessPossible:
+      seamless_possible_data_ = callback_data;
+      seamless_possible_ = reinterpret_cast<HWC2_PFN_SEAMLESS_POSSIBLE>(pointer);
+      break;
     default:
       return HWC2::Error::BadParameter;
   }
diff --git a/sdm/libs/hwc2/hwc_callbacks.h b/sdm/libs/hwc2/hwc_callbacks.h
index baec40d..5e59550 100644
--- a/sdm/libs/hwc2/hwc_callbacks.h
+++ b/sdm/libs/hwc2/hwc_callbacks.h
@@ -56,6 +56,7 @@
   HWC2::Error Vsync_2_4(hwc2_display_t display, int64_t timestamp, uint32_t period);
   HWC2::Error VsyncPeriodTimingChanged(hwc2_display_t display,
                                        hwc_vsync_period_change_timeline_t *updated_timeline);
+  HWC2::Error SeamlessPossible(hwc2_display_t display);
   HWC2::Error Register(HWC2::Callback, hwc2_callback_data_t callback_data,
                        hwc2_function_pointer_t pointer);
   void UpdateVsyncSource(hwc2_display_t from) {
@@ -74,12 +75,14 @@
   hwc2_callback_data_t vsync_data_ = nullptr;
   hwc2_callback_data_t vsync_2_4_data_ = nullptr;
   hwc2_callback_data_t vsync_period_timing_changed_data_ = nullptr;
+  hwc2_callback_data_t seamless_possible_data_ = nullptr;
 
   HWC2_PFN_HOTPLUG hotplug_ = nullptr;
   HWC2_PFN_REFRESH refresh_ = nullptr;
   HWC2_PFN_VSYNC vsync_ = nullptr;
   HWC2_PFN_VSYNC_2_4 vsync_2_4_ = nullptr;
   HWC2_PFN_VSYNC_PERIOD_TIMING_CHANGED vsync_period_timing_changed_ = nullptr;
+  HWC2_PFN_SEAMLESS_POSSIBLE seamless_possible_ = nullptr;
   hwc2_display_t vsync_source_ = HWC_DISPLAY_PRIMARY;   // hw vsync is active on this display
   std::bitset<kNumDisplays> pending_refresh_;         // Displays waiting to get refreshed
 };