Snap for 8692753 from 137b1eee08c2469a9bf8f34473aad54f7394f9af to tm-frc-odp-release

Change-Id: Ibb1706d91c3be782a1e65d50b13c45f634f99748
diff --git a/default-permissions.xml b/default-permissions.xml
index 356b20d..1e50e5f 100644
--- a/default-permissions.xml
+++ b/default-permissions.xml
@@ -143,4 +143,9 @@
         <!-- 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.mk b/device.mk
index 367a16a..2b69a83 100644
--- a/device.mk
+++ b/device.mk
@@ -886,7 +886,7 @@
 
 # Increment the SVN for any official public releases
 PRODUCT_PROPERTY_OVERRIDES += \
-	ro.vendor.build.svn=45
+	ro.vendor.build.svn=47
 
 PRODUCT_COPY_FILES += \
     $(LOCAL_PATH)/powerhint.json:$(TARGET_COPY_OUT_VENDOR)/etc/powerhint.json
diff --git a/init.hardware.usb.rc b/init.hardware.usb.rc
index 0c54240..3551c32 100644
--- a/init.hardware.usb.rc
+++ b/init.hardware.usb.rc
@@ -55,6 +55,69 @@
     write /sys/module/libcomposite/parameters/disable_l1_for_hs "y"
     write /config/usb_gadget/g1/functions/gsi.rndis/rndis_class_id 1
 
+    # chown file/folder permission
+    chown system system /config/usb_gadget/
+    chown system system /config/usb_gadget/g1
+    chown system system /config/usb_gadget/g1/UDC
+    chown system system /config/usb_gadget/g1/bDeviceClass
+    chown system system /config/usb_gadget/g1/bDeviceProtocol
+    chown system system /config/usb_gadget/g1/bDeviceSubClass
+    chown system system /config/usb_gadget/g1/bMaxPacketSize0
+    chown system system /config/usb_gadget/g1/bcdDevice
+    chown system system /config/usb_gadget/g1/bcdUSB
+    chown system system /config/usb_gadget/g1/configs
+    chown system system /config/usb_gadget/g1/configs/b.1
+    chown system system /config/usb_gadget/g1/configs/b.1/MaxPower
+    chown system system /config/usb_gadget/g1/configs/b.1/bmAttributes
+    chown system system /config/usb_gadget/g1/configs/b.1/strings
+    chown system system /config/usb_gadget/g1/functions
+    chown system system /config/usb_gadget/g1/functions/accessory.gs2
+    chown system system /config/usb_gadget/g1/functions/audio_source.gs3
+    chown system system /config/usb_gadget/g1/functions/cser.dun.0
+    chown system system /config/usb_gadget/g1/functions/cser.dun.0/status
+    chown system system /config/usb_gadget/g1/functions/cser.nmea.1
+    chown system system /config/usb_gadget/g1/functions/cser.nmea.1/status
+    chown system system /config/usb_gadget/g1/functions/diag.diag
+    chown system system /config/usb_gadget/g1/functions/diag.diag_mdm
+    chown system system /config/usb_gadget/g1/functions/ffs.adb
+    chown system system /config/usb_gadget/g1/functions/ffs.mtp
+    chown system system /config/usb_gadget/g1/functions/ffs.ptp
+    chown system system /config/usb_gadget/g1/functions/gsi.dpl
+    chown system system /config/usb_gadget/g1/functions/gsi.dpl/info
+    chown system system /config/usb_gadget/g1/functions/gsi.rmnet
+    chown system system /config/usb_gadget/g1/functions/gsi.rmnet/info
+    chown system system /config/usb_gadget/g1/functions/gsi.rndis
+    chown system system /config/usb_gadget/g1/functions/gsi.rndis/info
+    chown system system /config/usb_gadget/g1/functions/gsi.rndis/rndis_class_id
+    chown system system /config/usb_gadget/g1/functions/midi.gs5
+    chown system system /config/usb_gadget/g1/functions/midi.gs5/buflen
+    chown system system /config/usb_gadget/g1/functions/midi.gs5/id
+    chown system system /config/usb_gadget/g1/functions/midi.gs5/in_ports
+    chown system system /config/usb_gadget/g1/functions/midi.gs5/index
+    chown system system /config/usb_gadget/g1/functions/midi.gs5/out_ports
+    chown system system /config/usb_gadget/g1/functions/midi.gs5/qlen
+    chown system system /config/usb_gadget/g1/functions/qdss.qdss
+    chown system system /config/usb_gadget/g1/functions/qdss.qdss/enable_debug_inface
+    chown system system /config/usb_gadget/g1/functions/qdss.qdss_mdm
+    chown system system /config/usb_gadget/g1/functions/qdss.qdss_mdm/enable_debug_inface
+    chown system system /config/usb_gadget/g1/idProduct
+    chown system system /config/usb_gadget/g1/idVendor
+    chown system system /config/usb_gadget/g1/os_desc
+    chown system system /config/usb_gadget/g1/os_desc/b.1
+    chown system system /config/usb_gadget/g1/os_desc/b.1/MaxPower
+    chown system system /config/usb_gadget/g1/os_desc/b.1/bmAttributes
+    chown system system /config/usb_gadget/g1/os_desc/b.1/strings
+    chown system system /config/usb_gadget/g1/os_desc/b.1/strings/0x409
+    chown system system /config/usb_gadget/g1/os_desc/b.1/strings/0x409/configuration
+    chown system system /config/usb_gadget/g1/os_desc/b_vendor_code
+    chown system system /config/usb_gadget/g1/os_desc/qw_sign
+    chown system system /config/usb_gadget/g1/os_desc/use
+    chown system system /config/usb_gadget/g1/strings
+    chown system system /config/usb_gadget/g1/strings/0x409
+    chown system system /config/usb_gadget/g1/strings/0x409/manufacturer
+    chown system system /config/usb_gadget/g1/strings/0x409/product
+    chown system system /config/usb_gadget/g1/strings/0x409/serialnumber
+
 on property:init.svc.console=running
     write /sys/class/power_supply/usb/moisture_detection_enabled 0
 
diff --git a/ueventd.rc b/ueventd.rc
index ad1f023..a02687c 100644
--- a/ueventd.rc
+++ b/ueventd.rc
@@ -140,3 +140,6 @@
 # pixelstats
 /sys/devices/platform/soc/c440000.qcom,spmi/spmi-0/spmi0-00/c440000.qcom,spmi:qcom,pm6150@0:qcom,usb-pdphy@1700/usbpd0/typec/port0/port0-partner identity/id_header 0444 system system
 /sys/devices/platform/soc/c440000.qcom,spmi/spmi-0/spmi0-00/c440000.qcom,spmi:qcom,pm6150@0:qcom,usb-pdphy@1700/usbpd0/typec/port0/port0-partner identity/product 0444 system system
+
+#KGSL
+/sys/class/kgsl/kgsl-3d0    perfcounter              0660    root    shell
diff --git a/usb/gadget/android.hardware.usb.gadget-service.sunfish.rc b/usb/gadget/android.hardware.usb.gadget-service.sunfish.rc
index 7e4c469..4b85a8b 100644
--- a/usb/gadget/android.hardware.usb.gadget-service.sunfish.rc
+++ b/usb/gadget/android.hardware.usb.gadget-service.sunfish.rc
@@ -1,7 +1,7 @@
 service vendor.usb-gadget-hal-1-1 /vendor/bin/hw/android.hardware.usb.gadget-service.sunfish
     class hal
-    user root
-    group root system shell mtp
+    user system
+    group system shell mtp
 
 on boot
     chown root system /sys/class/typec/port0/power_role
diff --git a/usb/usb/Usb.cpp b/usb/usb/Usb.cpp
index b8163d1..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) {
@@ -367,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));
@@ -612,7 +614,7 @@
             } else {
                 (*currentPortStatus)[i].usbDataStatus.push_back(UsbDataStatus::ENABLED);
             }
-	    (*currentPortStatus)[i].powerBrickStatus = PowerBrickStatus::UNKNOWN;
+            (*currentPortStatus)[i].powerBrickStatus = PowerBrickStatus::UNKNOWN;
 
             ALOGI("%d:%s connected:%d canChangeMode:%d canChagedata:%d canChangePower:%d "
                 "usbDataEnabled:%d",
@@ -627,6 +629,7 @@
 done:
     return Status::ERROR;
 }
+
 Status queryPowerTransferStatus(std::vector<PortStatus> *currentPortStatus) {
     string enabled;
 
@@ -731,8 +734,6 @@
             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;
diff --git a/usb/usb/Usb.h b/usb/usb/Usb.h
index 6cb1956..89f1bad 100644
--- a/usb/usb/Usb.h
+++ b/usb/usb/Usb.h
@@ -43,11 +43,9 @@
 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-00/c440000.qcom,spmi:qcom,pm6150@0:qcom,usb-pdphy@1700/usbpd0/"
 #define SINK_CURRENT_LIMIT_PATH USB_POWER_LIMIT_PATH "usb_limit_sink_current"