Merge "Revert "dragon: camera: Stop advertising camera2 FULL mode"" into mnc-dr-ryu-dev
diff --git a/DragonKeyboardFirmwareUpdater/keyboard_firmware_updater/res/raw/image_151210_mp_signed.hex b/DragonKeyboardFirmwareUpdater/keyboard_firmware_updater/res/raw/image_151216_mp_signed.hex
similarity index 98%
rename from DragonKeyboardFirmwareUpdater/keyboard_firmware_updater/res/raw/image_151210_mp_signed.hex
rename to DragonKeyboardFirmwareUpdater/keyboard_firmware_updater/res/raw/image_151216_mp_signed.hex
index 7e3bf19..d231a0e 100644
--- a/DragonKeyboardFirmwareUpdater/keyboard_firmware_updater/res/raw/image_151210_mp_signed.hex
+++ b/DragonKeyboardFirmwareUpdater/keyboard_firmware_updater/res/raw/image_151216_mp_signed.hex
@@ -427,48 +427,48 @@
 :10AA9000161A020018500000D1180000C10300006F

 :10AAA00000200020A40000101C22002049A5010065

 :10AAB000B9AA010018320020F7B5041C00780D284F

-:10AAC00000D93DE106F034FD0E006500E0007000A5

-:10AAD000D50099002C01AC00AE00B000C600CD003E

-:10AAE0003501E9009B4F9C484C2101223B1C04F09E

-:10AAF00043FC041E00D0B1E00823984E38780121B1

+:10AAC00000D93CE106F034FD0E006400DF006F00A9

+:10AAD000D40098002B01AB00AD00AF00C500CC0046

+:10AAE0003401E8009B4F9C484C2101223B1C04F0A0

+:10AAF00043FC041E00D0B0E00823984E38780121B2

 :10AB000000930196221C231C04F03AFC051E18D168

 :10AB1000012338780093F318019302212A1C2B1C7F

-:10AB200004F02EFC041E00D0D3E0022576193878FC

+:10AB200004F02EFC041E00D0D2E0022576193878FD

 :10AB3000032100950196221C231C04F021FC00280F

 :10AB400003D0211C221CFFF719FD03F013FE041C87

 :10AB500004F0AAFA031C061CAB4308D0804806F098

 :10AB6000ADFB301C06F0D2FB7E4806F0A7FB7E480A

 :10AB700006F0A4FB201C06F0C9FB7C4806F09EFBF7

-:10AB8000012004F09FFA002868D10420FFF7FCFBA5

-:10AB9000DFE0774806F092FB96200122754BC0005B

-:10ABA0001A7006F0B7FAD4E06379032B04D1724827

-:10ABB00006F084FBA068C7E0022B00D0C9E06F4814

-:10ABC00006F07CFBA06806F091FB6D4806F076FB72

-:10ABD000A368187806F08AFB6A4806F06FFBA07934

-:10ABE00006F084FB684806F069FBE07906F07EFB1E

-:10ABF000664806F063FB2079A6E0654806F05EFB38

-:10AC0000A08806F083FB634806F058FBE08806F056

-:10AC10007DFB614806F052FB208906F077FB95E04A

-:10AC20005E4894E05E4892E0302106225D4806F0DE

-:10AC3000F5FC002005F07AFE01225B4B5B481A70A0

-:10AC400000225B4B1A705B4B191CD833D4310A605D

-:10AC50001A607CE0584806F031FB584800210A1C75

-:10AC600071E7012005F062FE00224F4B54481A7034

-:10AC70006DE0544806F022FB207906F037FB52487D

-:10AC800006F01CFB60795FE0504806F017FB0022DD

-:10AC9000384B1A7004F0A6FB5BE04D4806F00EFB43

-:10ACA0004C4C2578002D0AD000254B4806F006FBB9

-:10ACB00025704A4C2078FFF78DFE257049E0484BFF

-:10ACC0001B78022B24D1FFF763FB464E041E306035

-:10ACD00003D0201C291C2A1C35E7E8208002FFF73E

-:10ACE00059FB3060002800D02BE78021C0223E4B6A

-:10ACF000C9035200995001211A683C4C0B1C834037

-:10AD00001A4200D0E36701302028F7D105F07AFD20

-:10AD1000374806F0D3FA0020011C06F029FA18E0A3

-:10AD2000344806F0CBFA04F05DFB0022294B1A7080

-:10AD30000FE0314806F0C2FAFFF75AFCFFF78CFC2F

-:10AD40002E4806F0BBFA207806F0D0FA074806F045

-:10AD5000B5FAF7BD10230020941B0200BB2400208D

+:10AB8000012004F09FFA002867D1FFF7FDFBDFE00A

+:10AB9000774806F093FB96200122764BC0001A708E

+:10ABA00006F0B8FAD4E06379032B04D1724806F0BA

+:10ABB00085FBA068C7E0022B00D0C9E06F4806F013

+:10ABC0007DFBA06806F092FB6D4806F077FBA3685A

+:10ABD000187806F08BFB6B4806F070FBA07906F046

+:10ABE00085FB694806F06AFBE07906F07FFB674861

+:10ABF00006F064FB2079A6E0654806F05FFBA088BC

+:10AC000006F084FB634806F059FBE08806F07EFB03

+:10AC1000614806F053FB208906F078FB95E05F4819

+:10AC200094E05F4892E0302106225E4806F0F6FC90

+:10AC3000002005F07BFE01225B4B5C481A7000226D

+:10AC40005B4B1A705B4B191CD833D4310A601A6005

+:10AC50007CE0594806F032FB584800210A1C72E794

+:10AC6000012005F063FE00224F4B55481A706DE03D

+:10AC7000544806F023FB207906F038FB524806F0D2

+:10AC80001DFB60795FE0514806F018FB0022394B4C

+:10AC90001A7004F0A7FB5BE04D4806F00FFB4D4C2B

+:10ACA0002578002D0AD000254B4806F007FB2570BB

+:10ACB0004A4C2078FFF78EFE257049E0484B1B7800

+:10ACC000022B24D1FFF764FB464E041E306003D0F4

+:10ACD000201C291C2A1C36E7E8208002FFF75AFBBB

+:10ACE0003060002800D02CE78021C0223E4BC903F1

+:10ACF0005200995001211A683C4C0B1C83401A42A7

+:10AD000000D0E36701302028F7D105F07BFD3848FB

+:10AD100006F0D4FA0020011C06F02AFA18E03548A3

+:10AD200006F0CCFA04F05EFB00222A4B1A700FE00A

+:10AD3000314806F0C3FAFFF75BFCFFF78DFC2F48A4

+:10AD400006F0BCFA207806F0D1FA084806F0B6FA08

+:10AD5000F7BDC04610230020941B0200BB24002036

 :10AD60001F1A0200261A0200321A0200CD1A02002F

 :10AD7000471A0200282200204D1A0200561A02002B

 :10AD80005F1A0200661A02006E1A0200741A0200AC

@@ -2196,8 +2196,8 @@
 :101910007720746F2065786974206465627567202C

 :101920006D6F64652E0D0A000D0A56657273696F3E

 :101930006E2000204275696C74206F6E2000446533

-:101940006320313120323031350020617420003184

-:10195000373A30323A3434002070726573736564FC

+:10194000632031372032303135002061742000317E

+:10195000323A35323A3432002070726573736564FE

 :101960000D0A002121212121204150505F45525272

 :101970004F525F48414E444C4552202121212120A5

 :101980006572726F725F636F6465203D203078000E

@@ -2209,7 +2209,7 @@
 :1019E00079733A2000205363616E20436F646573FE

 :1019F0002028686578293A200062460D0A0050695F

 :101A000078656C2043204B6579626F617264004792

-:101A10006F6F676C6500302E3135313231300045E3

+:101A10006F6F676C6500302E3135313231360045DD

 :101A200072726F72200020747279696E6720746F11

 :101A3000200055706461746520746865206C65765B

 :101A4000656C20746F2000436F6E0D0A004665615F

@@ -4036,23 +4036,23 @@
 :108C100010000000480000000001000000FC0000FF

 :108C200003000200419A32EEE5DBBCC148D6431393

 :108C30008799B21B5DA65DFF4861646F6B656E200E

-:108C400052656C6561736500631966EC911A1625AF

-:108C50005B6798BE1EB9A35ADAEEE7F939C8E9AEE8

-:108C60006DEFF4A8AC2CD775851B3FD387E18963E2

-:108C70002C8F3398FBBC73ADB500592AAAA889473D

-:108C80006171C124D0A820DC6AA05594A0315C1881

-:108C90003CDC0D033749150EF8C5E15BB507268BA3

-:108CA000310BB71C4BBC48BA26F59A4599F9803F61

-:108CB0008B4EB8C02FD6DBE301237EC49562A5504E

-:108CC0005EC163F0FC54B10CC96C28DE2E46CC901A

-:108CD0004E491856EBDFD34AD999E632589F958210

-:108CE000227244F8D9364CC97DBB3B471141F7DEAF

-:108CF000A398B5E82A9C61FACF3DB02A1A60C0EF6C

-:108D00006311AAEC7F33FA21378A5C1E55EFE0220B

-:108D1000890D7771C92C5684556974ED50F7650B30

-:108D20004A807280FE5528DC10E32BC633B009D18F

-:108D30005F0339B903643D70486138FD1D3C96629C

-:108D40006D2AFE7A5E2EC2DEFFFFFFFFFFFFFFFFF0

+:108C400052656C6561736500399A55D23D676CCC8D

+:108C50006339EFF58CEF431454DCCD256F60C4A36A

+:108C6000BB463C393C6508D3325A2AAED4D59BA5C5

+:108C70009FC05107DEA72EBD4ABCDBA409792BBAE1

+:108C8000A5C73571BD7C09CB16C400E6C52B4FFFC7

+:108C900028D8F3EE78C9E7D9B5EC6444426BBD122D

+:108CA000E488207FB4C9F594C205A79846D6A41DD0

+:108CB000B071C0C2AF5AEDC22FD267CEE38637265D

+:108CC000D6CB5F41338035D3760E75FAA344EA3AAA

+:108CD0008D06E4301A264FCBA81DD298309F39A0BC

+:108CE0008BF747493FF16DA002D25BFAAB509E2251

+:108CF000E1CD234264E4CB16A3FAC031079A43C204

+:108D00004FFD96DDD19DC9A67E756C96876304C123

+:108D100005CA07B2AEA18B2D8DFFC44A3F863A4CDF

+:108D20008D88C19E6D26D4D2367FFBD83FAF2EE111

+:108D30004581B3700291C3959A38509CA18ACD1891

+:108D4000A3C74DD000A3D859FFFFFFFFFFFFFFFFD0

 :108D5000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23

 :108D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF13

 :108D7000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03

diff --git a/DragonKeyboardFirmwareUpdater/keyboard_firmware_updater/res/raw/init_151210_mp_signed.dat b/DragonKeyboardFirmwareUpdater/keyboard_firmware_updater/res/raw/init_151210_mp_signed.dat
deleted file mode 100644
index 0b00915..0000000
--- a/DragonKeyboardFirmwareUpdater/keyboard_firmware_updater/res/raw/init_151210_mp_signed.dat
+++ /dev/null
Binary files differ
diff --git a/DragonKeyboardFirmwareUpdater/keyboard_firmware_updater/res/raw/init_151216_mp_signed.dat b/DragonKeyboardFirmwareUpdater/keyboard_firmware_updater/res/raw/init_151216_mp_signed.dat
new file mode 100644
index 0000000..3160571
--- /dev/null
+++ b/DragonKeyboardFirmwareUpdater/keyboard_firmware_updater/res/raw/init_151216_mp_signed.dat
Binary files differ
diff --git a/DragonKeyboardFirmwareUpdater/keyboard_firmware_updater/res/values/strings.xml b/DragonKeyboardFirmwareUpdater/keyboard_firmware_updater/res/values/strings.xml
index 772ab2e..64bd909 100644
--- a/DragonKeyboardFirmwareUpdater/keyboard_firmware_updater/res/values/strings.xml
+++ b/DragonKeyboardFirmwareUpdater/keyboard_firmware_updater/res/values/strings.xml
@@ -25,12 +25,12 @@
     <string name="target_keyboard_name" translatable="false">Pixel C Keyboard</string>
     <string name="target_manufacturer" translatable="false">Google</string>
     <string name="target_battery_level" translatable="false">20</string>
-    <string name="target_firmware_version" translatable="false">0.151210</string>
+    <string name="target_firmware_version" translatable="false">0.151216</string>
     <string name="target_min_updatable_firmware_version" translatable="false">0.151020</string>
 
     <!-- File names of the firmware images in raw resource (for service use)-->
-    <string name="target_firmware_init_file_name" translatable="false">init_151210_mp_signed</string>
-    <string name="target_firmware_image_file_name" translatable="false">image_151210_mp_signed</string>
+    <string name="target_firmware_init_file_name" translatable="false">init_151216_mp_signed</string>
+    <string name="target_firmware_image_file_name" translatable="false">image_151216_mp_signed</string>
 
     <!-- The update notification message title shown when a keyboard update is
          available. Users are given the option to install or postpone the update.
diff --git a/DragonKeyboardFirmwareUpdater/keyboard_firmware_updater/src/com/android/dragonkeyboardfirmwareupdater/BluetoothConnectionBroadcastReceiver.java b/DragonKeyboardFirmwareUpdater/keyboard_firmware_updater/src/com/android/dragonkeyboardfirmwareupdater/BluetoothConnectionBroadcastReceiver.java
index 7ea3b48..9f6f078 100644
--- a/DragonKeyboardFirmwareUpdater/keyboard_firmware_updater/src/com/android/dragonkeyboardfirmwareupdater/BluetoothConnectionBroadcastReceiver.java
+++ b/DragonKeyboardFirmwareUpdater/keyboard_firmware_updater/src/com/android/dragonkeyboardfirmwareupdater/BluetoothConnectionBroadcastReceiver.java
@@ -30,6 +30,12 @@
 
     @Override
     public void onReceive(Context context, Intent intent) {
+        // Only process if the current user is the primary user in order to avoid starting the
+        // update process on the work profile.
+        UserManager userManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
+        if (!userManager.isSystemUser()) {
+            return;
+        }
 
         if (!BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED.equals(intent.getAction())) return;
 
diff --git a/DragonKeyboardFirmwareUpdater/keyboard_firmware_updater/src/com/android/dragonkeyboardfirmwareupdater/KeyboardFirmwareUpdateService.java b/DragonKeyboardFirmwareUpdater/keyboard_firmware_updater/src/com/android/dragonkeyboardfirmwareupdater/KeyboardFirmwareUpdateService.java
index acaab9c..d286cf1 100644
--- a/DragonKeyboardFirmwareUpdater/keyboard_firmware_updater/src/com/android/dragonkeyboardfirmwareupdater/KeyboardFirmwareUpdateService.java
+++ b/DragonKeyboardFirmwareUpdater/keyboard_firmware_updater/src/com/android/dragonkeyboardfirmwareupdater/KeyboardFirmwareUpdateService.java
@@ -698,6 +698,7 @@
                 .setCategory(Notification.CATEGORY_SYSTEM)
                 .setContentTitle(getString(R.string.notification_update_title))
                 .setContentText(getString(R.string.notification_update_text))
+                .setContentIntent(installIntent)
                 .setSmallIcon(R.drawable.ic_keyboard)
                 .addAction(new NotificationCompat.Action.Builder(
                         R.drawable.ic_later, getString(R.string.notification_update_later),
diff --git a/audio/hal/audio_hw.c b/audio/hal/audio_hw.c
index 83a623d..f853a10 100644
--- a/audio/hal/audio_hw.c
+++ b/audio/hal/audio_hw.c
@@ -920,13 +920,15 @@
 
     if (has_additional_channels)
     {
+        // TODO do not hardcode 16-bit encoding, use audio_stream_out_frame_size() instead
         int16_t* src_buffer = (int16_t *)proc_buf_out;
         int16_t* dst_buffer = (int16_t *)buffer;
 
         if (dst_channels == 1) {
             for (i = frames_wr; i > 0; i--)
             {
-                *dst_buffer++ = *src_buffer;
+                *dst_buffer = *src_buffer;
+                dst_buffer += 1;
                 src_buffer += src_channels;
             }
         } else {
@@ -1533,7 +1535,7 @@
 {
     if (format != AUDIO_FORMAT_PCM_16_BIT) return -EINVAL;
 
-    if ((channel_count < 1) || (channel_count > 2)) return -EINVAL;
+    if ((channel_count < 1) || (channel_count > 4)) return -EINVAL;
 
     switch (sample_rate) {
     case 8000:
@@ -1829,6 +1831,10 @@
     unsigned char *data = NULL;
     struct pcm_config config;
 
+    size_t src_channels = audio_channel_count_from_out_mask(out->channel_mask);
+    size_t dst_channels = out->config.channels;
+    bool channel_remapping_needed = (dst_channels != src_channels);
+
     lock_output_stream(out);
     if (out->standby) {
         pthread_mutex_lock(&adev->lock);
@@ -1869,7 +1875,7 @@
             unsigned audio_bytes;
             const void *audio_data;
 
-            ALOGVV("%s: writing buffer (%d bytes) to pcm device", __func__, bytes);
+            ALOGVV("%s: writing buffer (%zd bytes) to pcm device", __func__, bytes);
             if (pcm_device->resampler && pcm_device->res_buffer) {
                 audio_data = pcm_device->res_buffer;
                 audio_bytes = frames_wr * frame_size;
@@ -1884,6 +1890,37 @@
              */
             apply_dsp(pcm_device, audio_data, audio_bytes/4);
 
+            if (channel_remapping_needed) {
+                unsigned remapped_audio_bytes;
+                const void *remapped_audio_data;
+                int i;
+                int frames_num = audio_bytes / frame_size;
+
+                audio_bytes = audio_bytes * dst_channels / src_channels;
+
+                /* With additional channels, we cannot use original buffer */
+                if (out->proc_buf_size < audio_bytes) {
+                    out->proc_buf_size = audio_bytes;
+                    out->proc_buf_out = (int16_t *)realloc(out->proc_buf_out, audio_bytes);
+                    ALOG_ASSERT((out->proc_buf_out != NULL),
+                                "out_write() failed to reallocate proc_buf_out");
+                }
+                remapped_audio_data = out->proc_buf_out;
+
+                // TODO do not hardcode 16-bit encoding, use audio_stream_out_frame_size() instead
+                int16_t* src_buffer = (int16_t *)audio_data;
+                int16_t* dst_buffer = (int16_t *)remapped_audio_data;
+
+                for (i = frames_num; i > 0; i--)
+                {
+                    memcpy(dst_buffer, src_buffer, src_channels*sizeof(int16_t));
+                    dst_buffer += dst_channels;
+                    src_buffer += src_channels;
+                }
+
+                audio_data = remapped_audio_data;
+            }
+
             pcm_device->status = pcm_write(pcm_device->pcm, audio_data, audio_bytes);
             if (pcm_device->status != 0)
                 ret = pcm_device->status;
diff --git a/audio/hal/audio_hw.h b/audio/hal/audio_hw.h
index 92aff51..bdf89b0 100644
--- a/audio/hal/audio_hw.h
+++ b/audio/hal/audio_hw.h
@@ -109,7 +109,7 @@
  */
 #define PLAYBACK_PERIOD_SIZE 512
 #define PLAYBACK_PERIOD_COUNT 2
-#define PLAYBACK_DEFAULT_CHANNEL_COUNT 2
+#define PLAYBACK_DEFAULT_CHANNEL_COUNT 4
 #define PLAYBACK_DEFAULT_SAMPLING_RATE 48000
 #define PLAYBACK_START_THRESHOLD ((PLAYBACK_PERIOD_SIZE * PLAYBACK_PERIOD_COUNT) - 1)
 #define PLAYBACK_STOP_THRESHOLD (PLAYBACK_PERIOD_SIZE * PLAYBACK_PERIOD_COUNT)
@@ -129,7 +129,7 @@
 #define CAPTURE_PERIOD_SIZE 1024
 #define CAPTURE_PERIOD_SIZE_LOW_LATENCY 512
 #define CAPTURE_PERIOD_COUNT 2
-#define CAPTURE_DEFAULT_CHANNEL_COUNT 2
+#define CAPTURE_DEFAULT_CHANNEL_COUNT 4
 #define CAPTURE_DEFAULT_SAMPLING_RATE 48000
 #define CAPTURE_START_THRESHOLD 1
 
@@ -229,7 +229,8 @@
     int                         send_new_metadata;
 
     struct audio_device*        dev;
-
+    int16_t *proc_buf_out;
+    size_t proc_buf_size;
 };
 
 struct stream_in {
diff --git a/audio/soundtrigger/sound_trigger_hw.c b/audio/soundtrigger/sound_trigger_hw.c
index 35ef5ec..a663e12 100644
--- a/audio/soundtrigger/sound_trigger_hw.c
+++ b/audio/soundtrigger/sound_trigger_hw.c
@@ -32,9 +32,10 @@
 #include <hardware/sound_trigger.h>
 #include <tinyalsa/asoundlib.h>
 
-#define DRAGON_MIXER_VAD	0
-#define DRAGON_MIC_CTRL		"Int Mic Switch"
-#define UEVENT_MSG_LEN		1024
+#define DRAGON_MIXER_VAD          0
+#define DRAGON_MIC_CTRL           "Int Mic Switch"
+#define DRAGON_HOTWORD_MODEL_CTRL "Hotword Model"
+#define UEVENT_MSG_LEN            1024
 
 #define DRAGON_ST_CARD_NUM 0
 #define DRAGON_ST_DEV_NUM 87
@@ -69,6 +70,7 @@
     int term_sock;
     struct mixer *mixer;
     struct mixer_ctl *int_mic_sw;
+    struct mixer_ctl *hotword_model;
     struct sound_trigger_recognition_config *config;
     struct pcm *pcm;
     int is_streaming;
@@ -109,6 +111,11 @@
     if (!stdev->int_mic_sw)
         goto err;
 
+    stdev->hotword_model = mixer_get_ctl_by_name(stdev->mixer,
+                                                 DRAGON_HOTWORD_MODEL_CTRL);
+    if (!stdev->hotword_model)
+        ALOGE("No hotword model mixer control\n");
+
     stdev_dsp_set_power(stdev, 0); // Disable DSP at the beginning
 
     return 0;
@@ -143,11 +150,11 @@
 static int vad_load_sound_model(struct dragon_sound_trigger_device *stdev,
                                 char *buf, size_t len)
 {
-    (void)stdev;
-    (void)buf;
-    (void)len;
-    /* TODO(dgreid) - implement with kcontrol TLV value. */
-    return 0;
+    int ret;
+    ret = mixer_ctl_set_array(stdev->hotword_model, buf, len);
+    if (ret)
+        ALOGE("Failed hotword model write %d\n", ret);
+    return ret;
 }
 
 static char *sound_trigger_event_alloc(struct dragon_sound_trigger_device *
diff --git a/bcmdhd.cal b/bcmdhd.cal
index 7a75804..1624998 100644
--- a/bcmdhd.cal
+++ b/bcmdhd.cal
@@ -136,3 +136,4 @@
 rssicorrnorm_c1=4,4
 rssicorrnorm5g_c0=1,2,3,1,2,3,1,2,3,1,2,3
 rssicorrnorm5g_c1=1,2,3,1,2,3,1,2,3,1,2,3
+btc_params3=75
\ No newline at end of file
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 9b9e3d2..f364355 100644
--- a/overlay/frameworks/base/core/res/res/xml/power_profile.xml
+++ b/overlay/frameworks/base/core/res/res/xml/power_profile.xml
@@ -19,16 +19,16 @@
 <device name="Android">
     <!-- All values are in mAh except as noted -->
     <item name="none">2.18</item>
-    <item name="screen.on">184.86</item>
+    <item name="screen.on">181.08</item>
     <item name="screen.full">609.72</item>
     <item name="bluetooth.active">26.47</item>
-    <item name="bluetooth.on">6.29</item>
-    <item name="wifi.on">4.07</item>
-    <item name="wifi.active">79.06</item>
-    <item name="wifi.scan">128.80</item>
-    <item name="dsp.audio">22.93</item>
-    <item name="dsp.video">137.57</item>
-    <item name="camera.avg">997.50</item>
+    <item name="bluetooth.on">4.05</item>
+    <item name="wifi.on">3.81</item>
+    <item name="wifi.active">111.43</item>
+    <item name="wifi.scan">149.04</item>
+    <item name="dsp.audio">19.15</item>
+    <item name="dsp.video">113.57</item>
+    <item name="camera.avg">791.67</item>
 
     <!-- Different CPU speeds as reported in
          /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state -->
@@ -53,8 +53,8 @@
         <value>1912500</value>
     </array>
     <!-- Power consumption when CPU is idle -->
-    <item name="cpu.idle">7.62</item>  <!-- suspend power 32.00 mW -->
-    <item name="cpu.awake">94.31</item> <!-- idle screen off 428.10 mW -->
+    <item name="cpu.idle">8.57</item>  <!-- suspend power 36 mW -->
+    <item name="cpu.awake">97.14</item> <!-- idle screen off 444 mW -->
     <array name="cpu.active.cluster0">
     <!-- Power consumption at different speeds -->
         <value>36.95</value> <!-- 204000 -->
diff --git a/rt5677_elf_vad b/rt5677_elf_vad
index 1f700de..4198dd6 100755
--- a/rt5677_elf_vad
+++ b/rt5677_elf_vad
Binary files differ