diff --git a/bluetooth/bt_channel_avoidance/1.0/Android.bp b/bluetooth/bt_channel_avoidance/1.0/Android.bp
new file mode 100644
index 0000000..5c7e4cc
--- /dev/null
+++ b/bluetooth/bt_channel_avoidance/1.0/Android.bp
@@ -0,0 +1,20 @@
+package {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "hardware_google_interfaces_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: ["hardware_google_interfaces_license"],
+}
+
+hidl_interface {
+    name: "hardware.google.bluetooth.bt_channel_avoidance@1.0",
+    root: "hardware.google",
+    srcs: [
+        "IBTChannelAvoidance.hal",
+    ],
+    interfaces: [
+        "android.hidl.base@1.0",
+    ],
+    gen_java: true,
+}
diff --git a/bluetooth/bt_channel_avoidance/1.0/IBTChannelAvoidance.hal b/bluetooth/bt_channel_avoidance/1.0/IBTChannelAvoidance.hal
new file mode 100644
index 0000000..cc80d15
--- /dev/null
+++ b/bluetooth/bt_channel_avoidance/1.0/IBTChannelAvoidance.hal
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * This is pixel only extension for Bluetooth HAL.
+ */
+package hardware.google.bluetooth.bt_channel_avoidance@1.0;
+
+interface IBTChannelAvoidance {
+    /**
+     * API to set Bluetooth channel map.
+     *
+     * This API must be invoked whenever channels map of Bluetooth need to
+     * changed because Bluetooth channels have conflict with wifi or cellular.
+     *
+     * @param channelMap The lower 79 bits of the 80-bit parameterrepresents
+     *        the status of 79 channels. 0 means the channel is bad and 1 means
+     *        unknown. The most significant bit (bit 79) is reserved for future
+     *        use.
+     */
+    oneway setBluetoothChannelStatus(uint8_t[10] channelMap);
+};
diff --git a/bluetooth/ccc/1.0/Android.bp b/bluetooth/ccc/1.0/Android.bp
new file mode 100644
index 0000000..bb789b5
--- /dev/null
+++ b/bluetooth/ccc/1.0/Android.bp
@@ -0,0 +1,22 @@
+package {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "hardware_google_interfaces_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: ["hardware_google_interfaces_license"],
+}
+
+hidl_interface {
+    name: "hardware.google.bluetooth.ccc@1.0",
+    root: "hardware.google",
+    srcs: [
+        "IBluetoothCcc.hal",
+        "IBluetoothCccCallback.hal",
+        "types.hal",
+    ],
+    interfaces: [
+        "android.hidl.base@1.0",
+    ],
+    gen_java: true,
+}
diff --git a/bluetooth/ccc/1.0/IBluetoothCcc.hal b/bluetooth/ccc/1.0/IBluetoothCcc.hal
new file mode 100644
index 0000000..4f7f1e7
--- /dev/null
+++ b/bluetooth/ccc/1.0/IBluetoothCcc.hal
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * This is pixel only extension for Bluetooth HAL.
+ */
+package hardware.google.bluetooth.ccc@1.0;
+
+import IBluetoothCccCallback;
+
+interface IBluetoothCcc {
+   /**
+    * API to monitor Bluetooth and system timestamp for given Bluetooth device when Bluetooth
+    * controller send/receive given LMP events.
+    *
+    * @param callback An instance of the |IBluetoothCccCallback| HIDL interface object.
+    * @param address Bluetooth address to use for monitoring timestamp.
+    * @param lmpEventIds LMP events to use for monitoring timestamp.
+    */
+    registerForLmpEvents(IBluetoothCccCallback callback,
+            Address address, vec<LmpEventId> lmpEventIds);
+
+   /**
+    * API to stop monitor given Bluetooth device.
+    *
+    * @param address Bluetooth device to stop monitoring.
+    */
+    unregisterLmpEvents(Address address);
+};
diff --git a/bluetooth/ccc/1.0/IBluetoothCccCallback.hal b/bluetooth/ccc/1.0/IBluetoothCccCallback.hal
new file mode 100644
index 0000000..bcd0cea
--- /dev/null
+++ b/bluetooth/ccc/1.0/IBluetoothCccCallback.hal
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package hardware.google.bluetooth.ccc@1.0;
+
+import types;
+
+interface IBluetoothCccCallback {
+    /**
+     * Callback when monitored LMP event involked.
+     *
+     * @param timestamp Timestamp when the LMP event involked
+     * @param address Remote bluetooth address that involke LMP event
+     * @param direction Direction of the involked LMP event
+     * @param lmpEventId LMP event id that bluetooth chip involked
+     * @param connEventCounter counter incremented by one for each new connection event
+     */
+    onEventGenerated(Timestamp timestamp, Address address, Direction direction,
+            LmpEventId lmpEventId, uint16_t connEventCounter);
+};
diff --git a/bluetooth/ccc/1.0/types.hal b/bluetooth/ccc/1.0/types.hal
new file mode 100644
index 0000000..a65f159
--- /dev/null
+++ b/bluetooth/ccc/1.0/types.hal
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package hardware.google.bluetooth.ccc@1.0;
+
+/**
+ * Generic structure to return the timestamp
+ */
+struct Timestamp {
+    /**
+     * Timestamp in microsecond since system boot.
+     */
+    uint32_t systemTime;
+    /**
+     * Timestamp in microsecond since Bluetooth controller power up.
+     */
+    uint32_t bluetoothTime;
+};
+
+/**
+ * LMP event id to be monitored
+ * CONNECT_IND indicator for initiating connection, timestamp will be at the anchor point
+ * LL_PHY_UPDATE_IND indicator for PHY update
+ */
+enum LmpEventId : uint8_t {
+    CONNECT_IND = 0x00,
+    LL_PHY_UPDATE_IND = 0x01
+};
+
+/**
+ * Direction of the LMP event
+ */
+enum Direction : uint8_t {
+    TX = 0x00, RX = 0x01
+};
+
+/**
+ * Bluetooth Address Type. 6 octest representing bluetooth of a device.
+ */
+typedef uint8_t[6] Address;
diff --git a/bluetooth/sar/1.0/Android.bp b/bluetooth/sar/1.0/Android.bp
new file mode 100644
index 0000000..e0b6b24
--- /dev/null
+++ b/bluetooth/sar/1.0/Android.bp
@@ -0,0 +1,20 @@
+package {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "hardware_google_interfaces_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: ["hardware_google_interfaces_license"],
+}
+
+hidl_interface {
+    name: "hardware.google.bluetooth.sar@1.0",
+    root: "hardware.google",
+    srcs: [
+        "IBluetoothSar.hal",
+    ],
+    interfaces: [
+        "android.hidl.base@1.0",
+    ],
+    gen_java: true,
+}
diff --git a/bluetooth/sar/1.0/IBluetoothSar.hal b/bluetooth/sar/1.0/IBluetoothSar.hal
new file mode 100644
index 0000000..5cb96d4
--- /dev/null
+++ b/bluetooth/sar/1.0/IBluetoothSar.hal
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * This is pixel only extension for Bluetooth HAL.
+ */
+package hardware.google.bluetooth.sar@1.0;
+
+interface IBluetoothSar {
+    /**
+     * API to set Bluetooth Tx power cap.
+     *
+     * This API must be invoked whenever maximum Bluetooth Tx power need to
+     * changed for optimising performance purpose in SAR scenarios.
+     *
+     * @param cap Bluetooth Tx cap. Range is between 0 and 80 units,
+     * each unit is 0.25 dBm.
+     */
+    oneway setBluetoothTxPowerCap(int8_t cap);
+
+    /**
+     * API to set Bluetooth Tx power cap of each tech.
+     *
+     * This API must be invoked whenever maximum Bluetooth Tx power for BR, EDR
+     * and BLE need to changed for optimising performance purpose in SAR
+     * scenarios.
+     *
+     * @param brCap Bluetooth Tx cap. Range is between 0 and 80 units,
+     * each unit is 0.25 dBm.
+     * @param edrCap Bluetooth Tx cap. Range is between 0 and 80 units,
+     * each unit is 0.25 dBm.
+     * @param bleCap Bluetooth Tx cap. Range is between 0 and 80 units,
+     * each unit is 0.25 dBm.
+     */
+    oneway setBluetoothTechBasedTxPowerCap(int8_t brCap, int8_t edrCap, int8_t bleCap);
+};
diff --git a/bluetooth/sar/1.1/Android.bp b/bluetooth/sar/1.1/Android.bp
new file mode 100644
index 0000000..05bdb09
--- /dev/null
+++ b/bluetooth/sar/1.1/Android.bp
@@ -0,0 +1,21 @@
+package {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "hardware_google_interfaces_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: ["hardware_google_interfaces_license"],
+}
+
+hidl_interface {
+    name: "hardware.google.bluetooth.sar@1.1",
+    root: "hardware.google",
+    srcs: [
+        "IBluetoothSar.hal",
+    ],
+    interfaces: [
+        "hardware.google.bluetooth.sar@1.0",
+        "android.hidl.base@1.0",
+    ],
+    gen_java: true,
+}
diff --git a/bluetooth/sar/1.1/IBluetoothSar.hal b/bluetooth/sar/1.1/IBluetoothSar.hal
new file mode 100644
index 0000000..2dfca42
--- /dev/null
+++ b/bluetooth/sar/1.1/IBluetoothSar.hal
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * This is pixel only extension for Bluetooth HAL.
+ */
+package hardware.google.bluetooth.sar@1.1;
+import  hardware.google.bluetooth.sar@1.0;
+
+interface IBluetoothSar extends @1.0::IBluetoothSar {
+    /**
+     * API to set Bluetooth Tx power cap of each mode
+     *
+     * This API must be invoke whenever maximum Bluetooth Tx power of each mode, include chain 0,
+     * chain 1 and beamforming mode, need to be changed for optimising performance purpose in SAR
+     * scenarios.
+     *
+     * @param chain0Cap Bluetooth Tx cap of chain 0 mode. Range is between 0 and 80 units, each unit
+     * is 0.25 dBm.
+     * @param chain1Cap Bluetooth Tx cap of chain 1 mode. Range is between 0 and 80 units, each unit
+     * is 0.25 dBm.
+     * @param beamformingCap Bluetooth Tx cap of beamforming mode. Range is between 0 and 80 units,
+     * each unit is 0.25 dBm.
+     */
+     oneway setBluetoothModeBasedTxPowerCap(int8_t[3] chain0Cap,int8_t[3] chain1Cap,
+             int8_t[6] beamformingCap);
+};
\ No newline at end of file
diff --git a/current.txt b/current.txt
index b0dae6a..210c9c7 100644
--- a/current.txt
+++ b/current.txt
@@ -1,3 +1,12 @@
+# HALs released in Android S
+
+c34fdd31d56ca97aec45eb3eb9b47d62294335e1c880a7998013f2096825397d hardware.google.bluetooth.bt_channel_avoidance@1.0::IBTChannelAvoidance
+8490e311ba249523d0cb6e2dd8b8a863241b428cdf8c98d88689332951e398c8 hardware.google.bluetooth.ccc@1.0::types
+a8a5ea77cf0e11f83a6751186325efb7f18ea1dc2e9f9ad33032980b0e1e3ecd hardware.google.bluetooth.ccc@1.0::IBluetoothCcc
+5287fd8c6f65a1533a9c65bb8036ce0653093cf7f802636732c265b57588f2a8 hardware.google.bluetooth.ccc@1.0::IBluetoothCccCallback
+ffb48792d6e067f012f66b28b526afe46be1aaaacbcf71891969cb0a55a7165c hardware.google.bluetooth.sar@1.0::IBluetoothSar
+a0632be7cbb7e64f8254363b6d000ec0bb03096f7a10a1390701b9ace2ff2c84 hardware.google.bluetooth.sar@1.1::IBluetoothSar
+
 # HALs released in Android P MAR20 QPR
 
 bcaa8ef72b0ebbcbd0873f600a8d2bc45f76a6fb119ad6aeae4c5347a790aedb hardware.google.light@1.1::ILight
diff --git a/display/Android.bp b/display/Android.bp
index f48a528..5b63f65 100644
--- a/display/Android.bp
+++ b/display/Android.bp
@@ -16,6 +16,10 @@
 
     stability: "vintf",
 
+    imports: [
+        "android.hardware.common",
+    ],
+
     backend: {
         java: {
             platform_apis: true,
@@ -24,5 +28,9 @@
             enabled: false,
         },
     },
-    versions: ["1"],
+    versions: [
+        "1",
+        "2",
+        "3",
+    ],
 }
diff --git a/display/aidl_api/com.google.hardware.pixel.display/2/.hash b/display/aidl_api/com.google.hardware.pixel.display/2/.hash
new file mode 100644
index 0000000..60cb0d0
--- /dev/null
+++ b/display/aidl_api/com.google.hardware.pixel.display/2/.hash
@@ -0,0 +1 @@
+bcb4f92324798b6f2c70f1757634f670e1da6d36
diff --git a/display/aidl_api/com.google.hardware.pixel.display/2/com/google/hardware/pixel/display/HbmState.aidl b/display/aidl_api/com.google.hardware.pixel.display/2/com/google/hardware/pixel/display/HbmState.aidl
new file mode 100644
index 0000000..76af8b3
--- /dev/null
+++ b/display/aidl_api/com.google.hardware.pixel.display/2/com/google/hardware/pixel/display/HbmState.aidl
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+///////////////////////////////////////////////////////////////////////////////
+// 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 com.google.hardware.pixel.display;
+@Backing(type="byte") @VintfStability
+enum HbmState {
+  OFF = 0,
+  HDR = 1,
+  SUNLIGHT = 2,
+}
diff --git a/display/aidl_api/com.google.hardware.pixel.display/2/com/google/hardware/pixel/display/IDisplay.aidl b/display/aidl_api/com.google.hardware.pixel.display/2/com/google/hardware/pixel/display/IDisplay.aidl
new file mode 100644
index 0000000..9a58417
--- /dev/null
+++ b/display/aidl_api/com.google.hardware.pixel.display/2/com/google/hardware/pixel/display/IDisplay.aidl
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+///////////////////////////////////////////////////////////////////////////////
+// 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 com.google.hardware.pixel.display;
+@VintfStability
+interface IDisplay {
+  boolean isHbmSupported();
+  void setHbmState(in com.google.hardware.pixel.display.HbmState state);
+  com.google.hardware.pixel.display.HbmState getHbmState();
+  boolean isLbeSupported();
+  void setLbeState(in com.google.hardware.pixel.display.LbeState state);
+  void setLbeAmbientLight(in int ambientLux);
+  com.google.hardware.pixel.display.LbeState getLbeState();
+  boolean isLhbmSupported();
+  void setLhbmState(in boolean enabled);
+  boolean getLhbmState();
+}
diff --git a/display/aidl_api/com.google.hardware.pixel.display/2/com/google/hardware/pixel/display/LbeState.aidl b/display/aidl_api/com.google.hardware.pixel.display/2/com/google/hardware/pixel/display/LbeState.aidl
new file mode 100644
index 0000000..6ad7fb7
--- /dev/null
+++ b/display/aidl_api/com.google.hardware.pixel.display/2/com/google/hardware/pixel/display/LbeState.aidl
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+///////////////////////////////////////////////////////////////////////////////
+// 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 com.google.hardware.pixel.display;
+@Backing(type="byte") @VintfStability
+enum LbeState {
+  OFF = 0,
+  NORMAL = 1,
+  HIGH_BRIGHTNESS = 2,
+  POWER_SAVE = 3,
+}
diff --git a/display/aidl_api/com.google.hardware.pixel.display/3/.hash b/display/aidl_api/com.google.hardware.pixel.display/3/.hash
new file mode 100644
index 0000000..b08a01a
--- /dev/null
+++ b/display/aidl_api/com.google.hardware.pixel.display/3/.hash
@@ -0,0 +1 @@
+41425d2a0c0f6459d358b330f10ab1166eb09a14
diff --git a/display/aidl_api/com.google.hardware.pixel.display/3/com/google/hardware/pixel/display/HbmState.aidl b/display/aidl_api/com.google.hardware.pixel.display/3/com/google/hardware/pixel/display/HbmState.aidl
new file mode 100644
index 0000000..76af8b3
--- /dev/null
+++ b/display/aidl_api/com.google.hardware.pixel.display/3/com/google/hardware/pixel/display/HbmState.aidl
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+///////////////////////////////////////////////////////////////////////////////
+// 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 com.google.hardware.pixel.display;
+@Backing(type="byte") @VintfStability
+enum HbmState {
+  OFF = 0,
+  HDR = 1,
+  SUNLIGHT = 2,
+}
diff --git a/display/aidl_api/com.google.hardware.pixel.display/3/com/google/hardware/pixel/display/IDisplay.aidl b/display/aidl_api/com.google.hardware.pixel.display/3/com/google/hardware/pixel/display/IDisplay.aidl
new file mode 100644
index 0000000..a4e0b06
--- /dev/null
+++ b/display/aidl_api/com.google.hardware.pixel.display/3/com/google/hardware/pixel/display/IDisplay.aidl
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+///////////////////////////////////////////////////////////////////////////////
+// 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 com.google.hardware.pixel.display;
+@VintfStability
+interface IDisplay {
+  boolean isHbmSupported();
+  void setHbmState(in com.google.hardware.pixel.display.HbmState state);
+  com.google.hardware.pixel.display.HbmState getHbmState();
+  boolean isLbeSupported();
+  void setLbeState(in com.google.hardware.pixel.display.LbeState state);
+  void setLbeAmbientLight(in int ambientLux);
+  com.google.hardware.pixel.display.LbeState getLbeState();
+  boolean isLhbmSupported();
+  void setLhbmState(in boolean enabled);
+  boolean getLhbmState();
+  int setCompensationImageHandle(in android.hardware.common.NativeHandle native_handle, in String imageName);
+}
diff --git a/display/aidl_api/com.google.hardware.pixel.display/3/com/google/hardware/pixel/display/LbeState.aidl b/display/aidl_api/com.google.hardware.pixel.display/3/com/google/hardware/pixel/display/LbeState.aidl
new file mode 100644
index 0000000..6ad7fb7
--- /dev/null
+++ b/display/aidl_api/com.google.hardware.pixel.display/3/com/google/hardware/pixel/display/LbeState.aidl
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+///////////////////////////////////////////////////////////////////////////////
+// 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 com.google.hardware.pixel.display;
+@Backing(type="byte") @VintfStability
+enum LbeState {
+  OFF = 0,
+  NORMAL = 1,
+  HIGH_BRIGHTNESS = 2,
+  POWER_SAVE = 3,
+}
diff --git a/display/aidl_api/com.google.hardware.pixel.display/current/com/google/hardware/pixel/display/HbmState.aidl b/display/aidl_api/com.google.hardware.pixel.display/current/com/google/hardware/pixel/display/HbmState.aidl
index 440a95e..76af8b3 100644
--- a/display/aidl_api/com.google.hardware.pixel.display/current/com/google/hardware/pixel/display/HbmState.aidl
+++ b/display/aidl_api/com.google.hardware.pixel.display/current/com/google/hardware/pixel/display/HbmState.aidl
@@ -1,14 +1,30 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 ///////////////////////////////////////////////////////////////////////////////
 // THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
 ///////////////////////////////////////////////////////////////////////////////
 
-// This file is a snapshot of an AIDL interface (or parcelable). Do not try to
-// edit this file. It looks like you are doing that because you have modified
-// an AIDL interface in a backward-incompatible way, e.g., deleting a function
-// from an interface or a field from a parcelable and it broke the build. That
-// breakage is intended.
+// 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 changes to the AIDL files built
+// 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
diff --git a/display/aidl_api/com.google.hardware.pixel.display/current/com/google/hardware/pixel/display/IDisplay.aidl b/display/aidl_api/com.google.hardware.pixel.display/current/com/google/hardware/pixel/display/IDisplay.aidl
index df43035..a4e0b06 100644
--- a/display/aidl_api/com.google.hardware.pixel.display/current/com/google/hardware/pixel/display/IDisplay.aidl
+++ b/display/aidl_api/com.google.hardware.pixel.display/current/com/google/hardware/pixel/display/IDisplay.aidl
@@ -1,14 +1,30 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 ///////////////////////////////////////////////////////////////////////////////
 // THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
 ///////////////////////////////////////////////////////////////////////////////
 
-// This file is a snapshot of an AIDL interface (or parcelable). Do not try to
-// edit this file. It looks like you are doing that because you have modified
-// an AIDL interface in a backward-incompatible way, e.g., deleting a function
-// from an interface or a field from a parcelable and it broke the build. That
-// breakage is intended.
+// 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 changes to the AIDL files built
+// 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
@@ -25,4 +41,8 @@
   void setLbeState(in com.google.hardware.pixel.display.LbeState state);
   void setLbeAmbientLight(in int ambientLux);
   com.google.hardware.pixel.display.LbeState getLbeState();
+  boolean isLhbmSupported();
+  void setLhbmState(in boolean enabled);
+  boolean getLhbmState();
+  int setCompensationImageHandle(in android.hardware.common.NativeHandle native_handle, in String imageName);
 }
diff --git a/display/aidl_api/com.google.hardware.pixel.display/current/com/google/hardware/pixel/display/LbeState.aidl b/display/aidl_api/com.google.hardware.pixel.display/current/com/google/hardware/pixel/display/LbeState.aidl
index 0e4985a..6ad7fb7 100644
--- a/display/aidl_api/com.google.hardware.pixel.display/current/com/google/hardware/pixel/display/LbeState.aidl
+++ b/display/aidl_api/com.google.hardware.pixel.display/current/com/google/hardware/pixel/display/LbeState.aidl
@@ -1,14 +1,30 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 ///////////////////////////////////////////////////////////////////////////////
 // THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
 ///////////////////////////////////////////////////////////////////////////////
 
-// This file is a snapshot of an AIDL interface (or parcelable). Do not try to
-// edit this file. It looks like you are doing that because you have modified
-// an AIDL interface in a backward-incompatible way, e.g., deleting a function
-// from an interface or a field from a parcelable and it broke the build. That
-// breakage is intended.
+// 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 changes to the AIDL files built
+// 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
diff --git a/display/com/google/hardware/pixel/display/IDisplay.aidl b/display/com/google/hardware/pixel/display/IDisplay.aidl
index ff60b89..bb7ca4b 100644
--- a/display/com/google/hardware/pixel/display/IDisplay.aidl
+++ b/display/com/google/hardware/pixel/display/IDisplay.aidl
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2020 The Android Open Source Project
+ * Copyright (C) 2021 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,6 +18,7 @@
 
 import com.google.hardware.pixel.display.HbmState;
 import com.google.hardware.pixel.display.LbeState;
+import android.hardware.common.NativeHandle;
 
 @VintfStability
 interface IDisplay {
@@ -72,4 +73,36 @@
      * @return state of display local brightness enhancement
      */
     LbeState getLbeState();
+
+    /**
+     * Query Display Local High Brightness Mode Supported
+     *
+     * @return true if LHBM is supported on this platform.
+     *         If false, LHBM is not supported.
+     */
+    boolean isLhbmSupported();
+
+    /**
+     * Set Display Local High Brightness Mode
+     *
+     * @param enabled true if LHBM should be enabled, false otherwise.
+     */
+    void setLhbmState(in boolean enabled);
+
+    /**
+     * Get Display Local High Brightness Mode State
+     *
+     * @return true if LHBM is ON, false otherwise.
+     */
+    boolean getLhbmState();
+
+    /**
+     * Set NativeHandle then server can fill the compensation
+     * image into the native handle
+     *
+     * @param native_handle share the NativeHandle from client.
+     * @param imageName the image name that define in client.
+     * @return errno of setCompensationImageHandle
+     */
+    int setCompensationImageHandle(in NativeHandle native_handle, in String imageName);
 }
