diff --git a/include/hardware/hwcomposer2.h b/include/hardware/hwcomposer2.h
index 7db2aba..6400a7c 100644
--- a/include/hardware/hwcomposer2.h
+++ b/include/hardware/hwcomposer2.h
@@ -50,6 +50,11 @@
      * the device may return -1 instead */
     HWC2_ATTRIBUTE_DPI_X = 4,
     HWC2_ATTRIBUTE_DPI_Y = 5,
+
+    /* The configuration group this config is associated to.
+     * Switching between configurations within the same group may be done seamlessly
+     * in some conditions via setActiveConfigWithConstraints. */
+    HWC2_ATTRIBUTE_CONFIG_GROUP = 7,
 } hwc2_attribute_t;
 
 /* Blend modes, settable per layer */
@@ -74,6 +79,7 @@
     HWC2_CALLBACK_REFRESH = 2,
     HWC2_CALLBACK_VSYNC = 3,
     HWC2_CALLBACK_VSYNC_2_4 = 4,
+    HWC2_CALLBACK_VSYNC_PERIOD_TIMING_CHANGED = 5,
 } hwc2_callback_descriptor_t;
 
 /* Optional capabilities which may be supported by some devices. The particular
@@ -221,7 +227,7 @@
     HWC2_ERROR_NO_RESOURCES,
     HWC2_ERROR_NOT_VALIDATED,
     HWC2_ERROR_UNSUPPORTED,
-    HWC2_ERROR_BAD_VSYNC_PERIOD,
+    HWC2_ERROR_SEAMLESS_NOT_ALLOWED,
     HWC2_ERROR_SEAMLESS_NOT_POSSIBLE,
 } hwc2_error_t;
 
@@ -294,9 +300,8 @@
 
     // composer 2.4
     HWC2_FUNCTION_GET_DISPLAY_CONNECTION_TYPE,
-    HWC2_FUNCTION_GET_SUPPORTED_DISPLAY_VSYNC_PERIODS,
     HWC2_FUNCTION_GET_DISPLAY_VSYNC_PERIOD,
-    HWC2_FUNCTION_SET_ACTIVE_CONFIG_AND_VSYNC_PERIOD,
+    HWC2_FUNCTION_SET_ACTIVE_CONFIG_WITH_CONSTRAINTS,
 } hwc2_function_descriptor_t;
 
 /* Layer requests returned from getDisplayRequests */
@@ -443,6 +448,7 @@
         case HWC2_ATTRIBUTE_VSYNC_PERIOD: return "VsyncPeriod";
         case HWC2_ATTRIBUTE_DPI_X: return "DpiX";
         case HWC2_ATTRIBUTE_DPI_Y: return "DpiY";
+        case HWC2_ATTRIBUTE_CONFIG_GROUP: return "ConfigGroup";
         default: return "Unknown";
     }
 }
@@ -464,6 +470,8 @@
         case HWC2_CALLBACK_HOTPLUG: return "Hotplug";
         case HWC2_CALLBACK_REFRESH: return "Refresh";
         case HWC2_CALLBACK_VSYNC: return "Vsync";
+        case HWC2_CALLBACK_VSYNC_2_4: return "Vsync2.4";
+        case HWC2_CALLBACK_VSYNC_PERIOD_TIMING_CHANGED: return "VsyncPeriodTimingChanged";
         default: return "Unknown";
     }
 }
@@ -543,7 +551,7 @@
         case HWC2_ERROR_NO_RESOURCES: return "NoResources";
         case HWC2_ERROR_NOT_VALIDATED: return "NotValidated";
         case HWC2_ERROR_UNSUPPORTED: return "Unsupported";
-        case HWC2_ERROR_BAD_VSYNC_PERIOD: return "BadVsyncPeriod";
+        case HWC2_ERROR_SEAMLESS_NOT_ALLOWED: return "SeamlessNotAllowed";
         case HWC2_ERROR_SEAMLESS_NOT_POSSIBLE: return "SeamlessNotPossible";
         default: return "Unknown";
     }
@@ -630,9 +638,8 @@
 
         // composer 2.4
         case HWC2_FUNCTION_GET_DISPLAY_CONNECTION_TYPE: return "GetDisplayConnectionType";
-        case HWC2_FUNCTION_GET_SUPPORTED_DISPLAY_VSYNC_PERIODS: return "getSupportedDisplayVsyncPeriods";
-        case HWC2_FUNCTION_GET_DISPLAY_VSYNC_PERIOD: return "getDisplayVsyncPeriod";
-        case HWC2_FUNCTION_SET_ACTIVE_CONFIG_AND_VSYNC_PERIOD: return "setActiveConfigAndVsyncPeriod";
+        case HWC2_FUNCTION_GET_DISPLAY_VSYNC_PERIOD: return "GetDisplayVsyncPeriod";
+        case HWC2_FUNCTION_SET_ACTIVE_CONFIG_WITH_CONSTRAINTS: return "SetActiveConfigWithConstraints";
 
         default: return "Unknown";
     }
@@ -740,6 +747,7 @@
     VsyncPeriod = HWC2_ATTRIBUTE_VSYNC_PERIOD,
     DpiX = HWC2_ATTRIBUTE_DPI_X,
     DpiY = HWC2_ATTRIBUTE_DPI_Y,
+    ConfigGroup = HWC2_ATTRIBUTE_CONFIG_GROUP,
 };
 TO_STRING(hwc2_attribute_t, Attribute, getAttributeName)
 
@@ -757,6 +765,7 @@
     Refresh = HWC2_CALLBACK_REFRESH,
     Vsync = HWC2_CALLBACK_VSYNC,
     Vsync_2_4 = HWC2_CALLBACK_VSYNC_2_4,
+    VsyncPeriodTimingChanged = HWC2_CALLBACK_VSYNC_PERIOD_TIMING_CHANGED,
 };
 TO_STRING(hwc2_callback_descriptor_t, Callback, getCallbackDescriptorName)
 
@@ -816,7 +825,7 @@
     NoResources = HWC2_ERROR_NO_RESOURCES,
     NotValidated = HWC2_ERROR_NOT_VALIDATED,
     Unsupported = HWC2_ERROR_UNSUPPORTED,
-    BadVsyncPeriod = HWC2_ERROR_BAD_VSYNC_PERIOD,
+    SeamlessNotAllowed = HWC2_ERROR_SEAMLESS_NOT_ALLOWED,
     SeamlessNotPossible = HWC2_ERROR_SEAMLESS_NOT_POSSIBLE,
 };
 TO_STRING(hwc2_error_t, Error, getErrorName)
@@ -889,9 +898,8 @@
 
     // composer 2.4
     GetDisplayConnectionType = HWC2_FUNCTION_GET_DISPLAY_CONNECTION_TYPE,
-    getSupportedDisplayVsyncPeriods = HWC2_FUNCTION_GET_SUPPORTED_DISPLAY_VSYNC_PERIODS,
-    getDisplayVsyncPeriod = HWC2_FUNCTION_GET_DISPLAY_VSYNC_PERIOD,
-    setActiveConfigAndVsyncPeriod = HWC2_FUNCTION_SET_ACTIVE_CONFIG_AND_VSYNC_PERIOD,
+    GetDisplayVsyncPeriod = HWC2_FUNCTION_GET_DISPLAY_VSYNC_PERIOD,
+    SetActiveConfigWithConstraints = HWC2_FUNCTION_SET_ACTIVE_CONFIG_WITH_CONSTRAINTS,
 
 };
 TO_STRING(hwc2_function_descriptor_t, FunctionDescriptor,
@@ -1101,6 +1109,25 @@
 typedef void (*HWC2_PFN_VSYNC_2_4)(hwc2_callback_data_t callbackData,
         hwc2_display_t display, int64_t timestamp, hwc2_vsync_period_t vsyncPeriodNanos);
 
+/* vsyncPeriodTimingChanged(..., display, updated_timeline)
+ * Descriptor: HWC2_CALLBACK_VSYNC_PERIOD_TIMING_CHANGED
+ * Optional for HWC2 devices for composer 2.4
+ *
+ * Notifies the client that the previously reported timing for vsync period change has been
+ * updated. This may occur if the composer missed the deadline for changing the vsync period
+ * or the client submitted a refresh frame too late.
+ *
+ * This callback should be triggered from a thread of at least
+ * HAL_PRIORITY_URGENT_DISPLAY with as little latency as possible, typically
+ * less than 0.5 ms. This thread is guaranteed not to call back into the device.
+ *
+ * Parameters:
+ *   display - the display which has received a vsync event
+ *   updated_timeline - new timeline for the vsync period change
+ */
+typedef void (*HWC2_PFN_VSYNC_PERIOD_TIMING_CHANGED)(hwc2_callback_data_t callbackData,
+        hwc2_display_t display, hwc_vsync_period_change_timeline_t* updated_timeline);
+
 /*
  * Device Functions
  *
@@ -2814,30 +2841,6 @@
         hwc2_device_t* device, hwc2_display_t display,
         uint32_t* /*hwc2_display_connection_type_t*/ outType);
 
-/* getSupportedDisplayVsyncPeriods(..., outNumVsyncPeriods, outVsyncPeriods)
- * Descriptor: HWC2_FUNCTION_GET_SUPPORTED_DISPLAY_VSYNC_PERIODS
- * Required for HWC2 devices for composer 2.4
- *
- * Returns a array of supported vsync periods the display can refresh at a given configuration.
- *
- * outVsyncPeriods may be NULL to retrieve the number of elements which will be returned.
- *
- * Parameters:
- *   outNumVsyncPeriods - if outVsyncPeriods was NULL, the number of vsync periods which
- *       would have been returned; if outVsyncPeriods was not NULL, the number of
- *       vsync periods returned, which must not exceed the value stored in
- *       outNumVsyncPeriods prior to the call; pointer will be non-NULL
- *   outVsyncPeriods - an array of vsync periods
- *
- * Returns HWC2_ERROR_NONE or one of the following errors:
- *   HWC2_ERROR_BAD_DISPLAY - an invalid display handle was passed in
- *   HWC2_ERROR_BAD_CONFIG - the configuration handle passed in is not valid for
- *       this display
- */
-typedef int32_t /*hwc2_error_t*/ (*HWC2_PFN_GET_SUPPORTED_DISPLAY_VSYNC_PERIODS)(
-        hwc2_device_t* device, hwc2_display_t display, hwc2_config_t config,
-        uint32_t* outNumVsyncPeriods, hwc2_vsync_period_t* outVsyncPeriods);
-
 /* getDisplayVsyncPeriod(..., outVsyncPeriods)
  * Descriptor: HWC2_FUNCTION_GET_DISPLAY_VSYNC_PERIOD
  * Required for HWC2 devices for composer 2.4
@@ -2846,7 +2849,7 @@
  *
  * If no display configuration is currently active, this function must
  * return BAD_CONFIG. If a vsync period is about to change due to a
- * setActiveConfigAndVsyncPeriod call, this function must return the current vsync period
+ * setActiveConfigWithConstraints call, this function must return the current vsync period
  * until the change has taken place.
  *
  * Parameters:
@@ -2859,13 +2862,16 @@
 typedef int32_t /*hwc2_error_t*/ (*HWC2_PFN_GET_DISPLAY_VSYNC_PERIOD)(
         hwc2_device_t* device, hwc2_display_t display, hwc2_vsync_period_t* outVsyncPeriod);
 
-/* setActiveConfigAndVsyncPeriod(..., config, vsyncPeriodNanos,
- *                               vsyncPeriodChangeConstraints, outNewVsyncAppliedTime)
- * Descriptor: HWC2_FUNCTION_SET_ACTIVE_CONFIG_AND_VSYNC_PERIOD
+/* setActiveConfigWithConstraints(...,
+ *                                config,
+ *                                vsyncPeriodChangeConstraints,
+ *                                outTimeline)
+ * Descriptor: HWC2_FUNCTION_SET_ACTIVE_CONFIG_WITH_CONSTRAINTS
  * Required for HWC2 devices for composer 2.4
  *
  * Sets the active configuration and the refresh rate for this display.
- * If the config is the same as the current config, only the vsync period shall change.
+ * If the new config shares the same config group as the current config,
+ * only the vsync period shall change.
  * Upon returning, the given display configuration, except vsync period, must be active and
  * remain so until either this function is called again or the display is disconnected.
  * When the display starts to refresh at the new vsync period, onVsync_2_4 callback must be
@@ -2873,7 +2879,6 @@
  *
  * Parameters:
  *     config - the new display configuration.
- *     vsyncPeriodNanos - the new display vsync period.
  *     vsyncPeriodChangeConstraints - constraints required for changing vsync period:
  *                                    desiredTimeNanos - the time in CLOCK_MONOTONIC after
  *                                                       which the vsync period may change
@@ -2882,22 +2887,21 @@
  *                                    seamlessRequired - if true, requires that the vsync period
  *                                                       change must happen seamlessly without
  *                                                       a noticeable visual artifact.
- *     outNewVsyncAppliedTime - the time in CLOCK_MONOTONIC when the new display will start to
- *                              refresh at the new vsync period.
+ *     outTimeline - the timeline for the vsync period change.
  *
  * Returns HWC2_ERROR_NONE or one of the following errors:
  *   HWC2_ERROR_BAD_DISPLAY - an invalid display handle was passed in.
  *   HWC2_ERROR_BAD_CONFIG - an invalid configuration handle passed in.
- *   HWC2_ERROR_BAD_VSYNC_PERIOD - an invalid vsync period is passed in.
+ *   HWC2_ERROR_SEAMLESS_NOT_ALLOWED - when seamlessRequired was true but config provided doesn't
+     *                                 share the same config group as the current config.
  *   HWC2_ERROR_SEAMLESS_NOT_POSSIBLE - when seamlessRequired was true but the display cannot
  *                                      achieve the vsync period change without a noticeable
  *                                      visual artifact.
  */
-typedef int32_t /*hwc2_error_t*/ (*HWC2_PFN_SET_ACTIVE_CONFIG_AND_VSYNC_PERIOD)(
+typedef int32_t /*hwc2_error_t*/ (*HWC2_PFN_SET_ACTIVE_CONFIG_WITH_CONSTRAINTS)(
         hwc2_device_t* device, hwc2_display_t display, hwc2_config_t config,
-        hwc2_vsync_period_t vsyncPeriodNanos,
         hwc_vsync_period_change_constraints_t* vsyncPeriodChangeConstraints,
-        int64_t* outNewVsyncAppliedTime);
+        hwc_vsync_period_change_timeline_t* outTimeline);
 
 
 __END_DECLS
