Merge "configs: kona: modify dmic selection and update codec gain"
diff --git a/configs/kona/audio_platform_info.xml b/configs/kona/audio_platform_info.xml
index fc9f72e..09cb923 100644
--- a/configs/kona/audio_platform_info.xml
+++ b/configs/kona/audio_platform_info.xml
@@ -108,6 +108,7 @@
         <usecase name="USECASE_AUDIO_PLAYBACK_MMAP" type="out" id="29" />
         <usecase name="USECASE_AUDIO_RECORD_MMAP" type="in" id="29" />
         <usecase name="USECASE_AUDIO_A2DP_ABR_FEEDBACK" type="in" id="36" />
+        <usecase name="USECASE_AUDIO_A2DP_ABR_FEEDBACK" type="out" id="36" />
         <usecase name="USECASE_INCALL_MUSIC_UPLINK" type="out" id="23" />
     </pcm_ids>
     <config_params>
diff --git a/configs/kona/audio_platform_info_intcodec.xml b/configs/kona/audio_platform_info_intcodec.xml
index 3f424b2..467aab9 100644
--- a/configs/kona/audio_platform_info_intcodec.xml
+++ b/configs/kona/audio_platform_info_intcodec.xml
@@ -64,6 +64,7 @@
         <usecase name="USECASE_AUDIO_PLAYBACK_MMAP" type="out" id="29" />
         <usecase name="USECASE_AUDIO_RECORD_MMAP" type="in" id="29" />
         <usecase name="USECASE_AUDIO_A2DP_ABR_FEEDBACK" type="in" id="36" />
+        <usecase name="USECASE_AUDIO_A2DP_ABR_FEEDBACK" type="out" id="36" />
         <usecase name="USECASE_INCALL_MUSIC_UPLINK" type="out" id="23" />
     </pcm_ids>
     <config_params>
diff --git a/configs/kona/audio_platform_info_qrd.xml b/configs/kona/audio_platform_info_qrd.xml
index 5659a4e..8b1f0b6 100644
--- a/configs/kona/audio_platform_info_qrd.xml
+++ b/configs/kona/audio_platform_info_qrd.xml
@@ -64,6 +64,7 @@
         <usecase name="USECASE_AUDIO_PLAYBACK_MMAP" type="out" id="29" />
         <usecase name="USECASE_AUDIO_RECORD_MMAP" type="in" id="29" />
         <usecase name="USECASE_AUDIO_A2DP_ABR_FEEDBACK" type="in" id="36" />
+        <usecase name="USECASE_AUDIO_A2DP_ABR_FEEDBACK" type="out" id="36" />
         <usecase name="USECASE_INCALL_MUSIC_UPLINK" type="out" id="23" />
     </pcm_ids>
     <config_params>
@@ -100,6 +101,20 @@
         <device name="SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC" acdb_id="147"/>
         <device name="SND_DEVICE_IN_HANDSET_GENERIC_QMIC" acdb_id="157"/>
     </acdb_ids>
+    <module_ids>
+        <aec>
+            <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_SB" module_id="0x10F39" instance_id="0x8000" param_id="0x10EAF" param_value="0x01"/>
+            <device name="SND_DEVICE_IN_SPEAKER_MIC_AEC_NS_SB" module_id="0x10F38" instance_id="0x8000" param_id="0x10EAF" param_value="0x01"/>
+            <device name="SND_DEVICE_IN_HANDSET_DMIC_AEC_NS_SB" module_id="0x10F39" instance_id="0x8000" param_id="0x10EAF" param_value="0x01"/>
+            <device name="SND_DEVICE_IN_HANDSET_MIC_AEC_NS_SB" module_id="0x10F38" instance_id="0x8000" param_id="0x10EAF" param_value="0x01"/>
+        </aec>
+        <ns>
+           <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_SB" module_id="0x10F39" instance_id="0x8000" param_id="0x10EAF" param_value="0x02"/>
+           <device name="SND_DEVICE_IN_SPEAKER_MIC_AEC_NS_SB" module_id="0x10F38" instance_id="0x8000" param_id="0x10EAF" param_value="0x02"/>
+           <device name="SND_DEVICE_IN_HANDSET_DMIC_AEC_NS_SB" module_id="0x10F39" instance_id="0x8000" param_id="0x10EAF" param_value="0x02"/>
+           <device name="SND_DEVICE_IN_HANDSET_MIC_AEC_NS_SB" module_id="0x10F38" instance_id="0x8000" param_id="0x10EAF" param_value="0x02"/>
+        </ns>
+    </module_ids>
     <backend_names>
         <device name="SND_DEVICE_OUT_HEADPHONES" backend="headphones" interface="RX_CDC_DMA_RX_0"/>
         <device name="SND_DEVICE_OUT_HEADPHONES_44_1" backend="headphones-44.1" interface="RX_CDC_DMA_RX_0"/>
diff --git a/configs/kona/kona.mk b/configs/kona/kona.mk
index dbf53f5..f0f175a 100644
--- a/configs/kona/kona.mk
+++ b/configs/kona/kona.mk
@@ -42,7 +42,7 @@
 AUDIO_FEATURE_ENABLED_AUDIOSPHERE := true
 AUDIO_FEATURE_ENABLED_USB_TUNNEL := true
 AUDIO_FEATURE_ENABLED_A2DP_OFFLOAD := true
-AUDIO_FEATURE_ENABLED_3D_AUDIO := false
+AUDIO_FEATURE_ENABLED_3D_AUDIO := true
 AUDIO_FEATURE_ENABLED_AHAL_EXT := true
 DOLBY_ENABLE := false
 endif
@@ -99,6 +99,7 @@
     vendor/qcom/opensource/audio-hal/primary-hal/configs/kona/mixer_paths.xml:$(TARGET_COPY_OUT_VENDOR)/etc/mixer_paths.xml \
     vendor/qcom/opensource/audio-hal/primary-hal/configs/kona/mixer_paths_qrd.xml:$(TARGET_COPY_OUT_VENDOR)/etc/mixer_paths_qrd.xml \
     vendor/qcom/opensource/audio-hal/primary-hal/configs/kona/audio_configs.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_configs.xml \
+    vendor/qcom/opensource/audio-hal/primary-hal/configs/kona/audio_configs_stock.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_configs_stock.xml \
     frameworks/native/data/etc/android.hardware.audio.pro.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.audio.pro.xml
 
 #XML Audio configuration files
diff --git a/configs/kona/mixer_paths.xml b/configs/kona/mixer_paths.xml
index 797cf8d..3e40870 100644
--- a/configs/kona/mixer_paths.xml
+++ b/configs/kona/mixer_paths.xml
@@ -482,6 +482,10 @@
         <path name="deep-buffer-playback bt-sco" />
     </path>
 
+    <path name="deep-buffer-playback bt-sco-swb">
+        <path name="deep-buffer-playback bt-sco" />
+    </path>
+
     <path name="deep-buffer-playback afe-proxy">
         <ctl name="AFE_PCM_RX Audio Mixer MultiMedia1" value="1" />
     </path>
@@ -518,6 +522,11 @@
         <path name="deep-buffer-playback" />
     </path>
 
+    <path name="deep-buffer-playback speaker-and-bt-sco-swb">
+        <path name="deep-buffer-playback bt-sco-swb" />
+        <path name="deep-buffer-playback" />
+    </path>
+
     <path name="low-latency-playback">
         <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia5" value="1" />
     </path>
@@ -539,6 +548,10 @@
         <path name="low-latency-playback bt-sco" />
     </path>
 
+    <path name="low-latency-playback bt-sco-swb">
+        <path name="low-latency-playback bt-sco" />
+    </path>
+
     <path name="low-latency-playback speaker-and-display-port">
         <path name="low-latency-playback display-port" />
         <path name="low-latency-playback" />
@@ -583,6 +596,11 @@
         <path name="low-latency-playback" />
     </path>
 
+    <path name="low-latency-playback speaker-and-bt-sco-swb">
+        <path name="low-latency-playback bt-sco-swb" />
+        <path name="low-latency-playback" />
+    </path>
+
     <path name="audio-ull-playback">
         <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia8" value="1" />
     </path>
@@ -613,6 +631,10 @@
         <path name="audio-ull-playback bt-sco" />
     </path>
 
+    <path name="audio-ull-playback bt-sco-swb">
+        <path name="audio-ull-playback bt-sco" />
+    </path>
+
     <path name="audio-ull-playback speaker-and-display-port">
         <path name="audio-ull-playback display-port" />
         <path name="audio-ull-playback" />
@@ -640,6 +662,11 @@
         <path name="audio-ull-playback" />
     </path>
 
+    <path name="audio-ull-playback speaker-and-bt-sco-swb">
+        <path name="audio-ull-playback bt-sco-swb" />
+        <path name="audio-ull-playback" />
+    </path>
+
     <path name="multi-channel-playback display-port">
         <ctl name="DISPLAY_PORT Mixer MultiMedia2" value="1" />
     </path>
@@ -673,6 +700,10 @@
         <path name="compress-offload-playback bt-sco" />
     </path>
 
+    <path name="compress-offload-playback bt-sco-swb">
+        <path name="compress-offload-playback bt-sco" />
+    </path>
+
     <path name="compress-offload-playback speaker-and-display-port">
         <path name="compress-offload-playback display-port" />
         <path name="compress-offload-playback" />
@@ -722,6 +753,11 @@
         <path name="compress-offload-playback" />
     </path>
 
+    <path name="compress-offload-playback speaker-and-bt-sco-swb">
+        <path name="compress-offload-playback bt-sco-swb" />
+        <path name="compress-offload-playback" />
+    </path>
+
     <path name="compress-offload-playback2">
         <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia7" value="1" />
     </path>
@@ -739,6 +775,10 @@
         <path name="compress-offload-playback2 bt-sco" />
     </path>
 
+    <path name="compress-offload-playback2 bt-sco-swb">
+        <path name="compress-offload-playback2 bt-sco" />
+    </path>
+
     <path name="compress-offload-playback2 speaker-and-display-port">
         <path name="compress-offload-playback2 display-port" />
         <path name="compress-offload-playback2" />
@@ -789,6 +829,11 @@
         <path name="compress-offload-playback2" />
     </path>
 
+    <path name="compress-offload-playback2 speaker-and-bt-sco-swb">
+        <path name="compress-offload-playback2 bt-sco-swb" />
+        <path name="compress-offload-playback2" />
+    </path>
+
     <path name="compress-offload-playback3">
         <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia10" value="1" />
     </path>
@@ -806,6 +851,10 @@
         <path name="compress-offload-playback3 bt-sco" />
     </path>
 
+    <path name="compress-offload-playback3 bt-sco-swb">
+        <path name="compress-offload-playback3 bt-sco" />
+    </path>
+
     <path name="compress-offload-playback3 speaker-and-display-port">
         <path name="compress-offload-playback3 display-port" />
         <path name="compress-offload-playback3" />
@@ -855,6 +904,11 @@
         <path name="compress-offload-playback3" />
     </path>
 
+    <path name="compress-offload-playback3 speaker-and-bt-sco-swb">
+        <path name="compress-offload-playback3 bt-sco-swb" />
+        <path name="compress-offload-playback3" />
+    </path>
+
     <path name="compress-offload-playback4">
         <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia11" value="1" />
     </path>
@@ -872,6 +926,10 @@
         <path name="compress-offload-playback4 bt-sco" />
     </path>
 
+    <path name="compress-offload-playback4 bt-sco-swb">
+        <path name="compress-offload-playback4 bt-sco" />
+    </path>
+
     <path name="compress-offload-playback4 speaker-and-display-port">
         <path name="compress-offload-playback4 display-port" />
         <path name="compress-offload-playback4" />
@@ -922,6 +980,11 @@
         <path name="compress-offload-playback4" />
     </path>
 
+    <path name="compress-offload-playback4 speaker-and-bt-sco-swb">
+        <path name="compress-offload-playback4 bt-sco-swb" />
+        <path name="compress-offload-playback4" />
+    </path>
+
     <path name="compress-offload-playback5">
         <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia12" value="1" />
     </path>
@@ -939,6 +1002,10 @@
         <path name="compress-offload-playback5 bt-sco" />
     </path>
 
+    <path name="compress-offload-playback5 bt-sco-swb">
+        <path name="compress-offload-playback5 bt-sco" />
+    </path>
+
     <path name="compress-offload-playback5 speaker-and-display-port">
         <path name="compress-offload-playback5 display-port" />
         <path name="compress-offload-playback5" />
@@ -988,6 +1055,11 @@
         <path name="compress-offload-playback5" />
     </path>
 
+    <path name="compress-offload-playback5 speaker-and-bt-sco-swb">
+        <path name="compress-offload-playback5 bt-sco-swb" />
+        <path name="compress-offload-playback5" />
+    </path>
+
     <path name="compress-offload-playback6">
         <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia13" value="1" />
     </path>
@@ -1005,6 +1077,10 @@
         <path name="compress-offload-playback6 bt-sco" />
     </path>
 
+    <path name="compress-offload-playback6 bt-sco-swb">
+        <path name="compress-offload-playback6 bt-sco" />
+    </path>
+
     <path name="compress-offload-playback6 speaker-and-display-port">
         <path name="compress-offload-playback6 display-port" />
         <path name="compress-offload-playback6" />
@@ -1054,6 +1130,11 @@
         <path name="compress-offload-playback6" />
     </path>
 
+    <path name="compress-offload-playback6 speaker-and-bt-sco-swb">
+        <path name="compress-offload-playback6 bt-sco-swb" />
+        <path name="compress-offload-playback6" />
+    </path>
+
     <path name="compress-offload-playback7">
         <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia14" value="1" />
     </path>
@@ -1071,6 +1152,10 @@
         <path name="compress-offload-playback7 bt-sco" />
     </path>
 
+    <path name="compress-offload-playback7 bt-sco-swb">
+        <path name="compress-offload-playback7 bt-sco" />
+    </path>
+
     <path name="compress-offload-playback7 speaker-and-display-port">
         <path name="compress-offload-playback7 display-port" />
         <path name="compress-offload-playback7" />
@@ -1120,6 +1205,11 @@
         <path name="compress-offload-playback7" />
     </path>
 
+    <path name="compress-offload-playback7 speaker-and-bt-sco-swb">
+        <path name="compress-offload-playback7 bt-sco-swb" />
+        <path name="compress-offload-playback7" />
+    </path>
+
     <path name="compress-offload-playback8">
         <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia15" value="1" />
     </path>
@@ -1137,6 +1227,10 @@
         <path name="compress-offload-playback8 bt-sco" />
     </path>
 
+    <path name="compress-offload-playback8 bt-sco-swb">
+        <path name="compress-offload-playback8 bt-sco" />
+    </path>
+
     <path name="compress-offload-playback8 speaker-and-display-port">
         <path name="compress-offload-playback8 display-port" />
         <path name="compress-offload-playback8" />
@@ -1186,6 +1280,11 @@
         <path name="compress-offload-playback8" />
     </path>
 
+    <path name="compress-offload-playback8 speaker-and-bt-sco-swb">
+        <path name="compress-offload-playback8 bt-sco-swb" />
+        <path name="compress-offload-playback8" />
+    </path>
+
     <path name="compress-offload-playback9">
         <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia16" value="1" />
     </path>
@@ -1203,6 +1302,10 @@
         <path name="compress-offload-playback9 bt-sco" />
     </path>
 
+    <path name="compress-offload-playback9 bt-sco-swb">
+        <path name="compress-offload-playback9 bt-sco" />
+    </path>
+
     <path name="compress-offload-playback9 speaker-and-display-port">
         <path name="compress-offload-playback9 display-port" />
         <path name="compress-offload-playback9" />
@@ -1252,6 +1355,11 @@
         <path name="compress-offload-playback9" />
     </path>
 
+    <path name="compress-offload-playback9 speaker-and-bt-sco-swb">
+        <path name="compress-offload-playback9 bt-sco-swb" />
+        <path name="compress-offload-playback9" />
+    </path>
+
     <path name="audio-record">
         <ctl name="MultiMedia1 Mixer TX_CDC_DMA_TX_3" value="1" />
     </path>
@@ -1269,6 +1377,10 @@
         <path name="audio-record bt-sco" />
     </path>
 
+    <path name="audio-record bt-sco-swb">
+        <path name="audio-record bt-sco" />
+    </path>
+
     <path name="audio-record capture-fm">
         <ctl name="MultiMedia1 Mixer TERT_MI2S_TX" value="1" />
     </path>
@@ -1286,6 +1398,10 @@
         <path name="audio-record-compress bt-sco" />
     </path>
 
+    <path name="audio-record-compress bt-sco-swb">
+        <path name="audio-record-compress bt-sco" />
+    </path>
+
     <path name="audio-record-compress usb-headset-mic">
         <ctl name="MultiMedia8 Mixer USB_AUDIO_TX" value="1" />
     </path>
@@ -1303,6 +1419,10 @@
         <path name="low-latency-record bt-sco" />
     </path>
 
+    <path name="low-latency-record bt-sco-swb">
+        <path name="low-latency-record bt-sco" />
+    </path>
+
     <path name="low-latency-record usb-headset-mic">
         <ctl name="MultiMedia8 Mixer USB_AUDIO_TX" value="1" />
     </path>
@@ -1339,6 +1459,10 @@
         <path name="incall-rec-uplink" />
     </path>
 
+    <path name="incall-rec-uplink bt-sco-swb">
+        <path name="incall-rec-uplink" />
+    </path>
+
     <path name="incall-rec-uplink usb-headset-mic">
         <path name="incall-rec-uplink" />
     </path>
@@ -1359,6 +1483,10 @@
         <path name="incall-rec-uplink-compress" />
     </path>
 
+    <path name="incall-rec-uplink-compress bt-sco-swb">
+        <path name="incall-rec-uplink-compress" />
+    </path>
+
     <path name="incall-rec-uplink-compress usb-headset-mic">
         <path name="incall-rec-uplink-compress" />
     </path>
@@ -1379,6 +1507,10 @@
         <path name="incall-rec-downlink" />
     </path>
 
+    <path name="incall-rec-downlink bt-sco-swb">
+        <path name="incall-rec-downlink" />
+    </path>
+
     <path name="incall-rec-downlink usb-headset-mic">
         <path name="incall-rec-downlink" />
     </path>
@@ -1399,6 +1531,10 @@
         <path name="incall-rec-downlink-compress" />
     </path>
 
+    <path name="incall-rec-downlink-compress bt-sco-swb">
+        <path name="incall-rec-downlink-compress" />
+    </path>
+
     <path name="incall-rec-downlink-compress usb-headset-mic">
         <path name="incall-rec-downlink-compress" />
     </path>
@@ -1420,6 +1556,10 @@
         <path name="incall-rec-uplink-and-downlink" />
     </path>
 
+    <path name="incall-rec-uplink-and-downlink bt-sco-swb">
+        <path name="incall-rec-uplink-and-downlink" />
+    </path>
+
     <path name="incall-rec-uplink-and-downlink usb-headset-mic">
         <path name="incall-rec-uplink-and-downlink" />
     </path>
@@ -1441,6 +1581,10 @@
         <path name="incall-rec-uplink-and-downlink-compress" />
     </path>
 
+    <path name="incall-rec-uplink-and-downlink-compress bt-sco-swb">
+        <path name="incall-rec-uplink-and-downlink-compress" />
+    </path>
+
     <path name="incall-rec-uplink-and-downlink-compress usb-headset-mic">
         <path name="incall-rec-uplink-and-downlink-compress" />
     </path>
@@ -1489,6 +1633,10 @@
         <path name="compress-voip-call bt-sco" />
     </path>
 
+    <path name="compress-voip-call bt-sco-swb">
+        <path name="compress-voip-call bt-sco" />
+    </path>
+
     <path name="compress-voip-call afe-proxy">
         <ctl name="AFE_PCM_RX_Voice Mixer Voip" value="1" />
         <ctl name="Voip_Tx Mixer AFE_PCM_TX_Voip" value="1" />
@@ -1524,6 +1672,10 @@
         <path name="voicemmode1-call bt-sco" />
     </path>
 
+    <path name="voicemmode1-call bt-sco-swb">
+        <path name="voicemmode1-call bt-sco" />
+    </path>
+
     <path name="voicemmode1-call afe-proxy">
         <ctl name="AFE_PCM_RX_Voice Mixer VoiceMMode1" value="1" />
         <ctl name="VoiceMMode1_Tx Mixer AFE_PCM_TX_MMode1" value="1" />
@@ -1569,6 +1721,10 @@
         <path name="voicemmode2-call bt-sco" />
     </path>
 
+    <path name="voicemmode2-call bt-sco-swb">
+        <path name="voicemmode2-call bt-sco" />
+    </path>
+
     <path name="voicemmode2-call afe-proxy">
         <ctl name="AFE_PCM_RX_Voice Mixer VoiceMMode2" value="1" />
         <ctl name="VoiceMMode2_Tx Mixer AFE_PCM_TX_MMode2" value="1" />
@@ -1612,6 +1768,10 @@
         <path name="audio-playback-voip bt-sco" />
     </path>
 
+    <path name="audio-playback-voip bt-sco-swb">
+        <path name="audio-playback-voip bt-sco" />
+    </path>
+
     <path name="audio-playback-voip bt-a2dp">
         <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia10" value="1" />
     </path>
@@ -1655,6 +1815,10 @@
         <path name="audio-record-voip bt-sco" />
     </path>
 
+    <path name="audio-record-voip bt-sco-swb">
+        <path name="audio-record-voip bt-sco" />
+    </path>
+
     <path name="spkr-rx-calib">
         <ctl name="WSA_CDC_DMA_RX_0_DL_HL Switch"  value="1" />
     </path>
@@ -2017,6 +2181,12 @@
     <path name="bt-sco-mic-wb">
     </path>
 
+    <path name="bt-sco-headset-swb">
+    </path>
+
+    <path name="bt-sco-mic-swb">
+    </path>
+
     <path name="usb-headset-mic">
     </path>
 
@@ -2414,6 +2584,10 @@
         <path name="mmap-playback bt-sco" />
     </path>
 
+    <path name="mmap-playback bt-sco-swb">
+        <path name="mmap-playback bt-sco" />
+    </path>
+
     <path name="mmap-playback afe-proxy">
         <ctl name="AFE_PCM_RX Audio Mixer MultiMedia16" value="1" />
     </path>
@@ -2462,6 +2636,10 @@
         <path name="mmap-record bt-sco" />
     </path>
 
+    <path name="mmap-record bt-sco-swb">
+        <path name="mmap-record bt-sco" />
+    </path>
+
     <path name="mmap-record capture-fm">
       <ctl name="MultiMedia16 Mixer TERT_MI2S_TX" value="1" />
     </path>
@@ -2522,6 +2700,10 @@
         <path name="incall_music_uplink" />
     </path>
 
+    <path name="incall_music_uplink bt-sco-swb">
+        <path name="incall_music_uplink" />
+    </path>
+
     <path name="incall_music_uplink speaker-and-display-port">
         <path name="incall_music_uplink" />
     </path>
diff --git a/configs/kona/mixer_paths_qrd.xml b/configs/kona/mixer_paths_qrd.xml
index 971a48c..70f047d 100644
--- a/configs/kona/mixer_paths_qrd.xml
+++ b/configs/kona/mixer_paths_qrd.xml
@@ -490,6 +490,10 @@
         <path name="deep-buffer-playback bt-sco" />
     </path>
 
+    <path name="deep-buffer-playback bt-sco-swb">
+        <path name="deep-buffer-playback bt-sco" />
+    </path>
+
     <path name="deep-buffer-playback afe-proxy">
         <ctl name="AFE_PCM_RX Audio Mixer MultiMedia1" value="1" />
     </path>
@@ -526,6 +530,11 @@
         <path name="deep-buffer-playback" />
     </path>
 
+    <path name="deep-buffer-playback speaker-and-bt-sco-swb">
+        <path name="deep-buffer-playback bt-sco-swb" />
+        <path name="deep-buffer-playback" />
+    </path>
+
     <path name="low-latency-playback">
         <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia5" value="1" />
     </path>
@@ -551,6 +560,10 @@
         <path name="low-latency-playback bt-sco" />
     </path>
 
+    <path name="low-latency-playback bt-sco-swb">
+        <path name="low-latency-playback bt-sco" />
+    </path>
+
     <path name="low-latency-playback speaker-and-display-port">
         <path name="low-latency-playback display-port" />
         <path name="low-latency-playback" />
@@ -592,6 +605,11 @@
         <path name="low-latency-playback" />
     </path>
 
+    <path name="low-latency-playback speaker-and-bt-sco-swb">
+        <path name="low-latency-playback bt-sco-swb" />
+        <path name="low-latency-playback" />
+    </path>
+
     <path name="audio-ull-playback">
         <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia8" value="1" />
     </path>
@@ -626,6 +644,10 @@
         <path name="audio-ull-playback bt-sco" />
     </path>
 
+    <path name="audio-ull-playback bt-sco-swb">
+        <path name="audio-ull-playback bt-sco" />
+    </path>
+
     <path name="audio-ull-playback speaker-and-display-port">
         <path name="audio-ull-playback display-port" />
         <path name="audio-ull-playback" />
@@ -653,6 +675,11 @@
         <path name="audio-ull-playback" />
     </path>
 
+    <path name="audio-ull-playback speaker-and-bt-sco-swb">
+        <path name="audio-ull-playback bt-sco-swb" />
+        <path name="audio-ull-playback" />
+    </path>
+
     <path name="multi-channel-playback display-port">
         <ctl name="DISPLAY_PORT Mixer MultiMedia2" value="1" />
     </path>
@@ -690,6 +717,10 @@
         <path name="compress-offload-playback bt-sco" />
     </path>
 
+    <path name="compress-offload-playback bt-sco-swb">
+        <path name="compress-offload-playback bt-sco" />
+    </path>
+
     <path name="compress-offload-playback speaker-and-display-port">
         <path name="compress-offload-playback display-port" />
         <path name="compress-offload-playback" />
@@ -735,6 +766,11 @@
         <path name="compress-offload-playback" />
     </path>
 
+    <path name="compress-offload-playback speaker-and-bt-sco-swb">
+        <path name="compress-offload-playback bt-sco-swb" />
+        <path name="compress-offload-playback" />
+    </path>
+
     <path name="compress-offload-playback2">
         <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia7" value="1" />
     </path>
@@ -756,6 +792,10 @@
         <path name="compress-offload-playback2 bt-sco" />
     </path>
 
+    <path name="compress-offload-playback2 bt-sco-swb">
+        <path name="compress-offload-playback2 bt-sco" />
+    </path>
+
     <path name="compress-offload-playback2 speaker-and-display-port">
         <path name="compress-offload-playback2 display-port" />
         <path name="compress-offload-playback2" />
@@ -801,6 +841,11 @@
         <path name="compress-offload-playback2" />
     </path>
 
+    <path name="compress-offload-playback2 speaker-and-bt-sco-swb">
+        <path name="compress-offload-playback2 bt-sco-swb" />
+        <path name="compress-offload-playback2" />
+    </path>
+
     <path name="compress-offload-playback3">
         <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia10" value="1" />
     </path>
@@ -822,6 +867,10 @@
         <path name="compress-offload-playback3 bt-sco" />
     </path>
 
+    <path name="compress-offload-playback3 bt-sco-swb">
+        <path name="compress-offload-playback3 bt-sco" />
+    </path>
+
     <path name="compress-offload-playback3 speaker-and-display-port">
         <path name="compress-offload-playback3 display-port" />
         <path name="compress-offload-playback3" />
@@ -867,6 +916,11 @@
         <path name="compress-offload-playback3" />
     </path>
 
+    <path name="compress-offload-playback3 speaker-and-bt-sco-swb">
+        <path name="compress-offload-playback3 bt-sco-swb" />
+        <path name="compress-offload-playback3" />
+    </path>
+
     <path name="compress-offload-playback4">
         <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia11" value="1" />
     </path>
@@ -888,6 +942,10 @@
         <path name="compress-offload-playback4 bt-sco" />
     </path>
 
+    <path name="compress-offload-playback4 bt-sco-swb">
+        <path name="compress-offload-playback4 bt-sco" />
+    </path>
+
     <path name="compress-offload-playback4 speaker-and-display-port">
         <path name="compress-offload-playback4 display-port" />
         <path name="compress-offload-playback4" />
@@ -934,6 +992,11 @@
         <path name="compress-offload-playback4" />
     </path>
 
+    <path name="compress-offload-playback4 speaker-and-bt-sco-swb">
+        <path name="compress-offload-playback4 bt-sco-swb" />
+        <path name="compress-offload-playback4" />
+    </path>
+
     <path name="compress-offload-playback5">
         <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia12" value="1" />
     </path>
@@ -955,6 +1018,10 @@
         <path name="compress-offload-playback5 bt-sco" />
     </path>
 
+    <path name="compress-offload-playback5 bt-sco-swb">
+        <path name="compress-offload-playback5 bt-sco" />
+    </path>
+
     <path name="compress-offload-playback5 speaker-and-display-port">
         <path name="compress-offload-playback5 display-port" />
         <path name="compress-offload-playback5" />
@@ -1000,6 +1067,11 @@
         <path name="compress-offload-playback5" />
     </path>
 
+    <path name="compress-offload-playback5 speaker-and-bt-sco-swb">
+        <path name="compress-offload-playback5 bt-sco-swb" />
+        <path name="compress-offload-playback5" />
+    </path>
+
     <path name="compress-offload-playback6">
         <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia13" value="1" />
     </path>
@@ -1021,6 +1093,10 @@
         <path name="compress-offload-playback6 bt-sco" />
     </path>
 
+    <path name="compress-offload-playback6 bt-sco-swb">
+        <path name="compress-offload-playback6 bt-sco" />
+    </path>
+
     <path name="compress-offload-playback6 speaker-and-display-port">
         <path name="compress-offload-playback6 display-port" />
         <path name="compress-offload-playback6" />
@@ -1066,6 +1142,11 @@
         <path name="compress-offload-playback6" />
     </path>
 
+    <path name="compress-offload-playback6 speaker-and-bt-sco-swb">
+        <path name="compress-offload-playback6 bt-sco-swb" />
+        <path name="compress-offload-playback6" />
+    </path>
+
     <path name="compress-offload-playback7">
         <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia14" value="1" />
     </path>
@@ -1087,6 +1168,10 @@
         <path name="compress-offload-playback7 bt-sco" />
     </path>
 
+    <path name="compress-offload-playback7 bt-sco-swb">
+        <path name="compress-offload-playback7 bt-sco" />
+    </path>
+
     <path name="compress-offload-playback7 speaker-and-display-port">
         <path name="compress-offload-playback7 display-port" />
         <path name="compress-offload-playback7" />
@@ -1132,6 +1217,11 @@
         <path name="compress-offload-playback7" />
     </path>
 
+    <path name="compress-offload-playback7 speaker-and-bt-sco-swb">
+        <path name="compress-offload-playback7 bt-sco-swb" />
+        <path name="compress-offload-playback7" />
+    </path>
+
     <path name="compress-offload-playback8">
         <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia15" value="1" />
     </path>
@@ -1153,6 +1243,10 @@
         <path name="compress-offload-playback8 bt-sco" />
     </path>
 
+    <path name="compress-offload-playback8 bt-sco-swb">
+        <path name="compress-offload-playback8 bt-sco" />
+    </path>
+
     <path name="compress-offload-playback8 speaker-and-display-port">
         <path name="compress-offload-playback8 display-port" />
         <path name="compress-offload-playback8" />
@@ -1198,6 +1292,11 @@
         <path name="compress-offload-playback8" />
     </path>
 
+    <path name="compress-offload-playback8 speaker-and-bt-sco-swb">
+        <path name="compress-offload-playback8 bt-sco-swb" />
+        <path name="compress-offload-playback8" />
+    </path>
+
     <path name="compress-offload-playback9">
         <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia16" value="1" />
     </path>
@@ -1219,6 +1318,10 @@
         <path name="compress-offload-playback9 bt-sco" />
     </path>
 
+    <path name="compress-offload-playback9 bt-sco-swb">
+        <path name="compress-offload-playback9 bt-sco" />
+    </path>
+
     <path name="compress-offload-playback9 speaker-and-display-port">
         <path name="compress-offload-playback9 display-port" />
         <path name="compress-offload-playback9" />
@@ -1264,6 +1367,11 @@
         <path name="compress-offload-playback9" />
     </path>
 
+    <path name="compress-offload-playback9 speaker-and-bt-sco-swb">
+        <path name="compress-offload-playback9 bt-sco-swb" />
+        <path name="compress-offload-playback9" />
+    </path>
+
     <path name="audio-record">
         <ctl name="MultiMedia1 Mixer TX_CDC_DMA_TX_3" value="1" />
     </path>
@@ -1281,6 +1389,10 @@
         <path name="audio-record bt-sco" />
     </path>
 
+    <path name="audio-record bt-sco-swb">
+        <path name="audio-record bt-sco" />
+    </path>
+
     <path name="audio-record capture-fm">
         <ctl name="MultiMedia1 Mixer TERT_MI2S_TX" value="1" />
     </path>
@@ -1298,6 +1410,10 @@
         <path name="audio-record-compress bt-sco" />
     </path>
 
+    <path name="audio-record-compress bt-sco-swb">
+        <path name="audio-record-compress bt-sco" />
+    </path>
+
     <path name="audio-record-compress usb-headset-mic">
         <ctl name="MultiMedia8 Mixer USB_AUDIO_TX" value="1" />
     </path>
@@ -1315,6 +1431,10 @@
         <path name="low-latency-record bt-sco" />
     </path>
 
+    <path name="low-latency-record bt-sco-swb">
+        <path name="low-latency-record bt-sco" />
+    </path>
+
     <path name="low-latency-record usb-headset-mic">
         <ctl name="MultiMedia8 Mixer USB_AUDIO_TX" value="1" />
     </path>
@@ -1351,6 +1471,10 @@
         <path name="incall-rec-uplink" />
     </path>
 
+    <path name="incall-rec-uplink bt-sco-swb">
+        <path name="incall-rec-uplink" />
+    </path>
+
     <path name="incall-rec-uplink usb-headset-mic">
         <path name="incall-rec-uplink" />
     </path>
@@ -1371,6 +1495,10 @@
         <path name="incall-rec-uplink-compress" />
     </path>
 
+    <path name="incall-rec-uplink-compress bt-sco-swb">
+        <path name="incall-rec-uplink-compress" />
+    </path>
+
     <path name="incall-rec-uplink-compress usb-headset-mic">
         <path name="incall-rec-uplink-compress" />
     </path>
@@ -1391,6 +1519,10 @@
         <path name="incall-rec-downlink" />
     </path>
 
+    <path name="incall-rec-downlink bt-sco-swb">
+        <path name="incall-rec-downlink" />
+    </path>
+
     <path name="incall-rec-downlink usb-headset-mic">
         <path name="incall-rec-downlink" />
     </path>
@@ -1411,6 +1543,10 @@
         <path name="incall-rec-downlink-compress" />
     </path>
 
+    <path name="incall-rec-downlink-compress bt-sco-swb">
+        <path name="incall-rec-downlink-compress" />
+    </path>
+
     <path name="incall-rec-downlink-compress usb-headset-mic">
         <path name="incall-rec-downlink-compress" />
     </path>
@@ -1432,6 +1568,10 @@
         <path name="incall-rec-uplink-and-downlink" />
     </path>
 
+    <path name="incall-rec-uplink-and-downlink bt-sco-swb">
+        <path name="incall-rec-uplink-and-downlink" />
+    </path>
+
     <path name="incall-rec-uplink-and-downlink usb-headset-mic">
         <path name="incall-rec-uplink-and-downlink" />
     </path>
@@ -1453,6 +1593,10 @@
         <path name="incall-rec-uplink-and-downlink-compress" />
     </path>
 
+    <path name="incall-rec-uplink-and-downlink-compress bt-sco-swb">
+        <path name="incall-rec-uplink-and-downlink-compress" />
+    </path>
+
     <path name="incall-rec-uplink-and-downlink-compress usb-headset-mic">
         <path name="incall-rec-uplink-and-downlink-compress" />
     </path>
@@ -1505,6 +1649,10 @@
         <path name="compress-voip-call bt-sco" />
     </path>
 
+    <path name="compress-voip-call bt-sco-swb">
+        <path name="compress-voip-call bt-sco" />
+    </path>
+
     <path name="compress-voip-call afe-proxy">
         <ctl name="AFE_PCM_RX_Voice Mixer Voip" value="1" />
         <ctl name="Voip_Tx Mixer AFE_PCM_TX_Voip" value="1" />
@@ -1545,6 +1693,10 @@
         <path name="voicemmode1-call bt-sco" />
     </path>
 
+    <path name="voicemmode1-call bt-sco-swb">
+        <path name="voicemmode1-call bt-sco" />
+    </path>
+
     <path name="voicemmode1-call afe-proxy">
         <ctl name="AFE_PCM_RX_Voice Mixer VoiceMMode1" value="1" />
         <ctl name="VoiceMMode1_Tx Mixer AFE_PCM_TX_MMode1" value="1" />
@@ -1595,6 +1747,10 @@
         <path name="voicemmode2-call bt-sco" />
     </path>
 
+    <path name="voicemmode2-call bt-sco-swb">
+        <path name="voicemmode2-call bt-sco" />
+    </path>
+
     <path name="voicemmode2-call afe-proxy">
         <ctl name="AFE_PCM_RX_Voice Mixer VoiceMMode2" value="1" />
         <ctl name="VoiceMMode2_Tx Mixer AFE_PCM_TX_MMode2" value="1" />
@@ -1642,6 +1798,10 @@
         <path name="audio-playback-voip bt-sco" />
     </path>
 
+    <path name="audio-playback-voip bt-sco-swb">
+        <path name="audio-playback-voip bt-sco" />
+    </path>
+
     <path name="audio-playback-voip afe-proxy">
         <ctl name="AFE_PCM_RX Audio Mixer MultiMedia10" value="1" />
     </path>
@@ -1681,6 +1841,10 @@
         <path name="audio-record-voip bt-sco" />
     </path>
 
+    <path name="audio-record-voip bt-sco-swb">
+        <path name="audio-record-voip bt-sco" />
+    </path>
+
     <path name="bt-a2dp">
         <ctl name="SLIM7_RX ADM Channels" value="Two" />
     </path>
@@ -1824,6 +1988,10 @@
         <path name="mmap-playback bt-sco" />
     </path>
 
+    <path name="mmap-playback bt-sco-swb">
+        <path name="mmap-playback bt-sco" />
+    </path>
+
     <path name="mmap-playback afe-proxy">
         <ctl name="AFE_PCM_RX Audio Mixer MultiMedia16" value="1" />
     </path>
@@ -1872,6 +2040,10 @@
         <path name="mmap-record bt-sco" />
     </path>
 
+    <path name="mmap-record bt-sco-swb">
+        <path name="mmap-record bt-sco" />
+    </path>
+
     <path name="mmap-record capture-fm">
       <ctl name="MultiMedia16 Mixer TERT_MI2S_TX" value="1" />
     </path>
@@ -1928,6 +2100,10 @@
         <path name="incall_music_uplink" />
     </path>
 
+    <path name="incall_music_uplink bt-sco-swb">
+        <path name="incall_music_uplink" />
+    </path>
+
     <path name="incall_music_uplink speaker-and-display-port">
         <path name="incall_music_uplink" />
     </path>
@@ -2280,6 +2456,12 @@
     <path name="bt-sco-mic-wb">
     </path>
 
+    <path name="bt-sco-mic-swb">
+    </path>
+
+    <path name="bt-sco-headset-swb">
+    </path>
+
     <path name="usb-headset-mic">
     </path>
 
diff --git a/configs/kona/sound_trigger_mixer_paths.xml b/configs/kona/sound_trigger_mixer_paths.xml
index 2b407bb..8cb6622 100644
--- a/configs/kona/sound_trigger_mixer_paths.xml
+++ b/configs/kona/sound_trigger_mixer_paths.xml
@@ -213,7 +213,7 @@
     <path name="listen-ape-handset-mic">
         <ctl name="VA_AIF1_CAP Mixer DEC0" value="1" />
         <ctl name="VA DEC0 MUX" value="MSM_DMIC" />
-        <ctl name="VA DMIC MUX0" value="DMIC0" />
+        <ctl name="VA DMIC MUX0" value="DMIC4" />
     </path>
 
     <path name="listen-ape-handset-mic-preproc">
@@ -226,8 +226,8 @@
         <ctl name="VA_AIF1_CAP Mixer DEC1" value="1" />
         <ctl name="VA DEC0 MUX" value="MSM_DMIC" />
         <ctl name="VA DEC1 MUX" value="MSM_DMIC" />
-        <ctl name="VA DMIC MUX0" value="DMIC0" />
-        <ctl name="VA DMIC MUX1" value="DMIC1" />
+        <ctl name="VA DMIC MUX0" value="DMIC4" />
+        <ctl name="VA DMIC MUX1" value="DMIC0" />
     </path>
 
     <path name="listen-ape-handset-tmic">
@@ -238,9 +238,9 @@
         <ctl name="VA DEC0 MUX" value="MSM_DMIC" />
         <ctl name="VA DEC1 MUX" value="MSM_DMIC" />
         <ctl name="VA DEC2 MUX" value="MSM_DMIC" />
-        <ctl name="VA DMIC MUX0" value="DMIC0" />
-        <ctl name="VA DMIC MUX1" value="DMIC1" />
-        <ctl name="VA DMIC MUX2" value="DMIC4" />
+        <ctl name="VA DMIC MUX0" value="DMIC4" />
+        <ctl name="VA DMIC MUX1" value="DMIC0" />
+        <ctl name="VA DMIC MUX2" value="DMIC1" />
     </path>
 
     <path name="listen-ape-handset-qmic">
@@ -253,10 +253,10 @@
         <ctl name="VA DEC1 MUX" value="MSM_DMIC" />
         <ctl name="VA DEC2 MUX" value="MSM_DMIC" />
         <ctl name="VA DEC3 MUX" value="MSM_DMIC" />
-        <ctl name="VA DMIC MUX0" value="DMIC0" />
-        <ctl name="VA DMIC MUX1" value="DMIC1" />
-        <ctl name="VA DMIC MUX2" value="DMIC2" />
-        <ctl name="VA DMIC MUX3" value="DMIC4" />
+        <ctl name="VA DMIC MUX0" value="DMIC4" />
+        <ctl name="VA DMIC MUX1" value="DMIC0" />
+        <ctl name="VA DMIC MUX2" value="DMIC1" />
+        <ctl name="VA DMIC MUX3" value="DMIC2" />
     </path>
 
     <path name="listen-ape-headset-mic">
diff --git a/configs/msmnile/msmnile.mk b/configs/msmnile/msmnile.mk
index a58f89d..004383a 100644
--- a/configs/msmnile/msmnile.mk
+++ b/configs/msmnile/msmnile.mk
@@ -42,7 +42,7 @@
 AUDIO_FEATURE_ENABLED_AUDIOSPHERE := true
 AUDIO_FEATURE_ENABLED_USB_TUNNEL := true
 AUDIO_FEATURE_ENABLED_A2DP_OFFLOAD := true
-AUDIO_FEATURE_ENABLED_3D_AUDIO := false
+AUDIO_FEATURE_ENABLED_3D_AUDIO := true
 AUDIO_FEATURE_ENABLED_AHAL_EXT := true
 DOLBY_ENABLE := false
 endif
@@ -101,6 +101,7 @@
     vendor/qcom/opensource/audio-hal/primary-hal/configs/msmnile/mixer_paths_pahu.xml:$(TARGET_COPY_OUT_VENDOR)/etc/mixer_paths_pahu.xml \
     vendor/qcom/opensource/audio-hal/primary-hal/configs/msmnile/sound_trigger_mixer_paths.xml:$(TARGET_COPY_OUT_VENDOR)/etc/sound_trigger_mixer_paths.xml \
     vendor/qcom/opensource/audio-hal/primary-hal/configs/msmnile/audio_configs.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_configs.xml \
+    vendor/qcom/opensource/audio-hal/primary-hal/configs/msmnile/audio_configs_stock.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_configs_stock.xml \
     frameworks/native/data/etc/android.hardware.audio.pro.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.audio.pro.xml
 
 #XML Audio configuration files
diff --git a/hal/Android.mk b/hal/Android.mk
index 1377660..2abed28 100644
--- a/hal/Android.mk
+++ b/hal/Android.mk
@@ -340,6 +340,12 @@
     LOCAL_STATIC_LIBRARIES += libprofile_rt
 endif
 
+ifeq ($(strip $(AUDIO_FEATURE_ENABLED_AUDIO_ZOOM)), true)
+    LOCAL_CFLAGS += -DAUDIOZOOM_QDSP_ENABLED
+    LOCAL_SRC_FILES += audio_extn/audiozoom.c
+endif
+
+
 #ifeq ($(strip $(AUDIO_FEATURE_ENABLED_AUTO_HAL)),true)
 #    LOCAL_CFLAGS += -DAUDIO_EXTN_AUTO_HAL_ENABLED
 #    LOCAL_SRC_FILES += audio_extn/auto_hal.c
diff --git a/hal/acdb.c b/hal/acdb.c
index 8f3ea83..7394906 100644
--- a/hal/acdb.c
+++ b/hal/acdb.c
@@ -23,7 +23,7 @@
 
 #include <stdlib.h>
 #include <dlfcn.h>
-#include <cutils/log.h>
+#include <log/log.h>
 #include <cutils/list.h>
 #include <time.h>
 #include "acdb.h"
diff --git a/hal/ahal_config_helper.cpp b/hal/ahal_config_helper.cpp
index 9bdd785..753d8a8 100644
--- a/hal/ahal_config_helper.cpp
+++ b/hal/ahal_config_helper.cpp
@@ -62,8 +62,8 @@
                      dlsym(handle, "getAudioHalExtConfigs");
         if (!getAHalConfigs) {
             ALOGE("%s: Could not find symbol: %s", __FUNCTION__, dlerror());
-            handle = nullptr;
             dlclose(handle);
+            handle = nullptr;
         }
     }
 
diff --git a/hal/audio_extn/Android.mk b/hal/audio_extn/Android.mk
index 15093a8..59b18a2 100755
--- a/hal/audio_extn/Android.mk
+++ b/hal/audio_extn/Android.mk
@@ -408,7 +408,7 @@
 PRIMARY_HAL_PATH := vendor/qcom/opensource/audio-hal/primary-hal/hal
 AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM)
 
-ifneq ($(filter sdm845 sdm710 msmnile kona sdm660 msm8937 $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter sdm845 sdm710 msmnile kona lito sdm660 msm8937 $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
   # B-family platform uses msm8974 code base
   AUDIO_PLATFORM := msm8974
   MULTIPLE_HW_VARIANTS_ENABLED := true
@@ -467,7 +467,7 @@
 PRIMARY_HAL_PATH := vendor/qcom/opensource/audio-hal/primary-hal/hal
 AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM)
 
-ifneq ($(filter sdm845 sdm710 msmnile kona sdm660 msm8937 $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter sdm845 sdm710 msmnile kona lito sdm660 msm8937 $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
   # B-family platform uses msm8974 code base
   AUDIO_PLATFORM := msm8974
   MULTIPLE_HW_VARIANTS_ENABLED := true
@@ -526,7 +526,7 @@
 PRIMARY_HAL_PATH := vendor/qcom/opensource/audio-hal/primary-hal/hal
 AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM)
 
-ifneq ($(filter sdm845 sdm710 msmnile kona sdm660 msm8937 $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter sdm845 sdm710 msmnile kona lito sdm660 msm8937 $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
   # B-family platform uses msm8974 code base
   AUDIO_PLATFORM := msm8974
   MULTIPLE_HW_VARIANTS_ENABLED := true
@@ -560,7 +560,7 @@
     external/tinycompress/include \
     external/expat/lib \
     system/media/audio_utils/include \
-    vendor/qcom/proprietary/mm-audio/audio-parsers/inc \
+    $(TARGET_OUT_HEADERS)/mm-audio/audio-parsers \
     $(call include-path-for, audio-route) \
 
 LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
@@ -588,7 +588,7 @@
 PRIMARY_HAL_PATH := vendor/qcom/opensource/audio-hal/primary-hal/hal
 AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM)
 
-ifneq ($(filter sdm845 sdm710 msmnile kona sdm660 msm8937 $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter sdm845 sdm710 msmnile kona lito sdm660 msm8937 $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
   # B-family platform uses msm8974 code base
   AUDIO_PLATFORM := msm8974
   MULTIPLE_HW_VARIANTS_ENABLED := true
@@ -631,7 +631,6 @@
     external/tinycompress/include \
     external/expat/lib \
     system/media/audio_utils/include \
-    vendor/qcom/proprietary/mm-audio/audio-parsers/inc \
     $(call include-path-for, audio-route) \
 
 LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
@@ -659,7 +658,7 @@
 PRIMARY_HAL_PATH := vendor/qcom/opensource/audio-hal/primary-hal/hal
 AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM)
 
-ifneq ($(filter sdm845 sdm710 msmnile kona sdm660 msm8937 $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter sdm845 sdm710 msmnile kona lito sdm660 msm8937 $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
   # B-family platform uses msm8974 code base
   AUDIO_PLATFORM := msm8974
   MULTIPLE_HW_VARIANTS_ENABLED := true
diff --git a/hal/audio_extn/adsp_hdlr.c b/hal/audio_extn/adsp_hdlr.c
index 3b073c3..31a6b16 100644
--- a/hal/audio_extn/adsp_hdlr.c
+++ b/hal/audio_extn/adsp_hdlr.c
@@ -42,7 +42,7 @@
 #include <stdlib.h>
 #include <sys/resource.h>
 #include <sys/prctl.h>
-#include <cutils/log.h>
+#include <log/log.h>
 #include <cutils/sched_policy.h>
 #include <system/thread_defs.h>
 #include <sound/asound.h>
diff --git a/hal/audio_extn/audio_extn.c b/hal/audio_extn/audio_extn.c
index 8edf1f3..431c248 100644
--- a/hal/audio_extn/audio_extn.c
+++ b/hal/audio_extn/audio_extn.c
@@ -111,7 +111,7 @@
        <target name>-<sound card name>-<form factor>-snd-card
        parse target name, sound card name and form factor
     */
-    char *snd_card_name = strdup(in_snd_card_name);
+    char *snd_card_name = NULL;
     char *tmp = NULL;
     char *device = NULL;
     char *snd_card = NULL;
@@ -122,6 +122,7 @@
         ALOGE("%s: snd_card_name passed is NULL", __func__);
         goto on_error;
     }
+    snd_card_name = strdup(in_snd_card_name);
 
     device = strtok_r(snd_card_name, "-", &tmp);
     if (device == NULL) {
diff --git a/hal/audio_extn/audio_extn.h b/hal/audio_extn/audio_extn.h
index d1ec7c6..51e3ba2 100644
--- a/hal/audio_extn/audio_extn.h
+++ b/hal/audio_extn/audio_extn.h
@@ -763,6 +763,7 @@
 int audio_extn_utils_get_bit_width_from_string(const char *);
 int audio_extn_utils_get_sample_rate_from_string(const char *);
 int audio_extn_utils_get_channels_from_string(const char *);
+void audio_extn_utils_release_snd_device(snd_device_t snd_device);
 
 #ifdef DS2_DOLBY_DAP_ENABLED
 #define LIB_DS2_DAP_HAL "vendor/lib/libhwdaphal.so"
diff --git a/hal/audio_extn/audiozoom.c b/hal/audio_extn/audiozoom.c
new file mode 100644
index 0000000..73e4862
--- /dev/null
+++ b/hal/audio_extn/audiozoom.c
@@ -0,0 +1,257 @@
+/*
+ * Copyright (C) 2019 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.
+ */
+
+#define LOG_TAG "audio_hw_audiozoom"
+/*#define LOG_NDEBUG 0*/
+
+#include <errno.h>
+#include <log/log.h>
+#include <stdlib.h>
+#include <expat.h>
+#include <audio_hw.h>
+#include <system/audio.h>
+#include <platform_api.h>
+#include "audio_extn.h"
+
+#include "audiozoom.h"
+
+#include <resolv.h>
+
+#define AUDIOZOOM_PRESET_FILE "/vendor/etc/audiozoom.xml"
+
+typedef struct qdsp_audiozoom_cfg {
+    uint32_t             topo_id;
+    uint32_t             module_id;
+    uint32_t             instance_id;
+    uint32_t             zoom_param_id;
+    uint32_t             wide_param_id;
+    uint32_t             dir_param_id;
+    uint32_t             app_type;
+} qdsp_audiozoom_cfg_t;
+
+static qdsp_audiozoom_cfg_t qdsp_audiozoom;
+
+static void start_tag(void *userdata __unused, const XML_Char *tag_name,
+                      const XML_Char **attr)
+{
+    uint32_t index = 0;
+
+    if (!attr) {
+        ALOGE("%s: NULL platform/tag_name/attr", __func__);
+        return;
+    }
+
+    if (strcmp(tag_name, "topo") == 0) {
+        if (strcmp(attr[0], "id") == 0) {
+            if (attr[1])
+                qdsp_audiozoom.topo_id = atoi(attr[1]);
+        }
+    } else if (strcmp(tag_name, "module") == 0) {
+        if (strcmp(attr[0], "id") == 0) {
+            if (attr[1])
+                qdsp_audiozoom.module_id = atoi(attr[1]);
+        }
+    } else if (strcmp(tag_name, "param") == 0) {
+        while (attr[index] != NULL) {
+            if (strcmp(attr[index], "zoom_id") == 0) {
+                index++;
+                if (attr[index])
+                    qdsp_audiozoom.zoom_param_id = atoi(attr[index]);
+                else
+                    break;
+            } else if (strcmp(attr[index], "wide_id") == 0) {
+                index++;
+                if (attr[index])
+                    qdsp_audiozoom.wide_param_id = atoi(attr[index]);
+                else
+                    break;
+            } else if (strcmp(attr[index], "dir_id") == 0) {
+                index++;
+                if (attr[index])
+                    qdsp_audiozoom.dir_param_id = atoi(attr[index]);
+                else
+                    break;
+            }
+            index++;
+        }
+    } else if (strcmp(tag_name, "app_type") == 0) {
+        if (strcmp(attr[0], "id") == 0) {
+            if (attr[1])
+                qdsp_audiozoom.app_type = atoi(attr[1]);
+        }
+    } else if (strcmp(tag_name, "instance") == 0) {
+        if (strcmp(attr[0], "id") == 0) {
+            if (attr[1])
+                qdsp_audiozoom.instance_id = atoi(attr[1]);
+        }
+    } else {
+        ALOGE("%s: %s is not a supported tag", __func__, tag_name);
+    }
+
+    return;
+}
+
+static void end_tag(void *userdata __unused, const XML_Char *tag_name)
+{
+    if (strcmp(tag_name, "topo") == 0) {
+    } else if (strcmp(tag_name, "module") == 0) {
+    } else if (strcmp(tag_name, "param") == 0) {
+    } else if (strcmp(tag_name, "app_type") == 0) {
+    } else if (strcmp(tag_name, "instance") == 0) {
+    } else {
+        ALOGE("%s: %s is not a supported tag", __func__, tag_name);
+    }
+}
+
+static int audio_extn_audiozoom_parse_info(const char *filename)
+{
+    XML_Parser      parser;
+    FILE            *file;
+    int             ret = 0;
+    int             bytes_read;
+    void            *buf;
+    static const uint32_t kBufSize = 1024;
+
+    file = fopen(filename, "r");
+    if (!file) {
+        ALOGE("%s: Failed to open %s", __func__, filename);
+        ret = -ENODEV;
+        goto done;
+    }
+
+    parser = XML_ParserCreate(NULL);
+    if (!parser) {
+        ALOGE("%s: Failed to create XML parser!", __func__);
+        ret = -ENODEV;
+        goto err_close_file;
+    }
+
+    XML_SetElementHandler(parser, start_tag, end_tag);
+
+    while (1) {
+        buf = XML_GetBuffer(parser, kBufSize);
+        if (buf == NULL) {
+            ALOGE("%s: XML_GetBuffer failed", __func__);
+            ret = -ENOMEM;
+            goto err_free_parser;
+        }
+
+        bytes_read = fread(buf, 1, kBufSize, file);
+        if (bytes_read < 0) {
+            ALOGE("%s: fread failed, bytes read = %d", __func__, bytes_read);
+             ret = bytes_read;
+            goto err_free_parser;
+        }
+
+        if (XML_ParseBuffer(parser, bytes_read,
+                            bytes_read == 0) == XML_STATUS_ERROR) {
+            ALOGE("%s: XML_ParseBuffer failed, for %s",
+                __func__, filename);
+            ret = -EINVAL;
+            goto err_free_parser;
+        }
+
+        if (bytes_read == 0)
+            break;
+    }
+
+err_free_parser:
+    XML_ParserFree(parser);
+err_close_file:
+    fclose(file);
+done:
+    return ret;
+}
+
+int audio_extn_audiozoom_set_microphone_direction(
+    struct stream_in *in, audio_microphone_direction_t dir)
+{
+    (void)in;
+    (void)dir;
+    return 0;
+}
+
+static int audio_extn_audiozoom_set_microphone_field_dimension_zoom(
+    struct stream_in *in, float zoom)
+{
+    struct audio_device *adev = in->dev;
+    struct str_parms *parms = str_parms_create();
+    /* The encoding process in b64_ntop represents 24-bit groups of input bits
+       as output strings of 4 encoded characters. */
+    char data[((sizeof(zoom) + 2) / 3) * 4 + 1] = {0};
+    int32_t ret;
+
+    if (zoom > 1.0 || zoom < 0)
+        return -EINVAL;
+
+    if (qdsp_audiozoom.topo_id == 0 || qdsp_audiozoom.module_id == 0 ||
+        qdsp_audiozoom.zoom_param_id == 0)
+        return -ENOSYS;
+
+    str_parms_add_int(parms, "cal_devid", in->device);
+    str_parms_add_int(parms, "cal_apptype", in->app_type_cfg.app_type);
+    str_parms_add_int(parms, "cal_topoid", qdsp_audiozoom.topo_id);
+    str_parms_add_int(parms, "cal_moduleid", qdsp_audiozoom.module_id);
+    str_parms_add_int(parms, "cal_instanceid", qdsp_audiozoom.instance_id);
+    str_parms_add_int(parms, "cal_paramid", qdsp_audiozoom.zoom_param_id);
+
+    ret = b64_ntop((uint8_t*)&zoom, sizeof(zoom), data, sizeof(data));
+    if (ret > 0) {
+        str_parms_add_str(parms, "cal_data", data);
+
+        platform_set_parameters(adev->platform, parms);
+    } else {
+        ALOGE("%s: failed to convert data to string, ret %d", __func__, ret);
+    }
+
+    str_parms_destroy(parms);
+
+    return 0;
+}
+
+static int audio_extn_audiozoom_set_microphone_field_dimension_wide_angle(
+    struct stream_in *in, float zoom)
+{
+    (void)in;
+    (void)zoom;
+    return 0;
+}
+
+int audio_extn_audiozoom_set_microphone_field_dimension(
+    struct stream_in *in, float zoom)
+{
+    if (zoom > 1.0 || zoom < -1.0)
+        return -EINVAL;
+
+    if (zoom >= 0 && zoom <= 1.0)
+        return audio_extn_audiozoom_set_microphone_field_dimension_zoom(in, zoom);
+
+    if (zoom >= -1.0 && zoom <= 0)
+        return audio_extn_audiozoom_set_microphone_field_dimension_wide_angle(in, zoom);
+
+    return 0;
+}
+
+int audio_extn_audiozoom_init()
+{
+    audio_extn_audiozoom_parse_info(AUDIOZOOM_PRESET_FILE);
+
+    ALOGV("%s: topo_id=%d, module_id=%d, instance_id=%d, zoom__id=%d, dir_id=%d, app_type=%d",
+        __func__, qdsp_audiozoom.topo_id, qdsp_audiozoom.module_id, qdsp_audiozoom.instance_id,
+        qdsp_audiozoom.zoom_param_id, qdsp_audiozoom.dir_param_id,qdsp_audiozoom.app_type);
+
+    return 0;
+}
diff --git a/hal/audio_extn/audiozoom.h b/hal/audio_extn/audiozoom.h
new file mode 100644
index 0000000..2c0ad71
--- /dev/null
+++ b/hal/audio_extn/audiozoom.h
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2019 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.
+ */
+
+#ifndef AUDIOZOOM_H_
+#define AUDIOZOOM_H_
+
+#ifndef AUDIOZOOM_QDSP_ENABLED
+#define audio_extn_audiozoom_init()                                          (0)
+#define audio_extn_audiozoom_set_microphone_direction(stream, dir)           (-ENOSYS)
+#define audio_extn_audiozoom_set_microphone_field_dimension(stream, zoom)    (-ENOSYS)
+#else
+int audio_extn_audiozoom_init();
+int audio_extn_audiozoom_set_microphone_direction(struct stream_in *stream,
+                                           audio_microphone_direction_t dir);
+int audio_extn_audiozoom_set_microphone_field_dimension(struct stream_in *stream, float zoom);
+#endif
+
+#endif /* AUDIOZOOM_H_ */
diff --git a/hal/audio_extn/auto_hal.c b/hal/audio_extn/auto_hal.c
index f57e885..c70dc17 100644
--- a/hal/audio_extn/auto_hal.c
+++ b/hal/audio_extn/auto_hal.c
@@ -31,7 +31,7 @@
 
 #include <errno.h>
 #include <pthread.h>
-#include <cutils/log.h>
+#include <log/log.h>
 #include <math.h>
 #include <audio_hw.h>
 #include "audio_extn.h"
diff --git a/hal/audio_extn/bt_hal.c b/hal/audio_extn/bt_hal.c
index 6441bef..2020cba 100644
--- a/hal/audio_extn/bt_hal.c
+++ b/hal/audio_extn/bt_hal.c
@@ -31,7 +31,7 @@
 /*#define LOG_NDEBUG 0*/
 
 #include <inttypes.h>
-#include <cutils/log.h>
+#include <log/log.h>
 #include <audio_hw.h>
 #include <audio_extn.h>
 #include <platform_api.h>
diff --git a/hal/audio_extn/compress_capture.c b/hal/audio_extn/compress_capture.c
index f0aeec2..c1b77b9 100644
--- a/hal/audio_extn/compress_capture.c
+++ b/hal/audio_extn/compress_capture.c
@@ -26,7 +26,7 @@
 #include <stdlib.h>
 #include <dlfcn.h>
 #include <cutils/str_parms.h>
-#include <cutils/log.h>
+#include <log/log.h>
 
 #include "audio_hw.h"
 //#include "platform.h"
diff --git a/hal/audio_extn/compress_in.c b/hal/audio_extn/compress_in.c
index 56905d6..6cf6b81 100644
--- a/hal/audio_extn/compress_in.c
+++ b/hal/audio_extn/compress_in.c
@@ -31,10 +31,9 @@
 /*#define LOG_NDEBUG 0*/
 #define LOG_NDDEBUG 0
 
-#include <cutils/log.h>
 #include <cutils/properties.h>
 #include <cutils/str_parms.h>
-#include <cutils/log.h>
+#include <log/log.h>
 #include <pthread.h>
 
 #include "audio_hw.h"
diff --git a/hal/audio_extn/dev_arbi.c b/hal/audio_extn/dev_arbi.c
index 9c5382a..d83d6bd 100644
--- a/hal/audio_extn/dev_arbi.c
+++ b/hal/audio_extn/dev_arbi.c
@@ -32,7 +32,7 @@
 #define LOG_NDDEBUG 0
 
 #include <errno.h>
-#include <cutils/log.h>
+#include <log/log.h>
 #include <fcntl.h>
 #include "audio_hw.h"
 #include "platform.h"
diff --git a/hal/audio_extn/dolby.c b/hal/audio_extn/dolby.c
index ffd256f..906c234 100644
--- a/hal/audio_extn/dolby.c
+++ b/hal/audio_extn/dolby.c
@@ -22,10 +22,10 @@
 //#define LOG_NDDEBUG 0
 #include <errno.h>
 #include <cutils/properties.h>
+#include <cutils/str_parms.h>
 #include <stdlib.h>
 #include <dlfcn.h>
-#include <cutils/str_parms.h>
-#include <cutils/log.h>
+#include <log/log.h>
 
 #include "audio_hw.h"
 #include "platform.h"
diff --git a/hal/audio_extn/dts_eagle.c b/hal/audio_extn/dts_eagle.c
index 7ae760b..3771a9d 100644
--- a/hal/audio_extn/dts_eagle.c
+++ b/hal/audio_extn/dts_eagle.c
@@ -21,7 +21,7 @@
 #include <math.h>
 #include <stdlib.h>
 #include <fcntl.h>
-#include <cutils/log.h>
+#include <log/log.h>
 #include <cutils/properties.h>
 #include <cutils/str_parms.h>
 #include <sys/ioctl.h>
diff --git a/hal/audio_extn/edid.c b/hal/audio_extn/edid.c
index 175842f..ffb0d64 100644
--- a/hal/audio_extn/edid.c
+++ b/hal/audio_extn/edid.c
@@ -23,10 +23,10 @@
 
 #include <errno.h>
 #include <cutils/properties.h>
+#include <cutils/str_parms.h>
 #include <stdlib.h>
 #include <dlfcn.h>
-#include <cutils/str_parms.h>
-#include <cutils/log.h>
+#include <log/log.h>
 
 #include "audio_hw.h"
 #include "platform.h"
diff --git a/hal/audio_extn/ext_hw_plugin.c b/hal/audio_extn/ext_hw_plugin.c
index f6c4799..45ba1d7 100644
--- a/hal/audio_extn/ext_hw_plugin.c
+++ b/hal/audio_extn/ext_hw_plugin.c
@@ -33,7 +33,7 @@
 #include <errno.h>
 #include <pthread.h>
 #include <dlfcn.h>
-#include <cutils/log.h>
+#include <log/log.h>
 #include <audio_hw.h>
 #include "audio_extn.h"
 #include "platform_api.h"
diff --git a/hal/audio_extn/ffv.c b/hal/audio_extn/ffv.c
index a5b15cc..b97eedc 100644
--- a/hal/audio_extn/ffv.c
+++ b/hal/audio_extn/ffv.c
@@ -39,10 +39,10 @@
 
 #include <errno.h>
 #include <cutils/properties.h>
+#include <cutils/str_parms.h>
 #include <stdlib.h>
 #include <dlfcn.h>
-#include <cutils/str_parms.h>
-#include <cutils/log.h>
+#include <log/log.h>
 #include <pthread.h>
 #include <sys/resource.h>
 #include <unistd.h>
diff --git a/hal/audio_extn/fm.c b/hal/audio_extn/fm.c
index f4b9d8f..b4e9ff2 100644
--- a/hal/audio_extn/fm.c
+++ b/hal/audio_extn/fm.c
@@ -23,7 +23,7 @@
 
 #include <errno.h>
 #include <math.h>
-#include <cutils/log.h>
+#include <log/log.h>
 #include <unistd.h>
 
 #include "audio_hw.h"
diff --git a/hal/audio_extn/gef.c b/hal/audio_extn/gef.c
index cfed6b3..ca1a16b 100644
--- a/hal/audio_extn/gef.c
+++ b/hal/audio_extn/gef.c
@@ -33,7 +33,7 @@
 
 #include <errno.h>
 #include <math.h>
-#include <cutils/log.h>
+#include <log/log.h>
 #include <fcntl.h>
 #include <dirent.h>
 #include "audio_hw.h"
diff --git a/hal/audio_extn/hw_loopback.c b/hal/audio_extn/hw_loopback.c
index 3d6525a..5366066 100644
--- a/hal/audio_extn/hw_loopback.c
+++ b/hal/audio_extn/hw_loopback.c
@@ -51,16 +51,16 @@
 #include <dlfcn.h>
 #include <sys/resource.h>
 #include <sys/prctl.h>
+#include <cutils/atomic.h>
 #include <cutils/properties.h>
 #include <cutils/str_parms.h>
-#include <cutils/log.h>
-#include <cutils/atomic.h>
+#include <cutils/sched_policy.h>
+#include <log/log.h>
 #include "audio_utils/primitives.h"
 #include "audio_hw.h"
 #include "platform_api.h"
 #include <platform.h>
 #include <system/thread_defs.h>
-#include <cutils/sched_policy.h>
 #include "audio_extn.h"
 #include <sound/compress_params.h>
 #include <sound/compress_offload.h>
diff --git a/hal/audio_extn/ip_hdlr_intf.c b/hal/audio_extn/ip_hdlr_intf.c
index 649c99f..3d5e1fe 100755
--- a/hal/audio_extn/ip_hdlr_intf.c
+++ b/hal/audio_extn/ip_hdlr_intf.c
@@ -46,7 +46,7 @@
 #include <errno.h>
 #include <stdlib.h>
 #include <dlfcn.h>
-#include <cutils/log.h>
+#include <log/log.h>
 #include <sound/asound.h>
 #include <cutils/properties.h>
 
diff --git a/hal/audio_extn/keep_alive.c b/hal/audio_extn/keep_alive.c
index 20214aa..79f2bb0 100644
--- a/hal/audio_extn/keep_alive.c
+++ b/hal/audio_extn/keep_alive.c
@@ -32,7 +32,7 @@
 
 #include <cutils/properties.h>
 #include <stdlib.h>
-#include <cutils/log.h>
+#include <log/log.h>
 #include "audio_hw.h"
 #include "audio_extn.h"
 #include "platform_api.h"
diff --git a/hal/audio_extn/listen.c b/hal/audio_extn/listen.c
index b98a429..5c3bbce 100644
--- a/hal/audio_extn/listen.c
+++ b/hal/audio_extn/listen.c
@@ -32,7 +32,7 @@
 #include <stdbool.h>
 #include <stdlib.h>
 #include <dlfcn.h>
-#include <cutils/log.h>
+#include <log/log.h>
 #ifdef AUDIO_LISTEN_ENABLED
 #include <listen_types.h>
 #endif
diff --git a/hal/audio_extn/passthru.c b/hal/audio_extn/passthru.c
index 14f8b72..a59717c 100644
--- a/hal/audio_extn/passthru.c
+++ b/hal/audio_extn/passthru.c
@@ -31,15 +31,15 @@
 /*#define LOG_NDEBUG 0*/
 #include <stdlib.h>
 #include <cutils/atomic.h>
+#include <cutils/properties.h>
 #include <cutils/str_parms.h>
-#include <cutils/log.h>
+#include <log/log.h>
 #include <unistd.h>
 #include <pthread.h>
 #include "audio_hw.h"
 #include "audio_extn.h"
 #include "platform_api.h"
 #include <platform.h>
-#include <cutils/properties.h>
 
 #include "sound/compress_params.h"
 
diff --git a/hal/audio_extn/pm.c b/hal/audio_extn/pm.c
index c6ef242..5b3aa4d 100644
--- a/hal/audio_extn/pm.c
+++ b/hal/audio_extn/pm.c
@@ -31,7 +31,7 @@
 /*#define LOG_NDEBUG 0*/
 
 #include "pm.h"
-#include <cutils/log.h>
+#include <log/log.h>
 #include <cutils/str_parms.h>
 
 #ifdef DYNAMIC_LOG_ENABLED
diff --git a/hal/audio_extn/pm.h b/hal/audio_extn/pm.h
index daa376e..f78c3aa 100644
--- a/hal/audio_extn/pm.h
+++ b/hal/audio_extn/pm.h
@@ -39,7 +39,7 @@
 #include "audio_hw.h"
 #include <platform.h>
 #include <cutils/properties.h>
-#include <cutils/log.h>
+#include <log/log.h>
 
 
 /* Client name to be registered with PM */
diff --git a/hal/audio_extn/sndmonitor.c b/hal/audio_extn/sndmonitor.c
index 2bcb175..11578fc 100644
--- a/hal/audio_extn/sndmonitor.c
+++ b/hal/audio_extn/sndmonitor.c
@@ -466,6 +466,7 @@
     char val[32] = {0};
     bool is_cpe = ((s->card >= CPE_MAGIC_NUM) && (s->card < SLPI_MAGIC_NUM));
     bool is_slpi = (s->card == SLPI_MAGIC_NUM);
+    char *key = NULL;
     /*
      * cpe actual card num is (card - CPE_MAGIC_NUM), so subtract accordingly.
      * SLPI actual fd num is (card - SLPI_MAGIC_NUM), so subtract accordingly.
@@ -473,9 +474,10 @@
     snprintf(val, sizeof(val), "%d,%s",
         s->card - (is_cpe ? CPE_MAGIC_NUM : (is_slpi ? SLPI_MAGIC_NUM : 0)),
                 status == CARD_STATUS_ONLINE ? "ONLINE" : "OFFLINE");
-    if (str_parms_add_str(params,
-            is_cpe ? "CPE_STATUS" : (is_slpi ? "SLPI_STATUS" : "SND_CARD_STATUS"),
-                            val) < 0)
+    key = (is_cpe ?  "CPE_STATUS" :
+          (is_slpi ? "SLPI_STATUS" :
+                     "SND_CARD_STATUS"));
+    if (str_parms_add_str(params, key, val) < 0)
         return -1;
 
     int ret = notify(params);
diff --git a/hal/audio_extn/spkr_protection.c b/hal/audio_extn/spkr_protection.c
index 9c30bbe..8c6ff06 100644
--- a/hal/audio_extn/spkr_protection.c
+++ b/hal/audio_extn/spkr_protection.c
@@ -1824,6 +1824,30 @@
     }
 }
 
+static bool fbsp_parms_allowed(struct str_parms *parms)
+{
+    if (str_parms_has_key(parms, AUDIO_PARAMETER_KEY_FBSP_TRIGGER_SPKR_CAL))
+        return true;
+    if (str_parms_has_key(parms, AUDIO_PARAMETER_KEY_FBSP_APPLY_SPKR_CAL))
+        return true;
+    if (str_parms_has_key(parms, AUDIO_PARAMETER_KEY_FBSP_GET_SPKR_CAL))
+        return true;
+    if (str_parms_has_key(parms, AUDIO_PARAMETER_KEY_FBSP_CFG_WAIT_TIME))
+        return true;
+    if (str_parms_has_key(parms, AUDIO_PARAMETER_KEY_FBSP_CFG_FTM_TIME))
+        return true;
+    if (str_parms_has_key(parms, AUDIO_PARAMETER_KEY_FBSP_GET_FTM_PARAM))
+        return true;
+    if (str_parms_has_key(parms, AUDIO_PARAMETER_KEY_FBSP_TRIGGER_V_VALI))
+        return true;
+    if (str_parms_has_key(parms, AUDIO_PARAMETER_KEY_FBSP_V_VALI_WAIT_TIME))
+        return true;
+    if (str_parms_has_key(parms, AUDIO_PARAMETER_KEY_FBSP_V_VALI_VALI_TIME))
+        return true;
+
+    return false;
+}
+
 int fbsp_set_parameters(struct str_parms *parms)
 {
     int ret= 0 , err;
@@ -1841,9 +1865,14 @@
     }
     ALOGV_IF(kv_pairs != NULL, "%s: enter: %s", __func__, kv_pairs);
 
+    if (!fbsp_parms_allowed(parms)) {
+        ret = -EINVAL;
+        goto done;
+    }
+
     len = strlen(kv_pairs);
     value = (char*)calloc(len, sizeof(char));
-    if(value == NULL) {
+    if (value == NULL) {
         ret = -ENOMEM;
         ALOGE("[%s] failed to allocate memory",__func__);
         goto done;
diff --git a/hal/audio_extn/utils.c b/hal/audio_extn/utils.c
index 6a74a4c..b06276e 100644
--- a/hal/audio_extn/utils.c
+++ b/hal/audio_extn/utils.c
@@ -2274,7 +2274,7 @@
                  kConfigLocationList[i],
                  file_name);
         if (F_OK == access(full_config_path, 0)) {
-            strcpy(file_name, full_config_path);
+            strlcpy(file_name, full_config_path, MIXER_PATH_MAX_LENGTH);
             return true;
         }
     }
@@ -2711,6 +2711,15 @@
     return -EINVAL;
 }
 
+void audio_extn_utils_release_snd_device(snd_device_t snd_device)
+{
+    audio_extn_dev_arbi_release(snd_device);
+    audio_extn_sound_trigger_update_device_status(snd_device,
+            ST_EVENT_SND_DEVICE_FREE);
+    audio_extn_listen_update_device_status(snd_device,
+            LISTEN_EVENT_SND_DEVICE_FREE);
+}
+
 int audio_extn_utils_get_license_params
 (
 const struct audio_device *adev,
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 9ec04f9..c53fa31 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -75,6 +75,7 @@
 #include "voice_extn.h"
 #include "ip_hdlr_intf.h"
 #include "audio_feature_manager.h"
+#include "audio_extn/audiozoom.h"
 
 #include "sound/compress_params.h"
 #include "sound/asound.h"
@@ -506,6 +507,11 @@
 }
 #endif
 
+static int in_set_microphone_direction(const struct audio_stream_in *stream,
+                                           audio_microphone_direction_t dir);
+static int in_set_microphone_field_dimension(const struct audio_stream_in *stream, float zoom);
+
+
 static bool may_use_noirq_mode(struct audio_device *adev, audio_usecase_t uc_id,
                                int flags __unused)
 {
@@ -1126,19 +1132,23 @@
         return -EINVAL;
     }
 
-    adev->snd_dev_ref_cnt[snd_device]++;
-
-    if(platform_get_snd_device_name_extn(adev->platform, snd_device, device_name) < 0 ) {
+    if (platform_get_snd_device_name_extn(adev->platform, snd_device, device_name) < 0) {
         ALOGE("%s: Invalid sound device returned", __func__);
         return -EINVAL;
     }
-    if (adev->snd_dev_ref_cnt[snd_device] > 1) {
+
+    adev->snd_dev_ref_cnt[snd_device]++;
+
+    if ((adev->snd_dev_ref_cnt[snd_device] > 1) &&
+            (platform_split_snd_device(adev->platform,
+                                       snd_device,
+                                       &num_devices,
+                                       new_snd_devices) != 0)) {
         ALOGV("%s: snd_device(%d: %s) is already active",
               __func__, snd_device, device_name);
         return 0;
     }
 
-
     if (audio_extn_spkr_prot_is_enabled())
          audio_extn_spkr_prot_calib_cancel(adev);
 
@@ -1146,15 +1156,14 @@
 
     if (platform_can_enable_spkr_prot_on_device(snd_device) &&
          audio_extn_spkr_prot_is_enabled()) {
-       if (platform_get_spkr_prot_acdb_id(snd_device) < 0) {
-           adev->snd_dev_ref_cnt[snd_device]--;
-           return -EINVAL;
-       }
-       audio_extn_dev_arbi_acquire(snd_device);
-       if (audio_extn_spkr_prot_start_processing(snd_device)) {
+        if (platform_get_spkr_prot_acdb_id(snd_device) < 0) {
+            goto err;
+        }
+        audio_extn_dev_arbi_acquire(snd_device);
+        if (audio_extn_spkr_prot_start_processing(snd_device)) {
             ALOGE("%s: spkr_start_processing failed", __func__);
             audio_extn_dev_arbi_release(snd_device);
-            return -EINVAL;
+            goto err;
         }
     } else if (platform_split_snd_device(adev->platform,
                                          snd_device,
@@ -1168,17 +1177,17 @@
         ALOGD("%s: snd_device(%d: %s)", __func__, snd_device, device_name);
 
 
-       if ((SND_DEVICE_OUT_BT_A2DP == snd_device) &&
-           (audio_extn_a2dp_start_playback() < 0)) {
-           ALOGE(" fail to configure A2dp Source control path ");
-           return -EINVAL;
-       }
+        if ((SND_DEVICE_OUT_BT_A2DP == snd_device) &&
+            (audio_extn_a2dp_start_playback() < 0)) {
+            ALOGE(" fail to configure A2dp Source control path ");
+            goto err;
+        }
 
-       if ((SND_DEVICE_IN_BT_A2DP == snd_device) &&
-           (audio_extn_a2dp_start_capture() < 0)) {
-           ALOGE(" fail to configure A2dp Sink control path ");
-           return -EINVAL;
-       }
+        if ((SND_DEVICE_IN_BT_A2DP == snd_device) &&
+            (audio_extn_a2dp_start_capture() < 0)) {
+            ALOGE(" fail to configure A2dp Sink control path ");
+            goto err;
+        }
 
         /* due to the possibility of calibration overwrite between listen
             and audio, notify listen hal before audio calibration is sent */
@@ -1187,12 +1196,11 @@
         audio_extn_listen_update_device_status(snd_device,
                                         LISTEN_EVENT_SND_DEVICE_BUSY);
         if (platform_get_snd_device_acdb_id(snd_device) < 0) {
-            adev->snd_dev_ref_cnt[snd_device]--;
             audio_extn_sound_trigger_update_device_status(snd_device,
                                             ST_EVENT_SND_DEVICE_FREE);
             audio_extn_listen_update_device_status(snd_device,
                                         LISTEN_EVENT_SND_DEVICE_FREE);
-            return -EINVAL;
+            goto err;
         }
         audio_extn_dev_arbi_acquire(snd_device);
         audio_route_apply_and_update_path(adev->audio_route, device_name);
@@ -1214,6 +1222,9 @@
         }
     }
     return 0;
+err:
+    adev->snd_dev_ref_cnt[snd_device]--;
+    return -EINVAL;;
 }
 
 int disable_snd_device(struct audio_device *adev,
@@ -1228,6 +1239,12 @@
         ALOGE("%s: Invalid sound device %d", __func__, snd_device);
         return -EINVAL;
     }
+
+    if (platform_get_snd_device_name_extn(adev->platform, snd_device, device_name) < 0) {
+        ALOGE("%s: Invalid sound device returned", __func__);
+        return -EINVAL;
+    }
+
     if (adev->snd_dev_ref_cnt[snd_device] <= 0) {
         ALOGE("%s: device ref cnt is already 0", __func__);
         return -EINVAL;
@@ -1235,10 +1252,6 @@
 
     adev->snd_dev_ref_cnt[snd_device]--;
 
-    if(platform_get_snd_device_name_extn(adev->platform, snd_device, device_name) < 0) {
-        ALOGE("%s: Invalid sound device returned", __func__);
-        return -EINVAL;
-    }
 
     if (adev->snd_dev_ref_cnt[snd_device] == 0) {
         ALOGD("%s: snd_device(%d: %s)", __func__, snd_device, device_name);
@@ -1264,38 +1277,42 @@
             audio_route_reset_and_update_path(adev->audio_route, device_name);
         }
 
-        if (SND_DEVICE_OUT_BT_A2DP == snd_device)
+        if (snd_device == SND_DEVICE_OUT_BT_A2DP)
             audio_extn_a2dp_stop_playback();
-
-        if (SND_DEVICE_IN_BT_A2DP == snd_device)
+        else if (snd_device == SND_DEVICE_IN_BT_A2DP)
             audio_extn_a2dp_stop_capture();
-
-        if (snd_device == SND_DEVICE_OUT_HDMI || snd_device == SND_DEVICE_OUT_DISPLAY_PORT)
+        else if ((snd_device == SND_DEVICE_OUT_HDMI) ||
+                (snd_device == SND_DEVICE_OUT_DISPLAY_PORT))
             adev->is_channel_status_set = false;
-        else if (SND_DEVICE_OUT_HEADPHONES == snd_device &&
+        else if ((snd_device == SND_DEVICE_OUT_HEADPHONES) &&
                  adev->native_playback_enabled) {
             ALOGD("%s: %d: napb: disabling native mode in hardware",
                   __func__, __LINE__);
             audio_route_reset_and_update_path(adev->audio_route,
                                               "true-native-mode");
             adev->native_playback_enabled = false;
-        } else if (SND_DEVICE_OUT_HEADPHONES == snd_device &&
+        } else if ((snd_device == SND_DEVICE_OUT_HEADPHONES) &&
                  adev->asrc_mode_enabled) {
             ALOGD("%s: %d: disabling asrc mode in hardware", __func__, __LINE__);
             disable_asrc_mode(adev);
             audio_route_apply_and_update_path(adev->audio_route, "hph-lowpower-mode");
-        }
-        if (((snd_device == SND_DEVICE_IN_HANDSET_6MIC) ||
+        } else if (((snd_device == SND_DEVICE_IN_HANDSET_6MIC) ||
             (snd_device == SND_DEVICE_IN_HANDSET_QMIC)) &&
             (audio_extn_ffv_get_stream() == adev->active_input)) {
             ALOGD("%s: deinit ec ref loopback", __func__);
             audio_extn_ffv_deinit_ec_ref_loopback(adev, snd_device);
         }
-        audio_extn_dev_arbi_release(snd_device);
-        audio_extn_sound_trigger_update_device_status(snd_device,
-                                        ST_EVENT_SND_DEVICE_FREE);
-        audio_extn_listen_update_device_status(snd_device,
-                                        LISTEN_EVENT_SND_DEVICE_FREE);
+
+        audio_extn_utils_release_snd_device(snd_device);
+    } else {
+        if (platform_split_snd_device(adev->platform,
+                    snd_device,
+                    &num_devices,
+                    new_snd_devices) == 0) {
+            for (i = 0; i < num_devices; i++) {
+                adev->snd_dev_ref_cnt[new_snd_devices[i]]--;
+            }
+        }
     }
 
     return 0;
@@ -1438,7 +1455,8 @@
     bool switch_device[AUDIO_USECASE_MAX];
     snd_device_t uc_derive_snd_device;
     snd_device_t derive_snd_device[AUDIO_USECASE_MAX];
-    int i, num_uc_to_switch = 0;
+    snd_device_t split_snd_devices[SND_DEVICE_OUT_END];
+    int i, num_uc_to_switch = 0, num_devices = 0;
     int status = 0;
     bool force_restart_session = false;
     /*
@@ -1520,14 +1538,42 @@
         list_for_each(node, &adev->usecase_list) {
             usecase = node_to_item(node, struct audio_usecase, list);
             if (switch_device[usecase->id]) {
-                disable_snd_device(adev, usecase->out_snd_device);
+                /* Check if output sound device to be switched can be split and if any
+                   of the split devices match with derived sound device */
+                if (platform_split_snd_device(adev->platform, usecase->out_snd_device,
+                                               &num_devices, split_snd_devices) == 0) {
+                    adev->snd_dev_ref_cnt[usecase->out_snd_device]--;
+                    for (i = 0; i < num_devices; i++) {
+                        /* Disable devices that do not match with derived sound device */
+                        if (split_snd_devices[i] != derive_snd_device[usecase->id])
+                            disable_snd_device(adev, split_snd_devices[i]);
+                     }
+                } else {
+                    disable_snd_device(adev, usecase->out_snd_device);
+                }
             }
         }
 
         list_for_each(node, &adev->usecase_list) {
             usecase = node_to_item(node, struct audio_usecase, list);
             if (switch_device[usecase->id]) {
-                enable_snd_device(adev, derive_snd_device[usecase->id]);
+                if (platform_split_snd_device(adev->platform, usecase->out_snd_device,
+                                               &num_devices, split_snd_devices) == 0) {
+                        /* Enable derived sound device only if it does not match with
+                           one of the split sound devices. This is because the matching
+                           sound device was not disabled */
+                        bool should_enable = true;
+                        for (i = 0; i < num_devices; i++) {
+                            if (derive_snd_device[usecase->id] == split_snd_devices[i]) {
+                                 should_enable = false;
+                                 break;
+                            }
+                        }
+                        if (should_enable)
+                            enable_snd_device(adev, derive_snd_device[usecase->id]);
+                } else {
+                    enable_snd_device(adev, derive_snd_device[usecase->id]);
+                }
             }
         }
 
@@ -2721,6 +2767,8 @@
     }
 
     check_and_enable_effect(adev);
+    audio_extn_audiozoom_set_microphone_direction(in, in->zoom);
+    audio_extn_audiozoom_set_microphone_field_dimension(in, in->direction);
 
 done_open:
     audio_extn_perf_lock_release(&adev->perf_lock_handle);
@@ -4333,6 +4381,37 @@
     return ret;
 }
 
+static int in_set_microphone_direction(const struct audio_stream_in *stream,
+                                           audio_microphone_direction_t dir) {
+    struct stream_in *in = (struct stream_in *)stream;
+
+    ALOGVV("%s: standby %d source %d dir %d", __func__, in->standby, in->source, dir);
+
+    in->direction = dir;
+
+    if (in->standby)
+        return 0;
+
+    return audio_extn_audiozoom_set_microphone_direction(in, dir);
+}
+
+static int in_set_microphone_field_dimension(const struct audio_stream_in *stream, float zoom) {
+    struct stream_in *in = (struct stream_in *)stream;
+
+    ALOGVV("%s: standby %d source %d zoom %f", __func__, in->standby, in->source, zoom);
+
+    if (zoom > 1.0 || zoom < -1.0)
+        return -EINVAL;
+
+    in->zoom = zoom;
+
+    if (in->standby)
+        return 0;
+
+    return audio_extn_audiozoom_set_microphone_field_dimension(in, zoom);
+}
+
+
 static bool stream_get_parameter_channels(struct str_parms *query,
                                           struct str_parms *reply,
                                           audio_channel_mask_t *supported_channel_masks) {
@@ -6562,6 +6641,53 @@
 
     return ret;
 }
+
+static void in_update_sink_metadata(struct audio_stream_in *stream,
+                                    const struct sink_metadata *sink_metadata) {
+
+    if (stream == NULL
+            || sink_metadata == NULL
+            || sink_metadata->tracks == NULL) {
+        return;
+    }
+
+    int error = 0;
+    struct stream_in *in = (struct stream_in *)stream;
+    struct audio_device *adev = in->dev;
+    audio_devices_t device = AUDIO_DEVICE_NONE;
+
+    if (sink_metadata->track_count != 0)
+        device = sink_metadata->tracks->dest_device;
+
+    lock_input_stream(in);
+    pthread_mutex_lock(&adev->lock);
+    ALOGV("%s: in->usecase: %d, device: %x", __func__, in->usecase, device);
+
+    if (in->usecase == USECASE_AUDIO_RECORD_AFE_PROXY
+            && device != AUDIO_DEVICE_NONE
+            && adev->voice_tx_output != NULL) {
+        /* Use the rx device from afe-proxy record to route voice call because
+           there is no routing if tx device is on primary hal and rx device
+           is on other hal during voice call. */
+        adev->voice_tx_output->devices = device;
+
+        if (!voice_is_call_state_active(adev)) {
+            if (adev->mode == AUDIO_MODE_IN_CALL) {
+                adev->current_call_output = adev->voice_tx_output;
+                error = voice_start_call(adev);
+                if (error != 0)
+                    ALOGE("%s: start voice call failed %d", __func__, error);
+            }
+        } else {
+            adev->current_call_output = adev->voice_tx_output;
+            voice_update_devices_for_all_voice_usecases(adev);
+        }
+    }
+
+    pthread_mutex_unlock(&adev->lock);
+    pthread_mutex_unlock(&in->lock);
+}
+
 int adev_open_output_stream(struct audio_hw_device *dev,
                             audio_io_handle_t handle,
                             audio_devices_t devices,
@@ -7980,6 +8106,9 @@
     in->stream.get_input_frames_lost = in_get_input_frames_lost;
     in->stream.get_capture_position = in_get_capture_position;
     in->stream.get_active_microphones = in_get_active_microphones;
+    in->stream.set_microphone_direction = in_set_microphone_direction;
+    in->stream.set_microphone_field_dimension = in_set_microphone_field_dimension;
+    in->stream.update_sink_metadata = in_update_sink_metadata;
 
     in->device = devices;
     in->source = source;
@@ -7989,6 +8118,8 @@
     in->flags = flags;
     in->bit_width = 16;
     in->af_period_multiplier = 1;
+    in->direction = MIC_DIRECTION_UNSPECIFIED;
+    in->zoom = 0;
 
     ALOGV("%s: source = %d, config->channel_mask = %d", __func__, source, config->channel_mask);
     if (source == AUDIO_SOURCE_VOICE_UPLINK ||
@@ -8338,13 +8469,13 @@
     else
         audio_extn_sound_trigger_update_ec_ref_status(false);
 
-    error_log_destroy(in->error_log);
-    in->error_log = NULL;
-
     if (in == NULL) {
         ALOGE("%s: audio_stream_in ptr is NULL", __func__);
         return;
     }
+    error_log_destroy(in->error_log);
+    in->error_log = NULL;
+
 
     if (in->usecase == USECASE_COMPRESS_VOIP_CALL) {
         pthread_mutex_lock(&adev->lock);
@@ -9049,6 +9180,7 @@
     adev->is_charging = audio_extn_battery_properties_is_charging();
     audio_extn_sound_trigger_init(adev); /* dependent on snd_mon_init() */
     audio_extn_sound_trigger_update_battery_status(adev->is_charging);
+    audio_extn_audiozoom_init();
     pthread_mutex_unlock(&adev->lock);
     /* Allocate memory for Device config params */
     adev->device_cfg_params = (struct audio_device_config_param*)
diff --git a/hal/audio_hw.h b/hal/audio_hw.h
index 69c13e9..1e7e1c5 100644
--- a/hal/audio_hw.h
+++ b/hal/audio_hw.h
@@ -409,6 +409,8 @@
     struct audio_device *dev;
     card_status_t card_status;
     int capture_started;
+    float zoom;
+    audio_microphone_direction_t direction;
 
     /* Array of supported channel mask configurations. +1 so that the last entry is always 0 */
     audio_channel_mask_t supported_channel_masks[MAX_SUPPORTED_CHANNEL_MASKS + 1];
diff --git a/hal/audio_hw_extn_api.c b/hal/audio_hw_extn_api.c
index 44591c9..af73375 100644
--- a/hal/audio_hw_extn_api.c
+++ b/hal/audio_hw_extn_api.c
@@ -33,7 +33,7 @@
 
 #include <inttypes.h>
 #include <errno.h>
-#include <cutils/log.h>
+#include <log/log.h>
 
 #include <hardware/audio.h>
 #include "sound/compress_params.h"
diff --git a/hal/msm8916/hw_info.c b/hal/msm8916/hw_info.c
index 40e39a2..eb9a483 100644
--- a/hal/msm8916/hw_info.c
+++ b/hal/msm8916/hw_info.c
@@ -33,7 +33,7 @@
 
 #include <stdlib.h>
 #include <dlfcn.h>
-#include <cutils/log.h>
+#include <log/log.h>
 #include <cutils/str_parms.h>
 #include "audio_hw.h"
 #include "platform.h"
diff --git a/hal/msm8916/platform.c b/hal/msm8916/platform.c
index 4b0921b..45fadf5 100644
--- a/hal/msm8916/platform.c
+++ b/hal/msm8916/platform.c
@@ -25,7 +25,7 @@
 #include <dlfcn.h>
 #include <fcntl.h>
 #include <sys/ioctl.h>
-#include <cutils/log.h>
+#include <log/log.h>
 #include <cutils/properties.h>
 #include <cutils/str_parms.h>
 #include <audio_hw.h>
diff --git a/hal/msm8960/platform.c b/hal/msm8960/platform.c
index f7a7ebf..f21602d 100644
--- a/hal/msm8960/platform.c
+++ b/hal/msm8960/platform.c
@@ -23,7 +23,7 @@
 
 #include <stdlib.h>
 #include <dlfcn.h>
-#include <cutils/log.h>
+#include <log/log.h>
 #include <cutils/properties.h>
 #include <audio_hw.h>
 #include <platform_api.h>
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index 079d64c..a428f9a 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -3945,6 +3945,10 @@
     }
 
     device = (struct operator_specific_device *)calloc(1, sizeof(struct operator_specific_device));
+    if (device == NULL) {
+        ALOGE("%s: memory allocation failed", __func__);
+        return;
+    }
 
     device->operator = strdup(operator);
     device->mixer_path = strdup(mixer_path);
@@ -6760,12 +6764,18 @@
                             value, len);
     if (err >= 0) {
         struct operator_info *info;
-        char *str = value;
+        char *str = value, *context = NULL;
         char *name;
 
         str_parms_del(parms, PLATFORM_CONFIG_KEY_OPERATOR_INFO);
         info = (struct operator_info *)calloc(1, sizeof(struct operator_info));
-        name = strtok(str, ";");
+        name = strtok_r(str, ";", &context);
+        if ((info == NULL) || (name == NULL)) {
+            ret = -EINVAL;
+            ALOGE("%s invalid info or name", __func__);
+            goto done;
+        }
+
         info->name = strdup(name);
         info->mccmnc = strdup(str + strlen(name) + 1);
 
diff --git a/hal/voice.c b/hal/voice.c
index 4e5dfeb..847ce92 100644
--- a/hal/voice.c
+++ b/hal/voice.c
@@ -409,8 +409,8 @@
         session_id = voice_get_active_session_id(adev);
         ret = platform_set_incall_recording_session_id(adev->platform,
                                                        session_id, rec_mode);
-        ret = platform_set_incall_recording_session_channels(adev->platform,
-                                                        in->config.channels);
+        platform_set_incall_recording_session_channels(adev->platform,
+                                                       in->config.channels);
         ALOGV("%s: Update usecase to %d",__func__, in->usecase);
     } else {
         /*
diff --git a/hal/voice_extn/compress_voip.c b/hal/voice_extn/compress_voip.c
index 003a3ed..e4bc210 100644
--- a/hal/voice_extn/compress_voip.c
+++ b/hal/voice_extn/compress_voip.c
@@ -27,7 +27,7 @@
 #include <sys/time.h>
 #include <stdlib.h>
 #include <math.h>
-#include <cutils/log.h>
+#include <log/log.h>
 #include <cutils/str_parms.h>
 #include <cutils/properties.h>
 
@@ -816,4 +816,4 @@
 
     ALOGV("%s: exit: status(%d)", __func__, ret);
     return ret;
-}
\ No newline at end of file
+}
diff --git a/hal/voice_extn/voice_extn.c b/hal/voice_extn/voice_extn.c
index 1f45a64..f08c73c 100644
--- a/hal/voice_extn/voice_extn.c
+++ b/hal/voice_extn/voice_extn.c
@@ -664,8 +664,6 @@
     }
     if(voice_extn_compress_voip_enabled)
         voice_extn_compress_voip_get_parameters(query, reply);
-    else
-        ALOGE("%s: COMPRESS_VOIP feature is not enabled", __func__);
 
     str = str_parms_to_str(reply);
     ALOGV_IF(str != NULL, "%s: exit: returns \"%s\"", __func__, str);
@@ -678,8 +676,6 @@
 {
     if(voice_extn_compress_voip_enabled)
         voice_extn_compress_voip_out_get_parameters(out, query, reply);
-    else
-        ALOGE("%s: COMPRESS_VOIP feature is not enabled", __func__);
 }
 
 void voice_extn_in_get_parameters(struct stream_in *in,
@@ -688,9 +684,6 @@
 {
     if(voice_extn_compress_voip_enabled)
         voice_extn_compress_voip_in_get_parameters(in, query, reply);
-    else
-        ALOGE("%s: COMPRESS_VOIP feature is not enabled", __func__);
-    
 }
 
 
@@ -717,8 +710,6 @@
     int ret = -ENOSYS;
     if(voice_extn_compress_voip_enabled)
         ret = compress_voip_set_parameters(adev, parms);
-    else
-        ALOGE("%s: COMPRESS_VOIP feature is not enabled", __func__);
     return ret;
 }
 
@@ -727,8 +718,6 @@
 {
     if(voice_extn_compress_voip_enabled)
         compress_voip_get_parameters(query, reply);
-    else
-        ALOGE("%s: COMPRESS_VOIP feature is not enabled", __func__);
 }
 
 
@@ -738,8 +727,6 @@
 {
     if(voice_extn_compress_voip_enabled)
         compress_voip_out_get_parameters(out, query, reply);
-    else
-        ALOGE("%s: COMPRESS_VOIP feature is not enabled", __func__);
 }
 
 void voice_extn_compress_voip_in_get_parameters(struct stream_in *in,
@@ -748,8 +735,6 @@
 {
     if(voice_extn_compress_voip_enabled)
         compress_voip_in_get_parameters(in, query, reply);
-    else
-        ALOGE("%s: COMPRESS_VOIP feature is not enabled", __func__);
 }
 
 int voice_extn_compress_voip_out_get_buffer_size(struct stream_out *out)
@@ -757,8 +742,6 @@
     int ret = -1;
     if(voice_extn_compress_voip_enabled)
         ret = compress_voip_out_get_buffer_size(out);
-    else
-        ALOGE("%s: COMPRESS_VOIP feature is not enabled", __func__);
     return ret;
 }
 
@@ -767,8 +750,6 @@
     int ret = -1;
     if(voice_extn_compress_voip_enabled)
         ret = compress_voip_in_get_buffer_size(in);
-    else
-        ALOGE("%s: COMPRESS_VOIP feature is not enabled", __func__);
     return ret;
 }
 
@@ -778,8 +759,6 @@
     int ret = -1;
     if(voice_extn_compress_voip_enabled)
         ret = compress_voip_start_output_stream(out);
-    else
-        ALOGE("%s: COMPRESS_VOIP feature is not enabled", __func__);
     return ret;
 }
 
@@ -789,8 +768,6 @@
     int ret = -1;
     if(voice_extn_compress_voip_enabled)
         ret = compress_voip_start_input_stream(in);
-    else
-        ALOGE("%s: COMPRESS_VOIP feature is not enabled", __func__);
     return ret;
 }
 
@@ -799,8 +776,6 @@
     int ret = -1;
     if(voice_extn_compress_voip_enabled)
         ret = compress_voip_close_output_stream(stream);
-    else
-        ALOGE("%s: COMPRESS_VOIP feature is not enabled", __func__);
     return ret;
 }
 
@@ -810,8 +785,6 @@
     int ret = -1;
     if(voice_extn_compress_voip_enabled)
         ret = compress_voip_close_input_stream(stream);
-    else
-        ALOGE("%s: COMPRESS_VOIP feature is not enabled", __func__);
     return ret;
 }
 
@@ -820,8 +793,6 @@
     int ret = -1;
     if(voice_extn_compress_voip_enabled)
         ret = compress_voip_open_output_stream(out);
-    else
-        ALOGE("%s: COMPRESS_VOIP feature is not enabled", __func__);
     return ret;
 }
 
@@ -831,8 +802,6 @@
     int ret = -1;
     if(voice_extn_compress_voip_enabled)
         ret = compress_voip_open_input_stream(in);
-    else
-        ALOGE("%s: COMPRESS_VOIP feature is not enabled", __func__);
     return ret;
 }
 
@@ -841,8 +810,6 @@
     int ret = -1;
     if(voice_extn_compress_voip_enabled)
         ret = compress_voip_set_volume(adev, volume);
-    else
-        ALOGE("%s: COMPRESS_VOIP feature is not enabled", __func__);
     return ret;
 }
 
@@ -851,8 +818,6 @@
     int ret = -1;
     if(voice_extn_compress_voip_enabled)
         ret = compress_voip_set_mic_mute(adev, state);
-    else
-        ALOGE("%s: COMPRESS_VOIP feature is not enabled", __func__);
     return ret;
 }
 
@@ -861,8 +826,6 @@
     bool ret = false;
     if(voice_extn_compress_voip_enabled)
         ret = compress_voip_pcm_prop_check();
-    else
-        ALOGE("%s: COMPRESS_VOIP feature is not enabled", __func__);
     return ret;
 }
 
@@ -871,8 +834,6 @@
     bool ret = false;
     if(voice_extn_compress_voip_enabled)
         ret = compress_voip_is_active(adev);
-    else
-        ALOGE("%s: COMPRESS_VOIP feature is not enabled", __func__);
     return ret;
 }
 
@@ -881,8 +842,6 @@
     bool ret = false;
     if(voice_extn_compress_voip_enabled)
         ret = compress_voip_is_format_supported(format);
-    else
-        ALOGE("%s: COMPRESS_VOIP feature is not enabled", __func__);
     return ret;
 }
 
@@ -891,8 +850,6 @@
     bool ret = false;
     if(voice_extn_compress_voip_enabled)
         ret = compress_voip_is_config_supported(config);
-    else
-        ALOGE("%s: COMPRESS_VOIP feature is not enabled", __func__);
     return ret;
 }
 
@@ -901,8 +858,6 @@
     bool ret = false;
     if(voice_extn_compress_voip_enabled)
         ret = compress_voip_is_started(adev);
-    else
-        ALOGE("%s: COMPRESS_VOIP feature is not enabled", __func__);
     return ret;
 }
 
diff --git a/post_proc/asphere.c b/post_proc/asphere.c
index 65e8034..7b35a77 100644
--- a/post_proc/asphere.c
+++ b/post_proc/asphere.c
@@ -197,6 +197,18 @@
     return asphere.init_status;
 }
 
+static bool asphere_parms_allowed(struct str_parms *parms)
+{
+    if (str_parms_has_key(parms, AUDIO_PARAMETER_KEY_ASPHERE_ENABLE))
+        return true;
+    if (str_parms_has_key(parms, AUDIO_PARAMETER_KEY_ASPHERE_STRENGTH))
+        return true;
+    if (str_parms_has_key(parms, AUDIO_PARAMETER_KEY_ASPHERE_STATUS))
+        return true;
+
+    return false;
+}
+
 void asphere_set_parameters(struct str_parms *parms)
 {
     int ret = 0;
@@ -205,6 +217,10 @@
     char value[32] = {0};
     bool set_enable = false, set_strength = false;
 
+    if (!asphere_parms_allowed(parms)) {
+        return;
+    }
+
     if (asphere_init() != 1) {
         ALOGW("%s: init check failed!!!", __func__);
         return;
diff --git a/post_proc/hw_accelerator.c b/post_proc/hw_accelerator.c
index fae5807..583f001 100644
--- a/post_proc/hw_accelerator.c
+++ b/post_proc/hw_accelerator.c
@@ -32,7 +32,7 @@
 /*#define LOG_NDEBUG 0*/
 
 #include <cutils/list.h>
-#include <cutils/log.h>
+#include <log/log.h>
 #include <fcntl.h>
 #include <tinyalsa/asoundlib.h>
 #include <sound/audio_effects.h>
diff --git a/post_proc/ma_listener.c b/post_proc/ma_listener.c
index 04a9047..9271dc7 100644
--- a/post_proc/ma_listener.c
+++ b/post_proc/ma_listener.c
@@ -23,7 +23,7 @@
 #include <pthread.h>
 #include <unistd.h>
 #include <cutils/list.h>
-#include <cutils/log.h>
+#include <log/log.h>
 #include <hardware/audio_effect.h>
 #include <audio-base.h>
 
diff --git a/qahw_api/test/qap_wrapper_extn.c b/qahw_api/test/qap_wrapper_extn.c
index d311570..de954bf 100644
--- a/qahw_api/test/qap_wrapper_extn.c
+++ b/qahw_api/test/qap_wrapper_extn.c
@@ -27,8 +27,8 @@
 #include <time.h>
 #include <cutils/properties.h>
 #include <cutils/list.h>
-#include <cutils/log.h>
 #include <cutils/str_parms.h>
+#include <log/log.h>
 #include <system/audio.h>
 #include <qap_api.h>
 #include <qti_audio.h>