Merge "qssi: Set AUDIO_FEATURE_ENABLED_AUDIOSPHERE to true"
diff --git a/configs/kona/audio_configs.xml b/configs/kona/audio_configs.xml
index 1afcd33..f27a18e 100644
--- a/configs/kona/audio_configs.xml
+++ b/configs/kona/audio_configs.xml
@@ -28,11 +28,11 @@
 IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 -->
 <configs>
-        <!-- system properties -->
-        <property name="audio.offload.video" value="true"/>
+        <!-- APM Configs -->
+        <property name="audio.deep_buffer.media" value="true"/>
         <property name="audio.offload.disable" value="false"/>
         <property name="audio.offload.min.duration.secs" value="60"/>
-        <property name="audio.deep_buffer.media" value="true"/>
+        <property name="audio.offload.video" value="true"/>
         <property name="persist.vendor.audio.sva.conc.enabled" value="false"/>
         <property name="persist.vendor.audio.va_concurrency_enabled" value="false"/>
         <property name="vendor.audio.av.streaming.offload.enable" value="false"/>
@@ -45,23 +45,17 @@
         <property name="vendor.voice.playback.conc.disabled" value="false"/>
         <property name="vendor.voice.record.conc.disabled" value="false"/>
         <property name="vendor.voice.voip.conc.disabled" value="false"/>
+        <flag name="audio_extn_formats_enabled" value="true" />
+        <flag name="audio_extn_hdmi_spk_enabled" value="true" />
+        <flag name="use_xml_audio_policy_conf" value="true" />
+        <flag name="voice_concurrency" value="false" />
 
+        <!-- AV Configs -->
         <property name="vendor.audio.use.sw.alac.decoder" value="true"/>
         <property name="vendor.audio.use.sw.ape.decoder" value="true"/>
         <property name="vendor.audio.use.sw.mpegh.decoder" value="false"/>
         <property name="vendor.audio.flac.sw.decoder.24bit" value="true"/>
         <property name="vendor.audio.hw.aac.encoder" value="true"/>
-
-        <!-- feature flags -->
-        <flag name="audio_extn_hdmi_spk_enabled" value="true" />
-        <flag name="audio_extn_formats_enabled" value="true" />
-        <flag name="audio_extn_afe_proxy_enabled" value="true" />
-        <flag name="compress_voip_enabled" value="false" />
-        <flag name="fm_power_opt" value="true" />
-        <flag name="voice_concurrency" value="false" />
-        <flag name="record_play_concurrency" value="false" />
-        <flag name="use_xml_audio_policy_conf" value="true" />
-
         <flag name="aac_adts_offload_enabled" value="true" />
         <flag name="alac_offload_enabled" value="true" />
         <flag name="ape_offload_enabled" value="true" />
@@ -71,4 +65,47 @@
         <flag name="qti_flac_decoder" value="true" />
         <flag name="vorbis_offload_enabled" value="true" />
         <flag name="wma_offload_enabled" value="true" />
+
+        <!-- AHAL Configs -->
+        <flag name="a2dp_offload_enabled" value="true" />
+        <flag name="anc_headset_enabled" value="true" />
+        <flag name="audiosphere_enabled" value="true" />
+        <flag name="battery_listener_enabled" value="true" />
+        <flag name="compress_capture_enabled" value="false" />
+        <flag name="compress_in_enabled" value="true" />
+        <flag name="compress_metadata_needed" value="true" />
+        <flag name="concurrent_capture_enabled" value="true" />
+        <flag name="custom_stereo_enabled" value="true" />
+        <flag name="display_port_enabled" value="true" />
+        <flag name="dsm_feedback_enabled" value="false" />
+        <flag name="dynamic_ecns_enabled" value="true" />
+        <flag name="ext_hw_plugin_enabled" value="true" />
+        <flag name="ext_qdsp_enabled" value="false" />
+        <flag name="ext_spkr_enabled" value="false" />
+        <flag name="ext_spkr_tfa_enabled" value="false" />
+        <flag name="fluence_enabled" value="true" />
+        <flag name="hdmi_edid_enabled" value="true" />
+        <flag name="hdmi_passthrough_enabled" value="true" />
+        <flag name="hfp_enabled" value="true" />
+        <flag name="hifi_audio_enabled" value="false" />
+        <flag name="hwdep_cal_enabled" value="false" />
+        <flag name="incall_music_enabled" value="true" />
+        <flag name="keep_alive_enabled" value="true" />
+        <flag name="kpi_optimize_enabled" value="true" />
+        <flag name="receiver_aided_stereo" value="true" />
+        <flag name="snd_monitor_enabled" value="true" />
+        <flag name="source_track_enabled" value="true" />
+        <flag name="spkr_prot_enabled" value="true" />
+        <flag name="ssrec_enabled" value="true" />
+        <flag name="usb_offload_burst_mode" value="true" />
+        <flag name="usb_offload_enabled" value="true" />
+        <flag name="usb_offload_sidetone_vol_enabled" value="false" />
+        <flag name="use_deep_buffer_as_primary_output" value="false" />
+        <flag name="vbat_enabled" value="true" />
+
+        <!-- Common configs between APM and AHAL -->
+        <flag name="afe_proxy_enabled" value="true" />
+        <flag name="compress_voip_enabled" value="false" />
+        <flag name="fm_power_opt" value="true" />
+        <flag name="record_play_concurrency" value="false" />
 </configs>
diff --git a/configs/kona/audio_configs_stock.xml b/configs/kona/audio_configs_stock.xml
new file mode 100644
index 0000000..7a4817a
--- /dev/null
+++ b/configs/kona/audio_configs_stock.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+Copyright (c) 2019, 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
+met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+    * Neither the name of The Linux Foundation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<configs>
+        <!-- AHAL Configs -->
+        <flag name="a2dp_offload_enabled" value="true" />
+        <flag name="afe_proxy_enabled" value="false" />
+        <flag name="anc_headset_enabled" value="false" />
+        <flag name="audiosphere_enabled" value="false" />
+        <flag name="battery_listener_enabled" value="false" />
+        <flag name="compress_capture_enabled" value="false" />
+        <flag name="compress_in_enabled" value="false" />
+        <flag name="compress_metadata_needed" value="false" />
+        <flag name="compress_voip_enabled" value="false" />
+        <flag name="concurrent_capture_enabled" value="true" />
+        <flag name="custom_stereo_enabled" value="false" />
+        <flag name="display_port_enabled" value="false" />
+        <flag name="dsm_feedback_enabled" value="false" />
+        <flag name="dynamic_ecns_enabled" value="false" />
+        <flag name="ext_hw_plugin_enabled" value="false" />
+        <flag name="ext_qdsp_enabled" value="true" />
+        <flag name="ext_spkr_enabled" value="true" />
+        <flag name="ext_spkr_tfa_enabled" value="false" />
+        <flag name="fluence_enabled" value="false" />
+        <flag name="fm_power_opt" value="false" />
+        <flag name="hdmi_edid_enabled" value="false" />
+        <flag name="hdmi_passthrough_enabled" value="false" />
+        <flag name="hfp_enabled" value="true" />
+        <flag name="hifi_audio_enabled" value="false" />
+        <flag name="hwdep_cal_enabled" value="true" />
+        <flag name="incall_music_enabled" value="true" />
+        <flag name="keep_alive_enabled" value="false" />
+        <flag name="kpi_optimize_enabled" value="false" />
+        <flag name="receiver_aided_stereo" value="false" />
+        <flag name="record_play_concurrency" value="false" />
+        <flag name="snd_monitor_enabled" value="true" />
+        <flag name="source_track_enabled" value="false" />
+        <flag name="spkr_prot_enabled" value="true" />
+        <flag name="ssrec_enabled" value="false" />
+        <flag name="usb_offload_burst_mode" value="false" />
+        <flag name="usb_offload_enabled" value="true" />
+        <flag name="usb_offload_sidetone_vol_enabled" value="false" />
+        <flag name="use_deep_buffer_as_primary_output" value="false" />
+        <flag name="vbat_enabled" value="false" />
+</configs>
diff --git a/configs/kona/sound_trigger_platform_info.xml b/configs/kona/sound_trigger_platform_info.xml
index 09ebdce..668af5a 100644
--- a/configs/kona/sound_trigger_platform_info.xml
+++ b/configs/kona/sound_trigger_platform_info.xml
@@ -54,12 +54,13 @@
         <param DEVICE_HANDSET_MIC_APE="100" />
         <param DEVICE_HANDSET_MIC_PP_APE="135" />
         <param DEVICE_HANDSET_DMIC_APE="149" />
-        <param DEVICE_HANDSET_DMIC_LPI_APE="149" />
+        <param DEVICE_HANDSET_DMIC_LPI_APE="179" />
         <param DEVICE_HANDSET_TMIC_APE="157" />
-        <param DEVICE_HANDSET_TMIC_LPI_APE="157" />
+        <param DEVICE_HANDSET_TMIC_LPI_APE="180" />
         <param DEVICE_HANDSET_QMIC_APE="137" />
-        <param DEVICE_HANDSET_QMIC_LPI_APE="137" />
+        <param DEVICE_HANDSET_QMIC_LPI_APE="181" />
         <param DEVICE_HEADSET_MIC_APE="141" />
+        <param DEVICE_HEADSET_MIC_APE_LPI="182" />
     </acdb_ids>
 
     <!-- Multiple sound_model_config tags can be listed, each with unique   -->
diff --git a/configs/msmnile/audio_configs.xml b/configs/msmnile/audio_configs.xml
index 1afcd33..f27a18e 100644
--- a/configs/msmnile/audio_configs.xml
+++ b/configs/msmnile/audio_configs.xml
@@ -28,11 +28,11 @@
 IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 -->
 <configs>
-        <!-- system properties -->
-        <property name="audio.offload.video" value="true"/>
+        <!-- APM Configs -->
+        <property name="audio.deep_buffer.media" value="true"/>
         <property name="audio.offload.disable" value="false"/>
         <property name="audio.offload.min.duration.secs" value="60"/>
-        <property name="audio.deep_buffer.media" value="true"/>
+        <property name="audio.offload.video" value="true"/>
         <property name="persist.vendor.audio.sva.conc.enabled" value="false"/>
         <property name="persist.vendor.audio.va_concurrency_enabled" value="false"/>
         <property name="vendor.audio.av.streaming.offload.enable" value="false"/>
@@ -45,23 +45,17 @@
         <property name="vendor.voice.playback.conc.disabled" value="false"/>
         <property name="vendor.voice.record.conc.disabled" value="false"/>
         <property name="vendor.voice.voip.conc.disabled" value="false"/>
+        <flag name="audio_extn_formats_enabled" value="true" />
+        <flag name="audio_extn_hdmi_spk_enabled" value="true" />
+        <flag name="use_xml_audio_policy_conf" value="true" />
+        <flag name="voice_concurrency" value="false" />
 
+        <!-- AV Configs -->
         <property name="vendor.audio.use.sw.alac.decoder" value="true"/>
         <property name="vendor.audio.use.sw.ape.decoder" value="true"/>
         <property name="vendor.audio.use.sw.mpegh.decoder" value="false"/>
         <property name="vendor.audio.flac.sw.decoder.24bit" value="true"/>
         <property name="vendor.audio.hw.aac.encoder" value="true"/>
-
-        <!-- feature flags -->
-        <flag name="audio_extn_hdmi_spk_enabled" value="true" />
-        <flag name="audio_extn_formats_enabled" value="true" />
-        <flag name="audio_extn_afe_proxy_enabled" value="true" />
-        <flag name="compress_voip_enabled" value="false" />
-        <flag name="fm_power_opt" value="true" />
-        <flag name="voice_concurrency" value="false" />
-        <flag name="record_play_concurrency" value="false" />
-        <flag name="use_xml_audio_policy_conf" value="true" />
-
         <flag name="aac_adts_offload_enabled" value="true" />
         <flag name="alac_offload_enabled" value="true" />
         <flag name="ape_offload_enabled" value="true" />
@@ -71,4 +65,47 @@
         <flag name="qti_flac_decoder" value="true" />
         <flag name="vorbis_offload_enabled" value="true" />
         <flag name="wma_offload_enabled" value="true" />
+
+        <!-- AHAL Configs -->
+        <flag name="a2dp_offload_enabled" value="true" />
+        <flag name="anc_headset_enabled" value="true" />
+        <flag name="audiosphere_enabled" value="true" />
+        <flag name="battery_listener_enabled" value="true" />
+        <flag name="compress_capture_enabled" value="false" />
+        <flag name="compress_in_enabled" value="true" />
+        <flag name="compress_metadata_needed" value="true" />
+        <flag name="concurrent_capture_enabled" value="true" />
+        <flag name="custom_stereo_enabled" value="true" />
+        <flag name="display_port_enabled" value="true" />
+        <flag name="dsm_feedback_enabled" value="false" />
+        <flag name="dynamic_ecns_enabled" value="true" />
+        <flag name="ext_hw_plugin_enabled" value="true" />
+        <flag name="ext_qdsp_enabled" value="false" />
+        <flag name="ext_spkr_enabled" value="false" />
+        <flag name="ext_spkr_tfa_enabled" value="false" />
+        <flag name="fluence_enabled" value="true" />
+        <flag name="hdmi_edid_enabled" value="true" />
+        <flag name="hdmi_passthrough_enabled" value="true" />
+        <flag name="hfp_enabled" value="true" />
+        <flag name="hifi_audio_enabled" value="false" />
+        <flag name="hwdep_cal_enabled" value="false" />
+        <flag name="incall_music_enabled" value="true" />
+        <flag name="keep_alive_enabled" value="true" />
+        <flag name="kpi_optimize_enabled" value="true" />
+        <flag name="receiver_aided_stereo" value="true" />
+        <flag name="snd_monitor_enabled" value="true" />
+        <flag name="source_track_enabled" value="true" />
+        <flag name="spkr_prot_enabled" value="true" />
+        <flag name="ssrec_enabled" value="true" />
+        <flag name="usb_offload_burst_mode" value="true" />
+        <flag name="usb_offload_enabled" value="true" />
+        <flag name="usb_offload_sidetone_vol_enabled" value="false" />
+        <flag name="use_deep_buffer_as_primary_output" value="false" />
+        <flag name="vbat_enabled" value="true" />
+
+        <!-- Common configs between APM and AHAL -->
+        <flag name="afe_proxy_enabled" value="true" />
+        <flag name="compress_voip_enabled" value="false" />
+        <flag name="fm_power_opt" value="true" />
+        <flag name="record_play_concurrency" value="false" />
 </configs>
diff --git a/configs/msmnile/audio_configs_stock.xml b/configs/msmnile/audio_configs_stock.xml
new file mode 100644
index 0000000..7a4817a
--- /dev/null
+++ b/configs/msmnile/audio_configs_stock.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+Copyright (c) 2019, 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
+met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+    * Neither the name of The Linux Foundation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<configs>
+        <!-- AHAL Configs -->
+        <flag name="a2dp_offload_enabled" value="true" />
+        <flag name="afe_proxy_enabled" value="false" />
+        <flag name="anc_headset_enabled" value="false" />
+        <flag name="audiosphere_enabled" value="false" />
+        <flag name="battery_listener_enabled" value="false" />
+        <flag name="compress_capture_enabled" value="false" />
+        <flag name="compress_in_enabled" value="false" />
+        <flag name="compress_metadata_needed" value="false" />
+        <flag name="compress_voip_enabled" value="false" />
+        <flag name="concurrent_capture_enabled" value="true" />
+        <flag name="custom_stereo_enabled" value="false" />
+        <flag name="display_port_enabled" value="false" />
+        <flag name="dsm_feedback_enabled" value="false" />
+        <flag name="dynamic_ecns_enabled" value="false" />
+        <flag name="ext_hw_plugin_enabled" value="false" />
+        <flag name="ext_qdsp_enabled" value="true" />
+        <flag name="ext_spkr_enabled" value="true" />
+        <flag name="ext_spkr_tfa_enabled" value="false" />
+        <flag name="fluence_enabled" value="false" />
+        <flag name="fm_power_opt" value="false" />
+        <flag name="hdmi_edid_enabled" value="false" />
+        <flag name="hdmi_passthrough_enabled" value="false" />
+        <flag name="hfp_enabled" value="true" />
+        <flag name="hifi_audio_enabled" value="false" />
+        <flag name="hwdep_cal_enabled" value="true" />
+        <flag name="incall_music_enabled" value="true" />
+        <flag name="keep_alive_enabled" value="false" />
+        <flag name="kpi_optimize_enabled" value="false" />
+        <flag name="receiver_aided_stereo" value="false" />
+        <flag name="record_play_concurrency" value="false" />
+        <flag name="snd_monitor_enabled" value="true" />
+        <flag name="source_track_enabled" value="false" />
+        <flag name="spkr_prot_enabled" value="true" />
+        <flag name="ssrec_enabled" value="false" />
+        <flag name="usb_offload_burst_mode" value="false" />
+        <flag name="usb_offload_enabled" value="true" />
+        <flag name="usb_offload_sidetone_vol_enabled" value="false" />
+        <flag name="use_deep_buffer_as_primary_output" value="false" />
+        <flag name="vbat_enabled" value="false" />
+</configs>
diff --git a/configs/msmnile/mixer_paths_tavil.xml b/configs/msmnile/mixer_paths_tavil.xml
index a684cc0..cd867ff 100644
--- a/configs/msmnile/mixer_paths_tavil.xml
+++ b/configs/msmnile/mixer_paths_tavil.xml
@@ -235,6 +235,7 @@
     <ctl name="SLIM_0_RX_Voice Mixer VoiceMMode1" value="0" />
     <ctl name="SLIM_6_RX_Voice Mixer VoiceMMode1" value="0" />
     <ctl name="VoiceMMode1_Tx Mixer SLIM_0_TX_MMode1" value="0" />
+    <ctl name="VoiceMMode1_Tx Mixer SLIM_1_TX_MMode1" value="0" />
     <!-- Multimode Voice1 BTSCO -->
     <ctl name="SLIM_7_RX_Voice Mixer VoiceMMode1" value="0" />
     <ctl name="VoiceMMode1_Tx Mixer SLIM_7_TX_MMode1" value="0" />
@@ -251,6 +252,7 @@
     <ctl name="SLIM_0_RX_Voice Mixer VoiceMMode2" value="0" />
     <ctl name="SLIM_6_RX_Voice Mixer VoiceMMode2" value="0" />
     <ctl name="VoiceMMode2_Tx Mixer SLIM_0_TX_MMode2" value="0" />
+    <ctl name="VoiceMMode2_Tx Mixer SLIM_1_TX_MMode2" value="0" />
     <!-- Multimode Voice2 BTSCO -->
     <ctl name="SLIM_7_RX_Voice Mixer VoiceMMode2" value="0" />
     <ctl name="VoiceMMode2_Tx Mixer SLIM_7_TX_MMode2" value="0" />
@@ -292,6 +294,7 @@
     <ctl name="SLIM_0_RX_Voice Mixer Voip" value="0" />
     <ctl name="SLIM_6_RX_Voice Mixer Voip" value="0" />
     <ctl name="Voip_Tx Mixer SLIM_0_TX_Voip" value="0" />
+    <ctl name="Voip_Tx Mixer SLIM_1_TX_Voip" value="0" />
     <ctl name="SLIM_7_RX_Voice Mixer Voip" value="0" />
     <ctl name="Voip_Tx Mixer SLIM_7_TX_Voip" value="0" />
     <ctl name="AFE_PCM_RX_Voice Mixer Voip" value="0" />
@@ -1645,7 +1648,7 @@
 
     <path name="compress-voip-call headphones">
         <ctl name="SLIM_6_RX_Voice Mixer Voip" value="1" />
-        <ctl name="Voip_Tx Mixer SLIM_0_TX_Voip" value="1" />
+        <ctl name="Voip_Tx Mixer SLIM_1_TX_Voip" value="1" />
     </path>
 
 
@@ -1681,7 +1684,7 @@
 
     <path name="voicemmode1-call headphones">
         <ctl name="SLIM_6_RX_Voice Mixer VoiceMMode1" value="1" />
-        <ctl name="VoiceMMode1_Tx Mixer SLIM_0_TX_MMode1" value="1" />
+        <ctl name="VoiceMMode1_Tx Mixer SLIM_1_TX_MMode1" value="1" />
     </path>
 
     <path name="voicemmode1-call bt-sco">
@@ -1726,7 +1729,7 @@
 
     <path name="voicemmode2-call headphones">
         <ctl name="SLIM_6_RX_Voice Mixer VoiceMMode2" value="1" />
-        <ctl name="VoiceMMode2_Tx Mixer SLIM_0_TX_MMode2" value="1" />
+        <ctl name="VoiceMMode2_Tx Mixer SLIM_1_TX_MMode2" value="1" />
     </path>
 
     <path name="voicemmode2-call bt-sco">
diff --git a/hal/audio_extn/a2dp.c b/hal/audio_extn/a2dp.c
index 90199cf..400d7d0 100644
--- a/hal/audio_extn/a2dp.c
+++ b/hal/audio_extn/a2dp.c
@@ -50,8 +50,7 @@
 #endif
 
 #define AUDIO_PARAMETER_A2DP_STARTED "A2dpStarted"
-#define BT_IPC_SOURCE_LIB_NAME  "libbthost_if.so"
-#define BT_IPC_SOURCE_LIB_NAME_QTI "libbthost_if_qti.so"
+#define BT_IPC_SOURCE_LIB_NAME "btaudio_offload_if.so"
 #define BT_IPC_SINK_LIB_NAME    "libbthost_if_sink.so"
 #define MEDIA_FMT_NONE                                     0
 #define MEDIA_FMT_AAC                                      0x00010DA6
@@ -200,6 +199,7 @@
     APTX_AD_44_1 = 0x2, // 44.1kHz
 } enc_aptx_ad_s_rate;
 
+typedef void (*bt_audio_pre_init_t)(void);
 typedef int (*audio_source_open_t)(void);
 typedef int (*audio_source_close_t)(void);
 typedef int (*audio_source_start_t)(void);
@@ -278,6 +278,7 @@
 struct a2dp_data {
     struct audio_device *adev;
     void *bt_lib_source_handle;
+    bt_audio_pre_init_t bt_audio_pre_init;
     audio_source_open_t audio_source_open;
     audio_source_close_t audio_source_close;
     audio_source_start_t audio_source_start;
@@ -842,34 +843,42 @@
     return is_enhanced_fwk;
 }
 
-/* API to open BT IPC library to start IPC communication for BT Source*/
-static void open_a2dp_source()
-{
+static void open_a2dp_source() {
     int ret = 0;
 
     ALOGD(" Open A2DP source start ");
-    if (a2dp.bt_lib_source_handle == NULL) {
-        if (is_running_with_enhanced_fwk == UNINITIALIZED)
-            is_running_with_enhanced_fwk = check_if_enhanced_fwk();
-        if (!is_running_with_enhanced_fwk) {
-            ALOGD(" Requesting for BT lib handle");
-            a2dp.bt_lib_source_handle = dlopen(BT_IPC_SOURCE_LIB_NAME, RTLD_NOW);
-            if (a2dp.bt_lib_source_handle == NULL) {
-                ALOGE("%s: DLOPEN failed for %s", __func__, BT_IPC_SOURCE_LIB_NAME);
-                ret = -ENOSYS;
-                goto init_fail;
+
+    if (a2dp.bt_lib_source_handle && a2dp.audio_source_open) {
+        if (a2dp.bt_state_source == A2DP_STATE_DISCONNECTED) {
+            ALOGD("calling BT stream open");
+            ret = a2dp.audio_source_open();
+            if(ret != 0) {
+                ALOGE("Failed to open source stream for a2dp: status %d", ret);
             }
+            a2dp.bt_state_source = A2DP_STATE_CONNECTED;
         } else {
-            ALOGD(" Requesting for BT QTI lib handle");
-            a2dp.bt_lib_source_handle = dlopen(BT_IPC_SOURCE_LIB_NAME_QTI, RTLD_NOW);
-            if (a2dp.bt_lib_source_handle == NULL) {
-                ALOGE("%s: DLOPEN failed for %s", __func__, BT_IPC_SOURCE_LIB_NAME_QTI);
-                ret = -ENOSYS;
-                goto init_fail;
-            }
+            ALOGD("Called a2dp open with improper state %d", a2dp.bt_state_source);
+        }
+    } else {
+        ALOGE("a2dp handle is not identified, Ignoring open request");
+        a2dp.bt_state_source = A2DP_STATE_DISCONNECTED;
+    }
+}
+/* API to open BT IPC library to start IPC communication for BT Source*/
+static void a2dp_source_init()
+{
+    ALOGD("a2dp_source_init START");
+    if (a2dp.bt_lib_source_handle == NULL) {
+        ALOGD("Requesting for BT lib handle");
+        a2dp.bt_lib_source_handle = dlopen(BT_IPC_SOURCE_LIB_NAME, RTLD_NOW);
+        if (a2dp.bt_lib_source_handle == NULL) {
+            ALOGE("%s: dlopen failed for %s", __func__, BT_IPC_SOURCE_LIB_NAME);
+            return;
         }
     }
 
+    a2dp.bt_audio_pre_init = (bt_audio_pre_init_t)
+                  dlsym(a2dp.bt_lib_source_handle, "bt_audio_pre_init");
     a2dp.audio_source_open = (audio_source_open_t)
                   dlsym(a2dp.bt_lib_source_handle, "audio_stream_open");
     a2dp.audio_source_start = (audio_source_start_t)
@@ -895,32 +904,12 @@
     a2dp.audio_is_tws_mono_mode_enable = (audio_is_tws_mono_mode_enable_t)
                    dlsym(a2dp.bt_lib_source_handle,"isTwsMonomodeEnable");
 
-    if (a2dp.bt_lib_source_handle && a2dp.audio_source_open) {
-        if (a2dp.bt_state_source == A2DP_STATE_DISCONNECTED) {
-            ALOGD("calling BT stream open");
-            ret = a2dp.audio_source_open();
-            if (ret != 0) {
-                ALOGE("Failed to open source stream for a2dp: status %d", ret);
-                goto init_fail;
-            }
-            a2dp.bt_state_source = A2DP_STATE_CONNECTED;
-        } else {
-            ALOGD("Called a2dp open with improper state, Ignoring request state %d", a2dp.bt_state_source);
-        }
-    } else {
-        ALOGE("a2dp handle is not identified, Ignoring open request");
-        a2dp.bt_state_source = A2DP_STATE_DISCONNECTED;
-        goto init_fail;
-    }
-
-init_fail:
-    if (ret != 0 && (a2dp.bt_lib_source_handle != NULL)) {
-        dlclose(a2dp.bt_lib_source_handle);
-        a2dp.bt_lib_source_handle = NULL;
-    }
-    if (vndk_fwk_lib_handle != NULL) {
-        dlclose(vndk_fwk_lib_handle);
-        vndk_fwk_lib_handle = NULL;
+    if (is_running_with_enhanced_fwk == UNINITIALIZED)
+        is_running_with_enhanced_fwk = check_if_enhanced_fwk();
+    if (a2dp.bt_lib_source_handle && is_running_with_enhanced_fwk
+        && a2dp.bt_audio_pre_init) {
+            ALOGD("calling BT module preinit");
+            a2dp.bt_audio_pre_init();
     }
 }
 
@@ -2711,7 +2700,7 @@
   a2dp.abr_config.imc_instance = 0;
   a2dp.abr_config.abr_tx_handle = NULL;
   a2dp.is_tws_mono_mode_on = false;
-
+  a2dp_source_init();
   // init function pointers
   fp_platform_get_pcm_device_id =
               init_config.fp_platform_get_pcm_device_id;
diff --git a/hal/audio_extn/spkr_protection.c b/hal/audio_extn/spkr_protection.c
index 8b00f97..9c30bbe 100644
--- a/hal/audio_extn/spkr_protection.c
+++ b/hal/audio_extn/spkr_protection.c
@@ -101,7 +101,7 @@
 #ifdef LINUX_ENABLED
 #define CALIB_FILE "/data/audio/audio.cal"
 #else
-#define CALIB_FILE "/data/vendor/misc/audio/audio.cal"
+#define CALIB_FILE "/data/vendor/audio/audio.cal"
 #endif
 
 /*Time between retries for calibartion or intial wait time
diff --git a/hal/audio_extn/usb.c b/hal/audio_extn/usb.c
index 7f784ed..5c2ec9c 100644
--- a/hal/audio_extn/usb.c
+++ b/hal/audio_extn/usb.c
@@ -1168,8 +1168,14 @@
             usb_card_info->usb_card = card;
             usb_card_info->usb_device_type = device;
             usb_get_sidetone_mixer(usb_card_info);
-            if (!usb_get_device_cap_config(usb_card_info, card))
-                usbmod->is_capture_supported = true;
+            struct usb_card_config *usb_card_info_temp = NULL;
+            usb_card_info_temp = calloc(1, sizeof(struct usb_card_config));
+            if (usb_card_info_temp != NULL) {
+                list_init(&usb_card_info_temp->usb_device_conf_list);
+                if (!usb_get_capability(USB_CAPTURE, usb_card_info_temp, card))
+                    usbmod->is_capture_supported = true;
+                free(usb_card_info_temp);
+            }
             list_add_tail(&usbmod->usb_card_conf_list, &usb_card_info->list);
             goto exit;
         }