DO NOT MERGE - Merge Android 13

Bug: 242648940
Merged-In: I494fdeac46d79d52fc01ee870cb12f141e4dd487
Change-Id: I414740349f272180d11bdcee5e042822ad8ff41c
diff --git a/audio/mixer_paths_bolero_snd.xml b/audio/mixer_paths_bolero_snd.xml
index fddcdbd..846f331 100644
--- a/audio/mixer_paths_bolero_snd.xml
+++ b/audio/mixer_paths_bolero_snd.xml
@@ -47,6 +47,7 @@
     <ctl name="Voip Dtx Mode" value="0" />
     <ctl name="TTY Mode" value="OFF" />
     <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia1" value="0" />
+    <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia2" value="0" />
     <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia4" value="0" />
     <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia5" value="0" />
     <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia7" value="0" />
@@ -185,6 +186,7 @@
     <ctl name="AFE_PCM_RX Audio Mixer MultiMedia2" value="0" />
     <ctl name="AFE_PCM_RX Audio Mixer MultiMedia4" value="0" />
     <ctl name="AFE_PCM_RX Audio Mixer MultiMedia7" value="0" />
+    <ctl name="AFE_PCM_RX Audio Mixer MultiMedia8" value="0" />
     <ctl name="AFE_PCM_RX Audio Mixer MultiMedia10" value="0" />
     <ctl name="AFE_PCM_RX Audio Mixer MultiMedia11" value="0" />
     <ctl name="AFE_PCM_RX Audio Mixer MultiMedia12" value="0" />
@@ -268,6 +270,7 @@
     <!-- Incall Music -->
     <ctl name="Incall_Music Audio Mixer MultiMedia2" value="0" />
     <ctl name="Incall_Music Audio Mixer MultiMedia9" value="0" />
+    <ctl name="Incall_Music_2 Audio Mixer MultiMedia9" value="0" />
     <!-- Incall Music End -->
 
     <!-- compress-voip-call start -->
@@ -336,6 +339,9 @@
     <ctl name="RX INT1_1 MIX1 INP0" value="ZERO" />
     <ctl name="RX INT1_1 MIX1 INP1" value="ZERO" />
     <ctl name="RX INT1_1 MIX1 INP2" value="ZERO" />
+    <ctl name="RX INT0 MIX2 INP" value="ZERO" />
+    <ctl name="RX INT1 MIX2 INP" value="ZERO" />
+    <ctl name="RX INT2 MIX2 INP" value="ZERO" />
     <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia1" value="0" />
     <ctl name="RX INT0 DEM MUX" value="NORMAL_DSM_OUT" />
     <ctl name="RX INT1 DEM MUX" value="NORMAL_DSM_OUT" />
@@ -460,7 +466,6 @@
     <ctl name="IIR0 INP3 MUX" value="ZERO" />
 
     <!-- vbat related data -->
-    <ctl name="GSM mode Enable" value="OFF" />
     <ctl name="WSA_Softclip0 Enable" value="0" />
     <ctl name="WSA_Softclip1 Enable" value="0" />
     <ctl name="WSA_RX INT0 VBAT WSA RX0 VBAT Enable" value="0" />
@@ -470,8 +475,6 @@
 
     <!-- defaults for mmap record -->
     <ctl name="MultiMedia16 Mixer TX_CDC_DMA_TX_3" value="0" />
-    <ctl name="MultiMedia16 Mixer SLIM_7_TX" value="0" />
-    <ctl name="MultiMedia16 Mixer SLIM_8_TX" value="0" />
     <ctl name="MultiMedia16 Mixer USB_AUDIO_TX" value="0" />
 
     <!-- ALC5513 config -->
@@ -514,9 +517,21 @@
     <ctl name="TAS25XX_ALGO_BYPASS" value="FALSE" />
     <!-- TAS2562 control setting end-->
 
+    <!-- HDMI -->
+    <ctl name="HDMI Mixer MultiMedia1" value="0" />
+    <ctl name="HDMI Mixer MultiMedia4" value="0" />
+    <ctl name="HDMI Mixer MultiMedia5" value="0" />
+    <ctl name="HDMI Mixer MultiMedia8" value="0" />
+    <ctl name="HDMI Mixer MultiMedia9" value="0" />
+    <ctl name="HDMI Mixer MultiMedia10" value="0" />
+    <ctl name="HDMI Mixer MultiMedia16" value="0" />
+
+    <!-- HIFI -->
+    <ctl name="MultiMedia2 Mixer TX_CDC_DMA_TX_3" value="0" />
+
+
     <!-- These are audio route (FE to BE) specific mixer settings -->
     <path name="gsm-mode">
-        <ctl name="GSM mode Enable" value="ON" />
     </path>
 
     <path name="echo-reference">
@@ -882,7 +897,6 @@
     </path>
 
     <path name="low-latency-playback resume">
-        <ctl name="MultiMedia5_RX QOS Vote" value="Enable" />
     </path>
 
     <path name="audio-ull-playback">
@@ -1254,7 +1268,6 @@
     </path>
 
     <path name="low-latency-record capture-fm">
-      <ctl name="MultiMedia8 Mixer SLIM_8_TX" value="1" />
     </path>
 
     <path name="spkr-vi-record vi-feedback">
@@ -1902,7 +1915,6 @@
     </path>
 
     <path name="spkr-rx-calib">
-        <ctl name="QUIN_TDM_RX_DL_HL Switch" value="1" />
     </path>
 
     <path name="spkr-vi-record">
@@ -2029,7 +2041,6 @@
         <ctl name="IIR0 INP0 Volume" value="54" />
         <ctl name="IIR0 INP0 MUX" value="DEC0" />
         <ctl name="RX INT2 MIX2 INP" value="SRC0" />
-        <ctl name="WSA_RX0 INT0 SIDETONE MIX" value="SRC0" />
     </path>
 
     <path name="afe-sidetone">
@@ -2810,7 +2821,6 @@
     </path>
 
     <path name="mmap-record bt-sco">
-      <ctl name="MultiMedia16 Mixer SLIM_7_TX" value="1" />
     </path>
 
     <path name="mmap-record bt-sco-wb">
@@ -2823,7 +2833,6 @@
     </path>
 
     <path name="mmap-record capture-fm">
-      <ctl name="MultiMedia16 Mixer SLIM_8_TX" value="1" />
     </path>
 
     <path name="mmap-record usb-headset-mic">
diff --git a/barbet/overlay/frameworks/base/core/res/res/values/config.xml b/barbet/overlay/frameworks/base/core/res/res/values/config.xml
index e62b536..b4829f1 100755
--- a/barbet/overlay/frameworks/base/core/res/res/values/config.xml
+++ b/barbet/overlay/frameworks/base/core/res/res/values/config.xml
@@ -229,7 +229,7 @@
          Do not read this dimen directly. Use {@link SystemBarUtils#getStatusBarHeight} instead.
          -->
     <dimen name="status_bar_height_default">28dp</dimen>
-    <dimen name="status_bar_height_portrait">145px</dimen>
+    <dimen name="status_bar_height_portrait">136px</dimen>
     <dimen name="status_bar_height_landscape">28dp</dimen>
 
     <!-- Whether the device enable the standalone (SA) mode of 5G NR.-->
diff --git a/barbet/overlay/frameworks/base/core/res/res/values/dimens.xml b/barbet/overlay/frameworks/base/core/res/res/values/dimens.xml
new file mode 100644
index 0000000..b1a0c2e
--- /dev/null
+++ b/barbet/overlay/frameworks/base/core/res/res/values/dimens.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Copyright (c) 2022, 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.
+*/
+-->
+
+<resources>
+    <!-- for 20dp of padding at 3.5px/dp at default density -->
+    <dimen name="rounded_corner_content_padding">50px</dimen>
+</resources>
diff --git a/barbet/overlay/frameworks/base/packages/SystemUI/res/values/config.xml b/barbet/overlay/frameworks/base/packages/SystemUI/res/values/config.xml
index 45e756e..d20252a 100644
--- a/barbet/overlay/frameworks/base/packages/SystemUI/res/values/config.xml
+++ b/barbet/overlay/frameworks/base/packages/SystemUI/res/values/config.xml
@@ -72,8 +72,6 @@
      -->
     <string name="config_rounded_mask" translatable="false">M136,0 C80,4 58,9 33,33 9,58 4,80 0,136</string>
 
-    <bool name="config_roundedCornerMultipleRadius">true</bool>
-
     <!-- Configure 13px of extra protection around the front-facing camera -->
     <string translatable="false" name="config_frontBuiltInDisplayCutoutProtection">
         M 28,73
diff --git a/barbet/overlay/frameworks/base/packages/SystemUI/res/values/dimens.xml b/barbet/overlay/frameworks/base/packages/SystemUI/res/values/dimens.xml
index bf1fd82..fa978b2 100644
--- a/barbet/overlay/frameworks/base/packages/SystemUI/res/values/dimens.xml
+++ b/barbet/overlay/frameworks/base/packages/SystemUI/res/values/dimens.xml
@@ -20,9 +20,6 @@
     <!-- Don't need the left side padding due to being inset from the cutout -->
     <dimen name="status_bar_padding_start">0dp</dimen>
 
-    <!-- for 20dp of padding at 3.5px/dp at default density -->
-    <dimen name="rounded_corner_content_padding">50px</dimen>
-
     <!-- the padding on the top of the statusbar (usually 0) -->
     <dimen name="status_bar_padding_top">1px</dimen>
 
diff --git a/default-permissions.xml b/default-permissions.xml
index 8324453..4df0673 100644
--- a/default-permissions.xml
+++ b/default-permissions.xml
@@ -54,7 +54,11 @@
         <permission name="android.permission.READ_CALL_LOG" fixed="false"/>
         <permission name="android.permission.WRITE_CALL_LOG" fixed="false"/>
         <!-- Used to set up a Wi-Fi P2P network -->
+        <!-- TODO(b/231966826): Remove the location permission after Restore targets to T. -->
         <permission name="android.permission.ACCESS_FINE_LOCATION" fixed="false"/>
+        <permission name="android.permission.NEARBY_WIFI_DEVICES" fixed="false"/>
+        <!-- Notifications -->
+        <permission name="android.permission.POST_NOTIFICATIONS" fixed="false"/>
     </exception>
 
     <exception package="com.verizon.mips.services">
@@ -86,5 +90,42 @@
     <exception package="com.google.android.apps.scone">
         <!-- Used to call ActivityTransition API for Smart PNO -->
         <permission name="android.permission.ACTIVITY_RECOGNITION" fixed="false"/>
+        <!-- Notifications -->
+        <permission name="android.permission.POST_NOTIFICATIONS" fixed="false"/>
+    </exception>
+    <exception
+        package="com.google.android.deskclock">
+        <!-- Notifications -->
+        <permission name="android.permission.POST_NOTIFICATIONS" fixed="false"/>
+    </exception>
+    <exception
+        package="com.google.android.apps.tips">
+        <!-- Notifications -->
+        <permission name="android.permission.POST_NOTIFICATIONS" fixed="false"/>
+    </exception>
+    <exception
+        package="com.google.android.adservices">
+        <!-- Notifications -->
+        <permission name="android.permission.POST_NOTIFICATIONS" fixed="false"/>
+    </exception>
+    <exception
+        package="com.google.android.apps.mediashell">
+        <!-- Notifications -->
+        <permission name="android.permission.POST_NOTIFICATIONS" fixed="false"/>
+    </exception>
+    <exception
+        package="com.google.android.apps.pixelmigrate">
+        <!-- Notifications -->
+        <permission name="android.permission.POST_NOTIFICATIONS" fixed="false"/>
+    </exception>
+    <exception
+        package="com.google.android.apps.work.oobconfig">
+        <!-- Notifications -->
+        <permission name="android.permission.POST_NOTIFICATIONS" fixed="true"/>
+    </exception>
+    <exception
+        package="com.google.android.apps.turbo">
+        <!-- Notifications -->
+        <permission name="android.permission.POST_NOTIFICATIONS" fixed="false"/>
     </exception>
 </exceptions>
diff --git a/device-barbet.mk b/device-barbet.mk
index 2c3fe7e..df66b56 100644
--- a/device-barbet.mk
+++ b/device-barbet.mk
@@ -18,28 +18,27 @@
 
 ifeq ($(TARGET_PREBUILT_KERNEL),)
     ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT)))
-        LOCAL_KERNEL := device/google/barbet-kernel/Image.lz4
+        LOCAL_KERNEL := device/google/redbull-kernel/Image.lz4
     else
-        LOCAL_KERNEL := device/google/barbet-kernel/vintf/Image.lz4
+        LOCAL_KERNEL := device/google/redbull-kernel/vintf/Image.lz4
     endif
 else
     LOCAL_KERNEL := $(TARGET_PREBUILT_KERNEL)
 endif
 
-PRODUCT_VENDOR_KERNEL_HEADERS := device/google/barbet-kernel/sm7250/kernel-headers
+PRODUCT_VENDOR_KERNEL_HEADERS := device/google/redbull-kernel/sm7250/kernel-headers
 
 DEVICE_PACKAGE_OVERLAYS += device/google/barbet/barbet/overlay
 
 PRODUCT_DEVICE_SVN_OVERRIDE := true
 
-include build/make/target/product/iorap_large_memory_config.mk
 include device/google/redbull/device-common.mk
 
 $(call inherit-product, $(SRC_TARGET_DIR)/product/virtual_ab_ota/launch_with_vendor_ramdisk.mk)
 
 # Increment the SVN for any official public releases
 PRODUCT_PROPERTY_OVERRIDES += \
-    ro.vendor.build.svn=23
+    ro.vendor.build.svn=25
 
 # Enable watchdog timeout loop breaker.
 PRODUCT_PROPERTY_OVERRIDES += \
diff --git a/init.recovery.device.rc b/init.recovery.device.rc
index 474831d..7df16ec 100644
--- a/init.recovery.device.rc
+++ b/init.recovery.device.rc
@@ -9,10 +9,6 @@
     # Enable thermal mitigation
     write /sys/devices/virtual/thermal/tz-by-name/backup-charge/mode enabled
 
-    # Block layer tuning: discard chunk size up to 128MB
-    # Otherwise, contiguous discards can be merged
-    write /sys/block/sda/queue/discard_max_bytes 134217728
-
 on early-init
     # Wait to make sure we do not try to talk too early to the display
     wait /sys/class/drm/card0
diff --git a/self-extractors/extract-lists.txt b/self-extractors/extract-lists.txt
index 673a269..06b21fc 100644
--- a/self-extractors/extract-lists.txt
+++ b/self-extractors/extract-lists.txt
@@ -62,7 +62,6 @@
             system_ext/lib/lib-imsvideocodec.so \
             system_ext/lib/liblistensoundmodel2.qti.so \
             system_ext/lib/libmmosal.so \
-            system_ext/lib/libqct_resampler.so \
             system_ext/lib/libvr_amb_engine.so \
             system_ext/lib/libvr_object_engine.so \
             system_ext/app/QtiTelephonyService/QtiTelephonyService.apk \
diff --git a/self-extractors/qcom/staging/Android.bp.txt b/self-extractors/qcom/staging/Android.bp.txt
index bce9641..7364be8 100644
--- a/self-extractors/qcom/staging/Android.bp.txt
+++ b/self-extractors/qcom/staging/Android.bp.txt
@@ -243,27 +243,6 @@
 }
 
 cc_prebuilt_library_shared {
-    name: "libqct_resampler",
-    arch: {
-        arm: {
-            srcs: ["libqct_resampler.so"],
-            shared_libs: [
-                "libcutils",
-                "libc++",
-                "libc",
-                "libm",
-                "libdl",
-            ],
-        },
-    },
-    compile_multilib: "32",
-    system_ext_specific: true,
-    strip: {
-        none: true,
-    },
-}
-
-cc_prebuilt_library_shared {
     name: "libvr_amb_engine",
     arch: {
         arm: {
diff --git a/self-extractors/qcom/staging/device-partial.mk b/self-extractors/qcom/staging/device-partial.mk
index 3b6d681..9c163a3 100644
--- a/self-extractors/qcom/staging/device-partial.mk
+++ b/self-extractors/qcom/staging/device-partial.mk
@@ -28,7 +28,6 @@
     lib-imsvideocodec \
     liblistensoundmodel2.qti \
     libmmosal \
-    libqct_resampler \
     libvr_amb_engine \
     libvr_object_engine \
 
diff --git a/usb/usb/Usb.cpp b/usb/usb/Usb.cpp
index d71455b..ed358cd 100644
--- a/usb/usb/Usb.cpp
+++ b/usb/usb/Usb.cpp
@@ -61,40 +61,41 @@
         int64_t in_transactionId) {
     bool result = true;
     std::vector<PortStatus> currentPortStatus;
+    string pullup;
 
     ALOGI("Userspace turn %s USB data signaling. opID:%ld", in_enable ? "on" : "off",
             in_transactionId);
 
     if (in_enable) {
+        if (ReadFileToString(PULLUP_PATH, &pullup)) {
+            pullup = Trim(pullup);
+            if (pullup != kGadgetName) {
+                if (!WriteStringToFile(kGadgetName, PULLUP_PATH)) {
+                    ALOGE("Gadget cannot be pulled up");
+                    result = false;
+                }
+            }
+        }
+
         if (!WriteStringToFile("1", USB_DATA_PATH)) {
             ALOGE("Not able to turn on usb connection notification");
             result = false;
         }
-
-        if (!WriteStringToFile(kGadgetName, PULLUP_PATH)) {
-            ALOGE("Gadget cannot be pulled up");
-            result = false;
-        }
     } else {
-        if (!WriteStringToFile("1", ID_PATH)) {
-            ALOGE("Not able to turn off host mode");
-            result = false;
-        }
-
-        if (!WriteStringToFile("0", VBUS_PATH)) {
-            ALOGE("Not able to set Vbus state");
-            result = false;
+        if (ReadFileToString(PULLUP_PATH, &pullup)) {
+            pullup = Trim(pullup);
+            if (pullup == kGadgetName) {
+                if (!WriteStringToFile("none", PULLUP_PATH)) {
+                    ALOGE("Gadget cannot be pulled down");
+                    result = false;
+                }
+            }
         }
 
         if (!WriteStringToFile("0", USB_DATA_PATH)) {
             ALOGE("Not able to turn on usb connection notification");
             result = false;
         }
-
-        if (!WriteStringToFile("none", PULLUP_PATH)) {
-            ALOGE("Gadget cannot be pulled down");
-            result = false;
-        }
     }
 
     if (result) {
@@ -115,19 +116,95 @@
     return ScopedAStatus::ok();
 }
 
-// TODO: remove enableUsbDataWhileDocked() and add back later if ready
-/*ScopedAStatus Usb::enableUsbDataWhileDocked(const string& in_portName,
+ScopedAStatus Usb::enableUsbDataWhileDocked(const string& in_portName,
         int64_t in_transactionId) {
-}*/
+    std::vector<PortStatus> currentPortStatus;
 
-// TODO: remove resetUsbPort() and add back later if ready
-/*ScopedAStatus Usb::resetUsbPort(const std::string& in_portName, int64_t in_transactionId) {
-}*/
+    ALOGI("Userspace enableUsbDataWhileDocked  opID:%ld", in_transactionId);
 
-// TODO: remove limitPowerTransfer() and add back later if ready
-/*ScopedAStatus Usb::limitPowerTransfer(const string& in_portName, bool in_limit,
+    pthread_mutex_lock(&mLock);
+    if (mCallback != NULL) {
+        ScopedAStatus ret = mCallback->notifyEnableUsbDataWhileDockedStatus(
+                in_portName, Status::NOT_SUPPORTED, in_transactionId);
+        if (!ret.isOk())
+            ALOGE("notifyEnableUsbDataStatus error %s", ret.getDescription().c_str());
+    } else {
+        ALOGE("Not notifying the userspace. Callback is not set");
+    }
+    pthread_mutex_unlock(&mLock);
+    queryVersionHelper(this, &currentPortStatus);
+
+    return ScopedAStatus::ok();
+}
+
+ScopedAStatus Usb::resetUsbPort(const std::string& in_portName, int64_t in_transactionId) {
+    bool result = true;
+    std::vector<PortStatus> currentPortStatus;
+
+    ALOGI("Userspace reset USB Port. opID:%ld", in_transactionId);
+
+    if (!WriteStringToFile("none", PULLUP_PATH)) {
+        ALOGI("Gadget cannot be pulled down");
+        result = false;
+    }
+
+    pthread_mutex_lock(&mLock);
+    if (mCallback != NULL) {
+        ::ndk::ScopedAStatus ret = mCallback->notifyResetUsbPortStatus(
+            in_portName, result ? Status::SUCCESS : Status::ERROR, in_transactionId);
+        if (!ret.isOk())
+            ALOGE("notifyTransactionStatus error %s", ret.getDescription().c_str());
+    } else {
+        ALOGE("Not notifying the userspace. Callback is not set");
+    }
+    pthread_mutex_unlock(&mLock);
+
+    return ::ndk::ScopedAStatus::ok();
+}
+
+ScopedAStatus Usb::limitPowerTransfer(const string& in_portName, bool in_limit,
         int64_t in_transactionId) {
-}*/
+    std::vector<PortStatus> currentPortStatus;
+    bool sessionFail = false, success;
+
+    pthread_mutex_lock(&mLock);
+    ALOGI("limitPowerTransfer limit:%c opId:%ld", in_limit ? 'y' : 'n', in_transactionId);
+
+    if (in_limit) {
+        success = WriteStringToFile("0", SINK_CURRENT_LIMIT_PATH);
+        if (!success) {
+            ALOGE("Failed to set sink current limit");
+            sessionFail = true;
+        }
+    }
+    success = WriteStringToFile(in_limit ? "1" : "0", SINK_LIMIT_ENABLE_PATH);
+    if (!success) {
+        ALOGE("Failed to %s sink current limit: %s", in_limit ? "enable" : "disable",
+              SINK_LIMIT_ENABLE_PATH);
+        sessionFail = true;
+    }
+    success = WriteStringToFile(in_limit ? "1" : "0", SOURCE_LIMIT_ENABLE_PATH);
+    if (!success) {
+        ALOGE("Failed to %s source current limit: %s", in_limit ? "enable" : "disable",
+              SOURCE_LIMIT_ENABLE_PATH);
+        sessionFail = true;
+    }
+
+    if (mCallback != NULL && in_transactionId >= 0) {
+        ScopedAStatus ret = mCallback->notifyLimitPowerTransferStatus(
+                in_portName, in_limit, sessionFail ? Status::ERROR : Status::SUCCESS,
+                in_transactionId);
+        if (!ret.isOk())
+            ALOGE("limitPowerTransfer error %s", ret.getDescription().c_str());
+    } else {
+        ALOGE("Not notifying the userspace. Callback is not set");
+    }
+
+    pthread_mutex_unlock(&mLock);
+    queryVersionHelper(this, &currentPortStatus);
+
+    return ScopedAStatus::ok();
+}
 
 Status queryMoistureDetectionStatus(std::vector<PortStatus> *currentPortStatus) {
     string enabled, status, path, DetectedPath;
@@ -291,7 +368,8 @@
     : mLock(PTHREAD_MUTEX_INITIALIZER),
       mRoleSwitchLock(PTHREAD_MUTEX_INITIALIZER),
       mPartnerLock(PTHREAD_MUTEX_INITIALIZER),
-      mPartnerUp(false) {
+      mPartnerUp(false),
+      mUsbDataEnabled(true) {
     pthread_condattr_t attr;
     if (pthread_condattr_init(&attr)) {
         ALOGE("pthread_condattr_init failed: %s", strerror(errno));
@@ -530,7 +608,13 @@
                 port.second ? canSwitchRoleHelper(port.first) : false;
 
             (*currentPortStatus)[i].supportedModes.push_back(PortMode::DRP);
-	    (*currentPortStatus)[i].usbDataEnabled = usb->mUsbDataEnabled; //temporary
+
+            if (!usb->mUsbDataEnabled) {
+                (*currentPortStatus)[i].usbDataStatus.push_back(UsbDataStatus::DISABLED_FORCE);
+            } else {
+                (*currentPortStatus)[i].usbDataStatus.push_back(UsbDataStatus::ENABLED);
+            }
+            (*currentPortStatus)[i].powerBrickStatus = PowerBrickStatus::UNKNOWN;
 
             ALOGI("%d:%s connected:%d canChangeMode:%d canChagedata:%d canChangePower:%d "
                 "usbDataEnabled:%d",
@@ -546,12 +630,28 @@
     return Status::ERROR;
 }
 
+Status queryPowerTransferStatus(std::vector<PortStatus> *currentPortStatus) {
+    string enabled;
+
+    if (!ReadFileToString(SINK_LIMIT_ENABLE_PATH, &enabled)) {
+        ALOGE("Failed to open limit_sink_enable");
+        return Status::ERROR;
+    }
+
+    enabled = Trim(enabled);
+    (*currentPortStatus)[0].powerTransferLimited = enabled == "1";
+
+    ALOGI("powerTransferLimited:%d", (*currentPortStatus)[0].powerTransferLimited ? 1 : 0);
+    return Status::SUCCESS;
+}
+
 void queryVersionHelper(android::hardware::usb::Usb *usb,
                         std::vector<PortStatus> *currentPortStatus) {
     Status status;
     pthread_mutex_lock(&usb->mLock);
     status = getPortStatusHelper(usb, currentPortStatus);
     queryMoistureDetectionStatus(currentPortStatus);
+    queryPowerTransferStatus(currentPortStatus);
     if (usb->mCallback != NULL) {
         ScopedAStatus ret = usb->mCallback->notifyPortStatusChange(*currentPortStatus,
             status);
@@ -634,8 +734,8 @@
             pthread_cond_signal(&payload->usb->mPartnerCV);
             pthread_mutex_unlock(&payload->usb->mPartnerLock);
         } else if (!strncmp(cp, "DEVTYPE=typec_", strlen("DEVTYPE=typec_")) ||
-                   !strncmp(cp, "DRIVER=max77759tcpc",
-                            strlen("DRIVER=max77759tcpc"))) {
+                   !strncmp(cp, "POWER_SUPPLY_MOISTURE_DETECTED",
+                            strlen("POWER_SUPPLY_MOISTURE_DETECTED"))) {
             std::vector<PortStatus> currentPortStatus;
             queryVersionHelper(payload->usb, &currentPortStatus);
 
diff --git a/usb/usb/Usb.h b/usb/usb/Usb.h
index 9a883bc..36a23bc 100644
--- a/usb/usb/Usb.h
+++ b/usb/usb/Usb.h
@@ -43,11 +43,14 @@
 using ::std::string;
 
 constexpr char kGadgetName[] = "a600000.dwc3";
-#define ID_PATH SOC_PATH "id"
 #define PULLUP_PATH "/config/usb_gadget/g1/UDC"
 #define SOC_PATH "/sys/devices/platform/soc/a600000.ssusb/"
 #define USB_DATA_PATH SOC_PATH "usb_data_enabled"
-#define VBUS_PATH SOC_PATH "b_sess"
+
+#define USB_POWER_LIMIT_PATH "/sys/devices/platform/soc/c440000.qcom,spmi/spmi-0/spmi0-02/c440000.qcom,spmi:qcom,pm7250b@2:qcom,usb-pdphy@1700/usbpd0/"
+#define SINK_CURRENT_LIMIT_PATH USB_POWER_LIMIT_PATH "usb_limit_sink_current"
+#define SINK_LIMIT_ENABLE_PATH USB_POWER_LIMIT_PATH "usb_limit_sink_enable"
+#define SOURCE_LIMIT_ENABLE_PATH USB_POWER_LIMIT_PATH "usb_limit_source_enable"
 
 struct Usb : public BnUsb {
     Usb();
@@ -60,6 +63,11 @@
             int64_t in_transactionId) override;
     ScopedAStatus enableUsbData(const string& in_portName, bool in_enable,
             int64_t in_transactionId) override;
+    ScopedAStatus enableUsbDataWhileDocked(const string& in_portName,
+            int64_t in_transactionId) override;
+    ScopedAStatus limitPowerTransfer(const string& in_portName, bool in_limit,
+            int64_t in_transactionId) override;
+    ScopedAStatus resetUsbPort(const string& in_portName, int64_t in_transactionId) override;
 
     std::shared_ptr<::aidl::android::hardware::usb::IUsbCallback> mCallback;
     // Protects mCallback variable
diff --git a/usb/usb/android.hardware.usb-service.rc b/usb/usb/android.hardware.usb-service.rc
index b035ee6..d881c93 100644
--- a/usb/usb/android.hardware.usb-service.rc
+++ b/usb/usb/android.hardware.usb-service.rc
@@ -2,3 +2,11 @@
     class hal
     user system
     group system shell
+
+on boot
+    chown root system /sys/devices/platform/soc/c440000.qcom,spmi/spmi-0/spmi0-02/c440000.qcom,spmi:qcom,pm7250b@2:qcom,usb-pdphy@1700/usbpd0/usb_limit_sink_enable
+    chown root system /sys/devices/platform/soc/c440000.qcom,spmi/spmi-0/spmi0-02/c440000.qcom,spmi:qcom,pm7250b@2:qcom,usb-pdphy@1700/usbpd0/usb_limit_source_enable
+    chown root system /sys/devices/platform/soc/c440000.qcom,spmi/spmi-0/spmi0-02/c440000.qcom,spmi:qcom,pm7250b@2:qcom,usb-pdphy@1700/usbpd0/usb_limit_sink_current
+    chmod 664 /sys/devices/platform/soc/c440000.qcom,spmi/spmi-0/spmi0-02/c440000.qcom,spmi:qcom,pm7250b@2:qcom,usb-pdphy@1700/usbpd0/usb_limit_sink_enable
+    chmod 664 /sys/devices/platform/soc/c440000.qcom,spmi/spmi-0/spmi0-02/c440000.qcom,spmi:qcom,pm7250b@2:qcom,usb-pdphy@1700/usbpd0/usb_limit_source_enable
+    chmod 664 /sys/devices/platform/soc/c440000.qcom,spmi/spmi-0/spmi0-02/c440000.qcom,spmi:qcom,pm7250b@2:qcom,usb-pdphy@1700/usbpd0/usb_limit_sink_current