Merge "a2dp: fix incorrect acdb when starting abr path for a2dp capture"
diff --git a/configs/lahaina/audio_platform_info.xml b/configs/lahaina/audio_platform_info.xml
index 8d05776..d987537 100644
--- a/configs/lahaina/audio_platform_info.xml
+++ b/configs/lahaina/audio_platform_info.xml
@@ -48,6 +48,7 @@
         <device name="SND_DEVICE_IN_VOCE_RECOG_USB_HEADSET_HEX_MIC" acdb_id="162"/>
         <device name="SND_DEVICE_IN_VOICE_HEARING_AID" acdb_id="11"/>
         <device name="SND_DEVICE_OUT_VOICE_HANDSET_TMUS" acdb_id="7"/>
+        <device name="SND_DEVICE_IN_BT_A2DP" acdb_id="201"/>
     </acdb_ids>
 
     <module_ids>
diff --git a/configs/lahaina/audio_platform_info_hdk.xml b/configs/lahaina/audio_platform_info_hdk.xml
index 04578d4..a79c1cf 100644
--- a/configs/lahaina/audio_platform_info_hdk.xml
+++ b/configs/lahaina/audio_platform_info_hdk.xml
@@ -148,6 +148,7 @@
         <device name="SND_DEVICE_IN_VOICE_HEARING_AID" acdb_id="11"/>
         <device name="SND_DEVICE_OUT_VOICE_HANDSET_TMUS" acdb_id="7"/>
         <device name="SND_DEVICE_IN_UNPROCESSED_USB_HEADSET_MIC" acdb_id="133"/>
+        <device name="SND_DEVICE_IN_BT_A2DP" acdb_id="201"/>
     </acdb_ids>
     <backend_names>
         <device name="SND_DEVICE_OUT_HEADPHONES" backend="headphones" interface="RX_CDC_DMA_RX_0"/>
diff --git a/configs/lahaina/audio_platform_info_intcodec.xml b/configs/lahaina/audio_platform_info_intcodec.xml
index a362b39..6568e46 100644
--- a/configs/lahaina/audio_platform_info_intcodec.xml
+++ b/configs/lahaina/audio_platform_info_intcodec.xml
@@ -148,6 +148,7 @@
         <device name="SND_DEVICE_IN_VOICE_HEARING_AID" acdb_id="11"/>
         <device name="SND_DEVICE_OUT_VOICE_HANDSET_TMUS" acdb_id="7"/>
         <device name="SND_DEVICE_IN_UNPROCESSED_USB_HEADSET_MIC" acdb_id="133"/>
+        <device name="SND_DEVICE_IN_BT_A2DP" acdb_id="201"/>
     </acdb_ids>
     <backend_names>
         <device name="SND_DEVICE_OUT_HEADPHONES" backend="headphones" interface="RX_CDC_DMA_RX_0"/>
diff --git a/configs/lahaina/audio_platform_info_qrd.xml b/configs/lahaina/audio_platform_info_qrd.xml
index 1404423..f0b0279 100644
--- a/configs/lahaina/audio_platform_info_qrd.xml
+++ b/configs/lahaina/audio_platform_info_qrd.xml
@@ -148,6 +148,7 @@
         <device name="SND_DEVICE_IN_VOICE_HEARING_AID" acdb_id="11"/>
         <device name="SND_DEVICE_OUT_VOICE_HANDSET_TMUS" acdb_id="7"/>
         <device name="SND_DEVICE_IN_UNPROCESSED_USB_HEADSET_MIC" acdb_id="133"/>
+        <device name="SND_DEVICE_IN_BT_A2DP" acdb_id="201"/>
     </acdb_ids>
     <backend_names>
         <device name="SND_DEVICE_OUT_HEADPHONES" backend="headphones" interface="RX_CDC_DMA_RX_0"/>
diff --git a/configs/lahaina/audio_platform_info_shimaidp.xml b/configs/lahaina/audio_platform_info_shimaidp.xml
index b1edc20..2b60989 100644
--- a/configs/lahaina/audio_platform_info_shimaidp.xml
+++ b/configs/lahaina/audio_platform_info_shimaidp.xml
@@ -50,6 +50,7 @@
         <device name="SND_DEVICE_IN_VOCE_RECOG_USB_HEADSET_HEX_MIC" acdb_id="162"/>
         <device name="SND_DEVICE_IN_VOICE_HEARING_AID" acdb_id="11"/>
         <device name="SND_DEVICE_OUT_VOICE_HANDSET_TMUS" acdb_id="7"/>
+        <device name="SND_DEVICE_IN_BT_A2DP" acdb_id="201"/>
     </acdb_ids>
 
     <module_ids>
diff --git a/configs/lahaina/audio_platform_info_shimaqrd.xml b/configs/lahaina/audio_platform_info_shimaqrd.xml
index de717e9..e87f8d0 100644
--- a/configs/lahaina/audio_platform_info_shimaqrd.xml
+++ b/configs/lahaina/audio_platform_info_shimaqrd.xml
@@ -52,6 +52,7 @@
         <device name="SND_DEVICE_IN_VOCE_RECOG_USB_HEADSET_HEX_MIC" acdb_id="162"/>
         <device name="SND_DEVICE_IN_VOICE_HEARING_AID" acdb_id="11"/>
         <device name="SND_DEVICE_OUT_VOICE_HANDSET_TMUS" acdb_id="7"/>
+        <device name="SND_DEVICE_IN_BT_A2DP" acdb_id="201"/>
     </acdb_ids>
 
     <module_ids>
diff --git a/configs/lahaina/audio_platform_info_yupikidp.xml b/configs/lahaina/audio_platform_info_yupikidp.xml
index e04f05a..9f51e6f 100644
--- a/configs/lahaina/audio_platform_info_yupikidp.xml
+++ b/configs/lahaina/audio_platform_info_yupikidp.xml
@@ -148,6 +148,7 @@
         <device name="SND_DEVICE_IN_HANDSET_GENERIC_QMIC" acdb_id="191"/>
         <device name="SND_DEVICE_IN_VOICE_HEARING_AID" acdb_id="11"/>
         <device name="SND_DEVICE_OUT_VOICE_HANDSET_TMUS" acdb_id="7"/>
+        <device name="SND_DEVICE_IN_BT_A2DP" acdb_id="201"/>
     </acdb_ids>
     <backend_names>
         <device name="SND_DEVICE_OUT_HEADPHONES" backend="headphones" interface="RX_CDC_DMA_RX_0"/>
diff --git a/configs/lahaina/audio_platform_info_yupikqrd.xml b/configs/lahaina/audio_platform_info_yupikqrd.xml
index 9bdcf52..2f77410 100644
--- a/configs/lahaina/audio_platform_info_yupikqrd.xml
+++ b/configs/lahaina/audio_platform_info_yupikqrd.xml
@@ -52,6 +52,7 @@
         <device name="SND_DEVICE_IN_VOCE_RECOG_USB_HEADSET_HEX_MIC" acdb_id="162"/>
         <device name="SND_DEVICE_IN_VOICE_HEARING_AID" acdb_id="11"/>
         <device name="SND_DEVICE_OUT_VOICE_HANDSET_TMUS" acdb_id="7"/>
+        <device name="SND_DEVICE_IN_BT_A2DP" acdb_id="201"/>
     </acdb_ids>
 
     <module_ids>
diff --git a/configs/lahaina/audio_policy_configuration.xml b/configs/lahaina/audio_policy_configuration.xml
index b7e9e65..cd9f7a6 100644
--- a/configs/lahaina/audio_policy_configuration.xml
+++ b/configs/lahaina/audio_policy_configuration.xml
@@ -332,6 +332,11 @@
                 </devicePort>
                 <devicePort tagName="USB Headset In" type="AUDIO_DEVICE_IN_USB_HEADSET" role="source">
                 </devicePort>
+                <devicePort tagName="A2DP In" type="AUDIO_DEVICE_IN_BLUETOOTH_A2DP" role="source"
+                            encodedFormats="VX_AUDIO_FORMAT_LC3">
+                    <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+                             samplingRates="44100,48000" channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO"/>
+                </devicePort>
 
             </devicePorts>
             <!-- route declaration, i.e. list all available sources for a given sink -->
@@ -367,7 +372,7 @@
                 <route type="mix" sink="voice_rx"
                        sources="Telephony Rx"/>
                 <route type="mix" sink="primary input"
-                       sources="Built-In Mic,Built-In Back Mic,Wired Headset Mic,BT SCO Headset Mic,FM Tuner,Telephony Rx"/>
+                       sources="Built-In Mic,Built-In Back Mic,Wired Headset Mic,BT SCO Headset Mic,FM Tuner,Telephony Rx,A2DP In"/>
                 <route type="mix" sink="usb_surround_sound"
                        sources="USB Device In,USB Headset In"/>
                 <route type="mix" sink="fast input"
@@ -377,7 +382,7 @@
                 <route type="mix" sink="voip_tx"
                        sources="Built-In Mic,Built-In Back Mic,BT SCO Headset Mic,USB Device In,USB Headset In,Wired Headset Mic"/>
                 <route type="mix" sink="record_24"
-                       sources="Built-In Mic,Built-In Back Mic,Wired Headset Mic"/>
+                       sources="Built-In Mic,Built-In Back Mic,Wired Headset Mic,A2DP In"/>
                 <route type="mix" sink="mmap_no_irq_in"
                        sources="Built-In Mic,Built-In Back Mic,Wired Headset Mic,USB Device In,USB Headset In"/>
                 <route type="mix" sink="BT A2DP Out"
diff --git a/configs/lahaina/mixer_paths.xml b/configs/lahaina/mixer_paths.xml
index d95558e..840fd8f 100644
--- a/configs/lahaina/mixer_paths.xml
+++ b/configs/lahaina/mixer_paths.xml
@@ -1806,6 +1806,10 @@
         <ctl name="MultiMedia1 Mixer SLIM_7_TX" value="1" />
     </path>
 
+    <path name="audio-record bt-a2dp-cap">
+        <ctl name="MultiMedia1 Mixer SLIM_7_TX" value="1" />
+    </path>
+
     <path name="audio-record bt-sco-wb">
         <path name="audio-record bt-sco" />
     </path>
@@ -1830,6 +1834,10 @@
         <ctl name="MultiMedia8 Mixer SLIM_7_TX" value="1" />
     </path>
 
+    <path name="audio-record-compress bt-a2dp-cap">
+        <ctl name="MultiMedia8 Mixer SLIM_7_TX" value="1" />
+    </path>
+
     <path name="audio-record-compress bt-sco-wb">
         <path name="audio-record-compress bt-sco" />
     </path>
@@ -1854,6 +1862,10 @@
         <ctl name="MultiMedia17 Mixer SLIM_7_TX" value="1" />
     </path>
 
+    <path name="audio-record-compress2 bt-a2dp-cap">
+        <ctl name="MultiMedia17 Mixer SLIM_7_TX" value="1" />
+    </path>
+
     <path name="audio-record-compress2 bt-sco-wb">
         <path name="audio-record-compress2 bt-sco" />
     </path>
@@ -1878,6 +1890,10 @@
       <ctl name="MultiMedia8 Mixer SLIM_7_TX" value="1" />
     </path>
 
+    <path name="low-latency-record bt-a2dp-cap">
+        <ctl name="MultiMedia8 Mixer SLIM_7_TX" value="1" />
+    </path>
+
     <path name="low-latency-record bt-sco-wb">
         <path name="low-latency-record bt-sco" />
     </path>
@@ -3607,6 +3623,10 @@
       <ctl name="MultiMedia16 Mixer SLIM_7_TX" value="1" />
     </path>
 
+    <path name="mmap-record bt-a2dp-cap">
+        <ctl name="MultiMedia16 Mixer SLIM_7_TX" value="1" />
+    </path>
+
     <path name="mmap-record bt-sco-wb">
         <path name="mmap-record bt-sco" />
     </path>
diff --git a/configs/lahaina/mixer_paths_hhg.xml b/configs/lahaina/mixer_paths_hhg.xml
index f716350..b926a3a 100644
--- a/configs/lahaina/mixer_paths_hhg.xml
+++ b/configs/lahaina/mixer_paths_hhg.xml
@@ -2756,7 +2756,7 @@
     </path>
 
     <path name="speaker-mic">
-        <path name="dmic5" />
+        <path name="dmic3" />
     </path>
 
     <path name="speaker-mic-liquid">
diff --git a/configs/lahaina/mixer_paths_shimaqrd.xml b/configs/lahaina/mixer_paths_shimaqrd.xml
index 2db82d3..89b3c6f 100755
--- a/configs/lahaina/mixer_paths_shimaqrd.xml
+++ b/configs/lahaina/mixer_paths_shimaqrd.xml
@@ -1817,6 +1817,11 @@
         <path name="compress-offload-playback9" />
     </path>
 
+    <path name="audio-with-haptics-playback handset">
+        <ctl name="RX_CDC_DMA_RX_6 Audio Mixer MultiMedia32" value="1"/>
+        <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia31" value="1"/>
+    </path>
+
     <path name="audio-record">
         <ctl name="MultiMedia1 Mixer TX_CDC_DMA_TX_3" value="1" />
     </path>
diff --git a/configs/lahaina/yupik_overlay/mixer_paths_yupikqrd_overlay.xml b/configs/lahaina/yupik_overlay/mixer_paths_yupikqrd_overlay.xml
index 0dd5a01..0437aef 100644
--- a/configs/lahaina/yupik_overlay/mixer_paths_yupikqrd_overlay.xml
+++ b/configs/lahaina/yupik_overlay/mixer_paths_yupikqrd_overlay.xml
@@ -270,4 +270,8 @@
     <path name="mmap-record capture-fm">
         <ctl name="MultiMedia16 Mixer SEC_MI2S_TX" value="1"/>
     </path>
+    <path name="audio-with-haptics-playback handset">
+        <ctl name="RX_CDC_DMA_RX_6 Audio Mixer MultiMedia32" value="1"/>
+        <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia31" value="1"/>
+    </path>
 </mixer>
diff --git a/configs/msm8937/msm8937.mk b/configs/msm8937/msm8937.mk
index a801809..5db9969 100644
--- a/configs/msm8937/msm8937.mk
+++ b/configs/msm8937/msm8937.mk
@@ -160,7 +160,8 @@
       $(TOPDIR)vendor/qcom/opensource/audio-hal/primary-hal/configs/msm8937/audio_policy_configuration_common.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_policy_configuration.xml
    else
       PRODUCT_COPY_FILES += \
-      $(TOPDIR)vendor/qcom/opensource/audio-hal/primary-hal/configs/msm8937/audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio/audio_policy_configuration.xml
+      $(TOPDIR)vendor/qcom/opensource/audio-hal/primary-hal/configs/msm8937/audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio/audio_policy_configuration.xml \
+      $(TOPDIR)vendor/qcom/opensource/audio-hal/primary-hal/configs/msm8937/audio_policy_configuration_common.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_policy_configuration.xml
    endif
 PRODUCT_COPY_FILES += \
     $(TOPDIR)vendor/qcom/opensource/audio-hal/primary-hal/configs/common/bluetooth_qti_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/a2dp_audio_policy_configuration.xml \
diff --git a/configs/msmnile_au/msmnile_au.mk b/configs/msmnile_au/msmnile_au.mk
index 2d47885..f698e6d 100644
--- a/configs/msmnile_au/msmnile_au.mk
+++ b/configs/msmnile_au/msmnile_au.mk
@@ -11,7 +11,11 @@
 BOARD_USES_ALSA_AUDIO := true
 
 ifneq ($(TARGET_USES_AOSP_FOR_AUDIO), true)
+ifeq ($(TARGET_FWK_SUPPORTS_FULL_VALUEADDS),true)
 USE_CUSTOM_AUDIO_POLICY := 1
+else
+USE_CUSTOM_AUDIO_POLICY := 0
+endif
 AUDIO_FEATURE_QSSI_COMPLIANCE := true
 AUDIO_FEATURE_ENABLED_COMPRESS_CAPTURE := false
 AUDIO_FEATURE_ENABLED_COMPRESS_INPUT := true
@@ -49,6 +53,9 @@
 
 USE_XML_AUDIO_POLICY_CONF := 1
 BOARD_SUPPORTS_SOUND_TRIGGER := true
+BOARD_SUPPORTS_OPENSOURCE_STHAL := true
+AUDIO_FEATURE_ENABLED_SVA_CHANNEL_IDX := true
+AUDIO_FEATURE_QSSI_COMPLIANCE := true
 AUDIO_FEATURE_ENABLED_INSTANCE_ID := true
 ifeq ($(TARGET_HAS_GENERIC_KERNEL_HEADERS), true)
 AUDIO_FEATURE_ENABLED_GKI := true
diff --git a/configs/msmnile_au/sound_trigger_platform_info.xml b/configs/msmnile_au/sound_trigger_platform_info.xml
index 6efdcdd..a7d0459 100644
--- a/configs/msmnile_au/sound_trigger_platform_info.xml
+++ b/configs/msmnile_au/sound_trigger_platform_info.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="ISO-8859-1"?>
-<!--- Copyright (c) 2013-2019, The Linux Foundation. All rights reserved.       -->
+<!--- Copyright (c) 2013-2021, The Linux Foundation. All rights reserved.       -->
 <!---                                                                           -->
 <!--- Redistribution and use in source and binary forms, with or without        -->
 <!--- modification, are permitted provided that the following conditions are    -->
@@ -26,18 +26,20 @@
 <!--- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN    -->
 <!--- IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.                             -->
 <sound_trigger_platform_info>
-    <param version="0x0103" /> <!-- this must be the first param -->
+    <param version="0x0106" /> <!-- this must be the first param -->
 <!--- Version History:                                                          -->
 <!--- 0x0101: Legacy version.                                                   -->
 <!--- 0x0102: Includes acdb_ids param with the gcs_usecase tag. This matches    -->
 <!--- the gcs_usecase with the acdb device that uses it.                        -->
 <!--- 0x0103: app_type and in_channels added to <lsm usecase> and out_channels  -->
 <!--- added to <adm_config>                                                     -->
+<!--- 0x0104: instance id support for both WDSP<CPE> and ADSP lsm usecases      -->
+<!--- 0x0105: Select <lsm_usecase> based on capture device                      -->
+<!--- 0x0106: Add module_params tag to support multiple module and param ids    -->
+<!--- per <lsm_usecase>                                                         -->
 
     <common_config>
-        <param implementer_version="0x0100" />
-        <param max_cpe_sessions="1" />
-        <param max_wdsp_sessions="2" />
+        <param implementer_version="0x0102" />
         <param max_ape_sessions="8" />
         <param enable_failure_detection="false" />
         <param support_device_switch="false" />
@@ -51,6 +53,7 @@
         <param backend_dai_name="TERT_TDM_TX_0" />
         <!-- Param used to indicate if SVA has dedicated SLIM ports -->
         <param dedicated_sva_path="true" />
+        <param platform_lpi_enable="false" />
         <param concurrent_capture="true" />
         <param concurrent_voice_call="false" />
         <param concurrent_voip_call="false" />
@@ -76,27 +79,16 @@
     <!-- QTI SVA -->
     <sound_model_config>
         <param vendor_uuid="68ab2d40-e860-11e3-95ef-0002a5d5c51b" />
-        <param execution_type="ADSP" /> <!-- value: "WDSP" "ADSP" "DYNAMIC" -->
-        <param library="libsmwrapper.so" />
-        <param max_cpe_phrases="6" />
-        <param max_cpe_users="3" />
+        <param execution_type="ADSP" />
+        <param merge_first_stage_sound_models="false"/>
         <param max_ape_phrases="20" />
         <param max_ape_users="10" />
         <!-- Profile specific data which the algorithm can support -->
         <param sample_rate="16000" />
         <param bit_width="16" />
         <param out_channels="1"/> <!-- Module output channels -->
+        <param dam_token_id="1"/>
 
-        <!-- adm_cfg_profile should match with the one defined under adm_config -->
-        <!-- Set it to NONE if LSM directly connects to AFE -->
-        <param adm_cfg_profile="FFECNS" />
-        <!-- fluence_type: "FLUENCE", "FLUENCE_DMIC", "FLUENCE_TMIC"   -->
-        <!-- "FLUENCE_QMIC". Param value is valid when adm_cfg_profile -->
-        <!-- is one of FLUENCE, FLUENCE_STEREO, FFECNS values          -->
-        <param fluence_type="FLUENCE_QMIC" />
-        <!-- wdsp_fluence_type: fluence disabled: "NONE" -->
-        <!-- fluence enabled: "FLUENCE_DMIC", "FLUENCE_TMIC", "FLUENCE_QMIC" -->
-        <param wdsp_fluence_type="NONE" />
         <arm_ss_usecase>
             <!-- Options are "KEYWORD_DETECTION", "USER_VERIFICATION", "CUSTOM_DETECTION"  -->
             <param sm_detection_type= "KEYWORD_DETECTION" />
@@ -114,66 +106,58 @@
             <param bit_wdith="16"/>
             <param channel_count="1"/>
         </arm_ss_usecase>
-        <gcs_usecase>
-            <param uid="0x1" />
-            <param acdb_devices="DEVICE_HANDSET_MIC_CPE, DEVICE_HANDSET_TMIC_CPE, DEVICE_HEADSET_MIC_CPE" />
-            <!-- module_id, instance_id, param_id -->
-            <param load_sound_model_ids="0x00012C0D, 0x2, 0x00012C14" />
-            <param confidence_levels_ids="0x00012C0D, 0x2, 0x00012C28" />
-            <param detection_event_ids="0x00012C0D, 0x2, 0x00012B05" />
-            <param read_cmd_ids="0x00020013, 0x2, 0x00020015" />
-            <param read_rsp_ids="0x00020013, 0x2, 0x00020016" />
-            <param custom_config_ids="0x00012C0D, 0x2, 0x00012C20" />
-            <param det_event_type_ids="0x00012C0D, 0x2, 0x00012C2A" />
-        </gcs_usecase>
-        <gcs_usecase>
-            <param uid="0x2" />
-            <param acdb_devices="DEVICE_HANDSET_MIC_CPE, DEVICE_HANDSET_TMIC_CPE, DEVICE_HEADSET_MIC_CPE" />
-            <param load_sound_model_ids="0x00012C0D, 0x3, 0x00012C14" />
-            <param confidence_levels_ids="0x00012C0D, 0x3, 0x00012C28" />
-            <param detection_event_ids="0x00012C0D, 0x3, 0x00012B05" />
-            <param read_cmd_ids="0x00020013, 0x3, 0x00020015" />
-            <param read_rsp_ids="0x00020013, 0x3, 0x00020016" />
-            <param custom_config_ids="0x00012C0D, 0x3, 0x00012C20" />
-            <param det_event_type_ids="0x00012C0D, 0x3, 0x00012C2A" />
-        </gcs_usecase>
-        <gcs_usecase>
-            <param uid="0x7" />
-            <param acdb_devices="DEVICE_HANDSET_DMIC_CPE" />
-            <param load_sound_model_ids="0x00012C0D, 0x7, 0x00012C14" />
-            <param confidence_levels_ids="0x00012C0D, 0x7, 0x00012C28" />
-            <param detection_event_ids="0x00012C0D, 0x7, 0x00012B05" />
-            <param read_cmd_ids="0x00020013, 0x7, 0x00020015" />
-            <param read_rsp_ids="0x00020013, 0x7, 0x00020016" />
-            <param custom_config_ids="0x00012C0D, 0x7, 0x00012C20" />
-            <param det_event_type_ids="0x00012C0D, 0x7, 0x00012C2A" />
-        </gcs_usecase>
-        <gcs_usecase>
-            <param uid="0x8" />
-            <param acdb_devices="DEVICE_HANDSET_DMIC_CPE" />
-            <param load_sound_model_ids="0x00012C0D, 0x8, 0x00012C14" />
-            <param confidence_levels_ids="0x00012C0D, 0x8, 0x00012C28" />
-            <param detection_event_ids="0x00012C0D, 0x8, 0x00012B05" />
-            <param read_cmd_ids="0x00020013, 0x8, 0x00020015" />
-            <param read_rsp_ids="0x00020013, 0x8, 0x00020016" />
-            <param custom_config_ids="0x00012C0D, 0x8, 0x00012C20" />
-            <param det_event_type_ids="0x00012C0D, 0x8, 0x00012C2A" />
-        </gcs_usecase>
+        <arm_ss_usecase>
+            <param sm_detection_type= "KEYWORD_DETECTION" />
+            <param sm_id="0x8" />
+            <param module_lib="libcapiv2svarnn.so"/>
+            <param sample_rate="16000"/>
+            <param bit_wdith="16"/>
+            <param channel_count="1"/>
+        </arm_ss_usecase>
         <!-- Module and param ids with which the algorithm is integrated
             in non-graphite firmware (note these must come after gcs params)
             Extends flexibility to have different ids based on execution type.
             valid execution_type values: "WDSP" "ADSP" -->
         <lsm_usecase>
+            <param capture_device="HANDSET" />
+            <!-- adm_cfg_profile should match with the one defined under adm_config -->
+            <!-- Set it to NONE if LSM directly connects to AFE -->
+            <param adm_cfg_profile="FFECNS" />
+            <!-- fluence_type: "FLUENCE", "FLUENCE_DMIC", "FLUENCE_TMIC"   -->
+            <!-- "FLUENCE_QMIC". Param value is valid when adm_cfg_profile -->
+            <!-- is one of FLUENCE, FLUENCE_STEREO, FFECNS values          -->
+            <param fluence_type="FLUENCE_QMIC" />
             <param execution_mode="ADSP" />
+            <!-- lpi_mode: "NON_LPI_BARGE_IN", "NON_LPI", "LPI" -->
+            <!-- NON_LPI_BARGE_IN: Default non-LPI mode type. lsm_usecase -->
+            <!-- must be present with this mode type to handle barge-in. -->
+            <!-- NON_LPI: If another lsm_usecase is present with this mode -->
+            <!-- type, it will be used for non-LPI non-barge-in usecases. -->
+            <!-- If not present, NON_LPI_BARGE_IN mode type will be used. -->
+            <!-- LPI: This mode type will be used for LPI usecases. -->
             <param app_type="2" /> <!-- app type used in ACDB -->
+            <param pdk5_app_type="1" />
             <param in_channels="4"/> <!-- Module input channels -->
-            <param load_sound_model_ids="0x00012C1C, 0x00012C14" />
-            <param unload_sound_model_ids="0x00012C1C, 0x00012C15" />
-            <param confidence_levels_ids="0x00012C1C, 0x00012C07" />
-            <param operation_mode_ids="0x00012C1C, 0x00012C02" />
-            <param polling_enable_ids="0x00012C1C, 0x00012C1B" />
-            <param custom_config_ids="0x00012C1C, 0x00012C20" />
-            <param det_event_type_ids="0x00012C1C, 0x00012C2C" />
+            <module_params>
+                <param module_type="GMM" />
+                <param load_sound_model_ids="0x00012C1C, 0x0, 0x00012C14" />
+                <param unload_sound_model_ids="0x00012C1C, 0x0, 0x00012C15" />
+                <param confidence_levels_ids="0x00012C1C, 0x0, 0x00012C07" />
+                <param operation_mode_ids="0x00012C1C, 0x0, 0x00012C02" />
+                <param polling_enable_ids="0x00012C1C, 0x0, 0x00012C1B" />
+                <param custom_config_ids="0x00012C1C, 0x0, 0x00012C20" />
+                <param det_event_type_ids="0x00012C1C, 0x0, 0x00012C2C" />
+                <param lab_dam_cfg_ids="0x00012C08, 0x0, 0x000102C4" />
+            </module_params>
+            <module_params>
+                <param module_type="PDK5" />
+                <param load_sound_model_ids="0x00012C35, 0x0, 0x00012C36" />
+                <param unload_sound_model_ids="0x00012C35, 0x0, 0x00012C37" />
+                <param confidence_levels_ids="0x00012C35, 0x0, 0x00012C38" />
+                <param custom_config_ids="0x00012C35, 0x0, 0x00012C20" />
+                <param det_event_type_ids="0x00012C35, 0x0, 0x00012C2C" />
+                <param lab_dam_cfg_ids="0x00012C08, 0x0, 0x000102C4" />
+            </module_params>
         </lsm_usecase>
 
         <!-- format: "ADPCM_packet" or "PCM_packet" !-->
@@ -182,17 +166,12 @@
             transfer mode -->
         <param capture_keyword="PCM_packet, RT, 2000" />
         <param client_capture_read_delay="2000" />
-        <param lpi_enable="false" />
-        <param concurrent_capture="true" />
-        <param concurrent_voice_call="false" />
-        <param concurrent_voip_call="false" />
     </sound_model_config>
 
-    <!-- QTI Music Detection !-->
+ <!-- QTI Music Detection !-->
     <sound_model_config>
         <param vendor_uuid="876c1b46-9d4d-40cc-a4fd-4d5ec7a80e47" />
         <param execution_type="WDSP" /> <!-- value: "WDSP" "ADSP" "DYNAMIC" -->
-        <param library="libsmwrapper.so" />
         <param max_cpe_phrases="1" />
         <param max_cpe_users="1" />
         <param max_ape_phrases="1" />
@@ -211,18 +190,6 @@
         <!-- wdsp_fluence_type: fluence disabled: "NONE" -->
         <!-- fluence enabled: "FLUENCE_DMIC", "FLUENCE_TMIC", "FLUENCE_QMIC" -->
         <param wdsp_fluence_type="NONE" />
-        <gcs_usecase>
-            <param uid="0x5" />
-            <param acdb_devices="DEVICE_HANDSET_MIC_CPE, DEVICE_HANDSET_TMIC_CPE, DEVICE_HEADSET_MIC_CPE" />
-            <!-- module_id, instance_id, param_id -->
-            <param load_sound_model_ids="0x00012C2E, 0x6, 0x00012C14" />
-            <param confidence_levels_ids="0x00012C2E, 0x6, 0x00012C28" />
-            <param detection_event_ids="0x00012C2E, 0x6, 0x00012B05" />
-            <param read_cmd_ids="0x00020013, 0x6, 0x00020015" />
-            <param read_rsp_ids="0x00020013, 0x6, 0x00020016" />
-            <param custom_config_ids="0x00012C2E, 0x6, 0x00012C2D" />
-            <param det_event_type_ids="0x00012C2E, 0x6, 0x00012C2C" />
-        </gcs_usecase>
         <!-- Module and param ids with which the algorithm is integrated
             in non-graphite firmware (note these must come after gcs params)
             Extends flexibility to have different ids based on execution type.
@@ -231,11 +198,13 @@
             <param execution_mode="ADSP" />
             <param app_type="4" /> <!-- app type for MD used in ACDB -->
             <param in_channels="1"/> <!-- Module input channels -->
-            <param load_sound_model_ids="0x00012C22, 0x00012C14" />
-            <param unload_sound_model_ids="0x00012C22, 0x00012C15" />
-            <param confidence_levels_ids="0x00012C22, 0x00012C07" />
-            <param det_event_type_ids="0x00012C22, 0x00012C2C" />
-            <param custom_config_ids="0x00012C22, 0x00012C30" />
+            <module_params>
+                <param load_sound_model_ids="0x00012C22, 0x0, 0x00012C14" />
+                <param unload_sound_model_ids="0x00012C22, 0x0, 0x00012C15" />
+                <param confidence_levels_ids="0x00012C22, 0x0, 0x00012C07" />
+                <param det_event_type_ids="0x00012C22, 0x0, 0x00012C2C" />
+                <param custom_config_ids="0x00012C22, 0x0, 0x00012C30" />
+            </module_params>
         </lsm_usecase>
 
         <!-- format: "ADPCM_packet" or "PCM_packet" !-->
@@ -250,7 +219,6 @@
     <sound_model_config>
         <param vendor_uuid="7038ddc8-30f2-11e6-b0ac-40a8f03d3f15" />
         <param execution_type="WDSP" /> <!-- value: "WDSP" "ADSP" "DYNAMIC" -->
-        <param library="none" />
         <param max_cpe_phrases="1" />
         <param max_cpe_users="1" />
         <param max_ape_phrases="1" />
@@ -269,39 +237,18 @@
         <!-- wdsp_fluence_type: fluence disabled: "NONE" -->
         <!-- fluence enabled: "FLUENCE_DMIC", "FLUENCE_QMIC" -->
         <param wdsp_fluence_type="NONE" />
-        <gcs_usecase>
-            <param uid="0x3" />
-            <param acdb_devices="DEVICE_HANDSET_MIC_CPE" />
-            <param load_sound_model_ids="0x18000001, 0x4, 0x18000100" />
-            <param start_engine_ids="0x18000001, 0x4, 0x18000101" />
-            <param confidence_levels_ids="0x18000001, 0x4, 0x00012C28" />
-            <param detection_event_ids="0x18000001, 0x4, 0x00012C29" />
-            <param custom_config_ids="0x18000001, 0x4, 0x00012C20" />
-            <param read_cmd_ids="0x00020013, 0x4, 0x00020015" />
-            <param read_rsp_ids="0x00020013, 0x4, 0x00020016" />
-        </gcs_usecase>
-        <gcs_usecase>
-            <param uid="0x4" />
-            <param acdb_devices="DEVICE_HANDSET_DMIC_CPE" />
-            <param load_sound_model_ids="0x18000001, 0x5, 0x18000100" />
-            <param start_engine_ids="0x18000001, 0x5, 0x18000101" />
-            <param confidence_levels_ids="0x18000001, 0x5, 0x00012C28" />
-            <param detection_event_ids="0x18000001, 0x5, 0x00012C29" />
-            <param custom_config_ids="0x18000001, 0x5, 0x00012C20" />
-            <param read_cmd_ids="0x00020013, 0x5, 0x00020015" />
-            <param read_rsp_ids="0x00020013, 0x5, 0x00020016" />
-        </gcs_usecase>
-
         <lsm_usecase>
             <param execution_mode="ADSP" />
             <param app_type="3" /> <!-- app type used in ACDB -->
             <param in_channels="1"/> <!-- Module input channels -->
-            <param load_sound_model_ids="0x18000001, 0x00012C14" />
-            <param unload_sound_model_ids="0x18000001, 0x00012C15" />
-            <param confidence_levels_ids="0x18000001, 0x00012C07" />
-            <param operation_mode_ids="0x18000001, 0x00012C02" />
-            <param polling_enable_ids="0x18000001, 0x00012C1B" />
-            <param custom_config_ids="0x18000001, 0x00012C20" />
+            <module_params>
+                <param load_sound_model_ids="0x18000001, 0x0, 0x00012C14" />
+                <param unload_sound_model_ids="0x18000001, 0x0, 0x00012C15" />
+                <param confidence_levels_ids="0x18000001, 0x0, 0x00012C07" />
+                <param operation_mode_ids="0x18000001, 0x0, 0x00012C02" />
+                <param polling_enable_ids="0x18000001, 0x0, 0x00012C1B" />
+                <param custom_config_ids="0x18000001, 0x0, 0x00012C20" />
+            </module_params>
         </lsm_usecase>
 
         <!-- format: "ADPCM_packet" or "PCM_packet" !-->
@@ -316,20 +263,31 @@
     <sound_model_config>
         <param vendor_uuid="9f6ad62a-1f0b-11e7-87c5-40a8f03d3f15" />
         <param execution_type="WDSP" /> <!-- value: "WDSP" "ADSP" "DYNAMIC" -->
-        <param library="none" />
+        <param max_ape_phrases="1" />
+        <param max_ape_users="1" />
+        <!-- Profile specific data which the algorithm can support -->
+        <param sample_rate="16000" />
+        <param bit_width="16" />
+        <param out_channels="1"/> <!-- Module output channels -->
         <!-- fluence enabled: "FLUENCE_DMIC", "FLUENCE_QMIC" -->
         <param wdsp_fluence_type="NONE" />
-        <gcs_usecase>
-            <param uid="0x6" />
-            <param acdb_devices="DEVICE_HANDSET_MIC_CPE" />
-            <param load_sound_model_ids="0x18000001, 0x4, 0x18000102" />
-            <param start_engine_ids="0x18000001, 0x4, 0x18000103" />
-            <param confidence_levels_ids="0x18000001, 0x4, 0x00012C28" />
-            <param detection_event_ids="0x18000001, 0x4, 0x00012C29" />
-            <param custom_config_ids="0x18000001, 0x4, 0x00012C20" />
-            <param read_cmd_ids="0x00020013, 0x7, 0x00020015" />
-            <param read_rsp_ids="0x00020013, 0x7, 0x00020016" />
-        </gcs_usecase>
+        <!-- adm_cfg_profile should match with the one defined under adm_config -->
+        <!-- Set it to NONE if LSM directly connects to AFE -->
+        <param adm_cfg_profile="NONE" />
+        <param fluence_type="FLUENCE_DMIC" />
+        <lsm_usecase>
+            <param execution_mode="ADSP" />
+            <param app_type="3" /> <!-- app type used in ACDB -->
+            <param in_channels="1"/> <!-- Module input channels -->
+            <module_params>
+                <param load_sound_model_ids="0x18000001, 0x0, 0x00012C14" />
+                <param unload_sound_model_ids="0x18000001, 0x0, 0x00012C15" />
+                <param confidence_levels_ids="0x18000001, 0x0, 0x00012C07" />
+                <param operation_mode_ids="0x18000001, 0x0, 0x00012C02" />
+                <param polling_enable_ids="0x18000001, 0x0, 0x00012C1B" />
+                <param custom_config_ids="0x18000001, 0x0, 0x00012C20" />
+            </module_params>
+        </lsm_usecase>
         <!--  kw_duration is in milli seconds. It is valid only for FTRT
             transfer mode -->
         <param capture_keyword="MULAW_raw, FTRT, 5000" />
diff --git a/configs/msmsteppe_au/msmsteppe_au.mk b/configs/msmsteppe_au/msmsteppe_au.mk
index 9d990a5..49fb0c6 100644
--- a/configs/msmsteppe_au/msmsteppe_au.mk
+++ b/configs/msmsteppe_au/msmsteppe_au.mk
@@ -4,7 +4,11 @@
 BOARD_USES_ALSA_AUDIO := true
 
 ifneq ($(TARGET_USES_AOSP_FOR_AUDIO), true)
+ifeq ($(TARGET_FWK_SUPPORTS_FULL_VALUEADDS),true)
 USE_CUSTOM_AUDIO_POLICY := 1
+else
+USE_CUSTOM_AUDIO_POLICY := 0
+endif
 AUDIO_FEATURE_ENABLED_COMPRESS_CAPTURE := false
 AUDIO_FEATURE_ENABLED_COMPRESS_VOIP := false
 AUDIO_FEATURE_ENABLED_DYNAMIC_ECNS := true
@@ -39,6 +43,9 @@
 USE_XML_AUDIO_POLICY_CONF := 1
 AUDIO_FEATURE_ENABLED_DLKM := true
 BOARD_SUPPORTS_SOUND_TRIGGER := true
+BOARD_SUPPORTS_OPENSOURCE_STHAL := true
+AUDIO_FEATURE_ENABLED_SVA_CHANNEL_IDX := true
+AUDIO_FEATURE_QSSI_COMPLIANCE := true
 AUDIO_FEATURE_ENABLED_INSTANCE_ID := true
 ifeq ($(TARGET_HAS_GENERIC_KERNEL_HEADERS), true)
 AUDIO_FEATURE_ENABLED_GKI := true
diff --git a/configs/msmsteppe_au/sound_trigger_platform_info.xml b/configs/msmsteppe_au/sound_trigger_platform_info.xml
index 1545922..a7d0459 100644
--- a/configs/msmsteppe_au/sound_trigger_platform_info.xml
+++ b/configs/msmsteppe_au/sound_trigger_platform_info.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="ISO-8859-1"?>
-<!--- Copyright (c) 2013-2019, The Linux Foundation. All rights reserved.       -->
+<!--- Copyright (c) 2013-2021, The Linux Foundation. All rights reserved.       -->
 <!---                                                                           -->
 <!--- Redistribution and use in source and binary forms, with or without        -->
 <!--- modification, are permitted provided that the following conditions are    -->
@@ -26,17 +26,20 @@
 <!--- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN    -->
 <!--- IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.                             -->
 <sound_trigger_platform_info>
-    <param version="0x0103" /> <!-- this must be the first param -->
+    <param version="0x0106" /> <!-- this must be the first param -->
 <!--- Version History:                                                          -->
 <!--- 0x0101: Legacy version.                                                   -->
 <!--- 0x0102: Includes acdb_ids param with the gcs_usecase tag. This matches    -->
 <!--- the gcs_usecase with the acdb device that uses it.                        -->
 <!--- 0x0103: app_type and in_channels added to <lsm usecase> and out_channels  -->
 <!--- added to <adm_config>                                                     -->
+<!--- 0x0104: instance id support for both WDSP<CPE> and ADSP lsm usecases      -->
+<!--- 0x0105: Select <lsm_usecase> based on capture device                      -->
+<!--- 0x0106: Add module_params tag to support multiple module and param ids    -->
+<!--- per <lsm_usecase>                                                         -->
+
     <common_config>
-        <param implementer_version="0x0100" />
-        <param max_cpe_sessions="1" />
-        <param max_wdsp_sessions="2" />
+        <param implementer_version="0x0102" />
         <param max_ape_sessions="8" />
         <param enable_failure_detection="false" />
         <param support_device_switch="false" />
@@ -45,55 +48,47 @@
         <param transit_to_adsp_on_battery_charging="false" />
         <!-- Below backend params must match with port used in mixer path file -->
         <!-- param used to configure backend sample rate, format and channels -->
-        <!-- uncomment TX_CDC_DMA_TX_3 values for internal codec and comment SLIM_0_TX values -->
         <param backend_port_name="TERT_TDM_TX_0" />
-        <!-- param backend_port_name="TX_CDC_DMA_TX_3" /-->
         <!-- Param used to match and obtain device backend index -->
         <param backend_dai_name="TERT_TDM_TX_0" />
-        <!-- param backend_dai_name="TX_CDC_DMA_TX_3" /-->
+        <!-- Param used to indicate if SVA has dedicated SLIM ports -->
+        <param dedicated_sva_path="true" />
+        <param platform_lpi_enable="false" />
         <param concurrent_capture="true" />
         <param concurrent_voice_call="false" />
         <param concurrent_voip_call="false" />
     </common_config>
     <acdb_ids>
-        <!--For internal codec please enable below device-->
-        <!--param DEVICE_HANDSET_MIC_APE="130" /-->
         <param DEVICE_HANDSET_MIC_APE="100" />
         <param DEVICE_HANDSET_MIC_CPE="128" />
         <param DEVICE_HANDSET_MIC_ECPP_CPE="128" />
         <param DEVICE_HANDSET_TMIC_CPE="130" />
+        <param DEVICE_HANDSET_TMIC_APE="157" />
         <param DEVICE_HANDSET_MIC_PP_APE="135" />
         <param DEVICE_HANDSET_QMIC_APE="132" />
         <param DEVICE_HEADSET_MIC_CPE="139" />
+        <param DEVICE_HEADSET_MIC_APE="141" />
         <param DEVICE_HANDSET_DMIC_APE="149" />
-        <param DEVICE_HANDSET_DMIC_CPE="153" />
-        <param DEVICE_HANDSET_TMIC_APE="157" />
+        <param DEVICE_HANDSET_DMIC_CPE="148" />
     </acdb_ids>
+
     <!-- Multiple sound_model_config tags can be listed, each with unique   -->
     <!-- vendor_uuid. The below tag represents QTI SVA engine sound model   -->
     <!-- configuration. ISV must use their own unique vendor_uuid.          -->
+
+    <!-- QTI SVA -->
     <sound_model_config>
         <param vendor_uuid="68ab2d40-e860-11e3-95ef-0002a5d5c51b" />
-        <param execution_type="ADSP" /> <!-- value: "WDSP" "ADSP" "DYNAMIC" -->
-        <param library="libsmwrapper.so" />
-        <param max_cpe_phrases="6" />
-        <param max_cpe_users="3" />
+        <param execution_type="ADSP" />
+        <param merge_first_stage_sound_models="false"/>
         <param max_ape_phrases="20" />
         <param max_ape_users="10" />
         <!-- Profile specific data which the algorithm can support -->
         <param sample_rate="16000" />
         <param bit_width="16" />
         <param out_channels="1"/> <!-- Module output channels -->
-        <!-- adm_cfg_profile should match with the one defined under adm_config -->
-        <!-- Set it to NONE if LSM directly connects to AFE -->
-        <param adm_cfg_profile="FFECNS" />
-        <!-- fluence_type: "FLUENCE", "FLUENCE_DMIC", "FLUENCE_TMIC"   -->
-        <!-- "FLUENCE_QMIC". Param value is valid when adm_cfg_profile -->
-        <!-- is one of FLUENCE, FLUENCE_STEREO, FFECNS values          -->
-        <param fluence_type="FLUENCE_QMIC" />
-        <!-- wdsp_fluence_type: fluence disabled: "NONE" -->
-        <!-- fluence enabled: "FLUENCE_DMIC", "FLUENCE_TMIC", "FLUENCE_QMIC" -->
-        <param wdsp_fluence_type="NONE" />
+        <param dam_token_id="1"/>
+
         <arm_ss_usecase>
             <!-- Options are "KEYWORD_DETECTION", "USER_VERIFICATION", "CUSTOM_DETECTION"  -->
             <param sm_detection_type= "KEYWORD_DETECTION" />
@@ -111,72 +106,58 @@
             <param bit_wdith="16"/>
             <param channel_count="1"/>
         </arm_ss_usecase>
-        <gcs_usecase>
-            <param uid="0x1" />
-            <param acdb_devices="DEVICE_HANDSET_MIC_CPE, DEVICE_HANDSET_TMIC_CPE, DEVICE_HEADSET_MIC_CPE" />
-            <!-- module_id, instance_id, param_id -->
-            <param load_sound_model_ids="0x00012C0D, 0x2, 0x00012C14" />
-            <param confidence_levels_ids="0x00012C0D, 0x2, 0x00012C28" />
-            <param detection_event_ids="0x00012C0D, 0x2, 0x00012C29" />
-            <param read_cmd_ids="0x00020013, 0x2, 0x00020015" />
-            <param read_rsp_ids="0x00020013, 0x2, 0x00020016" />
-            <param custom_config_ids="0x00012C0D, 0x2, 0x00012C20" />
-        </gcs_usecase>
-        <gcs_usecase>
-            <param uid="0x2" />
-            <param acdb_devices="DEVICE_HANDSET_MIC_CPE, DEVICE_HANDSET_TMIC_CPE, DEVICE_HEADSET_MIC_CPE" />
-            <param load_sound_model_ids="0x00012C0D, 0x3, 0x00012C14" />
-            <param confidence_levels_ids="0x00012C0D, 0x3, 0x00012C28" />
-            <param detection_event_ids="0x00012C0D, 0x3, 0x00012C29" />
-            <param read_cmd_ids="0x00020013, 0x3, 0x00020015" />
-            <param read_rsp_ids="0x00020013, 0x3, 0x00020016" />
-            <param custom_config_ids="0x00012C0D, 0x3, 0x00012C20" />
-        </gcs_usecase>
-        <gcs_usecase>
-            <param uid="0x7" />
-            <param acdb_devices="DEVICE_HANDSET_DMIC_CPE" />
-            <param load_sound_model_ids="0x00012C0D, 0x7, 0x00012C14" />
-            <param confidence_levels_ids="0x00012C0D, 0x7, 0x00012C28" />
-            <param detection_event_ids="0x00012C0D, 0x7, 0x00012B05" />
-            <param read_cmd_ids="0x00020013, 0x7, 0x00020015" />
-            <param read_rsp_ids="0x00020013, 0x7, 0x00020016" />
-            <param custom_config_ids="0x00012C0D, 0x7, 0x00012C20" />
-            <param det_event_type_ids="0x00012C0D, 0x7, 0x00012C2A" />
-        </gcs_usecase>
-        <gcs_usecase>
-            <param uid="0x8" />
-            <param acdb_devices="DEVICE_HANDSET_DMIC_CPE" />
-            <param load_sound_model_ids="0x00012C0D, 0x8, 0x00012C14" />
-            <param confidence_levels_ids="0x00012C0D, 0x8, 0x00012C28" />
-            <param detection_event_ids="0x00012C0D, 0x8, 0x00012B05" />
-            <param read_cmd_ids="0x00020013, 0x8, 0x00020015" />
-            <param read_rsp_ids="0x00020013, 0x8, 0x00020016" />
-            <param custom_config_ids="0x00012C0D, 0x8, 0x00012C20" />
-            <param det_event_type_ids="0x00012C0D, 0x8, 0x00012C2A" />
-        </gcs_usecase>
+        <arm_ss_usecase>
+            <param sm_detection_type= "KEYWORD_DETECTION" />
+            <param sm_id="0x8" />
+            <param module_lib="libcapiv2svarnn.so"/>
+            <param sample_rate="16000"/>
+            <param bit_wdith="16"/>
+            <param channel_count="1"/>
+        </arm_ss_usecase>
         <!-- Module and param ids with which the algorithm is integrated
             in non-graphite firmware (note these must come after gcs params)
             Extends flexibility to have different ids based on execution type.
             valid execution_type values: "WDSP" "ADSP" -->
         <lsm_usecase>
+            <param capture_device="HANDSET" />
+            <!-- adm_cfg_profile should match with the one defined under adm_config -->
+            <!-- Set it to NONE if LSM directly connects to AFE -->
+            <param adm_cfg_profile="FFECNS" />
+            <!-- fluence_type: "FLUENCE", "FLUENCE_DMIC", "FLUENCE_TMIC"   -->
+            <!-- "FLUENCE_QMIC". Param value is valid when adm_cfg_profile -->
+            <!-- is one of FLUENCE, FLUENCE_STEREO, FFECNS values          -->
+            <param fluence_type="FLUENCE_QMIC" />
             <param execution_mode="ADSP" />
+            <!-- lpi_mode: "NON_LPI_BARGE_IN", "NON_LPI", "LPI" -->
+            <!-- NON_LPI_BARGE_IN: Default non-LPI mode type. lsm_usecase -->
+            <!-- must be present with this mode type to handle barge-in. -->
+            <!-- NON_LPI: If another lsm_usecase is present with this mode -->
+            <!-- type, it will be used for non-LPI non-barge-in usecases. -->
+            <!-- If not present, NON_LPI_BARGE_IN mode type will be used. -->
+            <!-- LPI: This mode type will be used for LPI usecases. -->
             <param app_type="2" /> <!-- app type used in ACDB -->
+            <param pdk5_app_type="1" />
             <param in_channels="4"/> <!-- Module input channels -->
-            <param load_sound_model_ids="0x00012C1C, 0x00012C14" />
-            <param unload_sound_model_ids="0x00012C1C, 0x00012C15" />
-            <param confidence_levels_ids="0x00012C1C, 0x00012C07" />
-            <param operation_mode_ids="0x00012C1C, 0x00012C02" />
-            <param polling_enable_ids="0x00012C1C, 0x00012C1B" />
-            <param custom_config_ids="0x00012C1C, 0x00012C20" />
-            <param det_event_type_ids="0x00012C1C, 0x00012C2C" />
-        </lsm_usecase>
-        <lsm_usecase>
-            <param execution_mode="WDSP" />
-            <param load_sound_model_ids="0x00012C0D, 0x00012C14" />
-            <param unload_sound_model_ids="0x00012C0D, 0x00012C15" />
-            <param confidence_levels_ids="0x00012C0D, 0x00012C07" />
-            <param operation_mode_ids="0x00012C0D, 0x00012C02" />
-            <param custom_config_ids="0x00012C0D, 0x00012C20" />
+            <module_params>
+                <param module_type="GMM" />
+                <param load_sound_model_ids="0x00012C1C, 0x0, 0x00012C14" />
+                <param unload_sound_model_ids="0x00012C1C, 0x0, 0x00012C15" />
+                <param confidence_levels_ids="0x00012C1C, 0x0, 0x00012C07" />
+                <param operation_mode_ids="0x00012C1C, 0x0, 0x00012C02" />
+                <param polling_enable_ids="0x00012C1C, 0x0, 0x00012C1B" />
+                <param custom_config_ids="0x00012C1C, 0x0, 0x00012C20" />
+                <param det_event_type_ids="0x00012C1C, 0x0, 0x00012C2C" />
+                <param lab_dam_cfg_ids="0x00012C08, 0x0, 0x000102C4" />
+            </module_params>
+            <module_params>
+                <param module_type="PDK5" />
+                <param load_sound_model_ids="0x00012C35, 0x0, 0x00012C36" />
+                <param unload_sound_model_ids="0x00012C35, 0x0, 0x00012C37" />
+                <param confidence_levels_ids="0x00012C35, 0x0, 0x00012C38" />
+                <param custom_config_ids="0x00012C35, 0x0, 0x00012C20" />
+                <param det_event_type_ids="0x00012C35, 0x0, 0x00012C2C" />
+                <param lab_dam_cfg_ids="0x00012C08, 0x0, 0x000102C4" />
+            </module_params>
         </lsm_usecase>
 
         <!-- format: "ADPCM_packet" or "PCM_packet" !-->
@@ -185,17 +166,12 @@
             transfer mode -->
         <param capture_keyword="PCM_packet, RT, 2000" />
         <param client_capture_read_delay="2000" />
-        <param lpi_enable="false" />
-        <param concurrent_capture="true" />
-        <param concurrent_voice_call="false" />
-        <param concurrent_voip_call="false" />
     </sound_model_config>
 
-    <!-- QTI Music Detection !-->
+ <!-- QTI Music Detection !-->
     <sound_model_config>
         <param vendor_uuid="876c1b46-9d4d-40cc-a4fd-4d5ec7a80e47" />
-        <param execution_type="ADSP" /> <!-- value: "WDSP" "ADSP" "DYNAMIC" -->
-        <param library="libsmwrapper.so" />
+        <param execution_type="WDSP" /> <!-- value: "WDSP" "ADSP" "DYNAMIC" -->
         <param max_cpe_phrases="1" />
         <param max_cpe_users="1" />
         <param max_ape_phrases="1" />
@@ -214,18 +190,6 @@
         <!-- wdsp_fluence_type: fluence disabled: "NONE" -->
         <!-- fluence enabled: "FLUENCE_DMIC", "FLUENCE_TMIC", "FLUENCE_QMIC" -->
         <param wdsp_fluence_type="NONE" />
-        <gcs_usecase>
-            <param uid="0x5" />
-            <param acdb_devices="DEVICE_HANDSET_MIC_CPE, DEVICE_HANDSET_TMIC_CPE, DEVICE_HEADSET_MIC_CPE" />
-            <!-- module_id, instance_id, param_id -->
-            <param load_sound_model_ids="0x00012C2E, 0x6, 0x00012C14" />
-            <param confidence_levels_ids="0x00012C2E, 0x6, 0x00012C28" />
-            <param detection_event_ids="0x00012C2E, 0x6, 0x00012B05" />
-            <param read_cmd_ids="0x00020013, 0x6, 0x00020015" />
-            <param read_rsp_ids="0x00020013, 0x6, 0x00020016" />
-            <param custom_config_ids="0x00012C2E, 0x6, 0x00012C2D" />
-            <param det_event_type_ids="0x00012C2E, 0x6, 0x00012C2C" />
-        </gcs_usecase>
         <!-- Module and param ids with which the algorithm is integrated
             in non-graphite firmware (note these must come after gcs params)
             Extends flexibility to have different ids based on execution type.
@@ -234,11 +198,13 @@
             <param execution_mode="ADSP" />
             <param app_type="4" /> <!-- app type for MD used in ACDB -->
             <param in_channels="1"/> <!-- Module input channels -->
-            <param load_sound_model_ids="0x00012C22, 0x00012C14" />
-            <param unload_sound_model_ids="0x00012C22, 0x00012C15" />
-            <param confidence_levels_ids="0x00012C22, 0x00012C07" />
-            <param det_event_type_ids="0x00012C22, 0x00012C2C" />
-            <param custom_config_ids="0x00012C22, 0x00012C30" />
+            <module_params>
+                <param load_sound_model_ids="0x00012C22, 0x0, 0x00012C14" />
+                <param unload_sound_model_ids="0x00012C22, 0x0, 0x00012C15" />
+                <param confidence_levels_ids="0x00012C22, 0x0, 0x00012C07" />
+                <param det_event_type_ids="0x00012C22, 0x0, 0x00012C2C" />
+                <param custom_config_ids="0x00012C22, 0x0, 0x00012C30" />
+            </module_params>
         </lsm_usecase>
 
         <!-- format: "ADPCM_packet" or "PCM_packet" !-->
@@ -249,11 +215,10 @@
         <param client_capture_read_delay="2000" />
     </sound_model_config>
 
-<!-- Sound model config for Hotword !-->
+    <!-- Google Hotword -->
     <sound_model_config>
         <param vendor_uuid="7038ddc8-30f2-11e6-b0ac-40a8f03d3f15" />
         <param execution_type="WDSP" /> <!-- value: "WDSP" "ADSP" "DYNAMIC" -->
-        <param library="none" />
         <param max_cpe_phrases="1" />
         <param max_cpe_users="1" />
         <param max_ape_phrases="1" />
@@ -265,62 +230,67 @@
         <!-- adm_cfg_profile should match with the one defined under adm_config -->
         <!-- Set it to NONE if LSM directly connects to AFE -->
         <param adm_cfg_profile="NONE" />
-        <!-- fluence_type: "FLUENCE", "FLUENCE_DMIC", "FLUENCE_TMIC", -->
-        <!-- "FLUENCE_QMIC". param value is valid when adm_cfg_profile="FLUENCE"-->
+        <!-- fluence_type: "FLUENCE", "FLUENCE_DMIC", "FLUENCE_TMIC"   -->
+        <!-- "FLUENCE_QMIC". Param value is valid when adm_cfg_profile -->
+        <!-- is one of FLUENCE, FLUENCE_STEREO, FFECNS values          -->
         <param fluence_type="FLUENCE_DMIC" />
         <!-- wdsp_fluence_type: fluence disabled: "NONE" -->
-        <!-- fluence enabled: "FLUENCE_DMIC", "FLUENCE_TMIC", "FLUENCE_QMIC" -->
+        <!-- fluence enabled: "FLUENCE_DMIC", "FLUENCE_QMIC" -->
         <param wdsp_fluence_type="NONE" />
-        <gcs_usecase>
-            <param uid="0x3" />
-            <param acdb_devices="DEVICE_HANDSET_MIC_CPE, DEVICE_HANDSET_TMIC_CPE" />
-            <param load_sound_model_ids="0x18000001, 0x4, 0x00012C14" />
-            <param confidence_levels_ids="0x18000001, 0x4, 0x00012C28" />
-            <param detection_event_ids="0x18000001, 0x4, 0x00012C29" />
-            <param read_cmd_ids="0x00020013, 0x4, 0x00020015" />
-            <param read_rsp_ids="0x00020013, 0x4, 0x00020016" />
-            <param custom_config_ids="0x18000001, 0x4, 0x00012C20" />
-        </gcs_usecase>
-        <gcs_usecase>
-            <param uid="0x4" />
-            <param acdb_devices="DEVICE_HANDSET_DMIC_CPE" />
-            <param load_sound_model_ids="0x18000001, 0x5, 0x00012C14" />
-            <param confidence_levels_ids="0x18000001, 0x5, 0x00012C28" />
-            <param detection_event_ids="0x18000001, 0x5, 0x00012C29" />
-            <param read_cmd_ids="0x00020013, 0x5, 0x00020015" />
-            <param read_rsp_ids="0x00020013, 0x5, 0x00020016" />
-            <param custom_config_ids="0x18000001, 0x5, 0x00012C20" />
-        </gcs_usecase>
-        <!-- Module and param ids with which the algorithm is integrated
-            in non-graphite firmware (note these must come after gcs params)
-            Extends flexibility to have different ids based on execution type.
-            valid execution_type values: "WDSP" "ADSP" -->
         <lsm_usecase>
             <param execution_mode="ADSP" />
             <param app_type="3" /> <!-- app type used in ACDB -->
             <param in_channels="1"/> <!-- Module input channels -->
-            <param load_sound_model_ids="0x18000001, 0x00012C14" />
-            <param unload_sound_model_ids="0x18000001, 0x00012C15" />
-            <param confidence_levels_ids="0x18000001, 0x00012C07" />
-            <param operation_mode_ids="0x18000001, 0x00012C02" />
-            <param polling_enable_ids="0x18000001, 0x00012C1B" />
-            <param custom_config_ids="0x18000001, 0x00012C20" />
-        </lsm_usecase>
-
-        <lsm_usecase>
-            <param execution_mode="WDSP" />
-            <param load_sound_model_ids="0x18000001, 0x00012C14" />
-            <param unload_sound_model_ids="0x18000001, 0x00012C15" />
-            <param confidence_levels_ids="0x18000001, 0x00012C07" />
-            <param operation_mode_ids="0x18000001, 0x00012C02" />
-            <param custom_config_ids="0x18000001, 0x00012C20" />
+            <module_params>
+                <param load_sound_model_ids="0x18000001, 0x0, 0x00012C14" />
+                <param unload_sound_model_ids="0x18000001, 0x0, 0x00012C15" />
+                <param confidence_levels_ids="0x18000001, 0x0, 0x00012C07" />
+                <param operation_mode_ids="0x18000001, 0x0, 0x00012C02" />
+                <param polling_enable_ids="0x18000001, 0x0, 0x00012C1B" />
+                <param custom_config_ids="0x18000001, 0x0, 0x00012C20" />
+            </module_params>
         </lsm_usecase>
 
         <!-- format: "ADPCM_packet" or "PCM_packet" !-->
         <!-- transfer_mode: "FTRT" or "RT" -->
         <!--  kw_duration is in milli seconds. It is valid only for FTRT
             transfer mode -->
-        <param capture_keyword="PCM_packet, RT, 2000" />
+        <param capture_keyword="PCM_raw, FTRT, 2000" />
+        <param client_capture_read_delay="2000" />
+    </sound_model_config>
+
+    <!-- Google Music Detection -->
+    <sound_model_config>
+        <param vendor_uuid="9f6ad62a-1f0b-11e7-87c5-40a8f03d3f15" />
+        <param execution_type="WDSP" /> <!-- value: "WDSP" "ADSP" "DYNAMIC" -->
+        <param max_ape_phrases="1" />
+        <param max_ape_users="1" />
+        <!-- Profile specific data which the algorithm can support -->
+        <param sample_rate="16000" />
+        <param bit_width="16" />
+        <param out_channels="1"/> <!-- Module output channels -->
+        <!-- fluence enabled: "FLUENCE_DMIC", "FLUENCE_QMIC" -->
+        <param wdsp_fluence_type="NONE" />
+        <!-- adm_cfg_profile should match with the one defined under adm_config -->
+        <!-- Set it to NONE if LSM directly connects to AFE -->
+        <param adm_cfg_profile="NONE" />
+        <param fluence_type="FLUENCE_DMIC" />
+        <lsm_usecase>
+            <param execution_mode="ADSP" />
+            <param app_type="3" /> <!-- app type used in ACDB -->
+            <param in_channels="1"/> <!-- Module input channels -->
+            <module_params>
+                <param load_sound_model_ids="0x18000001, 0x0, 0x00012C14" />
+                <param unload_sound_model_ids="0x18000001, 0x0, 0x00012C15" />
+                <param confidence_levels_ids="0x18000001, 0x0, 0x00012C07" />
+                <param operation_mode_ids="0x18000001, 0x0, 0x00012C02" />
+                <param polling_enable_ids="0x18000001, 0x0, 0x00012C1B" />
+                <param custom_config_ids="0x18000001, 0x0, 0x00012C20" />
+            </module_params>
+        </lsm_usecase>
+        <!--  kw_duration is in milli seconds. It is valid only for FTRT
+            transfer mode -->
+        <param capture_keyword="MULAW_raw, FTRT, 5000" />
         <param client_capture_read_delay="2000" />
     </sound_model_config>
 
diff --git a/hal/audio_extn/Android.mk b/hal/audio_extn/Android.mk
index db80656..bc8392d 100755
--- a/hal/audio_extn/Android.mk
+++ b/hal/audio_extn/Android.mk
@@ -1160,7 +1160,7 @@
         system/media/audio/include
 
 LOCAL_SHARED_LIBRARIES:= \
-        android.frameworks.automotive.powerpolicy-ndk_platform \
+        android.frameworks.automotive.powerpolicy-V1-ndk_platform \
         libbase \
         libbinder_ndk \
         libcutils \
diff --git a/hal/audio_extn/soundtrigger.c b/hal/audio_extn/soundtrigger.c
index 330c9cb..b3df579 100644
--- a/hal/audio_extn/soundtrigger.c
+++ b/hal/audio_extn/soundtrigger.c
@@ -561,7 +561,7 @@
     struct stream_in *active_input = adev_get_active_input(st_dev->adev);
     audio_source_t  source = (active_input == NULL) ?
                                AUDIO_SOURCE_DEFAULT : active_input->source;
-    if (voice_is_call_state_active_in_call(st_dev->adev)) {
+    if (voice_is_in_call(st_dev->adev)) {
         ev_info.u.usecase.type = USECASE_TYPE_VOICE_CALL;
     } else if ((st_dev->adev->mode == AUDIO_MODE_IN_COMMUNICATION ||
                 source == AUDIO_SOURCE_VOICE_COMMUNICATION) &&
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 601a63f..278a3e5 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -3078,6 +3078,30 @@
     }
     enable_audio_route(adev, usecase);
 
+    if (uc_id == USECASE_AUDIO_PLAYBACK_VOIP) {
+        struct stream_in *voip_in = get_voice_communication_input(adev);
+        struct audio_usecase *voip_in_usecase = NULL;
+        voip_in_usecase = get_usecase_from_list(adev, USECASE_AUDIO_RECORD_VOIP);
+        if (voip_in != NULL &&
+            voip_in_usecase != NULL &&
+            !(out_snd_device == AUDIO_DEVICE_OUT_SPEAKER ||
+              out_snd_device == AUDIO_DEVICE_OUT_SPEAKER_SAFE) &&
+            (voip_in_usecase->in_snd_device ==
+            platform_get_input_snd_device(adev->platform, voip_in,
+                    &usecase->stream.out->device_list,usecase->type))) {
+            /*
+             * if VOIP TX is enabled before VOIP RX, needs to re-route the TX path
+             * for enabling echo-reference-voip with correct port
+             */
+            ALOGD("%s: VOIP TX is enabled before VOIP RX,needs to re-route the TX path",__func__);
+            disable_audio_route(adev, voip_in_usecase);
+            disable_snd_device(adev, voip_in_usecase->in_snd_device);
+            enable_snd_device(adev, voip_in_usecase->in_snd_device);
+            enable_audio_route(adev, voip_in_usecase);
+        }
+    }
+
+
     audio_extn_qdsp_set_device(usecase);
 
     /* If input stream is already running then effect needs to be
@@ -5466,7 +5490,9 @@
         latency = period_ms + platform_render_latency(out) / 1000;
     } else {
         latency = (out->config.period_count * out->config.period_size * 1000) /
-           (out->config.rate);
+                   (out->config.rate);
+        if (out->usecase == USECASE_AUDIO_PLAYBACK_DEEP_BUFFER)
+            latency += platform_render_latency(out)/1000;
     }
 
     if (!out->standby && is_a2dp_out_device_type(&out->device_list))
@@ -8790,12 +8816,14 @@
             struct listnode *node;
             list_for_each(node, &adev->usecase_list) {
                 usecase = node_to_item(node, struct audio_usecase, list);
-                if (usecase->stream.in && (usecase->type == PCM_CAPTURE) &&
+                if (usecase->stream.in && (usecase->type == PCM_CAPTURE ||
+                                           usecase->type == VOICE_CALL) &&
                     (!is_btsco_device(SND_DEVICE_NONE, usecase->in_snd_device))) {
                     ALOGD("BT_SCO ON, switch all in use case to it");
                     select_devices(adev, usecase->id);
                     }
-                if (usecase->stream.out && (usecase->type == PCM_PLAYBACK) &&
+                if (usecase->stream.out && (usecase->type == PCM_PLAYBACK ||
+                                            usecase->type == VOICE_CALL) &&
                     (!is_btsco_device(usecase->out_snd_device, SND_DEVICE_NONE))) {
                      ALOGD("BT_SCO ON, switch all out use case to it");
                      select_devices(adev, usecase->id);
@@ -10478,14 +10506,16 @@
             reassign_device_list(&out->device_list, AUDIO_DEVICE_OUT_SPEAKER, "");
             list_for_each(node, &adev->usecase_list) {
                 usecase = node_to_item(node, struct audio_usecase, list);
-                if ((usecase != uc_info) &&
-                        platform_check_backends_match(SND_DEVICE_OUT_SPEAKER,
-                                                      usecase->out_snd_device)) {
+                if ((usecase->type != PCM_CAPTURE) && (usecase != uc_info) &&
+                    !is_a2dp_out_device_type(&usecase->stream.out->device_list) &&
+                    platform_check_backends_match(SND_DEVICE_OUT_SPEAKER,
+                                                  usecase->out_snd_device)) {
                     assign_devices(&out->device_list, &usecase->stream.out->device_list);
                     break;
                 }
             }
-            if (uc_info->out_snd_device == SND_DEVICE_OUT_BT_A2DP) {
+            if (is_a2dp_out_device_type(&devices) &&
+                list_length(&devices) == 1) {
                 out->a2dp_muted = true;
                 if (is_offload_usecase(out->usecase)) {
                     if (out->offload_state == OFFLOAD_STATE_PLAYING)
@@ -10791,8 +10821,7 @@
             configured_low_latency_capture_period_size = trial;
         }
     }
-    if ((property_get("vendor.audio_hal.in_period_size", value, NULL) > 0) ||
-        (property_get("audio_hal.in_period_size", value, NULL) > 0)) {
+    if (property_get("vendor.audio_hal.in_period_size", value, NULL) > 0) {
         trial = atoi(value);
         if (period_size_is_plausible_for_low_latency(trial)) {
             configured_low_latency_capture_period_size = trial;
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index 0a68567..ca5164f 100755
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -5488,7 +5488,7 @@
     struct audio_backend_cfg backend_cfg = {0};
     bool is_bus_dev_usecase = false;
 
-    if (voice_is_in_call_or_call_screen(my_data->adev))
+    if (voice_is_in_call_or_call_screen(my_data->adev) && (usecase->type == PCM_CAPTURE))
         is_incall_rec_usecase = voice_is_in_call_rec_stream(usecase->stream.in);
 
     if (compare_device_type(&usecase->device_list, AUDIO_DEVICE_OUT_BUS))
@@ -5496,7 +5496,7 @@
 
     if (usecase->type == PCM_PLAYBACK)
         snd_device = usecase->out_snd_device;
-    else if ((usecase->type == PCM_CAPTURE) && is_incall_rec_usecase)
+    else if (is_incall_rec_usecase)
         snd_device = voice_get_incall_rec_snd_device(usecase->in_snd_device);
     else if ((usecase->type == PCM_HFP_CALL) || (usecase->type == PCM_CAPTURE)||
             (usecase->type == ICC_CALL) || (usecase->type == SYNTH_LOOPBACK))
@@ -9555,7 +9555,9 @@
             ALOGD("%s:becf: afe: %s mixer set to %d bit for %x format", __func__,
                   my_data->current_backend_cfg[backend_idx].bitwidth_mixer_ctl, bit_width, format);
             for (int idx = 0; idx < MAX_CODEC_BACKENDS; idx++) {
-                if (my_data->current_backend_cfg[idx].bitwidth_mixer_ctl) {
+                if (my_data->current_backend_cfg[idx].bitwidth_mixer_ctl
+                        && strcmp(my_data->current_backend_cfg[idx].bitwidth_mixer_ctl,
+                        my_data->current_backend_cfg[backend_idx].bitwidth_mixer_ctl) == 0) {
                     ctl = mixer_get_ctl_by_name(adev->mixer,
                                  my_data->current_backend_cfg[idx].bitwidth_mixer_ctl);
                     id_string = platform_get_mixer_control(ctl);
@@ -9660,7 +9662,9 @@
             ALOGD("%s:becf: afe: %s set to %s", __func__,
                   my_data->current_backend_cfg[backend_idx].samplerate_mixer_ctl, rate_str);
             for (int idx = 0; idx < MAX_CODEC_BACKENDS; idx++) {
-                if (my_data->current_backend_cfg[idx].samplerate_mixer_ctl) {
+                if (my_data->current_backend_cfg[idx].samplerate_mixer_ctl
+                        && strcmp(my_data->current_backend_cfg[idx].samplerate_mixer_ctl,
+                        my_data->current_backend_cfg[backend_idx].samplerate_mixer_ctl) == 0) {
                     ctl = mixer_get_ctl_by_name(adev->mixer,
                                  my_data->current_backend_cfg[idx].samplerate_mixer_ctl);
                     id_string = platform_get_mixer_control(ctl);
@@ -9715,7 +9719,9 @@
             ALOGD("%s:becf: afe: %s set to %s", __func__,
                   my_data->current_backend_cfg[backend_idx].channels_mixer_ctl, channel_cnt_str);
             for (int idx = 0; idx < MAX_CODEC_BACKENDS; idx++) {
-                if (my_data->current_backend_cfg[idx].channels_mixer_ctl) {
+                if (my_data->current_backend_cfg[idx].channels_mixer_ctl &&
+                        strcmp(my_data->current_backend_cfg[idx].channels_mixer_ctl,
+                        my_data->current_backend_cfg[backend_idx].channels_mixer_ctl) == 0) {
                     ctl = mixer_get_ctl_by_name(adev->mixer,
                                  my_data->current_backend_cfg[idx].channels_mixer_ctl);
                     id_string = platform_get_mixer_control(ctl);
diff --git a/hal/voice.c b/hal/voice.c
index fdca74a..230ceed 100644
--- a/hal/voice.c
+++ b/hal/voice.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013-2020, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2021, The Linux Foundation. All rights reserved.
  * Not a contribution.
  *
  * Copyright (C) 2013 The Android Open Source Project
@@ -204,6 +204,7 @@
     disable_snd_device(adev, uc_info->in_snd_device);
 
     adev->voice.lte_call = false;
+    adev->voice.in_call = false;
 
     list_remove(&uc_info->list);
     free(uc_info);
@@ -244,6 +245,8 @@
         return -ENOMEM;
     }
 
+    adev->voice.in_call = true;
+
     uc_info->id = usecase_id;
     uc_info->type = VOICE_CALL;
     uc_info->stream.out = adev->current_call_output;
@@ -263,7 +266,6 @@
 
     if (is_sco_out_device_type(&uc_info->device_list) && !adev->bt_sco_on) {
         ALOGE("start_call: couldn't find BT SCO, SCO is not ready");
-        adev->voice.in_call = false;
         ret = -EIO;
         goto error_start_voice;
     }
@@ -725,12 +727,12 @@
 {
     int ret = 0;
 
-    adev->voice.in_call = false;
     ret = voice_extn_stop_call(adev);
     if (ret == -ENOSYS) {
         ret = voice_stop_usecase(adev, USECASE_VOICE_CALL);
     }
 
+    adev->voice.in_call = false;
     return ret;
 }