diff --git a/sdm/libs/hwc2/hwc_session.cpp b/sdm/libs/hwc2/hwc_session.cpp
index a2cd6f6..259c204 100644
--- a/sdm/libs/hwc2/hwc_session.cpp
+++ b/sdm/libs/hwc2/hwc_session.cpp
@@ -321,6 +321,13 @@
   *outCount = count;
 }
 
+int32_t HWCSession::GetDisplayBrightnessSupport(hwc2_device_t *device, hwc2_display_t display,
+                                                bool *out_support) {
+  HWCSession *hwc_session = static_cast<HWCSession *>(device);
+  *out_support = display == HWC_DISPLAY_PRIMARY && hwc_session->brightness_fd_ != -1;
+  return INT32(HWC2::Error::None);
+}
+
 template <typename PFN, typename T>
 static hwc2_function_pointer_t AsFP(T function) {
   static_assert(std::is_same<PFN, T>::value, "Incompatible function pointer");
@@ -977,13 +984,6 @@
   return INT32(HWC2::Error::None);
 }
 
-int32_t HWCSession::GetDisplayBrightnessSupport(hwc2_device_t *device, hwc2_display_t display,
-                                                bool *out_support) {
-  HWCSession *hwc_session = static_cast<HWCSession *>(device);
-  *out_support = display == HWC_DISPLAY_PRIMARY && hwc_session->brightness_fd_ != -1;
-  return INT32(HWC2::Error::None);
-}
-
 int32_t HWCSession::SetDisplayBrightness(hwc2_device_t *device, hwc2_display_t display,
                                          float brightness) {
   bool brightness_support = false;
@@ -1145,8 +1145,6 @@
       return AsFP<HWC2_PFN_GET_DISPLAYED_CONTENT_SAMPLE>(GetDisplayedContentSample);
     case HWC2::FunctionDescriptor::GetDisplayCapabilities:
       return AsFP<HWC2_PFN_GET_DISPLAY_CAPABILITIES>(GetDisplayCapabilities);
-    case HWC2::FunctionDescriptor::GetDisplayBrightnessSupport:
-      return AsFP<HWC2_PFN_GET_DISPLAY_BRIGHTNESS_SUPPORT>(GetDisplayBrightnessSupport);
     case HWC2::FunctionDescriptor::SetDisplayBrightness:
       return AsFP<HWC2_PFN_SET_DISPLAY_BRIGHTNESS>(SetDisplayBrightness);
     default:
diff --git a/sdm/libs/hwc2/hwc_session.h b/sdm/libs/hwc2/hwc_session.h
index ea187bc..303743b 100644
--- a/sdm/libs/hwc2/hwc_session.h
+++ b/sdm/libs/hwc2/hwc_session.h
@@ -181,8 +181,6 @@
                                 int32_t *out_support);
   static int32_t GetDisplayCapabilities(hwc2_device_t* device, hwc2_display_t display,
                                         uint32_t* outNumCapabilities, uint32_t* outCapabilities);
-  static int32_t GetDisplayBrightnessSupport(hwc2_device_t *device, hwc2_display_t display,
-                                             bool *out_support);
   static int32_t SetDisplayBrightness(hwc2_device_t *device, hwc2_display_t display,
                                       float brightness);
 
@@ -197,6 +195,8 @@
   static int Close(hw_device_t *device);
   static void GetCapabilities(struct hwc2_device *device, uint32_t *outCount,
                               int32_t *outCapabilities);
+  static int32_t GetDisplayBrightnessSupport(hwc2_device_t *device, hwc2_display_t display,
+                                             bool *out_support);
   static hwc2_function_pointer_t GetFunction(struct hwc2_device *device, int32_t descriptor);
 
   // Uevent handler
