Merge "CarrierConfig: fix giffgaff voicemail number" into oc-mr1-dev
diff --git a/BoardConfig.mk b/BoardConfig.mk
index 9355977..5aa9f3b 100644
--- a/BoardConfig.mk
+++ b/BoardConfig.mk
@@ -26,8 +26,6 @@
 TARGET_2ND_CPU_ABI2 := armeabi
 TARGET_2ND_CPU_VARIANT := cortex-a53.a57
 
-ENABLE_CPUSETS := true
-
 TARGET_NO_BOOTLOADER := true
 
 BOARD_KERNEL_BASE        := 0x00000000
@@ -154,10 +152,6 @@
 #Enable peripheral manager
 TARGET_PER_MGR_ENABLED := true
 
-USE_CLANG_PLATFORM_BUILD := true
-
-USE_CLANG_PLATFORM_BUILD := true
-
 TARGET_FS_CONFIG_GEN += device/lge/bullhead/config.fs
 
 -include vendor/lge/bullhead/BoardConfigVendor.mk
@@ -165,6 +159,9 @@
 # Testing related defines
 BOARD_PERFSETUP_SCRIPT := platform_testing/scripts/perf-setup/bullhead-setup.sh
 
+DEVICE_MANIFEST_FILE := device/lge/bullhead/manifest.xml
+DEVICE_MATRIX_FILE := device/lge/bullhead/compatibility_matrix.xml
+
 ifeq ($(TARGET_PRODUCT),aosp_bullhead_svelte)
 BOARD_KERNEL_CMDLINE += mem=1024M maxcpus=2
 MALLOC_SVELTE := true
diff --git a/CleanSpec.mk b/CleanSpec.mk
index 13b7e2a..cf55989 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -77,3 +77,5 @@
 $(call add-clean-step, find $(OUT_DIR)/target/product/bullhead/ -name \*build.prop* -exec rm -rf {} \;)
 $(call add-clean-step, find $(OUT_DIR)/target/product/bullhead/ -name \*build.prop* -exec rm -rf {} \;)
 $(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/etc/permissions/android.hardware.wifi.aware.xml)
+$(call add-clean-step, rm -f $(PRODUCT_OUT)/system/lib/hw/android.hardware.broadcastradio@1.0-impl.so)
+$(call add-clean-step, rm -f $(PRODUCT_OUT)/system/lib64/hw/android.hardware.broadcastradio@1.0-impl.so)
diff --git a/camera/QCamera2/HAL3/QCamera3HWI.cpp b/camera/QCamera2/HAL3/QCamera3HWI.cpp
index f1311f2..05c0c41 100644
--- a/camera/QCamera2/HAL3/QCamera3HWI.cpp
+++ b/camera/QCamera2/HAL3/QCamera3HWI.cpp
@@ -804,7 +804,7 @@
     for (size_t i = 0; i< streamList->num_streams; i++) {
         if (streamList->streams[i]->stream_type == CAMERA3_STREAM_INPUT) {
             if (inputStream != NULL) {
-                ALOGE("%s: Error, Multiple input streams requested");
+                ALOGE("%s: Error, Multiple input streams requested", __func__);
                 return -EINVAL;
             }
             inputStream = streamList->streams[i];
@@ -1892,6 +1892,7 @@
                 newStream->max_buffers = MAX_INFLIGHT_REPROCESS_REQUESTS;
             } else {
                 ALOGE("%s: Error, Unknown stream type", __func__);
+                pthread_mutex_unlock(&mMutex);
                 return -EINVAL;
             }
 
@@ -2075,7 +2076,7 @@
         return BAD_VALUE;
     }
     if (request->num_output_buffers >= MAX_NUM_STREAMS) {
-        ALOGE("%s: Number of buffers %d equals or is greater than maximum number of streams!",
+        ALOGE("%s: Number of buffers %d equals or is greater than maximum number of streams %d!",
                 __func__, request->num_output_buffers, MAX_NUM_STREAMS);
         return BAD_VALUE;
     }
@@ -3701,6 +3702,7 @@
             if(ADD_SET_PARAM_ENTRY_TO_BATCH(mParameters,
                 CAM_INTF_META_FRAME_NUMBER, request->frame_number)) {
                 ALOGE("%s: Failed to set the frame number in the parameters", __func__);
+                pthread_mutex_unlock(&mMutex);
                 return BAD_VALUE;
             }
         }
@@ -4262,7 +4264,7 @@
         }
     }
 
-    ALOGE("%s: Cannot find matching hal type fwk_name=%d", __func__, fwk_name);
+    ALOGE("%s: Cannot find matching hal type fwk_name=%d", __func__, (int)fwk_name);
     return NAME_NOT_FOUND;
 }
 
diff --git a/compatibility_matrix.xml b/compatibility_matrix.xml
new file mode 100644
index 0000000..3082485
--- /dev/null
+++ b/compatibility_matrix.xml
@@ -0,0 +1,59 @@
+<compatibility-matrix version="1.0" type="device">
+    <hal format="hidl" optional="false">
+        <name>android.frameworks.schedulerservice</name>
+        <version>1.0</version>
+        <interface>
+            <name>ISchedulingPolicyService</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl" optional="false">
+        <name>android.frameworks.sensorservice</name>
+        <version>1.0</version>
+        <interface>
+            <name>ISensorManager</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl" optional="false">
+        <name>android.hidl.allocator</name>
+        <version>1.0</version>
+        <interface>
+            <name>IAllocator</name>
+            <instance>ashmem</instance>
+        </interface>
+    </hal>
+    <hal format="hidl" optional="false">
+        <name>android.hidl.manager</name>
+        <version>1.0</version>
+        <interface>
+            <name>IServiceManager</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl" optional="false">
+        <name>android.hidl.memory</name>
+        <version>1.0</version>
+        <interface>
+            <name>IMapper</name>
+            <instance>ashmem</instance>
+        </interface>
+    </hal>
+    <hal format="hidl" optional="false">
+        <name>android.hidl.token</name>
+        <version>1.0</version>
+        <interface>
+            <name>ITokenManager</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl" optional="false">
+        <name>android.system.wifi.keystore</name>
+        <version>1.0</version>
+        <interface>
+            <name>IKeystore</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+
+</compatibility-matrix>
diff --git a/device.mk b/device.mk
index a895042..2609180 100644
--- a/device.mk
+++ b/device.mk
@@ -50,10 +50,6 @@
     device/lge/bullhead/init.bullhead.nanohub.rc:root/init.bullhead.sensorhub.rc
 endif
 
-# Vendor Interface Manifest
-PRODUCT_COPY_FILES += \
-    device/lge/bullhead/manifest.xml:vendor/manifest.xml
-
 PRODUCT_COPY_FILES += \
     frameworks/av/media/libstagefright/data/media_codecs_google_audio.xml:system/etc/media_codecs_google_audio.xml \
     frameworks/av/media/libstagefright/data/media_codecs_google_telephony.xml:system/etc/media_codecs_google_telephony.xml \
@@ -106,6 +102,7 @@
     frameworks/native/data/etc/android.hardware.location.gps.xml:system/etc/permissions/android.hardware.location.gps.xml \
     frameworks/native/data/etc/android.hardware.wifi.xml:system/etc/permissions/android.hardware.wifi.xml \
     frameworks/native/data/etc/android.hardware.wifi.direct.xml:system/etc/permissions/android.hardware.wifi.direct.xml \
+    frameworks/native/data/etc/android.hardware.wifi.passpoint.xml:system/etc/permissions/android.hardware.wifi.passpoint.xml \
     frameworks/native/data/etc/android.hardware.sensor.proximity.xml:system/etc/permissions/android.hardware.sensor.proximity.xml \
     frameworks/native/data/etc/android.hardware.sensor.light.xml:system/etc/permissions/android.hardware.sensor.light.xml \
     frameworks/native/data/etc/android.hardware.sensor.gyroscope.xml:system/etc/permissions/android.hardware.sensor.gyroscope.xml \
@@ -241,7 +238,6 @@
 PRODUCT_PACKAGES += \
     android.hardware.audio@2.0-impl \
     android.hardware.audio.effect@2.0-impl \
-    android.hardware.broadcastradio@1.0-impl \
     android.hardware.soundtrigger@2.0-impl
 
 PRODUCT_PACKAGES += \
@@ -253,6 +249,7 @@
 
 # NFC packages
 PRODUCT_PACKAGES += \
+    libnfc-nci \
     NfcNci \
     Tag \
     android.hardware.nfc@1.0-impl \
@@ -329,9 +326,6 @@
 PRODUCT_PACKAGES += \
     libvts_profiling \
     libvts_multidevice_proto
-# Test HAL for FMQ performance benchmark.
-PRODUCT_PACKAGES += \
-    android.hardware.tests.msgq@1.0-impl
 endif
 
 PRODUCT_PACKAGES += \
@@ -584,17 +578,6 @@
 PRODUCT_PROPERTY_OVERRIDES += \
     ro.product.first_api_level=23
 
-# In userdebug, add minidebug info the the boot image and the system server to support
-# diagnosing native crashes.
-ifneq (,$(filter userdebug, $(TARGET_BUILD_VARIANT)))
-    # Boot image.
-    PRODUCT_DEX_PREOPT_BOOT_FLAGS += --generate-mini-debug-info
-    # System server and some of its services.
-    # Note: we cannot use PRODUCT_SYSTEM_SERVER_JARS, as it has not been expanded at this point.
-    $(call add-product-dex-preopt-module-config,services,--generate-mini-debug-info)
-    $(call add-product-dex-preopt-module-config,wifi-service,--generate-mini-debug-info)
-endif
-
 # setup dalvik vm configs.
 $(call inherit-product, frameworks/native/build/phone-xhdpi-2048-dalvik-heap.mk)
 
diff --git a/dumpstate/DumpstateDevice.cpp b/dumpstate/DumpstateDevice.cpp
index e349679..7ce66a1 100644
--- a/dumpstate/DumpstateDevice.cpp
+++ b/dumpstate/DumpstateDevice.cpp
@@ -34,7 +34,7 @@
 
 // Methods from ::android::hardware::dumpstate::V1_0::IDumpstateDevice follow.
 Return<void> DumpstateDevice::dumpstateBoard(const hidl_handle& handle) {
-    if (handle->numFds < 1) {
+    if (handle == nullptr || handle->numFds < 1) {
         ALOGE("no FDs\n");
         return Void();
     }
diff --git a/init.bullhead.rc b/init.bullhead.rc
index f625ee1..425714a 100644
--- a/init.bullhead.rc
+++ b/init.bullhead.rc
@@ -276,6 +276,7 @@
     class core
     user root
     group system wakelock
+    shutdown critical
 
 service start_hci_filter /vendor/bin/wcnss_filter
     class late_start
diff --git a/init.bullhead.usb.rc b/init.bullhead.usb.rc
index 73a4bad..e506c97 100644
--- a/init.bullhead.usb.rc
+++ b/init.bullhead.usb.rc
@@ -28,9 +28,9 @@
 on post-fs
     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
+    mount functionfs adb /dev/usb-ffs/adb noatime uid=2000,gid=2000,no_disconnect=1
     mkdir /dev/usb-ffs/mtp 0770 mtp mtp
-    mount functionfs mtp /dev/usb-ffs/mtp rmode=0770,fmode=0660,uid=1024,gid=1024,no_disconnect=1
+    mount functionfs mtp /dev/usb-ffs/mtp noatime rmode=0770,fmode=0660,uid=1024,gid=1024,no_disconnect=1
     write /sys/module/g_android/parameters/mtp_rx_req_len 131072
     write /sys/module/g_android/parameters/mtp_tx_reqs 32
     setprop sys.usb.ffs.max_write 262144
diff --git a/media_codecs_performance.xml b/media_codecs_performance.xml
index b9d1a90..fba7153 100644
--- a/media_codecs_performance.xml
+++ b/media_codecs_performance.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" ?>
-<!-- Copyright 2016 The Android Open Source Project
+<!-- 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.
@@ -14,115 +14,155 @@
      limitations under the License.
 -->
 
+<!-- Generated file for bullhead using measurements between OPR1.170213.002 and OPM1.170803.002 -->
 <MediaCodecs>
     <Encoders>
         <MediaCodec name="OMX.qcom.video.encoder.h263" type="video/3gpp" update="true">
-            <Limit name="measured-frame-rate-176x144" range="235-418" /> <!-- TWEAKED -->
-            <Limit name="measured-frame-rate-352x288" range="231-245" /> <!-- N=40 v95%=1.2 -->
-            <!-- measured 93%:57-64 med:59 FLAKY(30 - 122 < mx=133.9) WIDEN(30 - 134) -->
-            <Limit name="measured-frame-rate-704x576" range="59-67" /> <!-- N=40 v93%=1.0 -->
+            <!-- measured 98%:107-509 med:182/178 variance:2.2 -->
+            <Limit name="measured-frame-rate-176x144" range="178-255" /> <!-- N=122 -->
+            <!-- measured 98%:158-485 med:241/233 FLAKY(117 - 486 < mx=490.0) -->
+            <Limit name="measured-frame-rate-352x288" range="233-243" /> <!-- N=110 v98%=1.8 -->
+            <Limit name="measured-frame-rate-704x576" range="128-128" /> <!-- N=106 v98%=1.4 -->
         </MediaCodec>
         <MediaCodec name="OMX.qcom.video.encoder.avc" type="video/avc" update="true">
-            <Limit name="measured-frame-rate-320x240" range="251-251" /> <!-- N=40 v95%=1.3 -->
-            <Limit name="measured-frame-rate-720x480" range="69-86" /> <!-- TWEAKED -->
-            <!-- measured 93%:38-67 med:44 SLOW -->
-            <Limit name="measured-frame-rate-1280x720" range="43-51" /> <!-- N=40 v93%=1.3 -->
-            <Limit name="measured-frame-rate-1920x1080" range="27-27" /> <!-- N=40 v95%=1.3 -->
+            <Limit name="measured-frame-rate-320x240" range="209-255" /> <!-- N=110 v98%=2.0 -->
+            <Limit name="measured-frame-rate-720x480" range="143-143" /> <!-- N=110 v98%=1.5 -->
+            <Limit name="measured-frame-rate-1280x720" range="71-71" /> <!-- N=110 v98%=1.2 -->
+            <Limit name="measured-frame-rate-1920x1080" range="37-37" /> <!-- N=110 v98%=1.3 -->
         </MediaCodec>
         <MediaCodec name="OMX.qcom.video.encoder.mpeg4" type="video/mp4v-es" update="true">
-            <Limit name="measured-frame-rate-176x144" range="260-374" /> <!-- TWEAKED -->
-            <Limit name="measured-frame-rate-352x288" range="201-201" /> <!-- N=40 v95%=1.1 -->
-            <Limit name="measured-frame-rate-640x480" range="77-77" /> <!-- N=40 v95%=1.0 -->
+            <Limit name="measured-frame-rate-176x144" range="169-206" /> <!-- N=126 v98%=1.9 -->
+            <Limit name="measured-frame-rate-352x288" range="201-201" /> <!-- N=110 v98%=1.2 -->
+            <Limit name="measured-frame-rate-640x480" range="77-77" /> <!-- N=110 v98%=1.0 -->
         </MediaCodec>
         <MediaCodec name="OMX.qcom.video.encoder.vp8" type="video/x-vnd.on2.vp8" update="true">
-            <Limit name="measured-frame-rate-320x180" range="112-113" /> <!-- N=40 v95%=1.0 -->
-            <Limit name="measured-frame-rate-640x360" range="107-107" /> <!-- N=40 v95%=1.0 -->
-            <Limit name="measured-frame-rate-1280x720" range="38-38" /> <!-- N=40 v95%=1.0 -->
-            <Limit name="measured-frame-rate-1920x1080" range="15-15" /> <!-- N=40 v95%=1.0 -->
+            <Limit name="measured-frame-rate-320x180" range="112-112" /> <!-- N=110 v98%=1.0 -->
+            <Limit name="measured-frame-rate-640x360" range="103-103" /> <!-- N=108 v98%=1.1 -->
+            <Limit name="measured-frame-rate-1280x720" range="38-38" /> <!-- N=110 v98%=1.0 -->
+            <Limit name="measured-frame-rate-1920x1080" range="15-15" /> <!-- N=106 v98%=1.0 -->
         </MediaCodec>
         <MediaCodec name="OMX.google.h263.encoder" type="video/3gpp" update="true">
-            <Limit name="measured-frame-rate-176x144" range="246-246" /> <!-- N=40 v95%=1.3 -->
+            <Limit name="measured-frame-rate-176x144" range="228-228" /> <!-- N=110 v98%=1.4 -->
         </MediaCodec>
         <MediaCodec name="OMX.google.h264.encoder" type="video/avc" update="true">
-            <!-- measured 93%:141-243 med:161 SLOW -->
-            <Limit name="measured-frame-rate-320x240" range="161-185" /> <!-- N=40 v93%=1.3 -->
-            <!-- measured 95%:45-72 med:48 SLOW -->
-            <Limit name="measured-frame-rate-720x480" range="47-57" /> <!-- N=40 v95%=1.3 -->
-            <Limit name="measured-frame-rate-1280x720" range="20-31" /> <!-- TWEAKED -->
-            <Limit name="measured-frame-rate-1920x1080" range="10-13" /> <!-- TWEAKED -->
+            <Limit name="measured-frame-rate-320x240" range="236-236" /> <!-- N=110 v98%=1.4 -->
+            <Limit name="measured-frame-rate-720x480" range="103-103" /> <!-- N=110 v98%=1.3 -->
+            <Limit name="measured-frame-rate-1280x720" range="52-52" /> <!-- N=132 v98%=1.5 -->
+            <Limit name="measured-frame-rate-1920x1080" range="21-24" /> <!-- N=128 v98%=1.5 -->
         </MediaCodec>
         <MediaCodec name="OMX.google.mpeg4.encoder" type="video/mp4v-es" update="true">
-            <Limit name="measured-frame-rate-176x144" range="321-321" /> <!-- N=40 v95%=1.2 -->
+            <Limit name="measured-frame-rate-176x144" range="262-262" /> <!-- N=110 v98%=1.3 -->
         </MediaCodec>
         <MediaCodec name="OMX.google.vp8.encoder" type="video/x-vnd.on2.vp8" update="true">
-            <Limit name="measured-frame-rate-320x180" range="79-79" /> <!-- N=40 v95%=1.2 -->
-            <Limit name="measured-frame-rate-640x360" range="37-37" /> <!-- N=40 v95%=1.0 -->
-            <Limit name="measured-frame-rate-1280x720" range="16-16" /> <!-- N=40 v95%=1.2 -->
-            <Limit name="measured-frame-rate-1920x1080" range="8-8" /> <!-- N=40 v95%=1.2 -->
+            <Limit name="measured-frame-rate-320x180" range="99-99" /> <!-- N=110 v98%=1.0 -->
+            <Limit name="measured-frame-rate-640x360" range="37-37" /> <!-- N=106 v98%=1.0 -->
+            <Limit name="measured-frame-rate-1280x720" range="31-31" /> <!-- N=108 v98%=1.1 -->
+            <Limit name="measured-frame-rate-1920x1080" range="14-14" /> <!-- N=110 v98%=1.3 -->
+        </MediaCodec>
+        <MediaCodec name="OMX.google.vp9.encoder" type="video/x-vnd.on2.vp9" update="true">
+            <!-- measured 95%:86-119 med:110/110 N=32 FLAKY(mn=45.9 < 55 - 220) -->
+            <Limit name="measured-frame-rate-320x180" range="110-110" /> <!-- v95%=1.2 -->
+            <!-- measured 95%:14-37 med:27/28 N=32 -->
+            <Limit name="measured-frame-rate-640x360" range="18-29" /> <!-- v95%=1.6 -->
+            <!-- measured 95%:4-8 med:4/4 N=32 -->
+            <Limit name="measured-frame-rate-1280x720" range="4-5" /> <!-- v95%=1.4 -->
+            <!-- measured 95%:1-4 med:2/2 N=32 -->
+            <Limit name="measured-frame-rate-1920x1080" range="2-2" /> <!-- v95%=1.5 -->
         </MediaCodec>
     </Encoders>
     <Decoders>
         <MediaCodec name="OMX.qcom.video.decoder.h263" type="video/3gpp" update="true">
-            <Limit name="measured-frame-rate-176x144" range="683-683" /> <!-- N=40 v95%=1.1 -->
-            <Limit name="measured-frame-rate-352x288" range="699-699" /> <!-- N=40 v95%=1.1 -->
+            <!-- measured 96%:521-730 med:687/686 FLAKY(mn=290.8 < 343 - 1372) -->
+            <Limit name="measured-frame-rate-176x144" range="686-686" /> <!-- N=84 v96%=1.2 -->
+            <!-- measured 96%:507-742 med:657/656 FLAKY(mn=285.3 < 328 - 1312) -->
+            <Limit name="measured-frame-rate-352x288" range="656-656" /> <!-- N=84 v96%=1.2 -->
         </MediaCodec>
         <MediaCodec name="OMX.qcom.video.decoder.avc" type="video/avc" update="true">
-            <Limit name="measured-frame-rate-320x240" range="399-399" /> <!-- N=40 v95%=1.1 -->
-            <Limit name="measured-frame-rate-720x480" range="217-218" /> <!-- N=40 v95%=1.0 -->
-            <Limit name="measured-frame-rate-1280x720" range="284-292" /> <!-- N=40 v95%=1.1 -->
-            <Limit name="measured-frame-rate-1920x1088" range="145-148" /> <!-- N=40 v95%=1.0 -->
+            <!-- measured 98%:324-417 med:383/383 N=82 -->
+            <Limit name="measured-frame-rate-320x240" range="383-383" /> <!-- v98%=1.1 -->
+            <!-- measured 98%:196-224 med:210/210 N=82 -->
+            <Limit name="measured-frame-rate-720x480" range="210-210" /> <!-- v98%=1.1 -->
+            <!-- measured 98%:265-299 med:288/288 N=82 -->
+            <Limit name="measured-frame-rate-1280x720" range="288-288" /> <!-- v98%=1.1 -->
+            <!-- measured 98%:129-148 med:141/141 N=82 -->
+            <Limit name="measured-frame-rate-1920x1080" range="141-141" /> <!-- v98%=1.1 -->
         </MediaCodec>
         <MediaCodec name="OMX.qcom.video.decoder.hevc" type="video/hevc" update="true">
-            <Limit name="measured-frame-rate-352x288" range="498-498" /> <!-- N=40 v95%=1.2 -->
-            <Limit name="measured-frame-rate-640x360" range="379-379" /> <!-- N=40 v95%=1.2 -->
-            <Limit name="measured-frame-rate-720x480" range="309-309" /> <!-- N=40 v95%=1.1 -->
-            <Limit name="measured-frame-rate-1280x720" range="433-433" /> <!-- N=40 v95%=1.2 -->
-            <Limit name="measured-frame-rate-1920x1080" range="242-242" /> <!-- N=40 v95%=1.1 -->
-            <Limit name="measured-frame-rate-3840x2160" range="42-43" /> <!-- N=40 v95%=1.0 -->
+            <!-- measured 98%:364-549 med:416/416 N=82 -->
+            <Limit name="measured-frame-rate-352x288" range="416-416" /> <!-- v98%=1.2 -->
+            <!-- measured 98%:314-431 med:374/373 N=82 -->
+            <Limit name="measured-frame-rate-640x360" range="373-373" /> <!-- v98%=1.2 -->
+            <!-- measured 98%:268-345 med:333/333 N=82 -->
+            <Limit name="measured-frame-rate-720x480" range="333-333" /> <!-- v98%=1.1 -->
+            <!-- measured 98%:341-459 med:375/375 N=82 -->
+            <Limit name="measured-frame-rate-1280x720" range="375-375" /> <!-- v98%=1.2 -->
+            <!-- measured 98%:230-258 med:253/253 N=82 -->
+            <Limit name="measured-frame-rate-1920x1080" range="253-253" /> <!-- v98%=1.1 -->
+            <!-- measured 98%:43-44 med:43/43 N=82 -->
+            <Limit name="measured-frame-rate-3840x2160" range="43-43" /> <!-- v98%=1.0 -->
         </MediaCodec>
         <MediaCodec name="OMX.qcom.video.decoder.mpeg4" type="video/mp4v-es" update="true">
-            <Limit name="measured-frame-rate-176x144" range="694-699" /> <!-- N=40 v95%=1.0 -->
-            <Limit name="measured-frame-rate-480x360" range="581-581" /> <!-- N=40 v95%=1.0 -->
+            <!-- measured 96%:496-697 med:667/667 FLAKY(mn=297.4 < 334 - 1334) -->
+            <Limit name="measured-frame-rate-176x144" range="667-667" /> <!-- N=84 v96%=1.2 -->
+            <!-- measured 98%:458-595 med:572/571 N=82 -->
+            <Limit name="measured-frame-rate-480x360" range="571-571" /> <!-- v98%=1.1 -->
         </MediaCodec>
         <MediaCodec name="OMX.qcom.video.decoder.vp8" type="video/x-vnd.on2.vp8" update="true">
-            <Limit name="measured-frame-rate-320x180" range="385-385" /> <!-- N=40 v95%=1.0 -->
-            <Limit name="measured-frame-rate-640x360" range="366-366" /> <!-- N=40 v95%=1.1 -->
-            <Limit name="measured-frame-rate-1280x720" range="400-400" /> <!-- N=40 v95%=1.2 -->
-            <Limit name="measured-frame-rate-1920x1080" range="247-249" /> <!-- N=40 v95%=1.0 -->
+            <!-- measured 98%:361-397 med:383/383 N=82 -->
+            <Limit name="measured-frame-rate-320x180" range="383-383" /> <!-- v98%=1.0 -->
+            <!-- measured 96%:324-376 med:358/358 FLAKY(mn=0.5 < 179 - 716) -->
+            <Limit name="measured-frame-rate-640x360" range="358-358" /> <!-- N=82 v96%=1.1 -->
+            <!-- measured 98%:353-448 med:387/387 N=82 -->
+            <Limit name="measured-frame-rate-1280x720" range="387-387" /> <!-- v98%=1.1 -->
+            <!-- measured 98%:245-252 med:248/248 N=82 -->
+            <Limit name="measured-frame-rate-1920x1080" range="248-248" /> <!-- v98%=1.0 -->
         </MediaCodec>
         <MediaCodec name="OMX.google.h263.decoder" type="video/3gpp" update="true">
-            <!-- measured 95%:111-254 med:124 SLOW -->
-            <Limit name="measured-frame-rate-176x144" range="124-168" /> <!-- N=40 v95%=1.5 -->
+            <!-- measured 98%:84-303 med:105/106 N=82 -->
+            <Limit name="measured-frame-rate-176x144" range="106-162" /> <!-- v98%=1.9 -->
         </MediaCodec>
         <MediaCodec name="OMX.google.h264.decoder" type="video/avc" update="true">
-            <Limit name="measured-frame-rate-320x240" range="355-359" /> <!-- N=40 v95%=1.0 -->
-            <Limit name="measured-frame-rate-720x480" range="109-110" /> <!-- N=40 v95%=1.0 -->
-            <Limit name="measured-frame-rate-1280x720" range="40-43" /> <!-- N=40 v95%=1.1 -->
-            <Limit name="measured-frame-rate-1920x1080" range="15-15" /> <!-- N=40 v95%=1.2 -->
+            <!-- measured 90%:229-353 med:332/332 FLAKY(mn=104.6 < 166 - 664) -->
+            <Limit name="measured-frame-rate-320x240" range="332-332" /> <!-- N=86 v90%=1.2 -->
+            <!-- measured 98%:98-114 med:107/108 N=82 -->
+            <Limit name="measured-frame-rate-720x480" range="108-108" /> <!-- v98%=1.1 -->
+            <!-- measured 98%:42-47 med:44/44 N=82 -->
+            <Limit name="measured-frame-rate-1280x720" range="44-44" /> <!-- v98%=1.1 -->
+            <!-- measured 98%:15-26 med:18/18 N=82 -->
+            <Limit name="measured-frame-rate-1920x1080" range="18-18" /> <!-- v98%=1.3 -->
         </MediaCodec>
         <MediaCodec name="OMX.google.hevc.decoder" type="video/hevc" update="true">
-            <Limit name="measured-frame-rate-352x288" range="305-306" /> <!-- N=40 v95%=1.2 -->
-            <Limit name="measured-frame-rate-640x360" range="105-105" /> <!-- N=40 v95%=1.4 -->
-            <Limit name="measured-frame-rate-720x480" range="97-97" /> <!-- N=40 v95%=1.3 -->
-            <Limit name="measured-frame-rate-1280x720" range="39-39" /> <!-- N=40 v95%=1.3 -->
-            <Limit name="measured-frame-rate-1920x1080" range="21-21" /> <!-- N=40 v95%=1.2 -->
+            <!-- measured 98%:97-438 med:275/275 N=88 FLAKY(mn=89.2 < 97 - 550) variance:2.1 -->
+            <Limit name="measured-frame-rate-352x288" range="194-275" />
+            <!-- measured 98%:113-195 med:174/172 N=82 -->
+            <Limit name="measured-frame-rate-640x360" range="172-172" /> <!-- v98%=1.3 -->
+            <!-- measured 98%:117-187 med:154/151 N=82 -->
+            <Limit name="measured-frame-rate-720x480" range="151-151" /> <!-- v98%=1.3 -->
+            <Limit name="measured-frame-rate-1280x720" range="68-69" /> <!-- N=114 v98%=1.4 -->
+            <!-- measured 98%:24-45 med:36/36 N=82 -->
+            <Limit name="measured-frame-rate-1920x1080" range="36-36" /> <!-- v98%=1.3 -->
         </MediaCodec>
         <MediaCodec name="OMX.google.mpeg4.decoder" type="video/mp4v-es" update="true">
-            <!-- measured 95%:135-404 med:150 SLOW -->
-            <Limit name="measured-frame-rate-176x144" range="150-233" /> <!-- N=40 v95%=1.7 -->
+            <!-- measured 98%:95-387 med:130/128 N=82 FLAKY(64 - 406 < mx=457.0) variance:2.0 -->
+            <Limit name="measured-frame-rate-176x144" range="128-203" />
         </MediaCodec>
         <MediaCodec name="OMX.google.vp8.decoder" type="video/x-vnd.on2.vp8" update="true">
-            <!-- measured 95%:383-730 med:397 SLOW -->
-            <Limit name="measured-frame-rate-320x180" range="397-529" /> <!-- N=40 v95%=1.4 -->
-            <Limit name="measured-frame-rate-640x360" range="107-150" /> <!-- TWEAKED -->
-            <Limit name="measured-frame-rate-1280x720" range="25-26" /> <!-- N=40 v95%=1.0 -->
-            <Limit name="measured-frame-rate-1920x1080" range="10-10" /> <!-- N=40 v95%=1.0 -->
+            <!-- measured 98%:318-934 med:342/342 N=82 FLAKY(171 - 934 < mx=939.0) -->
+            <Limit name="measured-frame-rate-320x180" range="342-467" /> <!-- v98%=1.7 -->
+            <!-- measured 93%:191-297 med:262/262 FLAKY(mn=109.7 < 131 - 524) -->
+            <Limit name="measured-frame-rate-640x360" range="262-262" /> <!-- N=258 v93%=1.2 -->
+            <Limit name="measured-frame-rate-1280x720" range="51-59" /> <!-- N=228 v98%=1.5 -->
+            <Limit name="measured-frame-rate-1920x1080" range="20-23" /> <!-- N=178 v98%=1.5 -->
         </MediaCodec>
         <MediaCodec name="OMX.google.vp9.decoder" type="video/x-vnd.on2.vp9" update="true">
-            <Limit name="measured-frame-rate-320x180" range="206-206" /> <!-- N=40 v95%=1.3 -->
-            <Limit name="measured-frame-rate-640x360" range="89-89" /> <!-- N=40 v95%=1.2 -->
-            <Limit name="measured-frame-rate-1280x720" range="35-35" /> <!-- N=40 v95%=1.2 -->
-            <Limit name="measured-frame-rate-1920x1080" range="21-21" /> <!-- N=40 v95%=1.2 -->
+            <!-- measured 98%:223-640 med:287/287 N=88 -->
+            <Limit name="measured-frame-rate-320x180" range="287-353" /> <!-- v98%=1.7 -->
+            <!-- measured 98%:106-305 med:121/121 N=84 FLAKY(61 - 306 < mx=317.3) -->
+            <Limit name="measured-frame-rate-640x360" range="121-153" /> <!-- v98%=1.7 -->
+            <!-- measured 98%:47-60 med:54/54 N=82 -->
+            <Limit name="measured-frame-rate-1280x720" range="54-54" /> <!-- v98%=1.1 -->
+            <!-- measured 98%:27-37 med:33/33 N=82 -->
+            <Limit name="measured-frame-rate-1920x1080" range="33-33" /> <!-- v98%=1.2 -->
         </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 eba8d1b..bb0fc1f 100644
--- a/overlay/frameworks/base/core/res/res/values/config.xml
+++ b/overlay/frameworks/base/core/res/res/values/config.xml
@@ -206,9 +206,6 @@
     <!-- Boolean indicating whether the wifi chipset has dual frequency band support -->
     <bool translatable="false" name="config_wifi_dual_band_support">true</bool>
 
-    <!-- Boolean indicating whether Hotspot 2.0/Passpoint and ANQP queries is enabled -->
-    <bool translatable="false" name="config_wifi_hotspot2_enabled">true</bool>
-
     <!-- Boolean indicating whether the wifi chipset has background scan support -->
     <bool translatable="false" name="config_wifi_background_scan_support">true</bool>
 
diff --git a/overlay/frameworks/base/core/res/res/xml/power_profile.xml b/overlay/frameworks/base/core/res/res/xml/power_profile.xml
index 1c44e72..43a17c2 100644
--- a/overlay/frameworks/base/core/res/res/xml/power_profile.xml
+++ b/overlay/frameworks/base/core/res/res/xml/power_profile.xml
@@ -18,45 +18,43 @@
 -->
 <device name="Android">
     <!-- All values are in mA except as noted -->
+
+    <!-- Nothing -->
     <item name="none">0</item>
-    <item name="screen.on">159.667124493062</item>
-    <item name="screen.full">203.327990537703</item>
-    <item name="bluetooth.active">84.4</item>
-    <item name="bluetooth.on">0.43</item>
-    <item name="wifi.on">0.56</item>
-    <item name="wifi.active">172.99</item>
-    <item name="wifi.scan">25.7523644684504</item>
-    <item name="dsp.audio">100.88</item>
-    <item name="dsp.video">187.86</item>
-    <item name="gps.on">21.3112768663199</item>
-    <item name="radio.active">91.859655777944</item>
-    <!-- The current consumed by the radio when it is scanning for a signal -->
-    <item name="radio.scanning">4.56959643376497</item>
-    <!-- Current consumed by the radio at different signal strengths, when paging -->
-    <array name="radio.on"> <!-- Strength 0 to BINS-1 -->
-        <value>14.718992198734</value>
-        <value>7.11953513364874</value>
-	<value>9.67242765594385</value>
-	<value>10.9664724655329</value>
-	<value>5.9382806608961</value>
+
+    <!-- This is the battery capacity in mAh -->
+    <item name="battery.capacity">2700</item>
+
+    <!-- Number of cores each CPU cluster contains -->
+    <array name="cpu.clusters.cores">
+        <value>4</value> <!-- Cluster 0 has 4 cores (cpu0, cpu1, cpu2, cpu3) -->
+        <value>2</value> <!-- Cluster 1 has 2 cores (cpu4, cpu5) -->
     </array>
+
+    <!-- Power consumption when CPU is suspended -->
+    <item name="cpu.idle">0.075</item>
+    <!-- Additional power consumption when CPU is in a kernel idle loop -->
+    <item name="cpu.awake">4.397</item>
+
     <!-- Different CPU speeds as reported in
-         /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state -->
+         /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies -->
     <array name="cpu.speeds.cluster0">
         <value>384000</value> <!-- 384 MHz CPU speed -->
-        <value>460800</value> <!-- 460.8 MHz CPU speed -->
+        <value>460800</value> <!-- 460 MHz CPU speed -->
         <value>600000</value> <!-- 600 MHz CPU speed -->
         <value>672000</value> <!-- 672 MHz CPU speed -->
-        <value>787200</value> <!-- 787.2 MHz CPU speed -->
+        <value>787200</value> <!-- 787 MHz CPU speed -->
         <value>864000</value> <!-- 864 MHz CPU speed -->
         <value>960000</value> <!-- 960 MHz CPU speed -->
         <value>1248000</value> <!-- 1248 MHz CPU speed -->
         <value>1440000</value> <!-- 1440 MHz CPU speed -->
     </array>
+    <!-- Different CPU speeds as reported in
+         /sys/devices/system/cpu/cpu4/cpufreq/scaling_available_frequencies -->
     <array name="cpu.speeds.cluster1">
         <value>384000</value> <!-- 384 MHz CPU speed -->
         <value>480000</value> <!-- 480 MHz CPU speed -->
-        <value>633600</value> <!-- 633.6 MHz CPU speed -->
+        <value>633600</value> <!-- 633 MHz CPU speed -->
         <value>768000</value> <!-- 768 MHz CPU speed -->
         <value>864000</value> <!-- 864 MHz CPU speed -->
         <value>960000</value> <!-- 960 MHz CPU speed -->
@@ -65,53 +63,80 @@
         <value>1440000</value> <!-- 1440 MHz CPU speed -->
         <value>1536000</value> <!-- 1536 MHz CPU speed -->
         <value>1632000</value> <!-- 1632 MHz CPU speed -->
-        <value>1689600</value> <!-- 1689.6 MHz CPU speed -->
+        <value>1689600</value> <!-- 1689 MHz CPU speed -->
         <value>1824000</value> <!-- 1824 MHz CPU speed -->
     </array>
-    <!-- Power consumption when CPU is idle -->
-    <item name="cpu.idle">3.46965169575592</item>
-    <item name="cpu.awake">1.34521161231221</item>
-    <!-- Power consumption at different speeds -->
-    <array name="cpu.active.cluster0">
-        <value>102.762</value> <!-- 384 MHz CPU speed -->
-        <value>108.702</value> <!-- 460.8 MHz CPU speed -->
-        <value>117.097</value> <!-- 600 MHz CPU speed -->
-        <value>126.066</value> <!-- 672 MHz CPU speed -->
-        <value>134.956</value> <!-- 787.2 MHz CPU speed -->
-        <value>152.321</value> <!-- 864 MHz CPU speed -->
-        <value>174.992</value> <!-- 960 MHz CPU speed -->
-        <value>232.194</value> <!-- 1248 MHz CPU speed -->
-        <value>275.754</value> <!-- 1440 MHz CPU speed -->
-    </array>
-    <array name="cpu.active.cluster1">
-        <value>308.385</value> <!-- 384 MHz CPU speed -->
-        <value>309.652</value> <!-- 480 MHz CPU speed -->
-        <value>310.345</value> <!-- 633.6 MHz CPU speed -->
-        <value>366.795</value> <!-- 768 MHz CPU speed -->
-        <value>407.682</value> <!-- 864 MHz CPU speed -->
-        <value>449.222</value> <!-- 960 MHz CPU speed -->
-        <value>597.979</value> <!-- 1248 MHz CPU speed -->
-        <value>658.785</value> <!-- 1344 MHz CPU speed -->
-        <value>723.789</value> <!-- 1440 MHz CPU speed -->
-        <value>801.563</value> <!-- 1536 MHz CPU speed -->
-        <value>889.732</value> <!-- 1632 MHz CPU speed -->
-        <value>941.965</value> <!-- 1689.6 MHz CPU speed -->
-        <value>1074.40</value> <!-- 1824 MHz CPU speed -->
-    </array>
-    <array name="cpu.clusters.cores">
-        <value>4</value> <!-- Cluster 0 has 4 cores (cpu0, cpu1, cpu2, cpu3) -->
-        <value>2</value> <!-- Cluster 1 has 2 cores (cpu4, cpu5) -->
-    </array>
-    <!-- This is the battery capacity in mAh -->
-    <item name="battery.capacity">2700</item>
 
-    <array name="wifi.batchedscan"> <!-- mA.  Current figures based on .0801 s/c and 75.48mA while scanning -->
-        <value>.0076</value> <!-- 1-8/hr -->
-        <value>.0613</value>  <!-- 9-64/hr -->
-        <value>.4845</value>   <!-- 65-512/hr -->
-        <value>3.870</value>    <!-- 513-4096/hr -->
-        <value>30.96</value>   <!-- 4097-?/hr -->
+    <!-- Additional power used by a CPU from cluster 0 when running at different
+         speeds. Currently this measurement also includes cluster cost. -->
+    <array name="cpu.active.cluster0">
+        <value>77.358</value> <!-- 384 MHz CPU speed -->
+        <value>82.744</value> <!-- 460 MHz CPU speed -->
+        <value>85.913</value> <!-- 600 MHz CPU speed -->
+        <value>91.972</value> <!-- 672 MHz CPU speed -->
+        <value>97.483</value> <!-- 787 MHz CPU speed -->
+        <value>105.882</value> <!-- 864 MHz CPU speed -->
+        <value>113.951</value> <!-- 960 MHz CPU speed -->
+        <value>142.006</value> <!-- 1248 MHz CPU speed -->
+        <value>165.514</value> <!-- 1440 MHz CPU speed -->
     </array>
+    <!-- Additional power used by a CPU from cluster 1 when running at different
+         speeds. Currently this measurement also includes cluster cost. -->
+    <array name="cpu.active.cluster1">
+        <value>132.714</value> <!-- 384 MHz CPU speed -->
+        <value>146.321</value> <!-- 480 MHz CPU speed -->
+        <value>167.495</value> <!-- 633 MHz CPU speed -->
+        <value>194.391</value> <!-- 768 MHz CPU speed -->
+        <value>211.625</value> <!-- 864 MHz CPU speed -->
+        <value>231.291</value> <!-- 960 MHz CPU speed -->
+        <value>298.062</value> <!-- 1248 MHz CPU speed -->
+        <value>325.774</value> <!-- 1344 MHz CPU speed -->
+        <value>353.432</value> <!-- 1440 MHz CPU speed -->
+        <value>389.501</value> <!-- 1536 MHz CPU speed -->
+        <value>427.866</value> <!-- 1632 MHz CPU speed -->
+        <value>444.878</value> <!-- 1689 MHz CPU speed -->
+        <value>496.031</value> <!-- 1824 MHz CPU speed -->
+    </array>
+
+    <!-- Additional power used when screen is turned on at minimum brightness -->
+    <item name="screen.on">97.690</item>
+    <!-- Additional power used when screen is at maximum brightness, compared to
+         screen at minimum brightness -->
+    <item name="screen.full">171.856</item>
+
+    <!-- Average power used by the camera flash module when on -->
+    <item name="camera.flashlight">266.707</item>
+    <!-- Average power use by the camera subsystem for a typical camera
+         application. Intended as a rough estimate for an application running a
+         preview and capturing approximately 10 full-resolution pictures per
+         minute. -->
+    <item name="camera.avg">889.245</item>
+
+    <!-- Additional power used when audio decoding/encoding via DSP -->
+    <item name="dsp.audio">34.523</item>
+    <!-- Additional power used when video decoding via DSP -->
+    <item name="dsp.video">187.86</item>
+
+    <!-- Additional power used when GPS is acquiring a signal -->
+    <item name="gps.on">21.3112768663199</item>
+
+    <!-- Additional power used when Wi-Fi is turned on but not receiving,
+         transmitting, or scanning -->
+    <item name="wifi.on">0.56</item>
+    <!-- Additional power used when transmitting or receiving over Wi-Fi -->
+    <item name="wifi.active">172.99</item>
+    <!-- Additional power used when Wi-Fi is scanning for access points -->
+    <item name="wifi.scan">25.7523644684504</item>
+
+    <!-- mA.  Current figures based on .0801 s/c and 75.48mA while scanning -->
+    <array name="wifi.batchedscan">
+        <value>0.0076</value>   <!-- 1-8/hr -->
+        <value>0.0613</value>   <!-- 9-64/hr -->
+        <value>0.4845</value>   <!-- 65-512/hr -->
+        <value>3.870</value>    <!-- 513-4096/hr -->
+        <value>30.96</value>    <!-- 4097-?/hr -->
+    </array>
+
     <!-- Current at each of the wifi Tx levels in mA. The number of tx levels varies per device
         and is available only of wifi chipsets which support the tx level reporting. Use
         wifi.tx for other chipsets. none by default -->
@@ -280,4 +305,18 @@
         <value>2.324374274</value>
         <value>2.355329002</value>
     </array>
+
+    <!-- Additional power used when cellular radio is transmitting/receiving -->
+    <item name="radio.active">91.859655777944</item>
+    <!-- The current consumed by the radio when it is scanning for a signal -->
+    <item name="radio.scanning">4.56959643376497</item>
+    <!-- Current consumed by the radio at different signal strengths, when paging -->
+    <array name="radio.on"> <!-- Strength 0 to BINS-1 -->
+        <value>14.718992198734</value>
+        <value>7.11953513364874</value>
+	    <value>9.67242765594385</value>
+	    <value>10.9664724655329</value>
+	    <value>5.9382806608961</value>
+    </array>
+
 </device>
diff --git a/sensorhal/sensorlist.cpp b/sensorhal/sensorlist.cpp
index daf539e..8ced84a 100644
--- a/sensorhal/sensorlist.cpp
+++ b/sensorhal/sensorlist.cpp
@@ -26,7 +26,8 @@
 
 const float kMinSampleRateHzAccel = 6.250f;
 const float kMaxSampleRateHzAccel = 400.0f;
-extern const float kScaleAccel = (8.0f * 9.81f / 32768.0f);
+const float kAccelRangeG = 16.0f;
+extern const float kScaleAccel = (kAccelRangeG * 9.81f / 32768.0f);
 
 const float kMinSampleRateHzGyro = 6.250f;
 const float kMaxSampleRateHzGyro = 400.0f;
@@ -119,8 +120,8 @@
         kVersion,
         COMMS_SENSOR_ACCEL,
         SENSOR_TYPE_ACCELEROMETER,
-        GRAVITY_EARTH * 8.0f,                      // maxRange
-        GRAVITY_EARTH * 8.0f / 32768.0f,           // resolution
+        GRAVITY_EARTH * kAccelRangeG,              // maxRange
+        GRAVITY_EARTH * kAccelRangeG / 32768.0f,   // resolution
         0.0f,                                      // XXX power
         (int32_t)(1.0E6f / kMaxSampleRateHzAccel), // minDelay
         3000,                                      // XXX fifoReservedEventCount
@@ -515,8 +516,8 @@
         kVersion,
         COMMS_SENSOR_ACCEL_UNCALIBRATED,
         SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED,
-        GRAVITY_EARTH * 8.0f,                      // maxRange
-        GRAVITY_EARTH * 8.0f / 32768.0f,           // resolution
+        GRAVITY_EARTH * kAccelRangeG,              // maxRange
+        GRAVITY_EARTH * kAccelRangeG / 32768.0f,   // resolution
         0.0f,                                      // XXX power
         (int32_t)(1.0E6f / kMaxSampleRateHzAccel), // minDelay
         3000,                                      // XXX fifoReservedEventCount
diff --git a/sepolicy/rild.te b/sepolicy/rild.te
index 0d4f32f..14d1257 100644
--- a/sepolicy/rild.te
+++ b/sepolicy/rild.te
@@ -27,6 +27,10 @@
 # rild reads qcril.db linked to /system/etc/qcril.db
 allow rild radio_data_file:lnk_file read;
 
+# allow rild to access radio data file
+allow rild radio_data_file:dir rw_dir_perms;
+allow rild radio_data_file:file create_file_perms;
+
 userdebug_or_eng(`
   allow rild ssr_device:chr_file { open read };