diff --git a/display/composer/3.2/Android.bp b/display/composer/3.2/Android.bp
new file mode 100644
index 0000000..0446fb4
--- /dev/null
+++ b/display/composer/3.2/Android.bp
@@ -0,0 +1,24 @@
+// This file is autogenerated by hidl-gen -Landroidbp.
+
+hidl_interface {
+    name: "vendor.qti.hardware.display.composer@3.2",
+    root: "vendor.qti.hardware.display",
+    system_ext_specific: true,
+    srcs: [
+        "IQtiComposer.hal",
+        "IQtiComposerClient.hal",
+    ],
+    interfaces: [
+        "android.hardware.graphics.common@1.0",
+        "android.hardware.graphics.common@1.1",
+        "android.hardware.graphics.common@1.2",
+        "android.hardware.graphics.composer@2.1",
+        "android.hardware.graphics.composer@2.2",
+        "android.hardware.graphics.composer@2.3",
+        "android.hardware.graphics.composer@2.4",
+        "vendor.qti.hardware.display.composer@3.0",
+        "vendor.qti.hardware.display.composer@3.1",
+        "android.hidl.base@1.0",
+    ],
+    gen_java: false,
+}
diff --git a/display/composer/3.2/IQtiComposer.hal b/display/composer/3.2/IQtiComposer.hal
new file mode 100644
index 0000000..f34f86c
--- /dev/null
+++ b/display/composer/3.2/IQtiComposer.hal
@@ -0,0 +1,24 @@
+/* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear
+*/
+
+package vendor.qti.hardware.display.composer@3.2;
+
+import @3.1::IQtiComposer;
+import IQtiComposerClient;
+import android.hardware.graphics.composer@2.1::Error;
+
+interface IQtiComposer extends @3.1::IQtiComposer {
+      /**
+     * Creates a v3.2 client of the composer.
+     *
+     * @return error is NONE upon success. Otherwise,
+     *         NO_RESOURCES when the client could not be created.
+     * @return client is the newly created client.
+     */
+    @entry
+    @callflow(next="*")
+    createClient_3_2() generates (Error error, IQtiComposerClient client);
+
+};
+
diff --git a/display/composer/3.2/IQtiComposerClient.hal b/display/composer/3.2/IQtiComposerClient.hal
new file mode 100644
index 0000000..156cc7b
--- /dev/null
+++ b/display/composer/3.2/IQtiComposerClient.hal
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear
+*/
+
+
+package vendor.qti.hardware.display.composer@3.2;
+
+import @3.1::IQtiComposerClient;
+interface IQtiComposerClient extends @3.1::IQtiComposerClient {
+
+    enum Command : @3.1::IQtiComposerClient.Command {
+        /**
+         * SET_SINGLE_BUFFER_MODE has this pseudo prototype
+         * setSingleBufferMode(bool isAutoRefresh);
+         */
+
+        SET_SINGLE_BUFFER_MODE_3_2 = 0x805 << IQtiComposerClient.Command:OPCODE_SHIFT,
+    };
+
+
+};
+
diff --git a/display/composer/3.2/hidl_gen_version b/display/composer/3.2/hidl_gen_version
new file mode 100644
index 0000000..e4ca12c
--- /dev/null
+++ b/display/composer/3.2/hidl_gen_version
@@ -0,0 +1 @@
+version=3.2
diff --git a/display/current.txt b/display/current.txt
index 4115e18..e9a5789 100644
--- a/display/current.txt
+++ b/display/current.txt
@@ -113,6 +113,11 @@
 fa035077927f2dff68d2b1ad6e6379822d29364999aa3fd70c5d2ffe93707d9b vendor.qti.hardware.display.demura@1.0::IDemuraFileFinder
 e609d77b00158060ca222ccd13e0ba8019a42336e3b6a6a32c6396f7b7ea2077 vendor.qti.hardware.display.composer@3.1::IQtiComposer
 ee6870d17e33bf8e2365165637b75559ceffda57770b1a35f3a9a8bbf3769266 vendor.qti.hardware.display.composer@3.1::IQtiComposerClient
+dcd4f8ce2125de8f3e4f7fb790bc10b39c0b1eeabc464e89acda557d9003c0ee vendor.qti.hardware.display.composer@3.2::IQtiComposer
+cf55579bd148bc2dc71274109cfed27bd378020e9fe2444500d6691a01bdf537 vendor.qti.hardware.display.composer@3.2::IQtiComposerClient
+
+
+
 550322847ebc31fd2c13a34aefa1f75df1c879cb423422831d5a5f35ba77aca4 vendor.qti.hardware.display.demura@2.0::IDemuraFileFinder
 
 #HAL released in Android T
diff --git a/systemhelper/aidl/Android.bp b/systemhelper/aidl/Android.bp
new file mode 100644
index 0000000..cdb579b
--- /dev/null
+++ b/systemhelper/aidl/Android.bp
@@ -0,0 +1,32 @@
+aidl_interface {
+    name: "vendor.qti.hardware.systemhelperaidl",
+    vendor_available: true,
+    owner: "qti",
+    srcs: [
+        "vendor/qti/hardware/systemhelperaidl/*.aidl",
+    ],
+    imports: [
+        "android.hardware.common-V2",
+    ],
+    stability: "vintf",
+    backend: {
+        cpp: {
+            enabled: false,
+        },
+        java: {
+            sdk_version: "module_current",
+            enabled: false,
+        },
+        ndk: {
+            enabled: true,
+        },
+    },
+    versions_with_info: [
+        {
+            version: "1",
+            imports: ["android.hardware.common-V2"],
+        },
+    ],
+    frozen: true,
+
+}
diff --git a/systemhelper/aidl/aidl_api/vendor.qti.hardware.systemhelperaidl/1/.hash b/systemhelper/aidl/aidl_api/vendor.qti.hardware.systemhelperaidl/1/.hash
new file mode 100644
index 0000000..ac0135f
--- /dev/null
+++ b/systemhelper/aidl/aidl_api/vendor.qti.hardware.systemhelperaidl/1/.hash
@@ -0,0 +1 @@
+63abbe6a1e4c2a6c3495d7853b73d3da813e18c9
diff --git a/systemhelper/aidl/aidl_api/vendor.qti.hardware.systemhelperaidl/1/vendor/qti/hardware/systemhelperaidl/ISystemEvent.aidl b/systemhelper/aidl/aidl_api/vendor.qti.hardware.systemhelperaidl/1/vendor/qti/hardware/systemhelperaidl/ISystemEvent.aidl
new file mode 100644
index 0000000..2e2bfc4
--- /dev/null
+++ b/systemhelper/aidl/aidl_api/vendor.qti.hardware.systemhelperaidl/1/vendor/qti/hardware/systemhelperaidl/ISystemEvent.aidl
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear
+ */
+///////////////////////////////////////////////////////////////////////////////
+// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
+///////////////////////////////////////////////////////////////////////////////
+
+// This file is a snapshot of an AIDL file. Do not edit it manually. There are
+// two cases:
+// 1). this is a frozen version file - do not edit this in any case.
+// 2). this is a 'current' file. If you make a backwards compatible change to
+//     the interface (from the latest frozen version), the build system will
+//     prompt you to update this file with `m <name>-update-api`.
+//
+// You must not make a backward incompatible change to any AIDL file built
+// with the aidl_interface module type with versions property set. The module
+// type is used to build AIDL files in a way that they can be used across
+// independently updatable components of the system. If a device is shipped
+// with such a backward incompatible change, it has a high risk of breaking
+// later when a module using the interface is updated, e.g., Mainline modules.
+
+package vendor.qti.hardware.systemhelperaidl;
+@VintfStability
+interface ISystemEvent {
+  int deRegisterEvent(in long eventIds, in vendor.qti.hardware.systemhelperaidl.ISystemEventCallback cb);
+  int registerEvent(in long eventIds, in vendor.qti.hardware.systemhelperaidl.ISystemEventCallback cb);
+}
diff --git a/systemhelper/aidl/aidl_api/vendor.qti.hardware.systemhelperaidl/1/vendor/qti/hardware/systemhelperaidl/ISystemEventCallback.aidl b/systemhelper/aidl/aidl_api/vendor.qti.hardware.systemhelperaidl/1/vendor/qti/hardware/systemhelperaidl/ISystemEventCallback.aidl
new file mode 100644
index 0000000..e199c97
--- /dev/null
+++ b/systemhelper/aidl/aidl_api/vendor.qti.hardware.systemhelperaidl/1/vendor/qti/hardware/systemhelperaidl/ISystemEventCallback.aidl
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear
+ */
+///////////////////////////////////////////////////////////////////////////////
+// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
+///////////////////////////////////////////////////////////////////////////////
+
+// This file is a snapshot of an AIDL file. Do not edit it manually. There are
+// two cases:
+// 1). this is a frozen version file - do not edit this in any case.
+// 2). this is a 'current' file. If you make a backwards compatible change to
+//     the interface (from the latest frozen version), the build system will
+//     prompt you to update this file with `m <name>-update-api`.
+//
+// You must not make a backward incompatible change to any AIDL file built
+// with the aidl_interface module type with versions property set. The module
+// type is used to build AIDL files in a way that they can be used across
+// independently updatable components of the system. If a device is shipped
+// with such a backward incompatible change, it has a high risk of breaking
+// later when a module using the interface is updated, e.g., Mainline modules.
+
+package vendor.qti.hardware.systemhelperaidl;
+@VintfStability
+interface ISystemEventCallback {
+  oneway void onEvent(in long eventId);
+}
diff --git a/systemhelper/aidl/aidl_api/vendor.qti.hardware.systemhelperaidl/1/vendor/qti/hardware/systemhelperaidl/ISystemResource.aidl b/systemhelper/aidl/aidl_api/vendor.qti.hardware.systemhelperaidl/1/vendor/qti/hardware/systemhelperaidl/ISystemResource.aidl
new file mode 100644
index 0000000..0371bbc
--- /dev/null
+++ b/systemhelper/aidl/aidl_api/vendor.qti.hardware.systemhelperaidl/1/vendor/qti/hardware/systemhelperaidl/ISystemResource.aidl
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear
+ */
+///////////////////////////////////////////////////////////////////////////////
+// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
+///////////////////////////////////////////////////////////////////////////////
+
+// This file is a snapshot of an AIDL file. Do not edit it manually. There are
+// two cases:
+// 1). this is a frozen version file - do not edit this in any case.
+// 2). this is a 'current' file. If you make a backwards compatible change to
+//     the interface (from the latest frozen version), the build system will
+//     prompt you to update this file with `m <name>-update-api`.
+//
+// You must not make a backward incompatible change to any AIDL file built
+// with the aidl_interface module type with versions property set. The module
+// type is used to build AIDL files in a way that they can be used across
+// independently updatable components of the system. If a device is shipped
+// with such a backward incompatible change, it has a high risk of breaking
+// later when a module using the interface is updated, e.g., Mainline modules.
+
+package vendor.qti.hardware.systemhelperaidl;
+@VintfStability
+interface ISystemResource {
+  int acquire(in vendor.qti.hardware.systemhelperaidl.SystemResourceType resource);
+  int acquireSurface(in int width, in int height, out android.hardware.common.NativeHandle Handle);
+  void release(in int resourceId);
+}
diff --git a/systemhelper/aidl/aidl_api/vendor.qti.hardware.systemhelperaidl/1/vendor/qti/hardware/systemhelperaidl/SystemEventType.aidl b/systemhelper/aidl/aidl_api/vendor.qti.hardware.systemhelperaidl/1/vendor/qti/hardware/systemhelperaidl/SystemEventType.aidl
new file mode 100644
index 0000000..ee16c96
--- /dev/null
+++ b/systemhelper/aidl/aidl_api/vendor.qti.hardware.systemhelperaidl/1/vendor/qti/hardware/systemhelperaidl/SystemEventType.aidl
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear
+ */
+///////////////////////////////////////////////////////////////////////////////
+// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
+///////////////////////////////////////////////////////////////////////////////
+
+// This file is a snapshot of an AIDL file. Do not edit it manually. There are
+// two cases:
+// 1). this is a frozen version file - do not edit this in any case.
+// 2). this is a 'current' file. If you make a backwards compatible change to
+//     the interface (from the latest frozen version), the build system will
+//     prompt you to update this file with `m <name>-update-api`.
+//
+// You must not make a backward incompatible change to any AIDL file built
+// with the aidl_interface module type with versions property set. The module
+// type is used to build AIDL files in a way that they can be used across
+// independently updatable components of the system. If a device is shipped
+// with such a backward incompatible change, it has a high risk of breaking
+// later when a module using the interface is updated, e.g., Mainline modules.
+
+package vendor.qti.hardware.systemhelperaidl;
+@Backing(type="long") @VintfStability
+enum SystemEventType {
+  PHONE_STATE_RINGING = 0x1,
+  PHONE_STATE_OFF_HOOK = 0x2,
+  PHONE_STATE_IDLE = 0x4,
+  ACTION_SCREEN_OFF = 0x8,
+  ACTION_SCREEN_ON = 0x10,
+  ACTION_SHUTDOWN = 0x20,
+  ACTION_USER_PRESENT = 0x40,
+  SYSTEM_EVENT_MAX = (0x80 - 1) /* 127 */,
+}
diff --git a/systemhelper/aidl/aidl_api/vendor.qti.hardware.systemhelperaidl/1/vendor/qti/hardware/systemhelperaidl/SystemResourceType.aidl b/systemhelper/aidl/aidl_api/vendor.qti.hardware.systemhelperaidl/1/vendor/qti/hardware/systemhelperaidl/SystemResourceType.aidl
new file mode 100644
index 0000000..f801056
--- /dev/null
+++ b/systemhelper/aidl/aidl_api/vendor.qti.hardware.systemhelperaidl/1/vendor/qti/hardware/systemhelperaidl/SystemResourceType.aidl
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear
+ */
+///////////////////////////////////////////////////////////////////////////////
+// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
+///////////////////////////////////////////////////////////////////////////////
+
+// This file is a snapshot of an AIDL file. Do not edit it manually. There are
+// two cases:
+// 1). this is a frozen version file - do not edit this in any case.
+// 2). this is a 'current' file. If you make a backwards compatible change to
+//     the interface (from the latest frozen version), the build system will
+//     prompt you to update this file with `m <name>-update-api`.
+//
+// You must not make a backward incompatible change to any AIDL file built
+// with the aidl_interface module type with versions property set. The module
+// type is used to build AIDL files in a way that they can be used across
+// independently updatable components of the system. If a device is shipped
+// with such a backward incompatible change, it has a high risk of breaking
+// later when a module using the interface is updated, e.g., Mainline modules.
+
+package vendor.qti.hardware.systemhelperaidl;
+@Backing(type="long") @VintfStability
+enum SystemResourceType {
+  WAKE_LOCK = 1,
+  ROTATION_LOCK = 2,
+}
diff --git a/systemhelper/aidl/aidl_api/vendor.qti.hardware.systemhelperaidl/current/vendor/qti/hardware/systemhelperaidl/ISystemEvent.aidl b/systemhelper/aidl/aidl_api/vendor.qti.hardware.systemhelperaidl/current/vendor/qti/hardware/systemhelperaidl/ISystemEvent.aidl
new file mode 100644
index 0000000..2e2bfc4
--- /dev/null
+++ b/systemhelper/aidl/aidl_api/vendor.qti.hardware.systemhelperaidl/current/vendor/qti/hardware/systemhelperaidl/ISystemEvent.aidl
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear
+ */
+///////////////////////////////////////////////////////////////////////////////
+// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
+///////////////////////////////////////////////////////////////////////////////
+
+// This file is a snapshot of an AIDL file. Do not edit it manually. There are
+// two cases:
+// 1). this is a frozen version file - do not edit this in any case.
+// 2). this is a 'current' file. If you make a backwards compatible change to
+//     the interface (from the latest frozen version), the build system will
+//     prompt you to update this file with `m <name>-update-api`.
+//
+// You must not make a backward incompatible change to any AIDL file built
+// with the aidl_interface module type with versions property set. The module
+// type is used to build AIDL files in a way that they can be used across
+// independently updatable components of the system. If a device is shipped
+// with such a backward incompatible change, it has a high risk of breaking
+// later when a module using the interface is updated, e.g., Mainline modules.
+
+package vendor.qti.hardware.systemhelperaidl;
+@VintfStability
+interface ISystemEvent {
+  int deRegisterEvent(in long eventIds, in vendor.qti.hardware.systemhelperaidl.ISystemEventCallback cb);
+  int registerEvent(in long eventIds, in vendor.qti.hardware.systemhelperaidl.ISystemEventCallback cb);
+}
diff --git a/systemhelper/aidl/aidl_api/vendor.qti.hardware.systemhelperaidl/current/vendor/qti/hardware/systemhelperaidl/ISystemEventCallback.aidl b/systemhelper/aidl/aidl_api/vendor.qti.hardware.systemhelperaidl/current/vendor/qti/hardware/systemhelperaidl/ISystemEventCallback.aidl
new file mode 100644
index 0000000..e199c97
--- /dev/null
+++ b/systemhelper/aidl/aidl_api/vendor.qti.hardware.systemhelperaidl/current/vendor/qti/hardware/systemhelperaidl/ISystemEventCallback.aidl
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear
+ */
+///////////////////////////////////////////////////////////////////////////////
+// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
+///////////////////////////////////////////////////////////////////////////////
+
+// This file is a snapshot of an AIDL file. Do not edit it manually. There are
+// two cases:
+// 1). this is a frozen version file - do not edit this in any case.
+// 2). this is a 'current' file. If you make a backwards compatible change to
+//     the interface (from the latest frozen version), the build system will
+//     prompt you to update this file with `m <name>-update-api`.
+//
+// You must not make a backward incompatible change to any AIDL file built
+// with the aidl_interface module type with versions property set. The module
+// type is used to build AIDL files in a way that they can be used across
+// independently updatable components of the system. If a device is shipped
+// with such a backward incompatible change, it has a high risk of breaking
+// later when a module using the interface is updated, e.g., Mainline modules.
+
+package vendor.qti.hardware.systemhelperaidl;
+@VintfStability
+interface ISystemEventCallback {
+  oneway void onEvent(in long eventId);
+}
diff --git a/systemhelper/aidl/aidl_api/vendor.qti.hardware.systemhelperaidl/current/vendor/qti/hardware/systemhelperaidl/ISystemResource.aidl b/systemhelper/aidl/aidl_api/vendor.qti.hardware.systemhelperaidl/current/vendor/qti/hardware/systemhelperaidl/ISystemResource.aidl
new file mode 100644
index 0000000..0371bbc
--- /dev/null
+++ b/systemhelper/aidl/aidl_api/vendor.qti.hardware.systemhelperaidl/current/vendor/qti/hardware/systemhelperaidl/ISystemResource.aidl
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear
+ */
+///////////////////////////////////////////////////////////////////////////////
+// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
+///////////////////////////////////////////////////////////////////////////////
+
+// This file is a snapshot of an AIDL file. Do not edit it manually. There are
+// two cases:
+// 1). this is a frozen version file - do not edit this in any case.
+// 2). this is a 'current' file. If you make a backwards compatible change to
+//     the interface (from the latest frozen version), the build system will
+//     prompt you to update this file with `m <name>-update-api`.
+//
+// You must not make a backward incompatible change to any AIDL file built
+// with the aidl_interface module type with versions property set. The module
+// type is used to build AIDL files in a way that they can be used across
+// independently updatable components of the system. If a device is shipped
+// with such a backward incompatible change, it has a high risk of breaking
+// later when a module using the interface is updated, e.g., Mainline modules.
+
+package vendor.qti.hardware.systemhelperaidl;
+@VintfStability
+interface ISystemResource {
+  int acquire(in vendor.qti.hardware.systemhelperaidl.SystemResourceType resource);
+  int acquireSurface(in int width, in int height, out android.hardware.common.NativeHandle Handle);
+  void release(in int resourceId);
+}
diff --git a/systemhelper/aidl/aidl_api/vendor.qti.hardware.systemhelperaidl/current/vendor/qti/hardware/systemhelperaidl/SystemEventType.aidl b/systemhelper/aidl/aidl_api/vendor.qti.hardware.systemhelperaidl/current/vendor/qti/hardware/systemhelperaidl/SystemEventType.aidl
new file mode 100644
index 0000000..ee16c96
--- /dev/null
+++ b/systemhelper/aidl/aidl_api/vendor.qti.hardware.systemhelperaidl/current/vendor/qti/hardware/systemhelperaidl/SystemEventType.aidl
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear
+ */
+///////////////////////////////////////////////////////////////////////////////
+// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
+///////////////////////////////////////////////////////////////////////////////
+
+// This file is a snapshot of an AIDL file. Do not edit it manually. There are
+// two cases:
+// 1). this is a frozen version file - do not edit this in any case.
+// 2). this is a 'current' file. If you make a backwards compatible change to
+//     the interface (from the latest frozen version), the build system will
+//     prompt you to update this file with `m <name>-update-api`.
+//
+// You must not make a backward incompatible change to any AIDL file built
+// with the aidl_interface module type with versions property set. The module
+// type is used to build AIDL files in a way that they can be used across
+// independently updatable components of the system. If a device is shipped
+// with such a backward incompatible change, it has a high risk of breaking
+// later when a module using the interface is updated, e.g., Mainline modules.
+
+package vendor.qti.hardware.systemhelperaidl;
+@Backing(type="long") @VintfStability
+enum SystemEventType {
+  PHONE_STATE_RINGING = 0x1,
+  PHONE_STATE_OFF_HOOK = 0x2,
+  PHONE_STATE_IDLE = 0x4,
+  ACTION_SCREEN_OFF = 0x8,
+  ACTION_SCREEN_ON = 0x10,
+  ACTION_SHUTDOWN = 0x20,
+  ACTION_USER_PRESENT = 0x40,
+  SYSTEM_EVENT_MAX = (0x80 - 1) /* 127 */,
+}
diff --git a/systemhelper/aidl/aidl_api/vendor.qti.hardware.systemhelperaidl/current/vendor/qti/hardware/systemhelperaidl/SystemResourceType.aidl b/systemhelper/aidl/aidl_api/vendor.qti.hardware.systemhelperaidl/current/vendor/qti/hardware/systemhelperaidl/SystemResourceType.aidl
new file mode 100644
index 0000000..f801056
--- /dev/null
+++ b/systemhelper/aidl/aidl_api/vendor.qti.hardware.systemhelperaidl/current/vendor/qti/hardware/systemhelperaidl/SystemResourceType.aidl
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear
+ */
+///////////////////////////////////////////////////////////////////////////////
+// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
+///////////////////////////////////////////////////////////////////////////////
+
+// This file is a snapshot of an AIDL file. Do not edit it manually. There are
+// two cases:
+// 1). this is a frozen version file - do not edit this in any case.
+// 2). this is a 'current' file. If you make a backwards compatible change to
+//     the interface (from the latest frozen version), the build system will
+//     prompt you to update this file with `m <name>-update-api`.
+//
+// You must not make a backward incompatible change to any AIDL file built
+// with the aidl_interface module type with versions property set. The module
+// type is used to build AIDL files in a way that they can be used across
+// independently updatable components of the system. If a device is shipped
+// with such a backward incompatible change, it has a high risk of breaking
+// later when a module using the interface is updated, e.g., Mainline modules.
+
+package vendor.qti.hardware.systemhelperaidl;
+@Backing(type="long") @VintfStability
+enum SystemResourceType {
+  WAKE_LOCK = 1,
+  ROTATION_LOCK = 2,
+}
diff --git a/systemhelper/aidl/vendor/qti/hardware/systemhelperaidl/ISystemEvent.aidl b/systemhelper/aidl/vendor/qti/hardware/systemhelperaidl/ISystemEvent.aidl
new file mode 100644
index 0000000..e25f7ee
--- /dev/null
+++ b/systemhelper/aidl/vendor/qti/hardware/systemhelperaidl/ISystemEvent.aidl
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear
+ */
+
+package vendor.qti.hardware.systemhelperaidl;
+
+import vendor.qti.hardware.systemhelperaidl.ISystemEventCallback;
+import vendor.qti.hardware.systemhelperaidl.SystemEventType;
+
+@VintfStability
+interface ISystemEvent {
+    /**
+     * Deregister for system event notification.
+     *
+     * @param eventIds event mask (of type SystemEventType) to deregister for
+     * @param cb callback interface used for event registration
+     * @return status of event de-registration request
+     *                0 in case of success and negative in case of failure
+     */
+    int deRegisterEvent(in long eventIds, in ISystemEventCallback cb);
+
+    /**
+     * Register for system event notification.
+     *
+     * @param eventIds event mask (of type SystemEventType) to register for
+     * @param cb callback interface for event notification
+     * @return status of event registration request
+     *                0 in case of success and negative in case of failure
+     */
+    int registerEvent(in long eventIds, in ISystemEventCallback cb);
+}
\ No newline at end of file
diff --git a/systemhelper/aidl/vendor/qti/hardware/systemhelperaidl/ISystemEventCallback.aidl b/systemhelper/aidl/vendor/qti/hardware/systemhelperaidl/ISystemEventCallback.aidl
new file mode 100644
index 0000000..82a4c80
--- /dev/null
+++ b/systemhelper/aidl/vendor/qti/hardware/systemhelperaidl/ISystemEventCallback.aidl
@@ -0,0 +1,16 @@
+/*
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear
+ */
+
+package vendor.qti.hardware.systemhelperaidl;
+
+@VintfStability
+interface ISystemEventCallback {
+    /**
+     * Event notification.
+     *
+     * @param eventId event occurred (of type SystemEventType)
+     */
+    oneway void onEvent(in long eventId);
+}
\ No newline at end of file
diff --git a/systemhelper/aidl/vendor/qti/hardware/systemhelperaidl/ISystemResource.aidl b/systemhelper/aidl/vendor/qti/hardware/systemhelperaidl/ISystemResource.aidl
new file mode 100644
index 0000000..8e5eb1a
--- /dev/null
+++ b/systemhelper/aidl/vendor/qti/hardware/systemhelperaidl/ISystemResource.aidl
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear
+ */
+
+package vendor.qti.hardware.systemhelperaidl;
+
+import vendor.qti.hardware.systemhelperaidl.SystemResourceType;
+import android.hardware.common.NativeHandle;
+
+@VintfStability
+interface ISystemResource {
+    /**
+     * Acquire a system resource
+     *
+     * @param resource resource to acquire
+     * @return resourceId unique resource identifier for acquired resource
+     *                    Note : resourceId stands invalid in case of API returned error
+     */
+    int acquire(in SystemResourceType resource);
+
+    /**
+     * Acquire a system graphics surface.
+     *
+     * @param width surface width
+     * @param height surface height
+     * @param out handle NativeHandle wrapper for IGraphicBufferProducer interface
+     * @return resourceId unique resource identifier for acquired resource
+     *                    Note : resourceId stands invalid in case of API returned error
+     */
+    int acquireSurface(in int width, in int height, out NativeHandle Handle);
+
+    /**
+     * Release an acquired resource
+     *
+     * Both resource and surface shall be released via this API.
+     *
+     * @param resourceId unique resource identifier to be released
+     */
+    void release(in int resourceId);
+}
\ No newline at end of file
diff --git a/systemhelper/aidl/vendor/qti/hardware/systemhelperaidl/SystemEventType.aidl b/systemhelper/aidl/vendor/qti/hardware/systemhelperaidl/SystemEventType.aidl
new file mode 100644
index 0000000..b229508
--- /dev/null
+++ b/systemhelper/aidl/vendor/qti/hardware/systemhelperaidl/SystemEventType.aidl
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear
+ */
+
+package vendor.qti.hardware.systemhelperaidl;
+
+/** Types of Events **/
+
+@VintfStability
+@Backing(type="long")
+enum SystemEventType {
+    PHONE_STATE_RINGING  = 0x1,
+    PHONE_STATE_OFF_HOOK = 0x2,
+    PHONE_STATE_IDLE     = 0x4,
+    ACTION_SCREEN_OFF    = 0x8,
+    ACTION_SCREEN_ON     = 0x10,
+    ACTION_SHUTDOWN      = 0x20,
+    ACTION_USER_PRESENT  = 0x40,
+    SYSTEM_EVENT_MAX     = (0x80 - 1),
+}
\ No newline at end of file
diff --git a/systemhelper/aidl/vendor/qti/hardware/systemhelperaidl/SystemResourceType.aidl b/systemhelper/aidl/vendor/qti/hardware/systemhelperaidl/SystemResourceType.aidl
new file mode 100644
index 0000000..3728249
--- /dev/null
+++ b/systemhelper/aidl/vendor/qti/hardware/systemhelperaidl/SystemResourceType.aidl
@@ -0,0 +1,13 @@
+/*
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear
+ */
+
+package vendor.qti.hardware.systemhelperaidl;
+
+@VintfStability
+@Backing(type="long")
+enum SystemResourceType {
+    WAKE_LOCK = 1,
+    ROTATION_LOCK = 2,
+}
\ No newline at end of file
