Snap for 4448085 from d922c8a7c9c778f1ce0fca42d8fde7f6428099fd to oc-m3-release

Change-Id: I8ce9230c0685d7805f6a4aa30aa8a7d4c79aaf46
diff --git a/Android.bp b/Android.bp
index 6efaac1..9f2d303 100644
--- a/Android.bp
+++ b/Android.bp
@@ -1,4 +1,5 @@
 subdirs = [
+    "thermal",
     "vr",
     "vibrator",
     "wifi_offload",
diff --git a/android_filesystem_config.h b/android_filesystem_config.h
index 775a717..a580f88 100644
--- a/android_filesystem_config.h
+++ b/android_filesystem_config.h
@@ -21,9 +21,8 @@
 
 #include <private/android_filesystem_config.h>
 
-static const struct fs_path_config android_device_dirs[] = {
-    { 00771, AID_SYSTEM,      AID_SYSTEM,     0, "bt_firmware"},
-};
+#define NO_ANDROID_FILESYSTEM_CONFIG_DEVICE_DIRS
+/* static const struct fs_path_config android_device_dirs[] = { }; */
 
 /* Rules for files.
 ** These rules are applied based on "first match", so they
diff --git a/audio_policy_configuration.xml b/audio_policy_configuration.xml
index d74d187..07daa6c 100644
--- a/audio_policy_configuration.xml
+++ b/audio_policy_configuration.xml
@@ -69,9 +69,9 @@
                              samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
                 </mixPort>
                 <mixPort name="voip_rx" role="source"
-                         flags="AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_VOIP_RX">
+                         flags="AUDIO_OUTPUT_FLAG_VOIP_RX">
                     <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
-                           samplingRates="8000,16000,32000,48000" channelMasks="AUDIO_CHANNEL_OUT_MONO"/>
+                           samplingRates="8000,16000,32000,48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
                 </mixPort>
                 <mixPort name="primary input" role="sink">
                     <profile name="" format="AUDIO_FORMAT_PCM_8_24_BIT"
diff --git a/default-permissions.xml b/default-permissions.xml
index 92b0613..5c37315 100644
--- a/default-permissions.xml
+++ b/default-permissions.xml
@@ -53,8 +53,12 @@
 
     <exception
             package="com.verizon.mips.services">
+        <!-- Call -->
+        <permission name="android.permission.PROCESS_OUTGOING_CALLS" fixed="false"/>
         <!-- Phone -->
         <permission name="android.permission.READ_PHONE_STATE" fixed="false"/>
+        <!-- SMS -->
+        <permission name="android.permission.RECEIVE_SMS" fixed="false"/>
     </exception>
 
     <exception
diff --git a/device.mk b/device.mk
index b860a82..1d52ca2 100755
--- a/device.mk
+++ b/device.mk
@@ -21,6 +21,10 @@
     device/google/wahoo/default-permissions.xml:$(TARGET_COPY_OUT_VENDOR)/etc/default-permissions/default-permissions.xml \
     frameworks/native/data/etc/handheld_core_hardware.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/handheld_core_hardware.xml
 
+# Set the SVN for the targeted MR release
+PRODUCT_PROPERTY_OVERRIDES += \
+    ro.vendor.build.svn=4
+
 # Enforce privapp-permissions whitelist
 PRODUCT_PROPERTY_OVERRIDES += \
     ro.control_privapp_permissions=enforce
@@ -67,7 +71,9 @@
     $(LOCAL_PATH)/init.qcom.devstart.sh:$(TARGET_COPY_OUT_VENDOR)/bin/init.qcom.devstart.sh \
     $(LOCAL_PATH)/init.qcom.ipastart.sh:$(TARGET_COPY_OUT_VENDOR)/bin/init.qcom.ipastart.sh \
     $(LOCAL_PATH)/init.insmod.sh:$(TARGET_COPY_OUT_VENDOR)/bin/init.insmod.sh \
-    $(LOCAL_PATH)/init.ramoops.sh:$(TARGET_COPY_OUT_SYSTEM)/bin/init.ramoops.sh
+    $(LOCAL_PATH)/init.ramoops.sh:$(TARGET_COPY_OUT_SYSTEM)/bin/init.ramoops.sh \
+    frameworks/native/services/vr/virtual_touchpad/idc/vr-virtual-touchpad-0.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/vr-virtual-touchpad-0.idc \
+    frameworks/native/services/vr/virtual_touchpad/idc/vr-virtual-touchpad-1.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/vr-virtual-touchpad-1.idc
 
 ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT)))
   PRODUCT_COPY_FILES += \
@@ -181,6 +187,10 @@
 PRODUCT_PROPERTY_OVERRIDES += \
     ro.opengles.version=196610
 
+# b/68017541
+PRODUCT_PROPERTY_OVERRIDES += \
+    ro.qcom.adreno.qgl.ShaderStorageImageExtendedFormats=0
+
 # Enable camera EIS3.0
 PRODUCT_PROPERTY_OVERRIDES += \
     persist.camera.is_type=5 \
@@ -207,6 +217,7 @@
     persist.radio.data_ltd_sys_ind=1 \
     persist.radio.is_wps_enabled=true \
     persist.radio.videopause.mode=1 \
+    persist.radio.sap_silent_pin=1 \
     persist.radio.sib16_support=1 \
     persist.radio.data_con_rprt=true \
     persist.radio.always_send_plmn=true \
@@ -221,6 +232,29 @@
 PRODUCT_PROPERTY_OVERRIDES += \
   ro.vendor.extension_library=libqti-perfd-client.so
 
+# settings to enable Device Orientation Sensors
+PRODUCT_PROPERTY_OVERRIDES += \
+    ro.qti.sensors.dev_ori=true
+
+# settings to disable unused secondary wakeup
+PRODUCT_PROPERTY_OVERRIDES += \
+    ro.qti.sensors.wu=false
+
+# settings to disable unused algorithms
+PRODUCT_PROPERTY_OVERRIDES += \
+    ro.qti.sdk.sensors.gestures=false \
+    ro.qti.sensors.amd=false \
+    ro.qti.sensors.cmc=false \
+    ro.qti.sensors.facing=false \
+    ro.qti.sensors.pedometer=false \
+    ro.qti.sensors.rmd=false \
+    ro.qti.sensors.scrn_ortn=false
+
+# use SMGR supplied version of step detector and counter
+PRODUCT_PROPERTY_OVERRIDES += \
+    ro.qti.sensors.step_counter=false \
+    ro.qti.sensors.step_detector=false
+
 # camera gyro and laser sensor
 PRODUCT_PROPERTY_OVERRIDES += \
   persist.camera.gyro.android=20 \
@@ -278,11 +312,6 @@
     android.hardware.bluetooth@1.0-impl    \
     android.hardware.bluetooth@1.0-service
 
-# Neuralnetworks HAL
-PRODUCT_PACKAGES += \
-    android.hardware.neuralnetworks@1.0-impl-hvx \
-    android.hardware.neuralnetworks@1.0-service-hvx
-
 # DRM HAL
 PRODUCT_PACKAGES += \
   android.hardware.drm@1.0-impl \
@@ -353,7 +382,7 @@
 
 # Thermal packages
 PRODUCT_PACKAGES += \
-    android.hardware.thermal@1.0-service.wahoo
+    android.hardware.thermal@1.1-impl-wahoo
 
 #GNSS HAL
 PRODUCT_PACKAGES += \
@@ -432,10 +461,6 @@
 # PRODUCT_COPY_FILES += \
 #   frameworks/native/data/etc/android.hardware.audio.pro.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.audio.pro.xml
 
-# Thermal packages
-PRODUCT_PACKAGES += \
-    thermal.default
-
 ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT)))
 PRODUCT_PACKAGES += \
     tinyplay \
@@ -581,6 +606,14 @@
 PRODUCT_PROPERTY_OVERRIDES += \
     persist.camera.perfd.enable=true
 
+# Enable Gcam FD Ensemble
+PRODUCT_PROPERTY_OVERRIDES += \
+    persist.camera.gcam.fd.ensemble=1
+
 # Preopt SystemUI
 PRODUCT_DEXPREOPT_SPEED_APPS += \
     SystemUIGoogle
+
+# audio effects config
+PRODUCT_PROPERTY_OVERRIDES += \
+    fmas.hdph_sgain=0
diff --git a/dumpstate/DumpstateDevice.cpp b/dumpstate/DumpstateDevice.cpp
index 2e90863..efcf8bc 100755
--- a/dumpstate/DumpstateDevice.cpp
+++ b/dumpstate/DumpstateDevice.cpp
@@ -182,6 +182,10 @@
     DumpFileToFd(fd, "SoC serial number", "/sys/devices/soc0/serial_number");
     DumpFileToFd(fd, "CPU present", "/sys/devices/system/cpu/present");
     DumpFileToFd(fd, "CPU online", "/sys/devices/system/cpu/online");
+    DumpFileToFd(fd, "UFS model", "/sys/block/sda/device/model");
+    DumpFileToFd(fd, "UFS rev", "/sys/block/sda/device/rev");
+    DumpFileToFd(fd, "UFS size", "/sys/block/sda/size");
+    RunCommandToFd(fd, "UFS health", {"/vendor/bin/sh", "-c", "for f in $(find /sys/kernel/debug/ufshcd0 -type f); do if [[ -r $f && -f $f ]]; then echo --- $f; cat $f; fi; done"});
     DumpFileToFd(fd, "INTERRUPTS", "/proc/interrupts");
     DumpFileToFd(fd, "RPM Stats", "/d/rpm_stats");
     DumpFileToFd(fd, "Power Management Stats", "/d/rpm_master_stats");
diff --git a/init.hardware.diag.rc.userdebug b/init.hardware.diag.rc.userdebug
index 16d7e83..a283556 100644
--- a/init.hardware.diag.rc.userdebug
+++ b/init.hardware.diag.rc.userdebug
@@ -384,3 +384,17 @@
 
 on property:debug.htc.ramdump.crash=true
     write /proc/sysrq-trigger "c"
+
+on property:sys.logger.bluetooth=true
+   setprop persist.service.bdroid.snooplog true
+   setprop persist.service.bdroid.fwsnoop true
+
+on property:sys.logger.bluetooth=false
+   setprop persist.service.bdroid.snooplog false
+   setprop persist.service.bdroid.fwsnoop false
+
+on property:persist.bluetooth.btsnoopenable=true
+   setprop persist.service.bdroid.soclog true
+
+on property:persist.bluetooth.btsnoopenable=false
+   setprop persist.service.bdroid.soclog false
diff --git a/init.hardware.rc b/init.hardware.rc
index 4ffe8b0..8ab2ba2 100644
--- a/init.hardware.rc
+++ b/init.hardware.rc
@@ -230,6 +230,7 @@
 
 on property:sys.ramoops.decrypted=true
     mount pstore pstore /sys/fs/pstore
+    chown system log /sys/fs/pstore
     chown system log /sys/fs/pstore/console-ramoops
     chmod 0440 /sys/fs/pstore/console-ramoops
     chown system log /sys/fs/pstore/console-ramoops-0
@@ -582,6 +583,19 @@
     write /dev/cpuset/application/background/cpus 0-1
     write /dev/cpuset/application/cpus 0-1,4-5
 
+    # UFS health
+    chmod 755 /sys/kernel/debug/ufshcd0
+    chown 644 /sys/kernel/debug/ufshcd0/err_state
+    chmod 644 /sys/kernel/debug/ufshcd0/power_mode
+    chmod 644 /sys/kernel/debug/ufshcd0/host_regs
+    chmod 644 /sys/kernel/debug/ufshcd0/show_hba
+    chmod 644 /sys/kernel/debug/ufshcd0/dump_device_desc
+    chmod 644 /sys/kernel/debug/ufshcd0/dump_health_desc
+    chmod 755 /sys/kernel/debug/ufshcd0/stats
+    chmod 644 /sys/kernel/debug/ufshcd0/stats/req_stats
+    chmod 644 /sys/kernel/debug/ufshcd0/stats/query_stats
+    chmod 644 /sys/kernel/debug/ufshcd0/stats/err_stats
+
 on property:init.svc.per_mgr=running
     start per_proxy
 
@@ -609,9 +623,8 @@
 
 on property:persist.sys.ssr.enable_ramdumps=1
     write /sys/module/subsystem_restart/parameters/enable_ramdumps 1
-    mkdir /data/vendor/ssrdump 761 root system
+    mkdir /data/vendor/ssrdump 771 root system
     mkdir /data/vendor/ramdump 771 root system
-    mkdir /data/vendor/ramdump/bluetooth 771 root system
     start ss_ramdump
 
 on property:persist.sys.ssr.enable_ramdumps=0
diff --git a/init.hardware.usb.rc b/init.hardware.usb.rc
index 7b8b692..0ecc976 100644
--- a/init.hardware.usb.rc
+++ b/init.hardware.usb.rc
@@ -39,6 +39,7 @@
     mkdir /config/usb_gadget/g1/configs/b.1 0770 shell shell
     mkdir /config/usb_gadget/g1/configs/b.1/strings/0x409 0770 shell shell
     write /config/usb_gadget/g1/os_desc/b_vendor_code 0x1
+    write /config/usb_gadget/g1/os_desc/qw_sign "MSFT100"
     mkdir /dev/usb-ffs 0775 shell shell
     mkdir /dev/usb-ffs/adb 0770 shell shell
     mount functionfs adb /dev/usb-ffs/adb uid=2000,gid=2000
@@ -50,15 +51,22 @@
     setprop sys.usb.configfs 1
     setprop sys.usb.controller "a800000.dwc3"
     write /sys/module/libcomposite/parameters/disable_l1_for_hs "y"
+    symlink /config/usb_gadget/g1/configs/b.1 /config/usb_gadget/g1/os_desc/b.1
+    write /config/usb_gadget/g1/functions/gsi.rndis/rndis_wceis 1
+
+on property:sys.usb.config=none && property:sys.usb.configfs=1
+    write /config/usb_gadget/g1/os_desc/use 0
 
 on property:sys.usb.ffs.mtp.ready=1 && property:sys.usb.config=mtp && property:sys.usb.configfs=1
     write /config/usb_gadget/g1/idVendor 0x18d1
     write /config/usb_gadget/g1/idProduct 0x4ee1
+    write /config/usb_gadget/g1/os_desc/use 1
     symlink /config/usb_gadget/g1/functions/ffs.mtp /config/usb_gadget/g1/configs/b.1/f1
 
 on property:sys.usb.ffs.ready=1 && property:sys.usb.ffs.mtp.ready=1 && property:sys.usb.config=mtp,adb && property:sys.usb.configfs=1
     write /config/usb_gadget/g1/idVendor 0x18d1
     write /config/usb_gadget/g1/idProduct 0x4ee2
+    write /config/usb_gadget/g1/os_desc/use 1
     symlink /config/usb_gadget/g1/functions/ffs.mtp /config/usb_gadget/g1/configs/b.1/f1
 
 on property:sys.usb.config=rndis && property:sys.usb.configfs=1
@@ -74,11 +82,13 @@
 on property:sys.usb.ffs.mtp.ready=1 && property:sys.usb.config=ptp && property:sys.usb.configfs=1
     write /config/usb_gadget/g1/idVendor 0x18d1
     write /config/usb_gadget/g1/idProduct 0x4ee5
+    write /config/usb_gadget/g1/os_desc/use 1
     symlink /config/usb_gadget/g1/functions/ffs.mtp /config/usb_gadget/g1/configs/b.1/f1
 
 on property:sys.usb.ffs.ready=1 && property:sys.usb.ffs.mtp.ready=1 && property:sys.usb.config=ptp,adb && property:sys.usb.configfs=1
     write /config/usb_gadget/g1/idVendor 0x18d1
     write /config/usb_gadget/g1/idProduct 0x4ee6
+    write /config/usb_gadget/g1/os_desc/use 1
     symlink /config/usb_gadget/g1/functions/ffs.mtp /config/usb_gadget/g1/configs/b.1/f1
 
 on property:sys.usb.config=adb && property:sys.usb.configfs=1
diff --git a/init.insmod.sh b/init.insmod.sh
index d98037c..46e9363 100755
--- a/init.insmod.sh
+++ b/init.insmod.sh
@@ -7,7 +7,11 @@
 ### ...                               ###
 #########################################
 
-cfg_file="/vendor/etc/init.insmod.cfg"
+if [[ -e "/vendor/etc/init.insmod_charger.cfg" && "$(getprop ro.boot.mode)" == "charger" ]]; then
+  cfg_file="/vendor/etc/init.insmod_charger.cfg"
+else
+  cfg_file="/vendor/etc/init.insmod.cfg"
+fi
 
 if [ -f $cfg_file ]; then
   while IFS=" " read -r action name
diff --git a/manifest.xml b/manifest.xml
index b386837..c553bb3 100644
--- a/manifest.xml
+++ b/manifest.xml
@@ -190,15 +190,6 @@
         </interface>
     </hal>
     <hal format="hidl">
-        <name>android.hardware.neuralnetworks</name>
-        <transport>hwbinder</transport>
-        <version>1.0</version>
-        <interface>
-            <name>IDevice</name>
-            <instance>hvx</instance>
-        </interface>
-    </hal>
-    <hal format="hidl">
         <name>android.hardware.nfc</name>
         <transport>hwbinder</transport>
         <version>1.0</version>
@@ -295,7 +286,7 @@
     <hal format="hidl">
         <name>android.hardware.thermal</name>
         <transport>hwbinder</transport>
-        <version>1.0</version>
+        <version>1.1</version>
         <interface>
             <name>IThermal</name>
             <instance>default</instance>
diff --git a/media_codecs_performance.xml b/media_codecs_performance.xml
index 2be2167..7f1b254 100644
--- a/media_codecs_performance.xml
+++ b/media_codecs_performance.xml
@@ -14,138 +14,138 @@
      limitations under the License.
 -->
 
-<!-- Generated file for wahoo using measurements between OPM1.170803.002/OPD1.170810.002 and OPM1.170904.001 -->
+<!-- Generated file for wahoo using measurements between OPM1.170815.001 and OPM1.170912.002 -->
 <MediaCodecs>
+    <!-- Measurements between OPD1.170804.003 and OPM1.170908.002 -->
     <Encoders>
         <MediaCodec name="OMX.qcom.video.encoder.h263" type="video/3gpp" update="true">
-            <Limit name="measured-frame-rate-176x144" range="391-391" /> <!-- N=224 v98%=1.1 -->
-            <Limit name="measured-frame-rate-352x288" range="417-426" /> <!-- N=224 v98%=1.2 -->
+            <Limit name="measured-frame-rate-176x144" range="390-390" /> <!-- N=228 v98%=1.2 -->
+            <Limit name="measured-frame-rate-352x288" range="416-424" /> <!-- N=228 v98%=1.2 -->
         </MediaCodec>
         <MediaCodec name="OMX.qcom.video.encoder.avc" type="video/avc" update="true">
-            <Limit name="measured-frame-rate-320x240" range="427-431" /> <!-- N=224 v98%=1.2 -->
-            <Limit name="measured-frame-rate-720x480" range="167-167" /> <!-- N=224 v98%=1.2 -->
-            <Limit name="measured-frame-rate-1280x720" range="88-88" /> <!-- N=222 v98%=1.1 -->
-            <Limit name="measured-frame-rate-1920x1080" range="31-31" /> <!-- N=224 v98%=1.2 -->
+            <Limit name="measured-frame-rate-320x240" range="427-431" /> <!-- N=228 v98%=1.2 -->
+            <Limit name="measured-frame-rate-720x480" range="168-168" /> <!-- N=228 v98%=1.2 -->
+            <Limit name="measured-frame-rate-1280x720" range="88-88" /> <!-- N=226 v98%=1.1 -->
+            <Limit name="measured-frame-rate-1920x1080" range="31-31" /> <!-- N=228 v98%=1.2 -->
         </MediaCodec>
         <MediaCodec name="OMX.qcom.video.encoder.hevc" type="video/hevc" update="true">
-            <Limit name="measured-frame-rate-320x240" range="444-452" /> <!-- N=224 v98%=1.2 -->
-            <Limit name="measured-frame-rate-720x480" range="176-176" /> <!-- N=224 v98%=1.2 -->
-            <Limit name="measured-frame-rate-1280x720" range="124-125" /> <!-- N=224 v98%=1.1 -->
-            <Limit name="measured-frame-rate-1920x1080" range="53-53" /> <!-- N=224 v98%=1.1 -->
-            <Limit name="measured-frame-rate-3840x2160" range="21-21" /> <!-- N=224 v98%=1.3 -->
+            <Limit name="measured-frame-rate-320x240" range="444-452" /> <!-- N=228 v98%=1.2 -->
+            <Limit name="measured-frame-rate-720x480" range="176-176" /> <!-- N=228 v98%=1.2 -->
+            <Limit name="measured-frame-rate-1280x720" range="124-125" /> <!-- N=228 v98%=1.1 -->
+            <Limit name="measured-frame-rate-1920x1080" range="52-52" /> <!-- N=228 v98%=1.2 -->
+            <Limit name="measured-frame-rate-3840x2160" range="21-21" /> <!-- N=228 v98%=1.3 -->
         </MediaCodec>
         <MediaCodec name="OMX.qcom.video.encoder.mpeg4" type="video/mp4v-es" update="true">
-            <Limit name="measured-frame-rate-176x144" range="384-384" /> <!-- N=224 v98%=1.1 -->
-            <Limit name="measured-frame-rate-352x288" range="387-399" /> <!-- N=224 v98%=1.2 -->
-            <!-- measured 98%:97-244 med:217/209 FLAKY(mn=80.2 < 97 - 418) -->
-            <Limit name="measured-frame-rate-640x480" range="160-209" /> <!-- TWEAKED N=224 v98%=1.6 -->
+            <Limit name="measured-frame-rate-176x144" range="384-384" /> <!-- N=228 v98%=1.2 -->
+            <Limit name="measured-frame-rate-352x288" range="387-399" /> <!-- N=228 v98%=1.2 -->
+            <!-- measured 98%:80-244 med:217/209 FLAKY(mn=73.3 < 80 - 418) -->
+            <Limit name="measured-frame-rate-640x480" range="146-209" /> <!-- TWEAKED N=228 v98%=1.7 -->
         </MediaCodec>
         <MediaCodec name="OMX.qcom.video.encoder.vp8" type="video/x-vnd.on2.vp8" update="true">
-            <Limit name="measured-frame-rate-320x180" range="337-337" /> <!-- N=224 v98%=1.2 -->
-            <Limit name="measured-frame-rate-640x360" range="262-266" /> <!-- N=224 v98%=1.2 -->
-            <Limit name="measured-frame-rate-1280x720" range="82-82" /> <!-- N=224 v98%=1.1 -->
-            <Limit name="measured-frame-rate-1920x1080" range="32-32" /> <!-- N=224 v98%=1.3 -->
+            <Limit name="measured-frame-rate-320x180" range="335-335" /> <!-- N=228 v98%=1.2 -->
+            <Limit name="measured-frame-rate-640x360" range="262-267" /> <!-- N=228 v98%=1.2 -->
+            <Limit name="measured-frame-rate-1280x720" range="82-82" /> <!-- N=228 v98%=1.1 -->
+            <Limit name="measured-frame-rate-1920x1080" range="32-32" /> <!-- N=228 v98%=1.3 -->
         </MediaCodec>
         <MediaCodec name="OMX.google.h263.encoder" type="video/3gpp" update="true">
-            <!-- measured 98%:169-448 med:329/327 FLAKY(mn=146.3 < 164 - 654) -->
-            <Limit name="measured-frame-rate-176x144" range="327-327" /> <!-- N=224 v98%=1.6 -->
+            <!-- measured 98%:179-448 med:322/323 FLAKY(mn=143.6 < 161 - 646) -->
+            <Limit name="measured-frame-rate-176x144" range="287-323" /> <!-- TWEAKED N=228 v98%=1.6 -->
         </MediaCodec>
         <MediaCodec name="OMX.google.h264.encoder" type="video/avc" update="true">
-            <!-- measured 98%:163-357 med:304/304 FLAKY(mn=148.3 < 152 - 608) -->
-            <Limit name="measured-frame-rate-320x240" range="304-304" /> <!-- N=220 v98%=1.5 -->
-            <Limit name="measured-frame-rate-720x480" range="110-111" /> <!-- N=224 v98%=1.1 -->
-            <Limit name="measured-frame-rate-1280x720" range="64-65" /> <!-- N=222 v98%=1.2 -->
-            <Limit name="measured-frame-rate-1920x1080" range="29-30" /> <!-- N=224 v98%=1.2 -->
+            <!-- measured 97%:215-350 med:304/304 FLAKY(mn=83.7 < 152 - 608) -->
+            <Limit name="measured-frame-rate-320x240" range="167-304" /> <!-- TWEAKED N=224 v97%=1.3 -->
+            <!-- measured 98%:71-122 med:110/110 FLAKY(mn=46.8 < 55 - 220) -->
+            <Limit name="measured-frame-rate-720x480" range="93-110" /> <!-- TWEAKED N=228 v98%=1.3 -->
+            <!-- measured 98%:50-73 med:64/64 FLAKY(mn=24.1 < 32 - 128) -->
+            <Limit name="measured-frame-rate-1280x720" range="48-64" /> <!-- TWEAKED N=226 v98%=1.2 -->
+            <!-- measured 98%:21-37 med:29/29 FLAKY(mn=12.1 < 15 - 58) -->
+            <Limit name="measured-frame-rate-1920x1080" range="24-29" /> <!-- TWEAKED N=228 v98%=1.3 -->
         </MediaCodec>
         <MediaCodec name="OMX.google.mpeg4.encoder" type="video/mp4v-es" update="true">
-            <Limit name="measured-frame-rate-176x144" range="348-348" /> <!-- N=224 v98%=1.5 -->
+            <Limit name="measured-frame-rate-176x144" range="341-341" /> <!-- N=228 v98%=1.4 -->
         </MediaCodec>
         <MediaCodec name="OMX.google.vp8.encoder" type="video/x-vnd.on2.vp8" update="true">
-            <Limit name="measured-frame-rate-320x180" range="74-74" /> <!-- N=224 v98%=1.4 -->
-            <Limit name="measured-frame-rate-640x360" range="45-45" /> <!-- N=222 v98%=1.2 -->
-            <Limit name="measured-frame-rate-1280x720" range="36-36" /> <!-- N=224 v98%=1.1 -->
-            <Limit name="measured-frame-rate-1920x1080" range="23-23" /> <!-- N=224 v98%=1.1 -->
+            <Limit name="measured-frame-rate-320x180" range="73-73" /> <!-- N=228 v98%=1.4 -->
+            <Limit name="measured-frame-rate-640x360" range="45-45" /> <!-- N=226 v98%=1.2 -->
+            <Limit name="measured-frame-rate-1280x720" range="36-36" /> <!-- N=228 v98%=1.1 -->
+            <Limit name="measured-frame-rate-1920x1080" range="23-23" /> <!-- N=228 v98%=1.1 -->
         </MediaCodec>
+        <!-- Measurements between OPM1.170809.002 and OPM1.170908.002 -->
         <MediaCodec name="OMX.google.vp9.encoder" type="video/x-vnd.on2.vp9" update="true">
-            <!-- measured 98%:196-208 med:205/205 N=82 -->
-            <Limit name="measured-frame-rate-320x180" range="205-205" /> <!-- v98%=1.0 (OPM1.170809.002-) -->
-            <!-- measured 98%:63-70 med:68/68 N=82 -->
-            <Limit name="measured-frame-rate-640x360" range="68-68" /> <!-- v98%=1.0 (OPM1.170809.002-) -->
-            <!-- measured 98%:14-18 med:17/17 N=82 -->
-            <Limit name="measured-frame-rate-1280x720" range="17-17" /> <!-- v98%=1.1 (OPM1.170809.002-) -->
-            <!-- measured 93%:8-9 med:9/9 N=24 -->
-            <Limit name="measured-frame-rate-1920x1080" range="9-9" /> <!-- v93%=1.0 (OPM1.170809.002-OPM1.170810.004) -->
+            <Limit name="measured-frame-rate-320x180" range="205-205" /> <!-- N=102 v98%=1.0 -->
+            <Limit name="measured-frame-rate-640x360" range="68-68" /> <!-- N=102 v98%=1.0 -->
+            <Limit name="measured-frame-rate-1280x720" range="17-17" /> <!-- N=102 v98%=1.1 -->
         </MediaCodec>
     </Encoders>
     <Decoders>
         <MediaCodec name="OMX.qcom.video.decoder.h263" type="video/3gpp" update="true">
-            <Limit name="measured-frame-rate-176x144" range="511-513" /> <!-- N=174 v98%=1.3 -->
-            <Limit name="measured-frame-rate-352x288" range="470-471" /> <!-- N=174 v98%=1.3 -->
+            <Limit name="measured-frame-rate-176x144" range="505-507" /> <!-- N=162 v98%=1.3 -->
+            <Limit name="measured-frame-rate-352x288" range="470-472" /> <!-- N=162 v98%=1.3 -->
         </MediaCodec>
         <MediaCodec name="OMX.qcom.video.decoder.avc" type="video/avc" update="true">
-            <Limit name="measured-frame-rate-320x240" range="341-341" /> <!-- N=174 v98%=1.3 -->
-            <Limit name="measured-frame-rate-720x480" range="302-302" /> <!-- N=174 v98%=1.3 -->
-            <Limit name="measured-frame-rate-1280x720" range="247-247" /> <!-- N=174 v98%=1.3 -->
-            <Limit name="measured-frame-rate-1920x1080" range="148-148" /> <!-- N=174 v98%=1.2 -->
+            <Limit name="measured-frame-rate-320x240" range="342-342" /> <!-- N=162 v98%=1.3 -->
+            <Limit name="measured-frame-rate-720x480" range="303-303" /> <!-- N=162 v98%=1.3 -->
+            <Limit name="measured-frame-rate-1280x720" range="247-247" /> <!-- N=162 v98%=1.3 -->
+            <Limit name="measured-frame-rate-1920x1080" range="148-148" /> <!-- N=162 v98%=1.2 -->
         </MediaCodec>
         <MediaCodec name="OMX.qcom.video.decoder.hevc" type="video/hevc" update="true">
-            <Limit name="measured-frame-rate-352x288" range="345-345" /> <!-- N=174 v98%=1.4 -->
-            <Limit name="measured-frame-rate-640x360" range="325-325" /> <!-- N=174 v98%=1.3 -->
-            <Limit name="measured-frame-rate-720x480" range="311-311" /> <!-- N=174 v98%=1.3 -->
-            <Limit name="measured-frame-rate-1280x720" range="267-267" /> <!-- N=174 v98%=1.3 -->
-            <Limit name="measured-frame-rate-1920x1080" range="258-258" /> <!-- N=174 v98%=1.0 -->
-            <Limit name="measured-frame-rate-3840x2160" range="71-71" /> <!-- N=174 v98%=1.0 -->
+            <Limit name="measured-frame-rate-352x288" range="346-346" /> <!-- N=162 v98%=1.4 -->
+            <Limit name="measured-frame-rate-640x360" range="326-326" /> <!-- N=162 v98%=1.3 -->
+            <Limit name="measured-frame-rate-720x480" range="311-311" /> <!-- N=162 v98%=1.3 -->
+            <Limit name="measured-frame-rate-1280x720" range="267-267" /> <!-- N=162 v98%=1.3 -->
+            <Limit name="measured-frame-rate-1920x1080" range="258-258" /> <!-- N=162 v98%=1.0 -->
+            <Limit name="measured-frame-rate-3840x2160" range="71-71" /> <!-- N=162 v98%=1.0 -->
         </MediaCodec>
         <MediaCodec name="OMX.qcom.video.decoder.mpeg4" type="video/mp4v-es" update="true">
-            <Limit name="measured-frame-rate-176x144" range="458-458" /> <!-- N=174 v98%=1.3 -->
-            <Limit name="measured-frame-rate-480x360" range="433-433" /> <!-- N=176 v98%=1.4 -->
+            <Limit name="measured-frame-rate-176x144" range="459-459" /> <!-- N=162 v98%=1.3 -->
+            <Limit name="measured-frame-rate-480x360" range="433-434" /> <!-- N=164 v98%=1.4 -->
         </MediaCodec>
         <MediaCodec name="OMX.qcom.video.decoder.vp8" type="video/x-vnd.on2.vp8" update="true">
-            <Limit name="measured-frame-rate-320x180" range="418-418" /> <!-- N=174 v98%=1.3 -->
-            <Limit name="measured-frame-rate-640x360" range="414-415" /> <!-- N=174 v98%=1.3 -->
-            <Limit name="measured-frame-rate-1280x720" range="309-309" /> <!-- N=174 v98%=1.3 -->
-            <Limit name="measured-frame-rate-1920x1080" range="145-145" /> <!-- N=174 v98%=1.3 -->
+            <Limit name="measured-frame-rate-320x180" range="418-419" /> <!-- N=162 v98%=1.3 -->
+            <Limit name="measured-frame-rate-640x360" range="414-414" /> <!-- N=162 v98%=1.3 -->
+            <Limit name="measured-frame-rate-1280x720" range="309-309" /> <!-- N=162 v98%=1.3 -->
+            <Limit name="measured-frame-rate-1920x1080" range="145-145" /> <!-- N=162 v98%=1.2 -->
         </MediaCodec>
         <MediaCodec name="OMX.qcom.video.decoder.vp9" type="video/x-vnd.on2.vp9" update="true">
-            <Limit name="measured-frame-rate-320x180" range="342-342" /> <!-- N=174 v98%=1.3 -->
-            <Limit name="measured-frame-rate-640x360" range="334-334" /> <!-- N=174 v98%=1.3 -->
-            <Limit name="measured-frame-rate-1280x720" range="271-271" /> <!-- N=174 v98%=1.3 -->
-            <Limit name="measured-frame-rate-1920x1080" range="153-153" /> <!-- N=174 v98%=1.3 -->
-            <Limit name="measured-frame-rate-3840x2160" range="36-36" /> <!-- N=174 v98%=1.3 -->
+            <Limit name="measured-frame-rate-320x180" range="342-342" /> <!-- N=162 v98%=1.3 -->
+            <Limit name="measured-frame-rate-640x360" range="335-335" /> <!-- N=162 v98%=1.3 -->
+            <Limit name="measured-frame-rate-1280x720" range="271-271" /> <!-- N=162 v98%=1.3 -->
+            <Limit name="measured-frame-rate-1920x1080" range="153-153" /> <!-- N=162 v98%=1.3 -->
+            <Limit name="measured-frame-rate-3840x2160" range="36-36" /> <!-- N=162 v98%=1.3 -->
         </MediaCodec>
         <MediaCodec name="OMX.google.h263.decoder" type="video/3gpp" update="true">
-            <Limit name="measured-frame-rate-176x144" range="150-150" /> <!-- N=174 v98%=1.3 -->
+            <Limit name="measured-frame-rate-176x144" range="150-150" /> <!-- N=162 v98%=1.3 -->
         </MediaCodec>
         <MediaCodec name="OMX.google.h264.decoder" type="video/avc" update="true">
-            <!-- measured 98%:131-278 med:159/160 FLAKY(80 - 320 < mx=637.8) -->
-            <Limit name="measured-frame-rate-320x240" range="159-319" /> <!-- TWEAKED N=173 v98%=1.5 -->
-            <Limit name="measured-frame-rate-720x480" range="57-57" /> <!-- N=174 v98%=1.3 -->
-            <Limit name="measured-frame-rate-1280x720" range="28-28" /> <!-- N=174 v98%=1.5 -->
-            <Limit name="measured-frame-rate-1920x1080" range="16-16" /> <!-- N=174 v98%=1.5 -->
+            <!-- measured 98%:130-275 med:158/158 FLAKY(79 - 316 < mx=637.8) -->
+            <Limit name="measured-frame-rate-320x240" range="158-319" /> <!-- TWEAKED N=161 v98%=1.5 -->
+            <Limit name="measured-frame-rate-720x480" range="56-56" /> <!-- N=162 v98%=1.3 -->
+            <Limit name="measured-frame-rate-1280x720" range="28-28" /> <!-- N=162 v98%=1.5 -->
+            <Limit name="measured-frame-rate-1920x1080" range="15-15" /> <!-- N=162 v98%=1.5 -->
         </MediaCodec>
         <MediaCodec name="OMX.google.hevc.decoder" type="video/hevc" update="true">
-            <Limit name="measured-frame-rate-352x288" range="632-632" /> <!-- N=174 v98%=1.2 -->
-            <Limit name="measured-frame-rate-640x360" range="250-250" /> <!-- N=165 v98%=1.2 -->
-            <Limit name="measured-frame-rate-720x480" range="217-217" /> <!-- N=168 v98%=1.3 -->
-            <Limit name="measured-frame-rate-1280x720" range="103-103" /> <!-- N=173 v98%=1.3 -->
-            <!-- measured 98%:41-66 med:61/61 FLAKY(mn=0.0 < 31 - 122) -->
-            <Limit name="measured-frame-rate-1920x1080" range="61-61" /> <!-- N=172 v98%=1.3 -->
+            <Limit name="measured-frame-rate-352x288" range="631-631" /> <!-- N=158 v98%=1.2 -->
+            <Limit name="measured-frame-rate-640x360" range="250-250" /> <!-- N=153 v98%=1.2 -->
+            <Limit name="measured-frame-rate-720x480" range="218-218" /> <!-- N=154 v98%=1.3 -->
+            <Limit name="measured-frame-rate-1280x720" range="102-103" /> <!-- N=159 v98%=1.3 -->
+            <!-- measured 98%:43-66 med:60/60 FLAKY(mn=0.0 < 30 - 120) -->
+            <Limit name="measured-frame-rate-1920x1080" range="60-60" /> <!-- N=160 v98%=1.2 -->
         </MediaCodec>
         <MediaCodec name="OMX.google.mpeg4.decoder" type="video/mp4v-es" update="true">
-            <Limit name="measured-frame-rate-176x144" range="177-177" /> <!-- N=174 v98%=1.4 -->
+            <Limit name="measured-frame-rate-176x144" range="177-177" /> <!-- N=162 v98%=1.4 -->
         </MediaCodec>
         <MediaCodec name="OMX.google.vp8.decoder" type="video/x-vnd.on2.vp8" update="true">
-            <!-- measured 98%:432-1070 med:511/511 FLAKY(256 - 1070 < mx=1079.9) -->
-            <Limit name="measured-frame-rate-320x180" range="511-540" /> <!-- TWEAKED N=174 v98%=1.6 -->
-            <Limit name="measured-frame-rate-640x360" range="415-415" /> <!-- N=174 v98%=1.1 -->
-            <Limit name="measured-frame-rate-1280x720" range="95-95" /> <!-- N=174 v98%=1.1 -->
-            <Limit name="measured-frame-rate-1920x1080" range="37-37" /> <!-- N=174 v98%=1.1 -->
+            <!-- measured 98%:432-1070 med:504/505 FLAKY(252 - 1070 < mx=1079.9) -->
+            <Limit name="measured-frame-rate-320x180" range="504-540" /> <!-- TWEAKED N=162 v98%=1.6 -->
+            <Limit name="measured-frame-rate-640x360" range="415-415" /> <!-- N=162 v98%=1.1 -->
+            <Limit name="measured-frame-rate-1280x720" range="95-95" /> <!-- N=162 v98%=1.1 -->
+            <Limit name="measured-frame-rate-1920x1080" range="37-37" /> <!-- N=162 v98%=1.1 -->
         </MediaCodec>
         <MediaCodec name="OMX.google.vp9.decoder" type="video/x-vnd.on2.vp9" update="true">
-            <Limit name="measured-frame-rate-320x180" range="491-491" /> <!-- N=174 v98%=1.4 -->
-            <Limit name="measured-frame-rate-640x360" range="389-389" /> <!-- N=174 v98%=1.1 -->
-            <Limit name="measured-frame-rate-1280x720" range="114-114" /> <!-- N=174 v98%=1.1 -->
-            <Limit name="measured-frame-rate-1920x1080" range="69-69" /> <!-- N=174 v98%=1.1 -->
+            <Limit name="measured-frame-rate-320x180" range="468-470" /> <!-- N=162 v98%=1.4 -->
+            <Limit name="measured-frame-rate-640x360" range="377-379" /> <!-- N=162 v98%=1.1 -->
+            <Limit name="measured-frame-rate-1280x720" range="113-113" /> <!-- N=162 v98%=1.1 -->
+            <Limit name="measured-frame-rate-1920x1080" range="68-68" /> <!-- N=162 v98%=1.1 -->
         </MediaCodec>
     </Decoders>
 </MediaCodecs>
diff --git a/overlay/frameworks/base/core/res/res/values/config.xml b/overlay/frameworks/base/core/res/res/values/config.xml
index c4690b0..fd3a0ad 100755
--- a/overlay/frameworks/base/core/res/res/values/config.xml
+++ b/overlay/frameworks/base/core/res/res/values/config.xml
@@ -218,7 +218,7 @@
 
     <!-- Boolean indicating whether or not to revert to default country code when cellular
     radio is unable to find any MCC information to infer wifi country code from -->
-    <bool translatable="false" name="config_wifi_revert_country_code_on_cellular_loss">true</bool>
+    <bool translatable="false" name="config_wifi_revert_country_code_on_cellular_loss">false</bool>
 
     <!-- Boolean indicating whether or not wifi should turn off when emergency call is made -->
     <bool translatable="false" name="config_wifi_turn_off_during_emergency_call">true</bool>
diff --git a/p2p_supplicant_overlay.conf b/p2p_supplicant_overlay.conf
index acbace2..b5e89e0 100644
--- a/p2p_supplicant_overlay.conf
+++ b/p2p_supplicant_overlay.conf
@@ -1 +1,2 @@
 disable_scan_offload=1
+p2p_no_group_iface=1
diff --git a/sec_config b/sec_config
old mode 100644
new mode 100755
index 23716aa..f75d4b1
--- a/sec_config
+++ b/sec_config
@@ -296,7 +296,7 @@
 /* PDC */
 36:4294967295:1001
 /* SAR */
-17:4294967295:1001
+17:4294967295:1001:1006:1047
 /* RFRPE */
 41:4294967295:1001
 /*UIM*/
diff --git a/sepolicy/private/seapp_contexts b/sepolicy/private/seapp_contexts
new file mode 100644
index 0000000..fbb9ba4
--- /dev/null
+++ b/sepolicy/private/seapp_contexts
@@ -0,0 +1,3 @@
+#Add new domain for DataServices
+#TODO Remove user "system" when b/38043081 is resolved
+user=system seinfo=platform name=.dataservices domain=dataservice_app type=system_app_data_file
diff --git a/sepolicy/vendor/certs/tango.x509.pem b/sepolicy/vendor/certs/tango.x509.pem
index 431c1a5..a7619b2 100644
--- a/sepolicy/vendor/certs/tango.x509.pem
+++ b/sepolicy/vendor/certs/tango.x509.pem
@@ -1,20 +1,23 @@
 -----BEGIN CERTIFICATE-----
-MIIDWjCCAkKgAwIBAgIEUlNYsDANBgkqhkiG9w0BAQUFADBvMRAwDgYDVQQGEwdV
-bmtub3duMRAwDgYDVQQIEwdVbmtub3duMRAwDgYDVQQHEwdVbmtub3duMREwDwYD
-VQQKEwhNb3Rvcm9sYTERMA8GA1UECxMIVHJhaWxtaXgxETAPBgNVBAMTCFRyYWls
-bWl4MB4XDTEzMTAwODAwNTgyNFoXDTQxMDIyMzAwNTgyNFowbzEQMA4GA1UEBhMH
-VW5rbm93bjEQMA4GA1UECBMHVW5rbm93bjEQMA4GA1UEBxMHVW5rbm93bjERMA8G
-A1UEChMITW90b3JvbGExETAPBgNVBAsTCFRyYWlsbWl4MREwDwYDVQQDEwhUcmFp
-bG1peDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKQBftL+C3I6JiLF
-utgzqfQ5YHNpL8Vjov8RbKTeYbyNSDMB+knby2wuiGgcSWMYokD7uhR2ysPtyv52
-CM9O8MWXelgJ3mdxLh4WzcWzELXW529J08FKpgcM5579/EpSdQQlh1WHlnTAoNdm
-xsgWJQMM0CR+/0puIkc1W6GM3cOfS9KNeL/08wfjxRVeFMpyM6DhHMbDxVuNYq57
-mm3xTAMSmsxEveYsZDjNnZgYZDVJoCnWlpT+1KivzYFxp+1pstk7I76WlwqIqCoz
-nT3NTVj9h9kvQcd4IgDe+UEygdPa1cAMO4wYdFlGDQKqZjIYvnAy1Qi1JqoeyEr+
-8ggpr2UCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAjpKzuYGq3tICtYZSXbuUmJbj
-dIsFRivWxCP25TQ/Csv+tiOijHsU3HNbNXvn8EamkyRi/LoQy7ThoDYhFaQJFaYb
-wU4mgdoGxj5rH6URlH/qPmWP6nuM2NQBt0VLwh/MWaXm8u0WY5Tzfd/mRwwc+UMM
-9TJhuQxaf42gjnyQO+d/eBves7lL23vDPFCP8okQ3aAzsg5lDFQ6nT+91TXvMpCx
-zIurNhce+i2M8tX0IkHmqkEKGBfTdoeUkOVH7Lnac30D5P6daGJrt6PBpWUa8OMC
-5VdKhy+DE9cQFE8qG+lDZxg56PqZdWG1pyUotFViUAYkA16Ct5363yLWWYid6g==
+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
+zKHDydw=
 -----END CERTIFICATE-----
diff --git a/sepolicy/vendor/device.te b/sepolicy/vendor/device.te
index 97fc839..c63bdb3 100644
--- a/sepolicy/vendor/device.te
+++ b/sepolicy/vendor/device.te
@@ -23,5 +23,6 @@
 type spcom_device, dev_type;
 type ssd_block_device, dev_type;
 type ssr_device, dev_type;
+type thermal_device, dev_type;
 type wlan_device, dev_type;
 type xbl_block_device, dev_type;
diff --git a/sepolicy/vendor/file.te b/sepolicy/vendor/file.te
index fc569b5..2e41283 100644
--- a/sepolicy/vendor/file.te
+++ b/sepolicy/vendor/file.te
@@ -27,6 +27,7 @@
 type debugfs_wlan, debugfs_type, fs_type;
 type debugfs_mdp, debugfs_type, fs_type;
 type debugfs_icnss, debugfs_type, fs_type;
+type debugfs_ufs, debugfs_type, fs_type;
 
 # /proc
 type proc_wifi_dbg, fs_type;
diff --git a/sepolicy/vendor/file_contexts b/sepolicy/vendor/file_contexts
index d1c87af..1541981 100644
--- a/sepolicy/vendor/file_contexts
+++ b/sepolicy/vendor/file_contexts
@@ -24,6 +24,7 @@
 /dev/sdsprpc-smd                                u:object_r:dsp_device:s0
 /dev/wcd-dsp-glink                              u:object_r:audio_device:s0
 /dev/wcd_dsp0_control                           u:object_r:audio_device:s0
+/dev/msm_thermal_query                          u:object_r:thermal_device:s0
 /dev/msm_.*                                     u:object_r:audio_device:s0
 /dev/avtimer                                    u:object_r:avtimer_device:s0
 /dev/subsys_.*                                  u:object_r:ssr_device:s0
diff --git a/sepolicy/vendor/genfs_contexts b/sepolicy/vendor/genfs_contexts
index fae6021..6acbe84 100644
--- a/sepolicy/vendor/genfs_contexts
+++ b/sepolicy/vendor/genfs_contexts
@@ -85,3 +85,4 @@
 genfscon debugfs /mdp                                 u:object_r:debugfs_mdp:s0
 genfscon debugfs /rmt_storage                         u:object_r:debugfs_rmt_storage:s0
 genfscon debugfs /icnss                               u:object_r:debugfs_icnss:s0
+genfscon debugfs /ufshcd0                             u:object_r:debugfs_ufs:s0
diff --git a/sepolicy/vendor/hal_camera_default.te b/sepolicy/vendor/hal_camera_default.te
index 92d7527..dcc69ac 100644
--- a/sepolicy/vendor/hal_camera_default.te
+++ b/sepolicy/vendor/hal_camera_default.te
@@ -7,6 +7,7 @@
 allow hal_camera_default hal_graphics_mapper_hwservice:hwservice_manager find;
 allow hal_camera_default hal_graphics_allocator_hwservice:hwservice_manager find;
 
+hal_client_domain(hal_camera_default, hal_configstore)
 binder_call(hal_camera_default, hal_graphics_composer)
 binder_call(hal_camera_default, system_server)
 binder_call(hal_camera_default, hal_graphics_allocator)
diff --git a/sepolicy/vendor/hal_dumpstate_impl.te b/sepolicy/vendor/hal_dumpstate_impl.te
index c0a14f9..32b875d 100644
--- a/sepolicy/vendor/hal_dumpstate_impl.te
+++ b/sepolicy/vendor/hal_dumpstate_impl.te
@@ -45,6 +45,8 @@
 allow hal_dumpstate_impl debugfs_icnss:file r_file_perms;
 allow hal_dumpstate_impl debugfs_ipc:file r_file_perms;
 allow hal_dumpstate_impl proc_stat:file r_file_perms;
+allow hal_dumpstate_impl debugfs_ufs:dir r_dir_perms;
+allow hal_dumpstate_impl debugfs_ufs:file r_file_perms;
 
 # Access to files for dumping
 allow hal_dumpstate_impl  sysfs:dir r_dir_perms;
@@ -59,3 +61,7 @@
 # Access to touch firmware info
 allow hal_dumpstate_impl sysfs_touch:dir r_dir_perms;
 allow hal_dumpstate_impl sysfs_touch:file rw_file_perms;
+
+# Access to UFS info
+allow hal_dumpstate_impl sysfs_scsi_devices_0000:dir r_dir_perms;
+allow hal_dumpstate_impl sysfs_scsi_devices_0000:file r_file_perms;
diff --git a/sepolicy/vendor/hal_thermal_default.te b/sepolicy/vendor/hal_thermal_default.te
deleted file mode 100644
index bafcb55..0000000
--- a/sepolicy/vendor/hal_thermal_default.te
+++ /dev/null
@@ -1,4 +0,0 @@
-allow hal_thermal_default sysfs_thermal:dir { open read search };
-allow hal_thermal_default sysfs_thermal:file { getattr open read };
-allow hal_thermal_default sysfs_thermal:lnk_file read;
-allow hal_thermal_default proc_stat:file { getattr open read };
diff --git a/sepolicy/vendor/logger_app.te b/sepolicy/vendor/logger_app.te
index 941da8b..46874da 100644
--- a/sepolicy/vendor/logger_app.te
+++ b/sepolicy/vendor/logger_app.te
@@ -18,4 +18,5 @@
 
   set_prop(logger_app, cnss_diag_prop)
   set_prop(logger_app, modem_diag_prop)
+  set_prop(logger_app, bluetooth_log_prop)
 ')
diff --git a/sepolicy/vendor/property.te b/sepolicy/vendor/property.te
index b8e8e53..9f38fab 100644
--- a/sepolicy/vendor/property.te
+++ b/sepolicy/vendor/property.te
@@ -14,3 +14,4 @@
 type tel_mon_prop, property_type;
 type sys_time_prop, property_type;
 type atfwd_start_prop, property_type;
+type bluetooth_log_prop, property_type;
diff --git a/sepolicy/vendor/property_contexts b/sepolicy/vendor/property_contexts
index b5d5728..9094079 100644
--- a/sepolicy/vendor/property_contexts
+++ b/sepolicy/vendor/property_contexts
@@ -24,3 +24,4 @@
 persist.radio.enable_tel_mon  u:object_r:tel_mon_prop:s0
 sys.time.set               u:object_r:sys_time_prop:s0
 persist.radio.atfwd.start  u:object_r:atfwd_start_prop:s0
+sys.logger.bluetooth       u:object_r:bluetooth_log_prop:s0
diff --git a/sepolicy/vendor/seapp_contexts b/sepolicy/vendor/seapp_contexts
index d13ddad..2e3fcbd 100644
--- a/sepolicy/vendor/seapp_contexts
+++ b/sepolicy/vendor/seapp_contexts
@@ -6,10 +6,6 @@
 #TODO Remove user "system" when b/63588267 is resolved
 user=system seinfo=platform name=com.qualcomm.telephony domain=qtelephony type=system_app_data_file
 
-#Add new domain for DataServices
-#TODO Remove user "system" when b/38043081 is resolved
-user=system seinfo=platform name=.dataservices domain=dataservice_app type=system_app_data_file
-
 # The default domain for tango_core / arcore process
 user=_app seinfo=tango name=com.google.tango* domain=tango_core type=app_data_file levelFrom=user
 user=_app seinfo=arcore name=com.google.ar.core* domain=tango_core type=app_data_file levelFrom=user
diff --git a/sepolicy/vendor/ssr_setup.te b/sepolicy/vendor/ssr_setup.te
index 9aa54ee..b05c356 100644
--- a/sepolicy/vendor/ssr_setup.te
+++ b/sepolicy/vendor/ssr_setup.te
@@ -3,8 +3,6 @@
 
 init_daemon_domain(ssr_setup);
 
-userdebug_or_eng(`
 allow ssr_setup sysfs_msm_subsys:dir r_dir_perms;
 allow ssr_setup sysfs_msm_subsys:file rw_file_perms;
-allow ssr_setup sysfs_msm_subsys:lnk_file read;
-')
+allow ssr_setup sysfs_msm_subsys:lnk_file read;
\ No newline at end of file
diff --git a/sepolicy/vendor/system_app.te b/sepolicy/vendor/system_app.te
index 72d8cf3..1cc6fb1 100644
--- a/sepolicy/vendor/system_app.te
+++ b/sepolicy/vendor/system_app.te
@@ -2,9 +2,8 @@
 # userdebug and eng devices
 userdebug_or_eng(`set_prop(system_app, tel_mon_prop)')
 
-# Needed by Settings app's CameraHalHdrplusPreferenceController, available only on a subset of
-# userdebug and eng devices
-userdebug_or_eng(`set_prop(system_app, camera_prop)')
+# Needed by Settings app's CameraHalHdrplusPreferenceController
+set_prop(system_app, camera_prop)
 
 # read regulatory info
 allow system_app elabel_data_file:dir r_dir_perms;
diff --git a/sepolicy/vendor/thermal-engine.te b/sepolicy/vendor/thermal-engine.te
index 8720021..8009959 100644
--- a/sepolicy/vendor/thermal-engine.te
+++ b/sepolicy/vendor/thermal-engine.te
@@ -14,10 +14,15 @@
 allow thermal-engine sysfs_soc:file r_file_perms;
 allow thermal-engine sysfs_thermal:dir r_dir_perms;
 allow thermal-engine sysfs_thermal:file rw_file_perms;
+allow thermal-engine sysfs_thermal:lnk_file read;
 allow thermal-engine sysfs_rmtfs:dir search;
 allow thermal-engine sysfs_rmtfs:file r_file_perms;
+# to read /proc/stat
+allow thermal-engine proc_stat:file { getattr open read };
+# IThermal Thermal HAL
+hal_server_domain(thermal-engine, hal_thermal)
 
-allow thermal-engine audio_device:chr_file rw_file_perms;
+allow thermal-engine thermal_device:chr_file rw_file_perms;
 
 r_dir_file(thermal-engine, sysfs_leds)
 r_dir_file(thermal-engine, sysfs_msm_subsys)
diff --git a/sepolicy/vendor/wcnss_filter.te b/sepolicy/vendor/wcnss_filter.te
index c7c72c7..910fb0e 100644
--- a/sepolicy/vendor/wcnss_filter.te
+++ b/sepolicy/vendor/wcnss_filter.te
@@ -10,9 +10,12 @@
 
 userdebug_or_eng(`
   allow wcnss_filter diag_device:chr_file rw_file_perms;
-  allow wcnss_filter ramdump_vendor_data_file:dir create_dir_perms;
-  allow wcnss_filter ramdump_vendor_data_file:file create_file_perms;
+  allow wcnss_filter ramdump_vendor_data_file:dir w_dir_perms;
+  allow wcnss_filter ramdump_vendor_data_file:file { create w_file_perms };
+  allow wcnss_filter sysfs_timestamp_switch:file r_file_perms;
   r_dir_file(wcnss_filter, debugfs_ipc)
+  r_dir_file(wcnss_filter, sysfs_diag)
+  set_prop(wcnss_filter, ssr_prop)
 ')
 
 #allow wakelock
diff --git a/system.prop b/system.prop
index c13ac42..98af208 100644
--- a/system.prop
+++ b/system.prop
@@ -35,7 +35,6 @@
 
 # Additional buffers shared between Camera and Video
 vendor.vidc.enc.dcvs.extra-buff-count=2
-vendor.vidc.enc.disable.pq=1
 
 # system props for the data netmgrd
 persist.data.netmgrd.qos.enable=true
@@ -50,23 +49,8 @@
 # Simulate sdcard on /data/media
 persist.fuse_sdcard=true
 
-# settings to enable Device Orientation Sensors
-ro.qti.sensors.dev_ori=true
-
-# settings to disable sensors not needed
-# all secondary wakeup
-ro.qti.sensors.wu=false
-# unused algorithms
-ro.qti.sdk.sensors.gestures=false
-ro.qti.sensors.amd=false
-ro.qti.sensors.cmc=false
-ro.qti.sensors.facing=false
-ro.qti.sensors.pedometer=false
-ro.qti.sensors.rmd=false
-ro.qti.sensors.scrn_ortn=false
-# use SMGR supplied verison
-ro.qti.sensors.step_counter=false
-ro.qti.sensors.step_detector=false
+# sensor properties are moved to device.mk
+#
 
 #system prop for RmNet Data
 persist.rmnet.data.enable=true
diff --git a/thermal/Android.bp b/thermal/Android.bp
new file mode 100644
index 0000000..fcd227e
--- /dev/null
+++ b/thermal/Android.bp
@@ -0,0 +1,20 @@
+cc_library_shared {
+    name: "android.hardware.thermal@1.1-wahoo",
+    defaults: ["hidl_defaults"],
+    owner: "qcom",
+    vendor: true,
+    relative_install_path: "hw",
+    srcs: [
+        "Thermal.cpp",
+        "thermal-helper.cpp",
+    ],
+    export_include_dirs: ["."],
+    shared_libs: [
+        "libbase",
+        "libhidlbase",
+        "libhidltransport",
+        "libutils",
+        "android.hardware.thermal@1.0",
+        "android.hardware.thermal@1.1",
+    ],
+}
diff --git a/thermal/Android.mk b/thermal/Android.mk
deleted file mode 100644
index a725c83..0000000
--- a/thermal/Android.mk
+++ /dev/null
@@ -1,37 +0,0 @@
-#
-# Copyright 2017 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_RELATIVE_PATH := hw
-LOCAL_PROPRIETARY_MODULE := true
-LOCAL_MODULE_OWNER := qcom
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_MODULE := android.hardware.thermal@1.0-service.wahoo
-LOCAL_INIT_RC := android.hardware.thermal@1.0-service.wahoo.rc
-LOCAL_SRC_FILES := service.cpp Thermal.cpp thermal-helper.cpp
-
-LOCAL_SHARED_LIBRARIES := \
-    libhidlbase \
-    libhidltransport \
-    libutils \
-    libbase \
-    android.hardware.thermal@1.0 \
-
-include $(BUILD_EXECUTABLE)
diff --git a/thermal/Thermal.cpp b/thermal/Thermal.cpp
index 5beddde..a9bd371 100644
--- a/thermal/Thermal.cpp
+++ b/thermal/Thermal.cpp
@@ -25,11 +25,29 @@
 namespace android {
 namespace hardware {
 namespace thermal {
-namespace V1_0 {
+namespace V1_1 {
 namespace implementation {
 
 Thermal::Thermal() : enabled(initThermal()) {}
 
+namespace {
+
+// Saves the IThermalCallback client object registered from the
+// framework for sending thermal events to the framework thermal event bus.
+sp<IThermalCallback> gThermalCallback;
+
+struct ThermalDeathRecipient : hidl_death_recipient {
+    virtual void serviceDied(
+        uint64_t cookie __unused, const wp<IBase>& who __unused) {
+        gThermalCallback = nullptr;
+        LOG(ERROR) << "IThermalCallback HIDL service died";
+    }
+};
+
+sp<ThermalDeathRecipient> gThermalCallbackDied = nullptr;
+
+} // anonymous namespace
+
 // Methods from ::android::hardware::thermal::V1_0::IThermal follow.
 Return<void> Thermal::getTemperatures(getTemperatures_cb _hidl_cb) {
     ThermalStatus status;
@@ -112,8 +130,54 @@
     return Void();
 }
 
+// Methods from ::android::hardware::thermal::V1_1::IThermal follow.
+
+Return<void> Thermal::registerThermalCallback(
+    const sp<IThermalCallback>& callback) {
+    gThermalCallback = callback;
+
+    if (gThermalCallback != nullptr) {
+        if (gThermalCallbackDied == nullptr)
+            gThermalCallbackDied = new ThermalDeathRecipient();
+
+        if (gThermalCallbackDied != nullptr)
+            gThermalCallback->linkToDeath(
+                gThermalCallbackDied, 0x451F /* cookie, unused */);
+        LOG(INFO) << "ThermalCallback registered";
+    } else {
+        LOG(INFO) << "ThermalCallback unregistered";
+    }
+    return Void();
+}
+
+// Local functions used internally by thermal-engine follow.
+
+std::string Thermal::getSkinSensorType() {
+    return getTargetSkinSensorType();
+}
+
+void Thermal::notifyThrottling(
+    bool isThrottling, const Temperature& temperature) {
+    if (gThermalCallback != nullptr) {
+        Return<void> ret =
+            gThermalCallback->notifyThrottling(isThrottling, temperature);
+        if (!ret.isOk()) {
+          if (ret.isDeadObject()) {
+              gThermalCallback = nullptr;
+              LOG(WARNING) << "Dropped throttling event, ThermalCallback died";
+          } else {
+              LOG(WARNING) <<
+                  "Failed to send throttling event to ThermalCallback";
+          }
+        }
+    } else {
+        LOG(WARNING) <<
+            "Dropped throttling event, no ThermalCallback registered";
+    }
+}
+
 }  // namespace implementation
-}  // namespace V1_0
+}  // namespace V1_1
 }  // namespace thermal
 }  // namespace hardware
 }  // namespace android
diff --git a/thermal/Thermal.h b/thermal/Thermal.h
index f9ce7ed..a62b9e3 100644
--- a/thermal/Thermal.h
+++ b/thermal/Thermal.h
@@ -13,45 +13,56 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#ifndef ANDROID_HARDWARE_THERMAL_V1_0_WAHOO_THERMAL_H
-#define ANDROID_HARDWARE_THERMAL_V1_0_WAHOO_THERMAL_H
+#ifndef ANDROID_HARDWARE_THERMAL_V1_1_WAHOO_THERMAL_H
+#define ANDROID_HARDWARE_THERMAL_V1_1_WAHOO_THERMAL_H
 
-#include <android/hardware/thermal/1.0/IThermal.h>
+#include <android/hardware/thermal/1.1/IThermal.h>
+#include <android/hardware/thermal/1.1/IThermalCallback.h>
 #include <hidl/Status.h>
 #include <hidl/MQDescriptor.h>
 
 namespace android {
 namespace hardware {
 namespace thermal {
-namespace V1_0 {
+namespace V1_1 {
 namespace implementation {
 
 using ::android::hardware::thermal::V1_0::CoolingDevice;
 using ::android::hardware::thermal::V1_0::CpuUsage;
-using ::android::hardware::thermal::V1_0::IThermal;
 using ::android::hardware::thermal::V1_0::Temperature;
 using ::android::hardware::thermal::V1_0::ThermalStatus;
+using ::android::hardware::thermal::V1_0::ThermalStatusCode;
+using ::android::hardware::thermal::V1_1::IThermal;
+using ::android::hardware::thermal::V1_1::IThermalCallback;
 using ::android::hardware::Return;
 using ::android::hardware::Void;
 using ::android::hardware::hidl_vec;
 using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_death_recipient;
+using ::android::hidl::base::V1_0::IBase;
 using ::android::sp;
 
 struct Thermal : public IThermal {
+    // Local functions used internally by thermal-engine follow.
+    std::string getSkinSensorType();
+    void notifyThrottling(bool isThrottling, const Temperature& temperature);
     Thermal();
     // Methods from ::android::hardware::thermal::V1_0::IThermal follow.
     Return<void> getTemperatures(getTemperatures_cb _hidl_cb)  override;
     Return<void> getCpuUsages(getCpuUsages_cb _hidl_cb)  override;
     Return<void> getCoolingDevices(getCoolingDevices_cb _hidl_cb)  override;
+    // Methods from ::android::hardware::thermal::V1_1::IThermal follow.
+    Return<void> registerThermalCallback(
+        const sp<IThermalCallback>& callback) override;
 
   private:
     bool enabled;
 };
 
 }  // namespace implementation
-}  // namespace V1_0
+}  // namespace V1_1
 }  // namespace thermal
 }  // namespace hardware
 }  // namespace android
 
-#endif  // ANDROID_HARDWARE_THERMAL_V1_0_WAHOO_THERMAL_H
+#endif  // ANDROID_HARDWARE_THERMAL_V1_1_WAHOO_THERMAL_H
diff --git a/thermal/android.hardware.thermal@1.0-service.wahoo.rc b/thermal/android.hardware.thermal@1.0-service.wahoo.rc
deleted file mode 100644
index e522cb1..0000000
--- a/thermal/android.hardware.thermal@1.0-service.wahoo.rc
+++ /dev/null
@@ -1,4 +0,0 @@
-service thermal-hal-1-0 /vendor/bin/hw/android.hardware.thermal@1.0-service.wahoo
-    class hal
-    user nobody
-    group nobody
diff --git a/thermal/service.cpp b/thermal/service.cpp
deleted file mode 100644
index d41953b..0000000
--- a/thermal/service.cpp
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2017 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.
- */
-
-#include <android-base/logging.h>
-#include <hidl/HidlTransportSupport.h>
-#include "Thermal.h"
-
-using android::sp;
-using android::status_t;
-using android::OK;
-
-// libhwbinder:
-using android::hardware::configureRpcThreadpool;
-using android::hardware::joinRpcThreadpool;
-
-// Generated HIDL files
-using android::hardware::thermal::V1_0::IThermal;
-using android::hardware::thermal::V1_0::implementation::Thermal;
-
-int main() {
-
-    status_t status;
-    android::sp<IThermal> service = nullptr;
-
-    LOG(INFO) << "Thermal HAL Service 1.0 is starting";
-
-    service = new Thermal();
-    if (service == nullptr) {
-        LOG(ERROR) << "Can not create an instance of Thermal HAL Iface, exiting";
-
-        goto shutdown;
-    }
-
-    configureRpcThreadpool(1, true /*callerWillJoin*/);
-
-    status = service->registerAsService();
-    if (status != OK) {
-        LOG(ERROR) << "Could not register service for Thermal HAL Iface (" << status << ")";
-        goto shutdown;
-    }
-
-    LOG(INFO) << "Thermal Service is ready";
-    joinRpcThreadpool();
-    // Should not pass this line
-
-shutdown:
-    // In normal operation, we don't expect the thread pool to exit
-    LOG(ERROR) << "Thermal Service is shutting down";
-    return 1;
-}
diff --git a/thermal/thermal-helper.cpp b/thermal/thermal-helper.cpp
index f5f146c..878c82f 100644
--- a/thermal/thermal-helper.cpp
+++ b/thermal/thermal-helper.cpp
@@ -30,10 +30,13 @@
 namespace android {
 namespace hardware {
 namespace thermal {
-namespace V1_0 {
+namespace V1_1 {
 namespace implementation {
 
+using ::android::hardware::thermal::V1_0::TemperatureType;
+
 static unsigned int gSkinSensorNum;
+static std::string gSkinSensorType;
 static unsigned int gTsensOffset;
 static unsigned int gSkinThrottlingThreshold;
 static unsigned int gSkinShutdownThreshold;
@@ -49,6 +52,7 @@
     if (hardware == "walleye") {
         LOG(ERROR) << "Initialization on Walleye";
         gSkinSensorNum = kWalleyeSkinSensorNum;
+        gSkinSensorType = kWalleyeSkinSensorType;
         gTsensOffset = kWalleyeTsensOffset;
         gSkinThrottlingThreshold = kWalleyeSkinThrottlingThreshold;
         gSkinShutdownThreshold = kWalleyeSkinShutdownThreshold;
@@ -58,6 +62,7 @@
         if (rev == "rev_a" || rev == "rev_b") {
             LOG(ERROR) << "Initialization on Taimen pre revision C";
             gSkinSensorNum = kTaimenRabSkinSensorNum;
+            gSkinSensorType = kTaimenRabSkinSensorType;
             gTsensOffset = kTaimenRabTsensOffset;
             gSkinThrottlingThreshold = kTaimenRabSkinThrottlingThreshold;
             gSkinShutdownThreshold = kTaimenRabSkinShutdownThreshold;
@@ -65,6 +70,7 @@
         } else {
             LOG(ERROR) << "Initialization on Taimen revision C and later";
             gSkinSensorNum = kTaimenRcSkinSensorNum;
+            gSkinSensorType = kTaimenRcSkinSensorType;
             gTsensOffset = kTaimenRcTsensOffset;
             gSkinThrottlingThreshold = kTaimenRcSkinThrottlingThreshold;
             gSkinShutdownThreshold = kTaimenRcSkinShutdownThreshold;
@@ -286,8 +292,12 @@
     return kCpuNum;
 }
 
+std::string getTargetSkinSensorType() {
+    return gSkinSensorType;
+}
+
 }  // namespace implementation
-}  // namespace V1_0
+}  // namespace V1_1
 }  // namespace thermal
 }  // namespace hardware
 }  // namespace android
diff --git a/thermal/thermal-helper.h b/thermal/thermal-helper.h
index e08d4e7..311a67d 100644
--- a/thermal/thermal-helper.h
+++ b/thermal/thermal-helper.h
@@ -30,12 +30,12 @@
 #ifndef __THERMAL_HELPER_H__
 #define __THERMAL_HELPER_H__
 
-#include <android/hardware/thermal/1.0/IThermal.h>
+#include <android/hardware/thermal/1.1/IThermal.h>
 
 namespace android {
 namespace hardware {
 namespace thermal {
-namespace V1_0 {
+namespace V1_1 {
 namespace implementation {
 
 using ::android::hardware::thermal::V1_0::CpuUsage;
@@ -47,18 +47,21 @@
 
 // thermal-engine.conf
 constexpr unsigned int kWalleyeSkinSensorNum = 9;
+constexpr auto         kWalleyeSkinSensorType = "back_therm";
 constexpr unsigned int kWalleyeTsensOffset = 11;
 constexpr unsigned int kWalleyeSkinThrottlingThreshold = 40;
 constexpr unsigned int kWalleyeSkinShutdownThreshold = 56;
 constexpr unsigned int kWalleyeVrThrottledBelowMin = 52;
 
 constexpr unsigned int kTaimenRabSkinSensorNum = 8;
+constexpr auto         kTaimenRabSkinSensorType = "bd_therm";
 constexpr unsigned int kTaimenRabTsensOffset = 9;
 constexpr unsigned int kTaimenRabSkinThrottlingThreshold = 49;
 constexpr unsigned int kTaimenRabSkinShutdownThreshold = 66;
 constexpr unsigned int kTaimenRabVrThrottledBelowMin = 62;
 
 constexpr unsigned int kTaimenRcSkinSensorNum = 8;
+constexpr auto         kTaimenRcSkinSensorType = "bd_therm2";
 constexpr unsigned int kTaimenRcTsensOffset = 9;
 constexpr unsigned int kTaimenRcSkinThrottlingThreshold = 38;
 constexpr unsigned int kTaimenRcSkinShutdownThreshold = 54;
@@ -90,9 +93,10 @@
 bool initThermal();
 ssize_t fillTemperatures(hidl_vec<Temperature> *temperatures);
 ssize_t fillCpuUsages(hidl_vec<CpuUsage> *cpuUsages);
+std::string getTargetSkinSensorType();
 
 }  // namespace implementation
-}  // namespace V1_0
+}  // namespace V1_1
 }  // namespace thermal
 }  // namespace hardware
 }  // namespace android