summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNaresh Tanniru <ntanniru@codeaurora.org>2018-10-12 20:42:07 +0530
committerNaresh Tanniru <ntanniru@codeaurora.org>2018-10-15 17:00:56 +0530
commitcb5b57891769acd7d9a8e6081c326c16e072664c (patch)
tree777f09b955fc6ce7114cc3c287934803367cdab9
parent1921622b0def507510ad166b2f545ff091f5dd26 (diff)
parente1f65e84d306206a860961f662bd78060cac06b1 (diff)
downloadandroid_hardware_qcom_audio-cb5b57891769acd7d9a8e6081c326c16e072664c.tar.gz
android_hardware_qcom_audio-cb5b57891769acd7d9a8e6081c326c16e072664c.tar.bz2
android_hardware_qcom_audio-cb5b57891769acd7d9a8e6081c326c16e072664c.zip
Merge e1f65e84d306206a860961f662bd78060cac06b1 on remote branch
Change-Id: I5cb17e69a3b1e4fa78b7a130cbabc8bc7b11932b
-rw-r--r--configs/apq8098_latv/apq8098_latv.mk5
-rw-r--r--configs/msm8909/msm8909.mk4
-rw-r--r--configs/msm8937/mixer_paths_sdm439_pm8953.xml83
-rw-r--r--configs/msm8937/msm8937.mk3
-rw-r--r--configs/msm8953/audio_platform_info_extcodec.xml13
-rw-r--r--configs/msm8953/mixer_paths.xml40
-rw-r--r--configs/msm8953/mixer_paths_mtp.xml72
-rw-r--r--configs/msm8953/mixer_paths_qrd_skuh.xml32
-rw-r--r--configs/msm8953/mixer_paths_qrd_skuhf.xml36
-rw-r--r--configs/msm8953/mixer_paths_qrd_skui.xml35
-rw-r--r--configs/msm8953/mixer_paths_qrd_skum.xml36
-rwxr-xr-xconfigs/msm8953/mixer_paths_skuk.xml36
-rw-r--r--configs/msm8953/mixer_paths_wcd9335.xml99
-rw-r--r--configs/msm8953/msm8953.mk14
-rw-r--r--configs/msm8953/sound_trigger_mixer_paths_wcd9335.xml153
-rw-r--r--configs/msm8953/sound_trigger_platform_info.xml52
-rw-r--r--configs/sdm660/audio_policy_configuration.xml9
-rw-r--r--configs/sdm670/mixer_paths_lc.xml2458
-rw-r--r--configs/sdm710/audio_output_policy.conf72
-rw-r--r--configs/sdm710/audio_platform_info_skuw.xml4
-rw-r--r--configs/sdm710/mixer_paths_tasha.xml25
-rw-r--r--configs/sdm710/mixer_paths_tavil.xml25
-rw-r--r--configs/sdm710/sdm710.mk5
-rw-r--r--configs/sdm845/mixer_paths_i2s.xml11
-rw-r--r--configure.ac10
-rw-r--r--hal/Android.mk10
-rw-r--r--hal/Makefile.am5
-rw-r--r--[-rwxr-xr-x]hal/audio_extn/audio_defs.h17
-rwxr-xr-xhal/audio_extn/audio_extn.c82
-rw-r--r--hal/audio_extn/audio_extn.h23
-rw-r--r--hal/audio_extn/compress_in.c28
-rwxr-xr-x[-rw-r--r--]hal/audio_extn/ffv.c69
-rw-r--r--hal/audio_extn/hfp.c2
-rw-r--r--hal/audio_extn/hw_loopback.c170
-rwxr-xr-xhal/audio_extn/ip_hdlr_intf.c10
-rw-r--r--[-rwxr-xr-x]hal/audio_extn/qaf.c0
-rw-r--r--hal/audio_extn/soundtrigger.c38
-rw-r--r--hal/audio_extn/spkr_protection.c1
-rw-r--r--hal/audio_extn/utils.c38
-rw-r--r--hal/audio_hw.c160
-rw-r--r--[-rwxr-xr-x]hal/audio_hw.h20
-rw-r--r--hal/audio_hw_extn_api.c21
-rw-r--r--hal/msm8916/platform.c182
-rw-r--r--hal/msm8916/platform.h1
-rw-r--r--hal/msm8974/hw_info.c36
-rw-r--r--[-rwxr-xr-x]hal/msm8974/platform.c315
-rw-r--r--hal/msm8974/platform.h11
-rw-r--r--hal/platform_api.h6
-rw-r--r--mm-audio/aenc-aac/qdsp6/Makefile.am1
-rw-r--r--mm-audio/aenc-amrnb/qdsp6/Makefile.am1
-rw-r--r--mm-audio/aenc-g711/qdsp6/Makefile.am1
-rw-r--r--post_proc/Android.mk4
-rw-r--r--post_proc/Makefile.am1
-rw-r--r--qahw/Makefile.am4
-rw-r--r--qahw/configure.ac1
-rw-r--r--qahw/inc/qahw_defs.h32
-rw-r--r--qahw/src/qahw.c49
-rw-r--r--qahw_api/inc/qahw_defs.h14
-rw-r--r--qahw_api/inc/qahw_effect_audiosphere.h6
-rw-r--r--qahw_api/inc/qahw_effect_bassboost.h6
-rw-r--r--qahw_api/inc/qahw_effect_equalizer.h6
-rw-r--r--qahw_api/inc/qahw_effect_presetreverb.h6
-rw-r--r--qahw_api/inc/qahw_effect_virtualizer.h6
-rw-r--r--qahw_api/src/qahw_api.cpp9
-rw-r--r--qahw_api/test/qahw_multi_record_test.c91
-rw-r--r--qahw_api/test/qahw_playback_test.c52
-rw-r--r--qahw_api/test/qahw_playback_test.h4
-rw-r--r--qahw_api/test/qap_wrapper_extn.c16
-rw-r--r--qahw_api/test/trans_loopback_test.c70
69 files changed, 4654 insertions, 303 deletions
diff --git a/configs/apq8098_latv/apq8098_latv.mk b/configs/apq8098_latv/apq8098_latv.mk
index 582cd5c5..b5cdcd9c 100644
--- a/configs/apq8098_latv/apq8098_latv.mk
+++ b/configs/apq8098_latv/apq8098_latv.mk
@@ -69,7 +69,10 @@ AUDIO_FEATURE_ENABLED_MS12_SECURITY := true
AUDIO_FEATURE_ENABLED_RAS := true
AUDIO_FEATURE_ENABLED_DYNAMIC_LOG := true
AUDIO_FEATURE_ENABLED_SND_MONITOR := true
-AUDIO_FEATURE_ENABLED_MS12_ARM := true
+
+#Disabling the feature AUDIO_FEATURE_ENABLED_MS12_ARM for P compatibility.
+#Will revisit if needed for LATV.
+AUDIO_FEATURE_ENABLED_MS12_ARM := false
##AUDIO_FEATURE_FLAGS
#Audio Specific device overlays
diff --git a/configs/msm8909/msm8909.mk b/configs/msm8909/msm8909.mk
index e8aaf8ab..da2314b4 100644
--- a/configs/msm8909/msm8909.mk
+++ b/configs/msm8909/msm8909.mk
@@ -165,6 +165,10 @@ vendor.audio.dolby.ds2.enabled=true
PRODUCT_PROPERTY_OVERRIDES += \
persist.vendor.audio.hw.binder.size_kbyte=1024
+#Disable split a2dp
+PRODUCT_PROPERTY_OVERRIDES += \
+persist.vendor.bt.enable.splita2dp=false
+
PRODUCT_PACKAGES += \
android.hardware.audio@2.0-service \
android.hardware.audio@2.0-impl \
diff --git a/configs/msm8937/mixer_paths_sdm439_pm8953.xml b/configs/msm8937/mixer_paths_sdm439_pm8953.xml
index 328701c4..33eb0fc0 100644
--- a/configs/msm8937/mixer_paths_sdm439_pm8953.xml
+++ b/configs/msm8937/mixer_paths_sdm439_pm8953.xml
@@ -319,6 +319,10 @@
<path name="deep-buffer-playback" />
</path>
+ <path name="deep-buffer-playback speaker-and-headphones">
+ <path name="deep-buffer-playback" />
+ </path>
+
<path name="deep-buffer-playback transmission-fm">
<ctl name="INTERNAL_FM_RX Audio Mixer MultiMedia1" value="1" />
</path>
@@ -380,6 +384,10 @@
<path name="low-latency-playback" />
</path>
+ <path name="low-latency-playback speaker-and-headphones">
+ <path name="low-latency-playback" />
+ </path>
+
<path name="low-latency-playback transmission-fm">
<ctl name="INTERNAL_FM_RX Audio Mixer MultiMedia5" value="1" />
</path>
@@ -445,6 +453,10 @@
<path name="audio-ull-playback" />
</path>
+ <path name="audio-ull-playback speaker-and-headphones">
+ <path name="audio-ull-playback" />
+ </path>
+
<path name="compress-offload-playback">
<ctl name="PRI_MI2S_RX Audio Mixer MultiMedia4" value="1" />
</path>
@@ -501,6 +513,10 @@
<path name="compress-offload-playback" />
</path>
+ <path name="compress-offload-playback speaker-and-headphones">
+ <path name="compress-offload-playback" />
+ </path>
+
<path name="compress-offload-playback2">
<ctl name="PRI_MI2S_RX Audio Mixer MultiMedia7" value="1" />
</path>
@@ -536,15 +552,28 @@
<ctl name="QUIN_MI2S_RX Audio Mixer MultiMedia7" value="1" />
</path>
+ <path name="compress-offload-playback2 usb-headphones">
+ <path name="compress-offload-playback2 afe-proxy" />
+ </path>
+
<path name="compress-offload-playback2 speaker-and-hdmi">
<path name="compress-offload-playback2 hdmi" />
<path name="compress-offload-playback2" />
</path>
+ <path name="compress-offload-playback2 speaker-and-usb-headphones">
+ <path name="compress-offload-playback2 usb-headphones" />
+ <path name="compress-offload-playback2" />
+ </path>
+
<path name="compress-offload-playback2 afe-proxy">
<ctl name="AFE_PCM_RX Audio Mixer MultiMedia7" value="1" />
</path>
+ <path name="compress-offload-playback2 speaker-and-headphones">
+ <path name="compress-offload-playback2" />
+ </path>
+
<path name="compress-offload-playback transmission-fm">
<ctl name="INTERNAL_FM_RX Audio Mixer MultiMedia4" value="1" />
</path>
@@ -589,6 +618,10 @@
<path name="compress-offload-playback3" />
</path>
+ <path name="compress-offload-playback3 speaker-and-headphones">
+ <path name="compress-offload-playback3" />
+ </path>
+
<path name="compress-offload-playback4">
<ctl name="PRI_MI2S_RX Audio Mixer MultiMedia11" value="1" />
</path>
@@ -629,6 +662,10 @@
<path name="compress-offload-playback4" />
</path>
+ <path name="compress-offload-playback4 speaker-and-headphones">
+ <path name="compress-offload-playback4" />
+ </path>
+
<path name="compress-offload-playback5">
<ctl name="PRI_MI2S_RX Audio Mixer MultiMedia12" value="1" />
</path>
@@ -669,6 +706,10 @@
<path name="compress-offload-playback5" />
</path>
+ <path name="compress-offload-playback5 speaker-and-headphones">
+ <path name="compress-offload-playback5" />
+ </path>
+
<path name="compress-offload-playback6">
<ctl name="PRI_MI2S_RX Audio Mixer MultiMedia13" value="1" />
</path>
@@ -709,6 +750,10 @@
<path name="compress-offload-playback6" />
</path>
+ <path name="compress-offload-playback6 speaker-and-headphones">
+ <path name="compress-offload-playback6" />
+ </path>
+
<path name="compress-offload-playback7">
<ctl name="PRI_MI2S_RX Audio Mixer MultiMedia14" value="1" />
</path>
@@ -749,6 +794,10 @@
<path name="compress-offload-playback7" />
</path>
+ <path name="compress-offload-playback7 speaker-and-headphones">
+ <path name="compress-offload-playback7" />
+ </path>
+
<path name="audio-record">
<ctl name="MultiMedia1 Mixer TERT_MI2S_TX" value="1" />
</path>
@@ -886,6 +935,10 @@
<ctl name="VoWLAN_Tx Mixer AFE_PCM_TX_VoWLAN" value="1" />
</path>
+ <path name="vowlan-call speaker-and-headphones">
+ <path name="vowlan-call" />
+ </path>
+
<path name="voicemmode1-call">
<ctl name="PRI_MI2S_RX_Voice Mixer VoiceMMode1" value="1" />
<ctl name="VoiceMMode1_Tx Mixer TERT_MI2S_TX_MMode1" value="1" />
@@ -910,6 +963,10 @@
<path name="voicemmode1-call usb-headphones" />
</path>
+ <path name="voicemmode1-call speaker-and-headphones">
+ <path name="voicemmode1-call" />
+ </path>
+
<path name="voicemmode2-call">
<ctl name="PRI_MI2S_RX_Voice Mixer VoiceMMode2" value="1" />
<ctl name="VoiceMMode2_Tx Mixer TERT_MI2S_TX_MMode2" value="1" />
@@ -934,6 +991,10 @@
<path name="voicemmode2-call usb-headphones" />
</path>
+ <path name="voicemmode2-call speaker-and-headphones">
+ <path name="voicemmode2-call" />
+ </path>
+
<path name="hfp-sco">
<ctl name="PRI_MI2S_RX Port Mixer INTERNAL_BT_SCO_TX" value="1" />
<ctl name="INTERNAL_BT_SCO_RX Audio Mixer MultiMedia6" value="1" />
@@ -1148,6 +1209,10 @@
<ctl name="Voip_Tx Mixer AFE_PCM_TX_Voip" value='1' />
</path>
+ <path name="compress-voip-call speaker-and-headphones">
+ <path name="compress-voip-call" />
+ </path>
+
<path name="qchat-call">
<ctl name="PRI_MI2S_RX_Voice Mixer QCHAT" value="1" />
<ctl name="QCHAT_Tx Mixer TERT_MI2S_TX_QCHAT" value="1" />
@@ -1228,6 +1293,10 @@
<ctl name="SpkrMono VISENSE Switch" value="1" />
</path>
+ <path name="voice-speaker-protected">
+ <path name="speaker-protected" />
+ </path>
+
<path name="speaker-mic">
<path name="adc1" />
<ctl name="IIR1 INP1 MUX" value="DEC1" />
@@ -1317,6 +1386,11 @@
<path name="headphones" />
</path>
+ <path name="wsa-speaker-and-headphones">
+ <path name="wsa-speaker" />
+ <path name="headphones" />
+ </path>
+
<path name="usb-headphones">
</path>
@@ -1331,6 +1405,11 @@
<path name="usb-headphones" />
</path>
+ <path name="wsa-speaker-and-usb-headphones">
+ <path name="wsa-speaker" />
+ <path name="usb-headphones" />
+ </path>
+
<path name="voice-rec-mic">
<path name="handset-mic" />
</path>
@@ -1482,4 +1561,8 @@
<path name="speaker-and-headphones" />
</path>
+ <path name="wsa-speaker-and-line">
+ <path name="wsa-speaker-and-headphones" />
+ </path>
+
</mixer>
diff --git a/configs/msm8937/msm8937.mk b/configs/msm8937/msm8937.mk
index 0c9b27f2..14da1109 100644
--- a/configs/msm8937/msm8937.mk
+++ b/configs/msm8937/msm8937.mk
@@ -238,6 +238,9 @@ ro.af.client_heap_size_kbyte=7168
PRODUCT_PROPERTY_OVERRIDES += \
persist.vendor.audio.hw.binder.size_kbyte=1024
+#Disable split a2dp
+PRODUCT_PROPERTY_OVERRIDES += \
+persist.vendor.bt.enable.splita2dp=false
# for HIDL related packages
PRODUCT_PACKAGES += \
diff --git a/configs/msm8953/audio_platform_info_extcodec.xml b/configs/msm8953/audio_platform_info_extcodec.xml
index 66d2ecc2..481d8797 100644
--- a/configs/msm8953/audio_platform_info_extcodec.xml
+++ b/configs/msm8953/audio_platform_info_extcodec.xml
@@ -25,6 +25,13 @@
<!-- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -->
<!-- IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -->
<audio_platform_info>
+ <acdb_ids>
+ <device name="SND_DEVICE_IN_HANDSET_QMIC" acdb_id="140"/>
+ <device name="SND_DEVICE_IN_HANDSET_6MIC" acdb_id="140"/>
+ <device name="SND_DEVICE_IN_HANDSET_8MIC" acdb_id="140"/>
+ <device name="SND_DEVICE_IN_EC_REF_LOOPBACK_MONO" acdb_id="140"/>
+ <device name="SND_DEVICE_IN_EC_REF_LOOPBACK_STEREO" acdb_id="140"/>
+ </acdb_ids>
<bit_width_configs>
<device name="SND_DEVICE_OUT_SPEAKER" bit_width="24"/>
</bit_width_configs>
@@ -50,12 +57,16 @@
<usecase name="USECASE_AUDIO_SPKR_CALIB_TX" type="in" id="37"/>
<usecase name="USECASE_QCHAT_CALL" type="in" id="42"/>
<usecase name="USECASE_QCHAT_CALL" type="out" id="42"/>
+ <usecase name="USECASE_AUDIO_EC_REF_LOOPBACK" type="in" id="14"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_SILENCE" type="out" id="14"/>
</pcm_ids>
<config_params>
<param key="spkr_1_tz_name" value="wsatz.11"/>
<param key="spkr_2_tz_name" value="wsatz.12"/>
<param key="native_audio_mode" value="src"/>
- <param key="input_mic_max_count" value="4"/>
+ <param key="input_mic_max_count" value="6"/>
+ <param key="ffv_split_ec_ref_data" value="false"/>
+ <param key="ffv_ec_ref_channel_count" value="1"/>
</config_params>
<backend_names>
<device name="SND_DEVICE_OUT_BT_SCO_WB" interface="INT_BT_SCO_RX"/>
diff --git a/configs/msm8953/mixer_paths.xml b/configs/msm8953/mixer_paths.xml
index cde55ea6..31c0d3e8 100644
--- a/configs/msm8953/mixer_paths.xml
+++ b/configs/msm8953/mixer_paths.xml
@@ -285,6 +285,10 @@
<path name="deep-buffer-playback" />
</path>
+ <path name="deep-buffer-playback speaker-and-headphones">
+ <path name="deep-buffer-playback" />
+ </path>
+
<path name="deep-buffer-playback transmission-fm">
<ctl name="INTERNAL_FM_RX Audio Mixer MultiMedia1" value="1" />
</path>
@@ -341,6 +345,10 @@
<ctl name="INTERNAL_FM_RX Audio Mixer MultiMedia5" value="1" />
</path>
+ <path name="low-latency-playback speaker-and-headphones">
+ <path name="low-latency-playback" />
+ </path>
+
<path name="audio-ull-playback">
<ctl name="PRI_MI2S_RX Audio Mixer MultiMedia3" value="1" />
</path>
@@ -393,6 +401,10 @@
<path name="audio-ull-playback" />
</path>
+ <path name="audio-ull-playback speaker-and-headphones">
+ <path name="audio-ull-playback" />
+ </path>
+
<path name="compress-offload-playback">
<ctl name="PRI_MI2S_RX Audio Mixer MultiMedia4" value="1" />
</path>
@@ -440,8 +452,8 @@
<path name="compress-offload-playback" />
</path>
- <path name="compress-offload-playback transmission-fm">
- <ctl name="INTERNAL_FM_RX Audio Mixer MultiMedia4" value="1" />
+ <path name="compress-offload-playback speaker-and-headphones">
+ <path name="compress-offload-playback" />
</path>
<path name="compress-offload-playback2">
@@ -479,6 +491,10 @@
<path name="compress-offload-playback2" />
</path>
+ <path name="compress-offload-playback transmission-fm">
+ <ctl name="INTERNAL_FM_RX Audio Mixer MultiMedia4" value="1" />
+ </path>
+
<path name="compress-offload-playback3">
<ctl name="PRI_MI2S_RX Audio Mixer MultiMedia10" value="1" />
</path>
@@ -791,6 +807,10 @@
<ctl name="VoWLAN_Tx Mixer AFE_PCM_TX_VoWLAN" value="1" />
</path>
+ <path name="vowlan-call speaker-and-headphones">
+ <path name="vowlan-call" />
+ </path>
+
<path name="voicemmode1-call">
<ctl name="PRI_MI2S_RX_Voice Mixer VoiceMMode1" value="1" />
<ctl name="VoiceMMode1_Tx Mixer TERT_MI2S_TX_MMode1" value="1" />
@@ -815,6 +835,10 @@
<path name="voicemmode1-call usb-headphones" />
</path>
+ <path name="voicemmode1-call speaker-and-headphones">
+ <path name="voicemmode1-call" />
+ </path>
+
<path name="voicemmode2-call">
<ctl name="PRI_MI2S_RX_Voice Mixer VoiceMMode2" value="1" />
<ctl name="VoiceMMode2_Tx Mixer TERT_MI2S_TX_MMode2" value="1" />
@@ -839,6 +863,10 @@
<path name="voicemmode2-call usb-headphones" />
</path>
+ <path name="voicemmode2-call speaker-and-headphones">
+ <path name="voicemmode2-call" />
+ </path>
+
<path name="hfp-sco">
<ctl name="PRI_MI2S_RX Port Mixer INTERNAL_BT_SCO_TX" value="1" />
<ctl name="INTERNAL_BT_SCO_RX Audio Mixer MultiMedia6" value="1" />
@@ -1027,6 +1055,10 @@
<path name="volte-call usb-headphones" />
</path>
+ <path name="volte-call speaker-and-headphones">
+ <path name="volte-call" />
+ </path>
+
<path name="compress-voip-call">
<ctl name="PRI_MI2S_RX_Voice Mixer Voip" value="1" />
<ctl name="Voip_Tx Mixer TERT_MI2S_TX_Voip" value="1" />
@@ -1053,6 +1085,10 @@
<ctl name="Voip_Tx Mixer AFE_PCM_TX_Voip" value='1' />
</path>
+ <path name="compress-voip-call speaker-and-headphones">
+ <path name="compress-voip-call" />
+ </path>
+
<path name="qchat-call">
<ctl name="PRI_MI2S_RX_Voice Mixer QCHAT" value="1" />
<ctl name="QCHAT_Tx Mixer TERT_MI2S_TX_QCHAT" value="1" />
diff --git a/configs/msm8953/mixer_paths_mtp.xml b/configs/msm8953/mixer_paths_mtp.xml
index 5bbfc106..e4b56a1b 100644
--- a/configs/msm8953/mixer_paths_mtp.xml
+++ b/configs/msm8953/mixer_paths_mtp.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
- Copyright (c) 2015-2016, The Linux Foundation. All rights reserved.
+ Copyright (c) 2015-2016, 2018, 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
@@ -321,6 +321,10 @@
<path name="deep-buffer-playback" />
</path>
+ <path name="deep-buffer-playback speaker-and-headphones">
+ <path name="deep-buffer-playback" />
+ </path>
+
<path name="deep-buffer-playback transmission-fm">
<ctl name="INTERNAL_FM_RX Audio Mixer MultiMedia1" value="1" />
</path>
@@ -386,6 +390,10 @@
<ctl name="INTERNAL_FM_RX Audio Mixer MultiMedia5" value="1" />
</path>
+ <path name="low-latency-playback speaker-and-headphones">
+ <path name="low-latency-playback" />
+ </path>
+
<path name="audio-ull-playback">
<ctl name="PRI_MI2S_RX Audio Mixer MultiMedia3" value="1" />
</path>
@@ -447,6 +455,10 @@
<path name="audio-ull-playback" />
</path>
+ <path name="audio-ull-playback speaker-and-headphones">
+ <path name="audio-ull-playback" />
+ </path>
+
<path name="compress-offload-playback">
<ctl name="PRI_MI2S_RX Audio Mixer MultiMedia4" value="1" />
</path>
@@ -503,6 +515,10 @@
<path name="compress-offload-playback" />
</path>
+ <path name="compress-offload-playback speaker-and-headphones">
+ <path name="compress-offload-playback" />
+ </path>
+
<path name="compress-offload-playback2">
<ctl name="PRI_MI2S_RX Audio Mixer MultiMedia7" value="1" />
</path>
@@ -556,6 +572,10 @@
<path name="compress-offload-playback2" />
</path>
+ <path name="compress-offload-playback2 speaker-and-headphones">
+ <path name="compress-offload-playback2" />
+ </path>
+
<path name="compress-offload-playback transmission-fm">
<ctl name="INTERNAL_FM_RX Audio Mixer MultiMedia4" value="1" />
</path>
@@ -600,6 +620,10 @@
<path name="compress-offload-playback3" />
</path>
+ <path name="compress-offload-playback3 speaker-and-headphones">
+ <path name="compress-offload-playback3" />
+ </path>
+
<path name="compress-offload-playback4">
<ctl name="PRI_MI2S_RX Audio Mixer MultiMedia11" value="1" />
</path>
@@ -640,6 +664,10 @@
<path name="compress-offload-playback4" />
</path>
+ <path name="compress-offload-playback4 speaker-and-headphones">
+ <path name="compress-offload-playback4" />
+ </path>
+
<path name="compress-offload-playback5">
<ctl name="PRI_MI2S_RX Audio Mixer MultiMedia12" value="1" />
</path>
@@ -680,6 +708,10 @@
<path name="compress-offload-playback5" />
</path>
+ <path name="compress-offload-playback5 speaker-and-headphones">
+ <path name="compress-offload-playback5" />
+ </path>
+
<path name="compress-offload-playback6">
<ctl name="PRI_MI2S_RX Audio Mixer MultiMedia13" value="1" />
</path>
@@ -720,6 +752,10 @@
<path name="compress-offload-playback6" />
</path>
+ <path name="compress-offload-playback6 speaker-and-headphones">
+ <path name="compress-offload-playback6" />
+ </path>
+
<path name="compress-offload-playback7">
<ctl name="PRI_MI2S_RX Audio Mixer MultiMedia14" value="1" />
</path>
@@ -760,6 +796,10 @@
<path name="compress-offload-playback7" />
</path>
+ <path name="compress-offload-playback7 speaker-and-headphones">
+ <path name="compress-offload-playback7" />
+ </path>
+
<path name="audio-record">
<ctl name="MultiMedia1 Mixer TERT_MI2S_TX" value="1" />
</path>
@@ -897,6 +937,10 @@
<ctl name="VoWLAN_Tx Mixer AFE_PCM_TX_VoWLAN" value="1" />
</path>
+ <path name="vowlan-call speaker-and-headphones">
+ <path name="vowlan-call" />
+ </path>
+
<path name="voicemmode1-call">
<ctl name="PRI_MI2S_RX_Voice Mixer VoiceMMode1" value="1" />
<ctl name="VoiceMMode1_Tx Mixer TERT_MI2S_TX_MMode1" value="1" />
@@ -921,6 +965,10 @@
<path name="voicemmode1-call usb-headphones" />
</path>
+ <path name="voicemmode1-call speaker-and-headphones">
+ <path name="voicemmode1-call" />
+ </path>
+
<path name="voicemmode2-call">
<ctl name="PRI_MI2S_RX_Voice Mixer VoiceMMode2" value="1" />
<ctl name="VoiceMMode2_Tx Mixer TERT_MI2S_TX_MMode2" value="1" />
@@ -945,6 +993,10 @@
<path name="voicemmode2-call usb-headphones" />
</path>
+ <path name="voicemmode2-call speaker-and-headphones">
+ <path name="voicemmode2-call" />
+ </path>
+
<path name="hfp-sco">
<ctl name="PRI_MI2S_RX Port Mixer INTERNAL_BT_SCO_TX" value="1" />
<ctl name="INTERNAL_BT_SCO_RX Audio Mixer MultiMedia6" value="1" />
@@ -1133,6 +1185,10 @@
<path name="volte-call usb-headphones" />
</path>
+ <path name="volte-call speaker-and-headphones">
+ <path name="volte-call" />
+ </path>
+
<path name="compress-voip-call">
<ctl name="PRI_MI2S_RX_Voice Mixer Voip" value="1" />
<ctl name="Voip_Tx Mixer TERT_MI2S_TX_Voip" value="1" />
@@ -1159,6 +1215,10 @@
<ctl name="Voip_Tx Mixer AFE_PCM_TX_Voip" value='1' />
</path>
+ <path name="compress-voip-call speaker-and-headphones">
+ <path name="compress-voip-call" />
+ </path>
+
<path name="qchat-call">
<ctl name="PRI_MI2S_RX_Voice Mixer QCHAT" value="1" />
<ctl name="QCHAT_Tx Mixer TERT_MI2S_TX_QCHAT" value="1" />
@@ -1239,6 +1299,11 @@
<ctl name="SpkrMono VISENSE Switch" value="1" />
</path>
+
+ <path name="voice-speaker-protected">
+ <path name="speaker-protected" />
+ </path>
+
<path name="speaker-mic">
<path name="adc1" />
<ctl name="IIR1 INP1 MUX" value="DEC1" />
@@ -1317,6 +1382,11 @@
<path name="headphones" />
</path>
+ <path name="voice-speaker-and-voice-headphones">
+ <path name="wsa-voice-speaker" />
+ <path name="voice-headphones" />
+ </path>
+
<path name="voice-headset-mic">
<path name="headset-mic" />
</path>
diff --git a/configs/msm8953/mixer_paths_qrd_skuh.xml b/configs/msm8953/mixer_paths_qrd_skuh.xml
index d23c690f..c9aab203 100644
--- a/configs/msm8953/mixer_paths_qrd_skuh.xml
+++ b/configs/msm8953/mixer_paths_qrd_skuh.xml
@@ -256,6 +256,10 @@
<path name="deep-buffer-playback" />
</path>
+ <path name="deep-buffer-playback speaker-and-headphones">
+ <path name="deep-buffer-playback" />
+ </path>
+
<path name="deep-buffer-playback transmission-fm">
<ctl name="INTERNAL_FM_RX Audio Mixer MultiMedia1" value="1" />
</path>
@@ -308,6 +312,10 @@
<ctl name="INTERNAL_FM_RX Audio Mixer MultiMedia5" value="1" />
</path>
+ <path name="low-latency-playback speaker-and-headphones">
+ <path name="low-latency-playback" />
+ </path>
+
<path name="audio-ull-playback">
<ctl name="PRI_MI2S_RX Audio Mixer MultiMedia3" value="1" />
</path>
@@ -360,6 +368,10 @@
<path name="audio-ull-playback" />
</path>
+ <path name="audio-ull-playback speaker-and-headphones">
+ <path name="audio-ull-playback" />
+ </path>
+
<path name="compress-offload-playback">
<ctl name="PRI_MI2S_RX Audio Mixer MultiMedia4" value="1" />
</path>
@@ -408,6 +420,10 @@
<ctl name="INTERNAL_FM_RX Audio Mixer MultiMedia4" value="1" />
</path>
+ <path name="compress-offload-playback speaker-and-headphones">
+ <path name="compress-offload-playback" />
+ </path>
+
<path name="audio-record">
<ctl name="MultiMedia1 Mixer TERT_MI2S_TX" value="1" />
</path>
@@ -461,6 +477,10 @@
<ctl name="Voice_Tx Mixer AFE_PCM_TX_Voice" value="1" />
</path>
+ <path name="voice-call speaker-and-headphones">
+ <path name="voice-call" />
+ </path>
+
<path name="voice2-call">
<ctl name="PRI_MI2S_RX_Voice Mixer Voice2" value="1" />
<ctl name="Voice2_Tx Mixer TERT_MI2S_TX_Voice2" value="1" />
@@ -481,6 +501,10 @@
<ctl name="Voice2_Tx Mixer AFE_PCM_TX_Voice2" value="1" />
</path>
+ <path name="voice2-call speaker-and-headphones">
+ <path name="voice2-call" />
+ </path>
+
<path name="play-fm">
<ctl name="Internal FM RX Volume" value="1" />
<ctl name="PRI_MI2S_RX Port Mixer INTERNAL_FM_TX" value="1" />
@@ -512,6 +536,10 @@
<ctl name="VoWLAN_Tx Mixer AFE_PCM_TX_VoWLAN" value="1" />
</path>
+ <path name="vowlan-call speaker-and-headphones">
+ <path name="vowlan-call" />
+ </path>
+
<path name="hfp-sco">
<ctl name="PRI_MI2S_RX Port Mixer INTERNAL_BT_SCO_TX" value="1" />
<ctl name="INTERNAL_BT_SCO_RX Audio Mixer MultiMedia6" value="1" />
@@ -609,6 +637,10 @@
<path name="compress-voip-call bt-sco" />
</path>
+ <path name="compress-voip-call speaker-and-headphones">
+ <path name="compress-voip-call" />
+ </path>
+
<path name="listen-voice-wakeup-1">
<ctl name="LSM1 MUX" value="TERT_MI2S_TX" />
<ctl name="TERT_MI2S_TX LSM Function" value="SWAUDIO" />
diff --git a/configs/msm8953/mixer_paths_qrd_skuhf.xml b/configs/msm8953/mixer_paths_qrd_skuhf.xml
index 4ac5c383..d641b911 100644
--- a/configs/msm8953/mixer_paths_qrd_skuhf.xml
+++ b/configs/msm8953/mixer_paths_qrd_skuhf.xml
@@ -255,6 +255,10 @@
<path name="deep-buffer-playback" />
</path>
+ <path name="deep-buffer-playback speaker-and-headphones">
+ <path name="deep-buffer-playback" />
+ </path>
+
<path name="deep-buffer-playback transmission-fm">
<ctl name="INTERNAL_FM_RX Audio Mixer MultiMedia1" value="1" />
</path>
@@ -306,6 +310,10 @@
<ctl name="INTERNAL_FM_RX Audio Mixer MultiMedia5" value="1" />
</path>
+ <path name="low-latency-playback speaker-and-headphones">
+ <path name="low-latency-playback" />
+ </path>
+
<path name="audio-ull-playback">
<ctl name="PRI_MI2S_RX Audio Mixer MultiMedia3" value="1" />
</path>
@@ -358,6 +366,10 @@
<path name="audio-ull-playback" />
</path>
+ <path name="audio-ull-playback speaker-and-headphones">
+ <path name="audio-ull-playback" />
+ </path>
+
<path name="compress-offload-playback">
<ctl name="PRI_MI2S_RX Audio Mixer MultiMedia4" value="1" />
</path>
@@ -402,6 +414,10 @@
<path name="compress-offload-playback" />
</path>
+ <path name="compress-offload-playback speaker-and-headphones">
+ <path name="compress-offload-playback" />
+ </path>
+
<path name="compress-offload-playback transmission-fm">
<ctl name="INTERNAL_FM_RX Audio Mixer MultiMedia4" value="1" />
</path>
@@ -459,6 +475,10 @@
<ctl name="Voice_Tx Mixer AFE_PCM_TX_Voice" value="1" />
</path>
+ <path name="voice-call speaker-and-headphones">
+ <path name="voice-call" />
+ </path>
+
<path name="voice2-call">
<ctl name="PRI_MI2S_RX_Voice Mixer Voice2" value="1" />
<ctl name="Voice2_Tx Mixer TERT_MI2S_TX_Voice2" value="1" />
@@ -479,6 +499,10 @@
<ctl name="Voice2_Tx Mixer AFE_PCM_TX_Voice2" value="1" />
</path>
+ <path name="voice2-call speaker-and-headphones">
+ <path name="voice2-call" />
+ </path>
+
<path name="play-fm">
<ctl name="Internal FM RX Volume" value="1" />
<ctl name="PRI_MI2S_RX Port Mixer INTERNAL_FM_TX" value="1" />
@@ -510,6 +534,10 @@
<ctl name="VoWLAN_Tx Mixer AFE_PCM_TX_VoWLAN" value="1" />
</path>
+ <path name="vowlan-call speaker-and-headphones">
+ <path name="vowlan-call" />
+ </path>
+
<path name="hfp-sco">
<ctl name="PRI_MI2S_RX Port Mixer INTERNAL_BT_SCO_TX" value="1" />
<ctl name="INTERNAL_BT_SCO_RX Audio Mixer MultiMedia6" value="1" />
@@ -592,6 +620,10 @@
<ctl name="VoLTE_Tx Mixer AFE_PCM_TX_VoLTE" value="1" />
</path>
+ <path name="volte-call speaker-and-headphones">
+ <path name="volte-call" />
+ </path>
+
<path name="compress-voip-call">
<ctl name="PRI_MI2S_RX_Voice Mixer Voip" value="1" />
<ctl name="Voip_Tx Mixer TERT_MI2S_TX_Voip" value="1" />
@@ -607,6 +639,10 @@
<path name="compress-voip-call bt-sco" />
</path>
+ <path name="compress-voip-call speaker-and-headphones">
+ <path name="compress-voip-call" />
+ </path>
+
<path name="listen-voice-wakeup-1">
<ctl name="LSM1 MUX" value="TERT_MI2S_TX" />
<ctl name="TERT_MI2S_TX LSM Function" value="SWAUDIO" />
diff --git a/configs/msm8953/mixer_paths_qrd_skui.xml b/configs/msm8953/mixer_paths_qrd_skui.xml
index d23c690f..2b1cf853 100644
--- a/configs/msm8953/mixer_paths_qrd_skui.xml
+++ b/configs/msm8953/mixer_paths_qrd_skui.xml
@@ -256,6 +256,10 @@
<path name="deep-buffer-playback" />
</path>
+ <path name="deep-buffer-playback speaker-and-headphones">
+ <path name="deep-buffer-playback" />
+ </path>
+
<path name="deep-buffer-playback transmission-fm">
<ctl name="INTERNAL_FM_RX Audio Mixer MultiMedia1" value="1" />
</path>
@@ -308,6 +312,10 @@
<ctl name="INTERNAL_FM_RX Audio Mixer MultiMedia5" value="1" />
</path>
+ <path name="low-latency-playback speaker-and-headphones">
+ <path name="low-latency-playback" />
+ </path>
+
<path name="audio-ull-playback">
<ctl name="PRI_MI2S_RX Audio Mixer MultiMedia3" value="1" />
</path>
@@ -360,6 +368,10 @@
<path name="audio-ull-playback" />
</path>
+ <path name="audio-ull-playback speaker-and-headphones">
+ <path name="audio-ull-playback" />
+ </path>
+
<path name="compress-offload-playback">
<ctl name="PRI_MI2S_RX Audio Mixer MultiMedia4" value="1" />
</path>
@@ -408,6 +420,10 @@
<ctl name="INTERNAL_FM_RX Audio Mixer MultiMedia4" value="1" />
</path>
+ <path name="compress-offload-playback speaker-and-headphones">
+ <path name="compress-offload-playback" />
+ </path>
+
<path name="audio-record">
<ctl name="MultiMedia1 Mixer TERT_MI2S_TX" value="1" />
</path>
@@ -461,6 +477,9 @@
<ctl name="Voice_Tx Mixer AFE_PCM_TX_Voice" value="1" />
</path>
+ <path name="voice-call speaker-and-headphones">
+ <path name="voice-call" />
+ </path>
<path name="voice2-call">
<ctl name="PRI_MI2S_RX_Voice Mixer Voice2" value="1" />
<ctl name="Voice2_Tx Mixer TERT_MI2S_TX_Voice2" value="1" />
@@ -481,6 +500,10 @@
<ctl name="Voice2_Tx Mixer AFE_PCM_TX_Voice2" value="1" />
</path>
+ <path name="voice2-call speaker-and-headphones">
+ <path name="voice2-call" />
+ </path>
+
<path name="play-fm">
<ctl name="Internal FM RX Volume" value="1" />
<ctl name="PRI_MI2S_RX Port Mixer INTERNAL_FM_TX" value="1" />
@@ -512,6 +535,10 @@
<ctl name="VoWLAN_Tx Mixer AFE_PCM_TX_VoWLAN" value="1" />
</path>
+ <path name="vowlan-call speaker-and-headphones">
+ <path name="vowlan-call" />
+ </path>
+
<path name="hfp-sco">
<ctl name="PRI_MI2S_RX Port Mixer INTERNAL_BT_SCO_TX" value="1" />
<ctl name="INTERNAL_BT_SCO_RX Audio Mixer MultiMedia6" value="1" />
@@ -594,6 +621,10 @@
<ctl name="VoLTE_Tx Mixer AFE_PCM_TX_VoLTE" value="1" />
</path>
+ <path name="volte-call speaker-and-headphones">
+ <path name="volte-call" />
+ </path>
+
<path name="compress-voip-call">
<ctl name="PRI_MI2S_RX_Voice Mixer Voip" value="1" />
<ctl name="Voip_Tx Mixer TERT_MI2S_TX_Voip" value="1" />
@@ -609,6 +640,10 @@
<path name="compress-voip-call bt-sco" />
</path>
+ <path name="compress-voip-call speaker-and-headphones">
+ <path name="compress-voip-call" />
+ </path>
+
<path name="listen-voice-wakeup-1">
<ctl name="LSM1 MUX" value="TERT_MI2S_TX" />
<ctl name="TERT_MI2S_TX LSM Function" value="SWAUDIO" />
diff --git a/configs/msm8953/mixer_paths_qrd_skum.xml b/configs/msm8953/mixer_paths_qrd_skum.xml
index 4d766e17..06a47b04 100644
--- a/configs/msm8953/mixer_paths_qrd_skum.xml
+++ b/configs/msm8953/mixer_paths_qrd_skum.xml
@@ -271,6 +271,10 @@
<path name="deep-buffer-playback" />
</path>
+ <path name="deep-buffer-playback speaker-and-headphones">
+ <path name="deep-buffer-playback" />
+ </path>
+
<path name="deep-buffer-playback transmission-fm">
<ctl name="INTERNAL_FM_RX Audio Mixer MultiMedia1" value="1" />
</path>
@@ -327,6 +331,10 @@
<ctl name="INTERNAL_FM_RX Audio Mixer MultiMedia5" value="1" />
</path>
+ <path name="low-latency-playback speaker-and-headphones">
+ <path name="low-latency-playback" />
+ </path>
+
<path name="audio-ull-playback">
<ctl name="PRI_MI2S_RX Audio Mixer MultiMedia3" value="1" />
</path>
@@ -379,6 +387,10 @@
<path name="audio-ull-playback" />
</path>
+ <path name="audio-ull-playback speaker-and-headphones">
+ <path name="audio-ull-playback" />
+ </path>
+
<path name="compress-offload-playback">
<ctl name="PRI_MI2S_RX Audio Mixer MultiMedia4" value="1" />
</path>
@@ -426,8 +438,8 @@
<path name="compress-offload-playback" />
</path>
- <path name="compress-offload-playback transmission-fm">
- <ctl name="INTERNAL_FM_RX Audio Mixer MultiMedia4" value="1" />
+ <path name="compress-offload-playback speaker-and-headphones">
+ <path name="compress-offload-playback" />
</path>
<path name="compress-offload-playback2">
@@ -461,6 +473,10 @@
<path name="compress-offload-playback2 speaker-and-bt-sco-wb" />
</path>
+ <path name="compress-offload-playback transmission-fm">
+ <ctl name="INTERNAL_FM_RX Audio Mixer MultiMedia4" value="1" />
+ </path>
+
<path name="compress-offload-playback2 hdmi">
<ctl name="QUIN_MI2S_RX Audio Mixer MultiMedia7" value="1" />
</path>
@@ -483,6 +499,10 @@
<path name="compress-offload-playback2" />
</path>
+ <path name="compress-offload-playback2 speaker-and-headphones">
+ <path name="compress-offload-playback2" />
+ </path>
+
<path name="compress-offload-playback3">
<ctl name="PRI_MI2S_RX Audio Mixer MultiMedia10" value="1" />
</path>
@@ -762,6 +782,10 @@
<path name="voicemmode1-call usb-headphones" />
</path>
+ <path name="voicemmode1-call speaker-and-headphones">
+ <path name="voicemmode1-call" />
+ </path>
+
<path name="voicemmode2-call">
<ctl name="PRI_MI2S_RX_Voice Mixer VoiceMMode2" value="1" />
<ctl name="VoiceMMode2_Tx Mixer TERT_MI2S_TX_MMode2" value="1" />
@@ -871,6 +895,10 @@
<path name="volte-call usb-headphones" />
</path>
+ <path name="volte-call speaker-and-headphones">
+ <path name="volte-call" />
+ </path>
+
<path name="compress-voip-call">
<ctl name="PRI_MI2S_RX_Voice Mixer Voip" value="1" />
<ctl name="Voip_Tx Mixer TERT_MI2S_TX_Voip" value="1" />
@@ -897,6 +925,10 @@
<path name="afe-proxy-record afe-proxy">
</path>
+ <path name="compress-voip-call speaker-and-headphones">
+ <path name="compress-voip-call" />
+ </path>
+
<path name="qchat-call">
<ctl name="PRI_MI2S_RX_Voice Mixer QCHAT" value="1" />
<ctl name="QCHAT_Tx Mixer TERT_MI2S_TX_QCHAT" value="1" />
diff --git a/configs/msm8953/mixer_paths_skuk.xml b/configs/msm8953/mixer_paths_skuk.xml
index 54189d3c..81da4607 100755
--- a/configs/msm8953/mixer_paths_skuk.xml
+++ b/configs/msm8953/mixer_paths_skuk.xml
@@ -255,6 +255,10 @@
<path name="deep-buffer-playback" />
</path>
+ <path name="deep-buffer-playback speaker-and-headphones">
+ <path name="deep-buffer-playback" />
+ </path>
+
<path name="deep-buffer-playback transmission-fm">
<ctl name="INTERNAL_FM_RX Audio Mixer MultiMedia1" value="1" />
</path>
@@ -306,6 +310,10 @@
<ctl name="INTERNAL_FM_RX Audio Mixer MultiMedia5" value="1" />
</path>
+ <path name="low-latency-playback speaker-and-headphones">
+ <path name="low-latency-playback" />
+ </path>
+
<path name="audio-ull-playback">
<ctl name="PRI_MI2S_RX Audio Mixer MultiMedia3" value="1" />
</path>
@@ -354,6 +362,10 @@
<path name="audio-ull-playback" />
</path>
+ <path name="audio-ull-playback speaker-and-headphones">
+ <path name="audio-ull-playback" />
+ </path>
+
<path name="compress-offload-playback">
<ctl name="PRI_MI2S_RX Audio Mixer MultiMedia4" value="1" />
</path>
@@ -398,6 +410,10 @@
<path name="compress-offload-playback" />
</path>
+ <path name="compress-offload-playback speaker-and-headphones">
+ <path name="compress-offload-playback" />
+ </path>
+
<path name="compress-offload-playback transmission-fm">
<ctl name="INTERNAL_FM_RX Audio Mixer MultiMedia4" value="1" />
</path>
@@ -455,6 +471,10 @@
<ctl name="Voice_Tx Mixer AFE_PCM_TX_Voice" value="1" />
</path>
+ <path name="voice-call speaker-and-headphones">
+ <path name="voice-call" />
+ </path>
+
<path name="voice2-call">
<ctl name="PRI_MI2S_RX_Voice Mixer Voice2" value="1" />
<ctl name="Voice2_Tx Mixer TERT_MI2S_TX_Voice2" value="1" />
@@ -475,6 +495,10 @@
<ctl name="Voice2_Tx Mixer AFE_PCM_TX_Voice2" value="1" />
</path>
+ <path name="voice2-call speaker-and-headphones">
+ <path name="voice2-call" />
+ </path>
+
<path name="play-fm">
<ctl name="Internal FM RX Volume" value="1" />
<ctl name="PRI_MI2S_RX Port Mixer INTERNAL_FM_TX" value="1" />
@@ -506,6 +530,10 @@
<ctl name="VoWLAN_Tx Mixer AFE_PCM_TX_VoWLAN" value="1" />
</path>
+ <path name="vowlan-call speaker-and-headphones">
+ <path name="vowlan-call" />
+ </path>
+
<path name="hfp-sco">
<ctl name="PRI_MI2S_RX Port Mixer INTERNAL_BT_SCO_TX" value="1" />
<ctl name="INTERNAL_BT_SCO_RX Audio Mixer MultiMedia6" value="1" />
@@ -588,6 +616,10 @@
<ctl name="VoLTE_Tx Mixer AFE_PCM_TX_VoLTE" value="1" />
</path>
+ <path name="volte-call speaker-and-headphones">
+ <path name="volte-call" />
+ </path>
+
<path name="compress-voip-call">
<ctl name="PRI_MI2S_RX_Voice Mixer Voip" value="1" />
<ctl name="Voip_Tx Mixer TERT_MI2S_TX_Voip" value="1" />
@@ -603,6 +635,10 @@
<path name="compress-voip-call bt-sco" />
</path>
+ <path name="compress-voip-call speaker-and-headphones">
+ <path name="compress-voip-call" />
+ </path>
+
<path name="listen-voice-wakeup-1">
<ctl name="LSM1 MUX" value="TERT_MI2S_TX" />
<ctl name="TERT_MI2S_TX LSM Function" value="SWAUDIO" />
diff --git a/configs/msm8953/mixer_paths_wcd9335.xml b/configs/msm8953/mixer_paths_wcd9335.xml
index 51d938f0..86ef1194 100644
--- a/configs/msm8953/mixer_paths_wcd9335.xml
+++ b/configs/msm8953/mixer_paths_wcd9335.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
-<!-- Copyright (c) 2015-16, The Linux Foundation. All rights reserved. -->
+<!-- Copyright (c) 2015-16, 2018, 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 -->
@@ -569,6 +569,11 @@
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia1" value="1" />
</path>
+ <path name="silence-playback">
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia9" value="1" />
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="SLIM_RX" />
+ </path>
+
<path name="deep-buffer-playback speaker-protected">
<path name="deep-buffer-playback" />
</path>
@@ -2699,4 +2704,96 @@
<path name="speaker-and-headphones" />
</path>
+ <path name="ec-ref-audio-capture">
+ <ctl name="MultiMedia9 Mixer AFE_LOOPBACK_TX" value="1" />
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="SLIM_RX" />
+ </path>
+
+ <path name="handset-6mic">
+ <ctl name="AIF1_CAP Mixer SLIM TX1" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX2" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX3" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX4" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX5" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX6" value="1" />
+ <ctl name="SLIM_0_TX Channels" value="Six" />
+ <ctl name="SLIM TX1 MUX" value="DEC1" />
+ <ctl name="ADC MUX1" value="DMIC" />
+ <ctl name="DMIC MUX1" value="DMIC2" />
+ <ctl name="DEC1 Volume" value="96" />
+ <ctl name="SLIM TX2 MUX" value="DEC2" />
+ <ctl name="ADC MUX2" value="DMIC" />
+ <ctl name="DMIC MUX2" value="DMIC1" />
+ <ctl name="DEC2 Volume" value="96" />
+ <ctl name="SLIM TX3 MUX" value="DEC3" />
+ <ctl name="ADC MUX3" value="DMIC" />
+ <ctl name="DMIC MUX3" value="DMIC5" />
+ <ctl name="DEC3 Volume" value="96" />
+ <ctl name="SLIM TX4 MUX" value="DEC4" />
+ <ctl name="ADC MUX4" value="DMIC" />
+ <ctl name="DMIC MUX4" value="DMIC0" />
+ <ctl name="DEC4 Volume" value="96" />
+ <ctl name="SLIM TX5 MUX" value="DEC5" />
+ <ctl name="ADC MUX5" value="DMIC" />
+ <ctl name="DMIC MUX5" value="DMIC4" />
+ <ctl name="DEC5 Volume" value="96" />
+ <ctl name="SLIM TX6 MUX" value="DEC6" />
+ <ctl name="ADC MUX6" value="DMIC" />
+ <ctl name="DMIC MUX6" value="DMIC3" />
+ <ctl name="DEC6 Volume" value="96" />
+ </path>
+
+ <path name="handset-8mic">
+ <ctl name="AIF1_CAP Mixer SLIM TX1" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX2" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX3" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX4" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX5" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX6" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX7" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX8" value="1" />
+ <ctl name="SLIM_0_TX Channels" value="Eight" />
+ <ctl name="SLIM TX1 MUX" value="DEC1" />
+ <ctl name="ADC MUX1" value="DMIC" />
+ <ctl name="DMIC MUX1" value="DMIC2" />
+ <ctl name="DEC1 Volume" value="96" />
+ <ctl name="SLIM TX2 MUX" value="DEC2" />
+ <ctl name="ADC MUX2" value="DMIC" />
+ <ctl name="DMIC MUX2" value="DMIC1" />
+ <ctl name="DEC2 Volume" value="96" />
+ <ctl name="SLIM TX3 MUX" value="DEC3" />
+ <ctl name="ADC MUX3" value="DMIC" />
+ <ctl name="DMIC MUX3" value="DMIC5" />
+ <ctl name="DEC3 Volume" value="96" />
+ <ctl name="SLIM TX4 MUX" value="DEC4" />
+ <ctl name="ADC MUX4" value="DMIC" />
+ <ctl name="DMIC MUX4" value="DMIC0" />
+ <ctl name="DEC4 Volume" value="96" />
+ <ctl name="SLIM TX5 MUX" value="DEC5" />
+ <ctl name="ADC MUX5" value="DMIC" />
+ <ctl name="DMIC MUX5" value="DMIC4" />
+ <ctl name="DEC5 Volume" value="96" />
+ <ctl name="SLIM TX6 MUX" value="DEC6" />
+ <ctl name="ADC MUX6" value="DMIC" />
+ <ctl name="DMIC MUX6" value="DMIC3" />
+ <ctl name="DEC6 Volume" value="96" />
+
+ <ctl name="SLIM TX7 MUX" value="RX_MIX_TX7"/>
+ <ctl name="RX MIX TX7 MUX" value="RX_MIX7"/>
+ <ctl name="SLIM TX8 MUX" value="RX_MIX_TX8"/>
+ <ctl name="RX MIX TX8 MUX" value="RX_MIX8"/>
+ </path>
+
+ <path name="ec-ref-loopback-mono">
+ </path>
+
+ <path name="ec-ref-loopback-stereo">
+ </path>
+
+ <path name="ec-ref-loopback-mono lineout">
+ </path>
+
+ <path name="ec-ref-loopback-stereo lineout">
+ </path>
+
</mixer>
diff --git a/configs/msm8953/msm8953.mk b/configs/msm8953/msm8953.mk
index b60c56c1..95e6ab9b 100644
--- a/configs/msm8953/msm8953.mk
+++ b/configs/msm8953/msm8953.mk
@@ -34,6 +34,10 @@ endif
USE_XML_AUDIO_POLICY_CONF := 1
BOARD_SUPPORTS_SOUND_TRIGGER := true
+BOARD_SUPPORTS_SOUND_TRIGGER_ARM := true
+AUDIO_FEATURE_ENABLED_FFV := true
+AUDIO_FEATURE_ENABLED_KEEP_ALIVE_ARM_FFV := true
+AUDIO_FEATURE_ENABLED_KEEP_ALIVE := true
AUDIO_USE_LL_AS_PRIMARY_OUTPUT := true
AUDIO_FEATURE_ENABLED_HIFI_AUDIO := true
AUDIO_FEATURE_ENABLED_VBAT_MONITOR := true
@@ -58,6 +62,8 @@ BOARD_SUPPORTS_QAHW := false
AUDIO_FEATURE_ENABLED_DYNAMIC_LOG := true
AUDIO_FEATURE_ENABLED_SND_MONITOR := true
AUDIO_FEATURE_ENABLED_SVA_MULTI_STAGE := true
+BOARD_SUPPORTS_SOUND_TRIGGER_CPU_AFFINITY_SET := true
+BOARD_SUPPORTS_FFV_EC_THREAD_RT_PRIORITY := true
ifeq ($(TARGET_KERNEL_VERSION), 3.18)
AUDIO_FEATURE_ENABLED_DLKM := false
else
@@ -126,7 +132,10 @@ af.fast_track_multiplier=1
PRODUCT_PROPERTY_OVERRIDES += \
vendor.audio_hal.period_size=192
-##fluencetype can be "fluence" or "fluencepro" or "none"
+PRODUCT_PROPERTY_OVERRIDES += \
+ro.vendor.audio.sdk.ffv=false
+
+##fluencetype can be "fluence" or "fluencepro" or "fluenceffv" or "none"
PRODUCT_PROPERTY_OVERRIDES += \
ro.vendor.audio.sdk.fluencetype=none\
persist.vendor.audio.fluence.voicecall=true\
@@ -236,6 +245,9 @@ ro.af.client_heap_size_kbyte=7168
PRODUCT_PROPERTY_OVERRIDES += \
persist.vendor.audio.hw.binder.size_kbyte=1024
+#Disable split a2dp
+PRODUCT_PROPERTY_OVERRIDES += \
+persist.vendor.bt.enable.splita2dp=false
# for HIDL related packages
PRODUCT_PACKAGES += \
diff --git a/configs/msm8953/sound_trigger_mixer_paths_wcd9335.xml b/configs/msm8953/sound_trigger_mixer_paths_wcd9335.xml
index c1b6097b..eb083b59 100644
--- a/configs/msm8953/sound_trigger_mixer_paths_wcd9335.xml
+++ b/configs/msm8953/sound_trigger_mixer_paths_wcd9335.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--- Copyright (c) 2015-2017, The Linux Foundation. All rights reserved.
+<!--- Copyright (c) 2015-2018, 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
@@ -53,23 +53,54 @@
<ctl name="AIF4_MAD Mixer SLIM TX12" value="0" />
<ctl name="AIF4_MAD Mixer SLIM TX13" value="0" />
<ctl name="CPE AFE MAD Enable" value="0"/>
+ <ctl name="SLIM TX8 MUX" value="ZERO" />
+ <ctl name="SLIM TX7 MUX" value="ZERO" />
+ <ctl name="SLIM TX6 MUX" value="ZERO" />
+ <ctl name="SLIM TX5 MUX" value="ZERO" />
+ <ctl name="SLIM TX4 MUX" value="ZERO" />
+ <ctl name="SLIM TX3 MUX" value="ZERO" />
+ <ctl name="SLIM TX2 MUX" value="ZERO" />
+ <ctl name="SLIM TX1 MUX" value="ZERO" />
<ctl name="CLK MODE" value="EXTERNAL" />
<ctl name="EC BUF MUX INP" value="ZERO" />
<ctl name="ADC MUX1" value="DMIC" />
<ctl name="DMIC MUX1" value="ZERO" />
+ <ctl name="ADC MUX1" value="AMIC" />
+ <ctl name="ADC MUX2" value="AMIC" />
+ <ctl name="ADC MUX3" value="AMIC" />
+ <ctl name="ADC MUX4" value="AMIC" />
<ctl name="ADC MUX5" value="AMIC" />
<ctl name="ADC MUX6" value="AMIC" />
<ctl name="ADC MUX7" value="AMIC" />
<ctl name="ADC MUX8" value="AMIC" />
+ <ctl name="DMIC MUX1" value="ZERO" />
+ <ctl name="DMIC MUX2" value="ZERO" />
+ <ctl name="DMIC MUX3" value="ZERO" />
+ <ctl name="DMIC MUX4" value="ZERO" />
<ctl name="DMIC MUX5" value="ZERO" />
<ctl name="DMIC MUX6" value="ZERO" />
<ctl name="DMIC MUX7" value="ZERO" />
<ctl name="DMIC MUX8" value="ZERO" />
+ <ctl name="RX MIX TX7 MUX" value="ZERO" />
+ <ctl name="RX MIX TX8 MUX" value="ZERO" />
+ <ctl name="SLIM_0_TX Channels" value="One" />
+ <ctl name="SLIM_2_TX Channels" value="One" />
<ctl name="IIR0 INP0 MUX" value="ZERO" />
+ <ctl name="AIF1_CAP Mixer SLIM TX1" value="0" />
+ <ctl name="AIF1_CAP Mixer SLIM TX2" value="0" />
+ <ctl name="AIF1_CAP Mixer SLIM TX3" value="0" />
+ <ctl name="AIF1_CAP Mixer SLIM TX4" value="0" />
<ctl name="AIF1_CAP Mixer SLIM TX5" value="0" />
<ctl name="AIF1_CAP Mixer SLIM TX6" value="0" />
<ctl name="AIF1_CAP Mixer SLIM TX7" value="0" />
<ctl name="AIF1_CAP Mixer SLIM TX8" value="0" />
+ <ctl name="AIF4_CAP Mixer SLIM TX8" value="0" />
+ <ctl name="AIF4_CAP Mixer SLIM TX7" value="0" />
+ <ctl name="MultiMedia9 Mixer AFE_LOOPBACK_TX" value="0" />
+
+ <ctl name="MultiMedia2 Mixer SLIM_0_TX" value="0" />
+ <ctl name="MultiMedia9 Mixer SLIM_2_TX" value="0" />
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="None"/>
<path name="listen-voice-wakeup-1">
<ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
@@ -161,6 +192,15 @@
<ctl name="LSM8 Mixer SLIMBUS_0_TX" value="1" />
</path>
+ <path name="audio-capture">
+ <ctl name="MultiMedia2 Mixer SLIM_0_TX" value="1" />
+ </path>
+
+ <path name="ec-ref-audio-capture">
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="SLIM_RX" />
+ <ctl name="MultiMedia9 Mixer AFE_LOOPBACK_TX" value="1" />
+ </path>
+
<path name="listen-cpe-handset-mic">
<ctl name="MADONOFF Switch" value="1" />
<ctl name="TX13 INP MUX" value="CPE_TX_PP" />
@@ -248,6 +288,117 @@
<ctl name="DMIC MUX7" value="DMIC4" />
</path>
+ <path name="listen-handset-qmic">
+ <ctl name="AIF1_CAP Mixer SLIM TX5" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX6" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX7" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX8" value="1" />
+ <ctl name="SLIM_0_TX Channels" value="Four" />
+ <ctl name="SLIM TX5 MUX" value="DEC5" />
+ <ctl name="ADC MUX5" value="DMIC" />
+ <ctl name="DMIC MUX5" value="DMIC0" />
+ <ctl name="DEC5 Volume" value="86" />
+ <ctl name="SLIM TX6 MUX" value="DEC6" />
+ <ctl name="ADC MUX6" value="DMIC" />
+ <ctl name="DMIC MUX6" value="DMIC2" />
+ <ctl name="DEC6 Volume" value="86" />
+ <ctl name="SLIM TX7 MUX" value="DEC7" />
+ <ctl name="ADC MUX7" value="DMIC" />
+ <ctl name="DMIC MUX7" value="DMIC1" />
+ <ctl name="DEC7 Volume" value="86" />
+ <ctl name="SLIM TX8 MUX" value="DEC8" />
+ <ctl name="ADC MUX8" value="DMIC" />
+ <ctl name="DMIC MUX8" value="DMIC3" />
+ <ctl name="DEC8 Volume" value="86" />
+ </path>
+
+ <path name="listen-handset-6mic">
+ <ctl name="AIF1_CAP Mixer SLIM TX1" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX2" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX3" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX4" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX5" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX6" value="1" />
+ <ctl name="SLIM_0_TX Channels" value="Six" />
+ <ctl name="SLIM TX1 MUX" value="DEC1" />
+ <ctl name="ADC MUX1" value="DMIC" />
+ <ctl name="DMIC MUX1" value="DMIC2" />
+ <ctl name="DEC1 Volume" value="86" />
+ <ctl name="SLIM TX2 MUX" value="DEC2" />
+ <ctl name="ADC MUX2" value="DMIC" />
+ <ctl name="DMIC MUX2" value="DMIC1" />
+ <ctl name="DEC2 Volume" value="86" />
+ <ctl name="SLIM TX3 MUX" value="DEC3" />
+ <ctl name="ADC MUX3" value="DMIC" />
+ <ctl name="DMIC MUX3" value="DMIC5" />
+ <ctl name="DEC3 Volume" value="86" />
+ <ctl name="SLIM TX4 MUX" value="DEC4" />
+ <ctl name="ADC MUX4" value="DMIC" />
+ <ctl name="DMIC MUX4" value="DMIC0" />
+ <ctl name="DEC4 Volume" value="86" />
+ <ctl name="SLIM TX5 MUX" value="DEC5" />
+ <ctl name="ADC MUX5" value="DMIC" />
+ <ctl name="DMIC MUX5" value="DMIC4" />
+ <ctl name="DEC5 Volume" value="86" />
+ <ctl name="SLIM TX6 MUX" value="DEC6" />
+ <ctl name="ADC MUX6" value="DMIC" />
+ <ctl name="DMIC MUX6" value="DMIC3" />
+ <ctl name="DEC6 Volume" value="86" />
+ </path>
+
+ <path name="listen-handset-8mic">
+ <ctl name="AIF1_CAP Mixer SLIM TX1" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX2" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX3" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX4" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX5" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX6" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX7" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX8" value="1" />
+ <ctl name="SLIM_0_TX Channels" value="Eight" />
+ <ctl name="SLIM TX1 MUX" value="DEC1" />
+ <ctl name="ADC MUX1" value="DMIC" />
+ <ctl name="DMIC MUX1" value="DMIC2" />
+ <ctl name="DEC1 Volume" value="86" />
+ <ctl name="SLIM TX2 MUX" value="DEC2" />
+ <ctl name="ADC MUX2" value="DMIC" />
+ <ctl name="DMIC MUX2" value="DMIC1" />
+ <ctl name="DEC2 Volume" value="86" />
+ <ctl name="SLIM TX3 MUX" value="DEC3" />
+ <ctl name="ADC MUX3" value="DMIC" />
+ <ctl name="DMIC MUX3" value="DMIC5" />
+ <ctl name="DEC3 Volume" value="86" />
+ <ctl name="SLIM TX4 MUX" value="DEC4" />
+ <ctl name="ADC MUX4" value="DMIC" />
+ <ctl name="DMIC MUX4" value="DMIC0" />
+ <ctl name="DEC4 Volume" value="86" />
+ <ctl name="SLIM TX5 MUX" value="DEC5" />
+ <ctl name="ADC MUX5" value="DMIC" />
+ <ctl name="DMIC MUX5" value="DMIC4" />
+ <ctl name="DEC5 Volume" value="86" />
+ <ctl name="SLIM TX6 MUX" value="DEC6" />
+ <ctl name="ADC MUX6" value="DMIC" />
+ <ctl name="DMIC MUX6" value="DMIC3" />
+ <ctl name="DEC6 Volume" value="86" />
+
+ <ctl name="SLIM TX7 MUX" value="RX_MIX_TX7"/>
+ <ctl name="RX MIX TX7 MUX" value="RX_MIX7"/>
+ <ctl name="SLIM TX8 MUX" value="RX_MIX_TX8"/>
+ <ctl name="RX MIX TX8 MUX" value="RX_MIX8"/>
+ </path>
+
+ <path name="ec-ref-loopback-mono">
+ </path>
+
+ <path name="ec-ref-loopback-stereo">
+ </path>
+
+ <path name="ec-ref-loopback-mono lineout">
+ </path>
+
+ <path name="ec-ref-loopback-stereo lineout">
+ </path>
+
<path name="echo-reference">
<ctl name="AUDIO_REF_EC_UL1 MUX" value="SLIM_RX" />
<ctl name="EC Reference Channels" value="Two"/>
diff --git a/configs/msm8953/sound_trigger_platform_info.xml b/configs/msm8953/sound_trigger_platform_info.xml
index b68a2b13..63f34921 100644
--- a/configs/msm8953/sound_trigger_platform_info.xml
+++ b/configs/msm8953/sound_trigger_platform_info.xml
@@ -43,6 +43,14 @@
<param backend_dai_name="TERT_MI2S_TX" /-->
<param backend_port_name="SLIM_0_TX" />
<param backend_dai_name="SLIMBUS_0_TX" />
+ <param sw_mad="false"/>
+ <!-- Enable concurrent VA & audio capture excluding voip/voice call -->
+ <!-- using concurrent_capture param. -->
+ <!-- Enable VA & voip/voice call concurrency using concurrent_capture -->
+ <!-- param along with concurrent_voip_call/concurrent_voice_call params -->
+ <param concurrent_capture="false" />
+ <param concurrent_voip_call="false" />
+ <param concurrent_voice_call="false" />
</common_config>
<acdb_ids>
@@ -55,6 +63,8 @@
<param DEVICE_HANDSET_QMIC_APE="150" />
<param DEVICE_HANDSET_DMIC_APE="149" />
<param DEVICE_HANDSET_TMIC_APE="152" />
+ <param DEVICE_HANDSET_6MIC_ARM="140" />
+ <param DEVICE_HANDSET_8MIC_ARM="140" />
</acdb_ids>
<!-- Multiple sound_model_config tags can be listed, each with unique -->
@@ -69,15 +79,7 @@
<param max_cpe_users="3" />
<param max_ape_phrases="10" />
<param max_ape_users="10" />
- <param sample_rate="16000" />
- <param bit_width="16" />
- <param channel_count="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="NONE" />
- <!-- fluence_type: "FLUENCE", "FLUENCE_DMIC", "FLUENCE_TMIC", -->
- <!-- "FLUENCE_QMIC". param value is valid when adm_cfg_profile="FLUENCE"-->
- <param fluence_type="NONE" />
+ <param event_timestamp_mode="false" />
<!-- Module and param ids with which the algorithm is integrated in firmware -->
<lsm_usecase>
@@ -120,6 +122,36 @@
<param bit_wdith="16"/>
<param channel_count="1"/>
</arm_ss_usecase>
+ <param client_capture_read_delay="2000" />
+
+ <!-- Profile specific data which the algorithm can support -->
+ <param sample_rate="16000" />
+ <param bit_width="16" />
+ <param channel_count="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="NONE" />
+ <!-- fluence_type: "FLUENCE", FLUENCE_DMIC", FLUENCE_QMIC" -->
+ <!-- param value is valid when profile type is fluence -->
+ <param fluence_type="FLUENCE_QMIC" />
+ </sound_model_config>
+
+ <!-- ARM based SVA sound_model_config -->
+ <sound_model_config>
+ <param vendor_uuid="67fabb70-79e8-4e1c-a202-bcb050243a70" />
+ <param execution_type="ARM" />
+ <!-- ec reference loopback params -->
+ <!-- split_ec_ref_data - true if ec ref is packed with mic captured data -->
+ <param split_ec_ref_data="false"/>
+ <param ec_ref_channel_count="1"/>
+
+ <!-- Profile specific data which the algorithm can support -->
+ <param sample_rate="16000" />
+ <param bit_width="16" />
+ <param channel_count="6"/>
+ <!-- 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="DEFAULT" />
</sound_model_config>
<!-- Multiple adm_config tags can be listed, each with unique profile name. -->
@@ -137,6 +169,4 @@
<param sample_rate="16000" />
<param bit_width="16" />
</adm_config>
-
</sound_trigger_platform_info>
-
diff --git a/configs/sdm660/audio_policy_configuration.xml b/configs/sdm660/audio_policy_configuration.xml
index d7a338bc..99467c12 100644
--- a/configs/sdm660/audio_policy_configuration.xml
+++ b/configs/sdm660/audio_policy_configuration.xml
@@ -117,15 +117,6 @@
<profile name="" format="AUDIO_FORMAT_AAC_HE_V2"
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000"
channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/>
- <profile name="" format="AUDIO_FORMAT_AC3"
- samplingRates="32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1"/>
- <profile name="" format="AUDIO_FORMAT_E_AC3"
- samplingRates="32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
- <profile name="" format="AUDIO_FORMAT_E_AC3_JOC"
- samplingRates="32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
<profile name="" format="AUDIO_FORMAT_DTS"
samplingRates="32000,44100,48000"
channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1"/>
diff --git a/configs/sdm670/mixer_paths_lc.xml b/configs/sdm670/mixer_paths_lc.xml
new file mode 100644
index 00000000..471919e3
--- /dev/null
+++ b/configs/sdm670/mixer_paths_lc.xml
@@ -0,0 +1,2458 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!-- Copyright (c) 2015-2018, 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, -->
+<!-- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -->
+<!-- IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -->
+<mixer>
+ <!-- These are the initial mixer settings -->
+ <ctl name="Voice Rx Device Mute" id="0" value="0" />
+ <ctl name="Voice Rx Device Mute" id="1" value="-1" />
+ <ctl name="Voice Rx Device Mute" id="2" value="20" />
+ <ctl name="Voice Tx Mute" id="0" value="0" />
+ <ctl name="Voice Tx Mute" id="1" value="-1" />
+ <ctl name="Voice Tx Mute" id="2" value="500" />
+ <ctl name="Voice Rx Gain" id="0" value="0" />
+ <ctl name="Voice Rx Gain" id="1" value="-1" />
+ <ctl name="Voice Rx Gain" id="2" value="20" />
+ <ctl name="Voip Tx Mute" id="0" value="0" />
+ <ctl name="Voip Tx Mute" id="1" value="500" />
+ <ctl name="Voip Rx Gain" id="0" value="0" />
+ <ctl name="Voip Rx Gain" id="1" value="20" />
+ <ctl name="Voip Mode Config" value="12" />
+ <ctl name="Voip Rate Config" value="0" />
+ <ctl name="Voip Evrc Min Max Rate Config" id="0" value="1" />
+ <ctl name="Voip Evrc Min Max Rate Config" id="1" value="4" />
+ <ctl name="Voip Dtx Mode" value="0" />
+ <ctl name="TTY Mode" value="OFF" />
+ <ctl name="INT4_MI2S_RX Port Mixer INT3_MI2S_TX" value="0" />
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia1" value="0" />
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia4" value="0" />
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia5" value="0" />
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia7" value="0" />
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia8" value="0" />
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia10" value="0" />
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia11" value="0" />
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia12" value="0" />
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia13" value="0" />
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia14" value="0" />
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia15" value="0" />
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia16" value="0" />
+ <ctl name="INT0_MI2S_RX Port Mixer INT3_MI2S_TX" value="0" />
+ <ctl name="MultiMedia5 Mixer INT3_MI2S_TX" value="0" />
+ <ctl name="MultiMedia5 Mixer AFE_PCM_TX" value="0" />
+ <ctl name="MultiMedia5 Mixer SLIM_8_TX" value="0" />
+ <ctl name="MultiMedia5 Mixer SLIM_7_TX" value="0" />
+ <ctl name="MultiMedia1 Mixer INT3_MI2S_TX" value="0" />
+ <ctl name="MultiMedia1 Mixer SLIM_7_TX" value="0" />
+ <ctl name="MultiMedia8 Mixer INT3_MI2S_TX" value="0" />
+ <ctl name="MultiMedia8 Mixer SLIM_7_TX" value="0" />
+ <ctl name="MultiMedia10 Mixer INT3_MI2S_TX" value="0" />
+ <ctl name="MultiMedia10 Mixer SLIM_7_TX" value="0" />
+ <ctl name="MultiMedia10 Mixer AFE_PCM_TX" value="0" />
+ <ctl name="DISPLAY_PORT Mixer MultiMedia1" value="0" />
+ <ctl name="DISPLAY_PORT Mixer MultiMedia2" value="0" />
+ <ctl name="DISPLAY_PORT Mixer MultiMedia3" value="0" />
+ <ctl name="DISPLAY_PORT Mixer MultiMedia4" value="0" />
+ <ctl name="DISPLAY_PORT Mixer MultiMedia5" value="0" />
+ <ctl name="DISPLAY_PORT Mixer MultiMedia6" value="0" />
+ <ctl name="DISPLAY_PORT Mixer MultiMedia7" value="0" />
+ <ctl name="DISPLAY_PORT Mixer MultiMedia8" value="0" />
+ <ctl name="DISPLAY_PORT Mixer MultiMedia9" value="0" />
+ <ctl name="DISPLAY_PORT Mixer MultiMedia10" value="0" />
+ <ctl name="DISPLAY_PORT Mixer MultiMedia11" value="0" />
+ <ctl name="DISPLAY_PORT Mixer MultiMedia12" value="0" />
+ <ctl name="DISPLAY_PORT Mixer MultiMedia13" value="0" />
+ <ctl name="DISPLAY_PORT Mixer MultiMedia14" value="0" />
+ <ctl name="DISPLAY_PORT Mixer MultiMedia15" value="0" />
+ <ctl name="DISPLAY_PORT Mixer MultiMedia16" value="0" />
+ <ctl name="Display Port RX Bit Format" value="S16_LE" />
+ <ctl name="Display Port RX SampleRate" value="KHZ_48" />
+ <ctl name="Display Port RX Channels" value="Two" />
+ <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia1" value="0" />
+ <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia1" value="0" />
+ <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia2" value="0" />
+ <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia2" value="0" />
+ <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia3" value="0" />
+ <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia3" value="0" />
+ <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia4" value="0" />
+ <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia4" value="0" />
+ <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia5" value="0" />
+ <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia5" value="0" />
+ <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia7" value="0" />
+ <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia7" value="0" />
+ <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia8" value="0" />
+ <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia8" value="0" />
+ <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia10" value="0" />
+ <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia10" value="0" />
+ <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia11" value="0" />
+ <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia11" value="0" />
+ <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia12" value="0" />
+ <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia12" value="0" />
+ <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia13" value="0" />
+ <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia13" value="0" />
+ <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia14" value="0" />
+ <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia14" value="0" />
+ <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia15" value="0" />
+ <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia15" value="0" />
+ <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia16" value="0" />
+ <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia16" value="0" />
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia1" value="0" />
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia2" value="0" />
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia3" value="0" />
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia4" value="0" />
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia5" value="0" />
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia7" value="0" />
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia8" value="0" />
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia10" value="0" />
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia11" value="0" />
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia12" value="0" />
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia13" value="0" />
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia14" value="0" />
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia15" value="0" />
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia16" value="0" />
+ <ctl name="USB_AUDIO_RX Format" value="S16_LE" />
+ <ctl name="USB_AUDIO_RX SampleRate" value="KHZ_48" />
+ <ctl name="USB_AUDIO_RX Channels" value="Two" />
+ <ctl name="MultiMedia1 Mixer USB_AUDIO_TX" value="0" />
+ <ctl name="MultiMedia2 Mixer USB_AUDIO_TX" value="0" />
+ <ctl name="MultiMedia5 Mixer USB_AUDIO_TX" value="0" />
+ <ctl name="MultiMedia8 Mixer USB_AUDIO_TX" value="0" />
+ <ctl name="MultiMedia10 Mixer USB_AUDIO_TX" value="0" />
+ <ctl name="USB_AUDIO_TX Format" value="S16_LE" />
+ <ctl name="USB_AUDIO_TX SampleRate" value="KHZ_48" />
+ <ctl name="USB_AUDIO_TX Channels" value="One" />
+ <ctl name="ADC1_INP1 Switch" value="0" />
+ <ctl name="MultiMedia6 Mixer INT3_MI2S_TX" value="0" />
+ <ctl name="INT4_MI2S_RX Channels" value="One" />
+ <ctl name="INT0_MI2S_RX Channels" value="One" />
+ <ctl name="INT3_MI2S_TX Channels" value="One" />
+ <ctl name="I2S TX2 INP1" value="ZERO" />
+ <ctl name="I2S TX2 INP2" value="ZERO" />
+ <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia4" value="0" />
+ <ctl name="INT4_MI2S_RX_VI_FB_MONO_CH_MUX" value="ZERO" />
+ <ctl name="INT4_MI2S_RX_VI_FB_STEREO_CH_MUX" value="ZERO" />
+ <ctl name="VI_FEED_TX Channels" value="One" />
+ <ctl name="AIF1_VI_SDW Mixer SPKR_VI_1" value="0" />
+ <ctl name="AIF1_VI_SDW Mixer SPKR_VI_2" value="0" />
+ <ctl name="INT5 MI2S VI MONO" value="Left" />
+ <!-- HFP start -->
+ <ctl name="HFP_SLIM7_UL_HL Switch" value="0" />
+ <ctl name="INT4_MI2S_RX Port Mixer SLIM_7_TX" value="0" />
+ <ctl name="INT0_MI2S_RX Port Mixer SLIM_7_TX" value="0" />
+ <!-- HFP end -->
+ <!-- echo reference -->
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="None" />
+ <!-- usb headset -->
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia1" value="0" />
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia2" value="0" />
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia4" value="0" />
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia7" value="0" />
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia10" value="0" />
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia11" value="0" />
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia12" value="0" />
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia13" value="0" />
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia14" value="0" />
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia15" value="0" />
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia16" value="0" />
+ <ctl name="MultiMedia1 Mixer AFE_PCM_TX" value="0" />
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia5" value="0" />
+ <!-- usb headset end -->
+ <!-- fm -->
+ <ctl name="SLIMBUS_8 LOOPBACK Volume" value="0" />
+ <ctl name="INT4_MI2S_RX Port Mixer SLIM_8_TX" value="0" />
+ <ctl name="INT4_MI2S_RX_DL_HL Switch" value="0" />
+ <ctl name="INT0_MI2S_RX Port Mixer SLIM_8_TX" value="0" />
+ <ctl name="INT0_MI2S_RX_DL_HL Switch" value="0" />
+ <ctl name="MultiMedia1 Mixer SLIM_8_TX" value="0" />
+ <ctl name="MultiMedia2 Mixer SLIM_8_TX" value="0" />
+ <!-- fm end -->
+
+ <!-- Multimode Voice1 -->
+ <ctl name="INT4_MI2S_RX_Voice Mixer VoiceMMode1" value="0" />
+ <ctl name="INT0_MI2S_RX_Voice Mixer VoiceMMode1" value="0" />
+ <ctl name="VoiceMMode1_Tx Mixer INT3_MI2S_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" />
+ <!-- Multimode Voice1 USB headset -->
+ <ctl name="AFE_PCM_RX_Voice Mixer VoiceMMode1" value="0" />
+ <ctl name="VoiceMMode1_Tx Mixer AFE_PCM_TX_MMode1" value="0" />
+ <ctl name="USB_AUDIO_RX_Voice Mixer VoiceMMode1" value="0" />
+ <ctl name="VoiceMMode1_Tx Mixer USB_AUDIO_TX_MMode1" value="0" />
+ <!-- Miltimode Voice1 end-->
+
+ <!-- Multimode Voice2 -->
+ <ctl name="INT4_MI2S_RX_Voice Mixer VoiceMMode2" value="0" />
+ <ctl name="INT0_MI2S_RX_Voice Mixer VoiceMMode2" value="0" />
+ <ctl name="VoiceMMode2_Tx Mixer INT3_MI2S_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" />
+ <!-- Multimode Voice2 USB headset -->
+ <ctl name="AFE_PCM_RX_Voice Mixer VoiceMMode2" value="0" />
+ <ctl name="VoiceMMode2_Tx Mixer AFE_PCM_TX_MMode2" value="0" />
+ <ctl name="USB_AUDIO_RX_Voice Mixer VoiceMMode2" value="0" />
+ <ctl name="VoiceMMode2_Tx Mixer USB_AUDIO_TX_MMode2" value="0" />
+ <!-- Multimode Voice2 end-->
+
+ <!-- Voice external ec. reference -->
+ <ctl name="VOC_EXT_EC MUX" value="NONE" />
+ <!-- Voice external ec. reference end -->
+
+ <!-- RT Proxy Cal -->
+ <ctl name="RT_PROXY_1_RX SetCalMode" value="CAL_MODE_NONE" />
+ <ctl name="RT_PROXY_1_TX SetCalMode" value="CAL_MODE_NONE" />
+ <!-- RT Proxy Cal end -->
+
+ <!-- Incall Recording -->
+ <ctl name="MultiMedia1 Mixer VOC_REC_UL" value="0" />
+ <ctl name="MultiMedia1 Mixer VOC_REC_DL" value="0" />
+ <ctl name="MultiMedia8 Mixer VOC_REC_UL" value="0" />
+ <ctl name="MultiMedia8 Mixer VOC_REC_DL" value="0" />
+ <!-- Incall Recording End -->
+
+ <!-- Incall Music -->
+ <ctl name="Incall_Music Audio Mixer MultiMedia2" value="0" />
+ <!-- Incall Music End -->
+
+ <!-- compress-voip-call start -->
+ <ctl name="INT4_MI2S_RX_Voice Mixer Voip" value="0" />
+ <ctl name="INT0_MI2S_RX_Voice Mixer Voip" value="0" />
+ <ctl name="Voip_Tx Mixer INT3_MI2S_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" />
+ <ctl name="Voip_Tx Mixer AFE_PCM_TX_Voip" value="0" />
+ <ctl name="USB_AUDIO_RX_Voice Mixer Voip" value="0" />
+ <ctl name="Voip_Tx Mixer USB_AUDIO_TX_Voip" value="0" />
+ <!-- compress-voip-call end-->
+
+ <!-- Audio BTSCO -->
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia1" value="0" />
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia4" value="0" />
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia5" value="0" />
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia6" value="0" />
+ <ctl name="MultiMedia1 Mixer SLIM_7_TX" value="0" />
+ <!-- audio record compress-->
+ <ctl name="MultiMedia8 Mixer INT3_MI2S_TX" value="0" />
+ <ctl name="MultiMedia8 Mixer SLIM_7_TX" value="0" />
+ <ctl name="MultiMedia8 Mixer AFE_PCM_TX" value="0" />
+ <!-- audio record compress end-->
+
+ <!-- split a2dp -->
+ <ctl name="BT SampleRate" value="KHZ_8" />
+ <ctl name="AFE Input Channels" value="Zero" />
+ <ctl name="SLIM7_RX ADM Channels" value="Zero" />
+ <!-- split a2dp end-->
+
+ <!-- ADSP testfwk -->
+ <ctl name="INT4_MI2S_RX_DL_HL Switch" value="0" />
+ <ctl name="INT0_MI2S_RX_DL_HL Switch" value="0" />
+ <!-- ADSP testfwk end-->
+
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia3" value="0" />
+
+ <!-- Codec controls -->
+ <!-- WSA controls -->
+ <ctl name="SpkrLeft COMP Switch" value="0" />
+ <ctl name="SpkrRight COMP Switch" value="0" />
+ <ctl name="SpkrLeft BOOST Switch" value="0" />
+ <ctl name="SpkrRight BOOST Switch" value="0" />
+ <ctl name="SpkrLeft VISENSE Switch" value="0" />
+ <ctl name="SpkrRight VISENSE Switch" value="0" />
+ <ctl name="SpkrLeft SWR DAC_Port Switch" value="0" />
+ <ctl name="SpkrRight SWR DAC_Port Switch" value="0" />
+ <ctl name="SpkrLeft WSA PA Gain" value="G_0_DB" />
+ <ctl name="SpkrRight WSA PA Gain" value="G_0_DB" />
+ <ctl name="SpkrLeft WSA PA Mute" value="1" />
+ <ctl name="SpkrRight WSA PA Mute" value="1" />
+ <ctl name="EAR SPKR PA Gain" value="G_DEFAULT" />
+
+ <!-- Volume controls -->
+ <ctl name="HPHL Volume" value="9" />
+ <ctl name="HPHR Volume" value="9" />
+ <ctl name="EAR PA Gain" value="POS_1P5_DB" />
+ <ctl name="EAR PA Boost" value="ENABLE" />
+
+ <ctl name="RX1 Digital Volume" value="84" />
+ <ctl name="RX2 Digital Volume" value="84" />
+ <ctl name="RX3 Digital Volume" value="84" />
+ <ctl name="RX4 Digital Volume" value="84" />
+ <ctl name="RX5 Digital Volume" value="84" />
+ <ctl name="ADC1 Volume" value="4" />
+ <ctl name="ADC2 Volume" value="4" />
+ <ctl name="ADC3 Volume" value="4" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="DEC2 Volume" value="84" />
+ <ctl name="DEC3 Volume" value="84" />
+ <ctl name="DEC4 Volume" value="84" />
+
+ <!-- Compander controls -->
+ <ctl name="COMP1 Switch" value="1" />
+ <ctl name="COMP2 Switch" value="1" />
+
+ <!-- MUX controls -->
+ <ctl name="DEC1 MUX" value="ZERO" />
+ <ctl name="DEC2 MUX" value="ZERO" />
+ <ctl name="DEC3 MUX" value="ZERO" />
+ <ctl name="DEC4 MUX" value="ZERO" />
+ <ctl name="ADC2 MUX" value="ZERO" />
+ <ctl name="RDAC2 MUX" value="ZERO" />
+
+ <!-- Interpolator chain controls -->
+ <!-- ADD RX Chain Controls -->
+
+ <ctl name="RX1 MIX1 INP1" value="ZERO" />
+ <ctl name="RX2 MIX1 INP1" value="ZERO" />
+ <ctl name="RDAC2 MUX" value="ZERO" />
+ <ctl name="HPHL" value="ZERO" />
+ <ctl name="HPHR" value="ZERO" />
+ <ctl name="RX1 MIX2 INP1" value="ZERO" />
+ <ctl name="RX2 MIX2 INP1" value="ZERO" />
+ <ctl name="RX3 MIX1 INP1" value="ZERO" />
+ <ctl name="RX4 MIX1 INP1" value="ZERO" />
+ <ctl name="RX5 MIX1 INP1" value="ZERO" />
+ <ctl name="RX HPH Mode" value="NORMAL" />
+ <ctl name="COMP0 RX1" value="0" />
+ <ctl name="COMP0 RX2" value="0" />
+
+ <!-- IIR/voice anc -->
+ <ctl name="IIR1 Band1" id ="0" value="268435456" />
+ <ctl name="IIR1 Band1" id ="1" value="0" />
+ <ctl name="IIR1 Band1" id ="2" value="0" />
+ <ctl name="IIR1 Band1" id ="3" value="0" />
+ <ctl name="IIR1 Band1" id ="4" value="0" />
+ <ctl name="IIR1 Band2" id ="0" value="268435456" />
+ <ctl name="IIR1 Band2" id ="1" value="0" />
+ <ctl name="IIR1 Band2" id ="2" value="0" />
+ <ctl name="IIR1 Band2" id ="3" value="0" />
+ <ctl name="IIR1 Band2" id ="4" value="0" />
+ <ctl name="IIR1 Band3" id ="0" value="268435456" />
+ <ctl name="IIR1 Band3" id ="1" value="0" />
+ <ctl name="IIR1 Band3" id ="2" value="0" />
+ <ctl name="IIR1 Band3" id ="3" value="0" />
+ <ctl name="IIR1 Band3" id ="4" value="0" />
+ <ctl name="IIR1 Band4" id ="0" value="268435456" />
+ <ctl name="IIR1 Band4" id ="1" value="0" />
+ <ctl name="IIR1 Band4" id ="2" value="0" />
+ <ctl name="IIR1 Band4" id ="3" value="0" />
+ <ctl name="IIR1 Band4" id ="4" value="0" />
+ <ctl name="IIR1 Band5" id ="0" value="268435456" />
+ <ctl name="IIR1 Band5" id ="1" value="0" />
+ <ctl name="IIR1 Band5" id ="2" value="0" />
+ <ctl name="IIR1 Band5" id ="3" value="0" />
+ <ctl name="IIR1 Band5" id ="4" value="0" />
+ <ctl name="IIR1 Enable Band1" value="0" />
+ <ctl name="IIR1 Enable Band2" value="0" />
+ <ctl name="IIR1 Enable Band3" value="0" />
+ <ctl name="IIR1 Enable Band4" value="0" />
+ <ctl name="IIR1 Enable Band5" value="0" />
+ <ctl name="IIR1 INP1 Volume" value="53" />
+ <ctl name="IIR1 INP2 Volume" value="53" />
+ <ctl name="IIR1 INP3 Volume" value="53" />
+ <ctl name="IIR1 INP4 Volume" value="53" />
+ <ctl name="IIR1 INP1 MUX" value="ZERO" />
+ <ctl name="MultiMedia17 Mixer INT3_MI2S_TX" value="0" />
+ <ctl name="MultiMedia18 Mixer INT3_MI2S_TX" value="0" />
+ <ctl name="MultiMedia19 Mixer INT3_MI2S_TX" value="0" />
+ <ctl name="MultiMedia28 Mixer INT3_MI2S_TX" value="0" />
+ <ctl name="MultiMedia29 Mixer INT3_MI2S_TX" value="0" />
+
+ <!-- anc related -->
+
+ <!-- Codec controls end -->
+
+ <!-- mixer control to disable lowlatency qos voting -->
+ <ctl name="MultiMedia5_RX QOS Vote" value="Disable" />
+ <!-- mixer control to disable lowlatency qos voting end -->
+
+ <!-- These are audio route (FE to BE) specific mixer settings -->
+ <path name="gsm-mode">
+ <ctl name="GSM mode Enable" value="ON" />
+ </path>
+
+ <path name="echo-reference">
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="INT4_MI2S_RX" />
+ </path>
+
+ <path name="echo-reference headphones">
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="INT0_MI2S_RX" />
+ </path>
+
+ <path name="echo-reference headphones-44.1">
+ </path>
+
+ <path name="deep-buffer-playback">
+ <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia1" value="1" />
+ </path>
+
+ <path name="deep-buffer-playback speaker-protected">
+ <path name="deep-buffer-playback" />
+ </path>
+
+ <path name="deep-buffer-playback display-port">
+ <ctl name="DISPLAY_PORT Mixer MultiMedia1" value="1" />
+ </path>
+
+ <path name="deep-buffer-playback speaker-and-hdmi">
+ <path name="deep-buffer-playback hdmi" />
+ <path name="deep-buffer-playback" />
+ </path>
+
+ <path name="deep-buffer-playback speaker-and-display-port">
+ <path name="deep-buffer-playback display-port" />
+ <path name="deep-buffer-playback" />
+ </path>
+
+ <path name="deep-buffer-playback bt-sco">
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia1" value="1" />
+ </path>
+
+ <path name="deep-buffer-playback bt-sco-wb">
+ <ctl name="BT SampleRate" value="KHZ_16" />
+ <path name="deep-buffer-playback bt-sco" />
+ </path>
+
+ <path name="deep-buffer-playback afe-proxy">
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia1" value="1" />
+ </path>
+
+ <path name="deep-buffer-playback usb-headphones">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia1" value="1" />
+ </path>
+
+ <path name="deep-buffer-playback usb-headset">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia1" value="1" />
+ </path>
+
+ <path name="deep-buffer-playback speaker-and-usb-headphones">
+ <path name="deep-buffer-playback usb-headphones" />
+ <path name="deep-buffer-playback" />
+ </path>
+
+ <path name="deep-buffer-playback headphones">
+ <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia1" value="1" />
+ </path>
+
+ <path name="deep-buffer-playback speaker-and-headphones">
+ <path name="deep-buffer-playback headphones" />
+ <path name="deep-buffer-playback" />
+ </path>
+
+ <path name="deep-buffer-playback speaker-and-bt-sco">
+ <path name="deep-buffer-playback bt-sco" />
+ <path name="deep-buffer-playback" />
+ </path>
+
+ <path name="deep-buffer-playback speaker-and-bt-sco-wb">
+ <path name="deep-buffer-playback bt-sco-wb" />
+ <path name="deep-buffer-playback" />
+ </path>
+
+ <path name="low-latency-playback">
+ <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia5" value="1" />
+ </path>
+
+ <path name="low-latency-playback speaker-protected">
+ <path name="low-latency-playback" />
+ </path>
+
+ <path name="low-latency-playback display-port">
+ <ctl name="DISPLAY_PORT Mixer MultiMedia5" value="1" />
+ </path>
+
+ <path name="low-latency-playback bt-sco">
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia5" value="1" />
+ </path>
+
+ <path name="low-latency-playback bt-sco-wb">
+ <ctl name="BT SampleRate" value="KHZ_16" />
+ <path name="low-latency-playback bt-sco" />
+ </path>
+
+ <path name="low-latency-playback speaker-and-hdmi">
+ <path name="low-latency-playback hdmi" />
+ <path name="low-latency-playback" />
+ </path>
+
+ <path name="low-latency-playback speaker-and-display-port">
+ <path name="low-latency-playback display-port" />
+ <path name="low-latency-playback" />
+ </path>
+
+ <path name="low-latency-playback afe-proxy">
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia5" value="1" />
+ </path>
+
+ <path name="low-latency-playback usb-headphones">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia5" value="1" />
+ </path>
+
+ <path name="low-latency-playback usb-headset">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia5" value="1" />
+ </path>
+
+ <path name="low-latency-playback speaker-and-usb-headphones">
+ <path name="low-latency-playback usb-headphones" />
+ <path name="low-latency-playback" />
+ </path>
+
+ <path name="low-latency-playback headphones">
+ <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia5" value="1" />
+ </path>
+
+ <path name="low-latency-playback speaker-and-headphones">
+ <path name="low-latency-playback headphones" />
+ <path name="low-latency-playback" />
+ </path>
+
+ <path name="low-latency-playback resume">
+ <ctl name="MultiMedia5_RX QOS Vote" value="Enable" />
+ </path>
+
+ <path name="low-latency-playback speaker-and-bt-sco">
+ <path name="low-latency-playback bt-sco" />
+ <path name="low-latency-playback" />
+ </path>
+
+ <path name="low-latency-playback speaker-and-bt-sco-wb">
+ <path name="low-latency-playback bt-sco-wb" />
+ <path name="low-latency-playback" />
+ </path>
+
+ <path name="audio-ull-playback">
+ <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia8" value="1" />
+ </path>
+
+ <path name="audio-ull-playback speaker-protected">
+ <path name="audio-ull-playback" />
+ </path>
+
+ <path name="audio-ull-playback headphones">
+ <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia8" value="1" />
+ </path>
+
+ <path name="audio-ull-playback speaker-and-headphones">
+ <path name="audio-ull-playback" />
+ <path name="audio-ull-playback headphones" />
+ </path>
+
+ <path name="audio-ull-playback display-port">
+ <ctl name="DISPLAY_PORT Mixer MultiMedia8" value="1" />
+ </path>
+
+ <path name="audio-ull-playback bt-sco">
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia8" value="1" />
+ </path>
+
+ <path name="audio-ull-playback bt-sco-wb">
+ <ctl name="BT SampleRate" value="KHZ_16" />
+ <path name="audio-ull-playback bt-sco" />
+ </path>
+
+ <path name="audio-ull-playback speaker-and-hdmi">
+ <path name="audio-ull-playback hdmi" />
+ <path name="audio-ull-playback" />
+ </path>
+
+ <path name="audio-ull-playback speaker-and-display-port">
+ <path name="audio-ull-playback display-port" />
+ <path name="audio-ull-playback" />
+ </path>
+
+ <path name="audio-ull-playback afe-proxy">
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia8" value="1" />
+ </path>
+
+ <path name="audio-ull-playback usb-headphones">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia8" value="1" />
+ </path>
+
+ <path name="audio-ull-playback usb-headset">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia8" value="1" />
+ </path>
+
+ <path name="audio-ull-playback speaker-and-bt-sco">
+ <path name="audio-ull-playback bt-sco" />
+ <path name="audio-ull-playback" />
+ </path>
+
+ <path name="audio-ull-playback speaker-and-bt-sco-wb">
+ <path name="audio-ull-playback bt-sco-wb" />
+ <path name="audio-ull-playback" />
+ </path>
+
+ <path name="multi-channel-playback display-port">
+ <ctl name="DISPLAY_PORT Mixer MultiMedia2" value="1" />
+ </path>
+
+ <path name="multi-channel-playback afe-proxy">
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia2" value="1" />
+ </path>
+
+ <path name="compress-offload-playback">
+ <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia4" value="1" />
+ </path>
+
+ <path name="compress-offload-playback speaker-protected">
+ <path name="compress-offload-playback" />
+ </path>
+
+ <path name="compress-offload-playback display-port">
+ <ctl name="DISPLAY_PORT Mixer MultiMedia4" value="1" />
+ </path>
+
+ <path name="silence-playback display-port">
+ <ctl name="DISPLAY_PORT Mixer MultiMedia9" value="1" />
+ </path>
+
+ <path name="compress-offload-playback bt-sco">
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia4" value="1" />
+ </path>
+
+ <path name="compress-offload-playback bt-sco-wb">
+ <ctl name="BT SampleRate" value="KHZ_16" />
+ <path name="compress-offload-playback bt-sco" />
+ </path>
+
+ <path name="compress-offload-playback speaker-and-hdmi">
+ <path name="compress-offload-playback hdmi" />
+ <path name="compress-offload-playback" />
+ </path>
+
+ <path name="compress-offload-playback speaker-and-display-port">
+ <path name="compress-offload-playback display-port" />
+ <path name="compress-offload-playback" />
+ </path>
+
+ <path name="compress-offload-playback afe-proxy">
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia4" value="1" />
+ </path>
+
+ <path name="compress-offload-playback usb-headphones">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia4" value="1" />
+ </path>
+
+ <path name="compress-offload-playback usb-headset">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia4" value="1" />
+ </path>
+
+ <path name="compress-offload-playback speaker-and-usb-headphones">
+ <path name="compress-offload-playback usb-headphones" />
+ <path name="compress-offload-playback" />
+ </path>
+
+ <path name="compress-offload-playback headphones">
+ <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia4" value="1" />
+ </path>
+
+ <path name="compress-offload-playback headphones-44.1">
+ <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia4" value="1" />
+ </path>
+
+ <path name="compress-offload-playback headphones-dsd">
+ </path>
+
+ <path name="compress-offload-playback speaker-and-headphones">
+ <path name="compress-offload-playback headphones" />
+ <path name="compress-offload-playback" />
+ </path>
+
+ <path name="compress-offload-playback speaker-and-bt-sco">
+ <path name="compress-offload-playback bt-sco" />
+ <path name="compress-offload-playback" />
+ </path>
+
+ <path name="compress-offload-playback speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback bt-sco-wb" />
+ <path name="compress-offload-playback" />
+ </path>
+
+ <path name="compress-offload-playback2">
+ <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia7" value="1" />
+ </path>
+
+ <path name="compress-offload-playback2 display-port">
+ <ctl name="DISPLAY_PORT Mixer MultiMedia7" value="1" />
+ </path>
+
+ <path name="compress-offload-playback2 bt-sco">
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia7" value="1" />
+ </path>
+
+ <path name="compress-offload-playback2 bt-sco-wb">
+ <ctl name="BT SampleRate" value="KHZ_16" />
+ <path name="compress-offload-playback2 bt-sco" />
+ </path>
+
+ <path name="compress-offload-playback2 speaker-and-hdmi">
+ <path name="compress-offload-playback2 hdmi" />
+ <path name="compress-offload-playback2" />
+ </path>
+
+ <path name="compress-offload-playback2 speaker-and-display-port">
+ <path name="compress-offload-playback2 display-port" />
+ <path name="compress-offload-playback2" />
+ </path>
+
+ <path name="compress-offload-playback2 afe-proxy">
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia7" value="1" />
+ </path>
+
+ <path name="compress-offload-playback2 usb-headphones">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia7" value="1" />
+ </path>
+
+ <path name="compress-offload-playback2 usb-headset">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia7" value="1" />
+ </path>
+
+ <path name="compress-offload-playback2 speaker-and-usb-headphones">
+ <path name="compress-offload-playback2 usb-headphones" />
+ <path name="compress-offload-playback2" />
+ </path>
+
+ <path name="compress-offload-playback2 headphones">
+ <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia7" value="1" />
+ </path>
+
+ <path name="compress-offload-playback2 headphones-44.1">
+ <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia7" value="1" />
+ </path>
+
+ <path name="compress-offload-playback2 headphones-dsd">
+ </path>
+
+ <path name="compress-offload-playback2 speaker-and-headphones">
+ <path name="compress-offload-playback2 headphones" />
+ <path name="compress-offload-playback2" />
+ </path>
+
+ <path name="compress-offload-playback2 speaker-and-bt-sco">
+ <path name="compress-offload-playback2 bt-sco" />
+ <path name="compress-offload-playback2" />
+ </path>
+
+ <path name="compress-offload-playback2 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback2 bt-sco-wb" />
+ <path name="compress-offload-playback2" />
+ </path>
+
+ <path name="compress-offload-playback3">
+ <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia10" value="1" />
+ </path>
+
+ <path name="compress-offload-playback3 display-port">
+ <ctl name="DISPLAY_PORT Mixer MultiMedia10" value="1" />
+ </path>
+
+ <path name="compress-offload-playback3 bt-sco">
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia10" value="1" />
+ </path>
+
+ <path name="compress-offload-playback3 bt-sco-wb">
+ <ctl name="BT SampleRate" value="KHZ_16" />
+ <path name="compress-offload-playback3 bt-sco" />
+ </path>
+
+ <path name="compress-offload-playback3 speaker-and-hdmi">
+ <path name="compress-offload-playback3 hdmi" />
+ <path name="compress-offload-playback3" />
+ </path>
+
+ <path name="compress-offload-playback3 speaker-and-display-port">
+ <path name="compress-offload-playback3 display-port" />
+ <path name="compress-offload-playback3" />
+ </path>
+
+ <path name="compress-offload-playback3 afe-proxy">
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia10" value="1" />
+ </path>
+
+ <path name="compress-offload-playback3 usb-headphones">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia10" value="1" />
+ </path>
+
+ <path name="compress-offload-playback3 usb-headset">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia10" value="1" />
+ </path>
+
+ <path name="compress-offload-playback3 speaker-and-usb-headphones">
+ <path name="compress-offload-playback3 usb-headphones" />
+ <path name="compress-offload-playback3" />
+ </path>
+
+ <path name="compress-offload-playback3 headphones">
+ <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia10" value="1" />
+ </path>
+
+ <path name="compress-offload-playback3 headphones-44.1">
+ <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia10" value="1" />
+ </path>
+
+ <path name="compress-offload-playback3 headphones-dsd">
+ </path>
+
+ <path name="compress-offload-playback3 speaker-and-headphones">
+ <path name="compress-offload-playback3 headphones" />
+ <path name="compress-offload-playback3" />
+ </path>
+
+ <path name="compress-offload-playback3 speaker-and-bt-sco">
+ <path name="compress-offload-playback3 bt-sco" />
+ <path name="compress-offload-playback3" />
+ </path>
+
+ <path name="compress-offload-playback3 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback3 bt-sco-wb" />
+ <path name="compress-offload-playback3" />
+ </path>
+
+ <path name="compress-offload-playback4">
+ <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia11" value="1" />
+ </path>
+
+ <path name="compress-offload-playback4 display-port">
+ <ctl name="DISPLAY_PORT Mixer MultiMedia11" value="1" />
+ </path>
+
+ <path name="compress-offload-playback4 bt-sco">
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia11" value="1" />
+ </path>
+
+ <path name="compress-offload-playback4 bt-sco-wb">
+ <ctl name="BT SampleRate" value="KHZ_16" />
+ <path name="compress-offload-playback4 bt-sco" />
+ </path>
+
+ <path name="compress-offload-playback4 speaker-and-hdmi">
+ <path name="compress-offload-playback4 hdmi" />
+ <path name="compress-offload-playback4" />
+ </path>
+
+ <path name="compress-offload-playback4 speaker-and-display-port">
+ <path name="compress-offload-playback4 display-port" />
+ <path name="compress-offload-playback4" />
+ </path>
+
+
+ <path name="compress-offload-playback4 afe-proxy">
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia11" value="1" />
+ </path>
+
+ <path name="compress-offload-playback4 usb-headphones">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia11" value="1" />
+ </path>
+
+ <path name="compress-offload-playback4 usb-headset">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia11" value="1" />
+ </path>
+
+ <path name="compress-offload-playback4 speaker-and-usb-headphones">
+ <path name="compress-offload-playback4 usb-headphones" />
+ <path name="compress-offload-playback4" />
+ </path>
+
+ <path name="compress-offload-playback4 headphones">
+ <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia11" value="1" />
+ </path>
+
+ <path name="compress-offload-playback4 headphones-44.1">
+ <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia11" value="1" />
+ </path>
+
+ <path name="compress-offload-playback4 headphones-dsd">
+ </path>
+
+ <path name="compress-offload-playback4 speaker-and-headphones">
+ <path name="compress-offload-playback4 headphones" />
+ <path name="compress-offload-playback4" />
+ </path>
+
+ <path name="compress-offload-playback4 speaker-and-bt-sco">
+ <path name="compress-offload-playback4 bt-sco" />
+ <path name="compress-offload-playback4" />
+ </path>
+
+ <path name="compress-offload-playback4 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback4 bt-sco-wb" />
+ <path name="compress-offload-playback4" />
+ </path>
+
+ <path name="compress-offload-playback5">
+ <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia12" value="1" />
+ </path>
+
+ <path name="compress-offload-playback5 display-port">
+ <ctl name="DISPLAY_PORT Mixer MultiMedia12" value="1" />
+ </path>
+
+ <path name="compress-offload-playback5 bt-sco">
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia12" value="1" />
+ </path>
+
+ <path name="compress-offload-playback5 bt-sco-wb">
+ <ctl name="BT SampleRate" value="KHZ_16" />
+ <path name="compress-offload-playback5 bt-sco" />
+ </path>
+
+ <path name="compress-offload-playback5 speaker-and-hdmi">
+ <path name="compress-offload-playback5 hdmi" />
+ <path name="compress-offload-playback5" />
+ </path>
+
+ <path name="compress-offload-playback5 speaker-and-display-port">
+ <path name="compress-offload-playback5 display-port" />
+ <path name="compress-offload-playback5" />
+ </path>
+
+ <path name="compress-offload-playback5 afe-proxy">
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia12" value="1" />
+ </path>
+
+ <path name="compress-offload-playback5 usb-headphones">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia12" value="1" />
+ </path>
+
+ <path name="compress-offload-playback5 usb-headset">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia12" value="1" />
+ </path>
+
+ <path name="compress-offload-playback5 speaker-and-usb-headphones">
+ <path name="compress-offload-playback5 usb-headphones" />
+ <path name="compress-offload-playback5" />
+ </path>
+
+ <path name="compress-offload-playback5 headphones">
+ <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia12" value="1" />
+ </path>
+
+ <path name="compress-offload-playback5 headphones-44.1">
+ <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia12" value="1" />
+ </path>
+
+ <path name="compress-offload-playback5 headphones-dsd">
+ </path>
+
+ <path name="compress-offload-playback5 speaker-and-headphones">
+ <path name="compress-offload-playback5 headphones" />
+ <path name="compress-offload-playback5" />
+ </path>
+
+ <path name="compress-offload-playback5 speaker-and-bt-sco">
+ <path name="compress-offload-playback5 bt-sco" />
+ <path name="compress-offload-playback5" />
+ </path>
+
+ <path name="compress-offload-playback5 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback5 bt-sco-wb" />
+ <path name="compress-offload-playback5" />
+ </path>
+
+ <path name="compress-offload-playback6">
+ <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia13" value="1" />
+ </path>
+
+ <path name="compress-offload-playback6 display-port">
+ <ctl name="DISPLAY_PORT Mixer MultiMedia13" value="1" />
+ </path>
+
+ <path name="compress-offload-playback6 bt-sco">
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia13" value="1" />
+ </path>
+
+ <path name="compress-offload-playback6 bt-sco-wb">
+ <ctl name="BT SampleRate" value="KHZ_16" />
+ <path name="compress-offload-playback6 bt-sco" />
+ </path>
+
+ <path name="compress-offload-playback6 speaker-and-hdmi">
+ <path name="compress-offload-playback6 hdmi" />
+ <path name="compress-offload-playback6" />
+ </path>
+
+ <path name="compress-offload-playback6 speaker-and-display-port">
+ <path name="compress-offload-playback6 display-port" />
+ <path name="compress-offload-playback6" />
+ </path>
+
+ <path name="compress-offload-playback6 afe-proxy">
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia13" value="1" />
+ </path>
+
+ <path name="compress-offload-playback6 usb-headphones">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia13" value="1" />
+ </path>
+
+ <path name="compress-offload-playback6 usb-headset">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia13" value="1" />
+ </path>
+
+ <path name="compress-offload-playback6 speaker-and-usb-headphones">
+ <path name="compress-offload-playback6 usb-headphones" />
+ <path name="compress-offload-playback6" />
+ </path>
+
+ <path name="compress-offload-playback6 headphones">
+ <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia13" value="1" />
+ </path>
+
+ <path name="compress-offload-playback6 headphones-44.1">
+ <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia13" value="1" />
+ </path>
+
+ <path name="compress-offload-playback6 headphones-dsd">
+ </path>
+
+ <path name="compress-offload-playback6 speaker-and-headphones">
+ <path name="compress-offload-playback6 headphones" />
+ <path name="compress-offload-playback6" />
+ </path>
+
+ <path name="compress-offload-playback6 speaker-and-bt-sco">
+ <path name="compress-offload-playback6 bt-sco" />
+ <path name="compress-offload-playback6" />
+ </path>
+
+ <path name="compress-offload-playback6 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback6 bt-sco-wb" />
+ <path name="compress-offload-playback6" />
+ </path>
+
+ <path name="compress-offload-playback7">
+ <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia14" value="1" />
+ </path>
+
+ <path name="compress-offload-playback7 display-port">
+ <ctl name="DISPLAY_PORT Mixer MultiMedia14" value="1" />
+ </path>
+
+ <path name="compress-offload-playback7 bt-sco">
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia14" value="1" />
+ </path>
+
+ <path name="compress-offload-playback7 bt-sco-wb">
+ <ctl name="BT SampleRate" value="KHZ_16" />
+ <path name="compress-offload-playback7 bt-sco" />
+ </path>
+
+ <path name="compress-offload-playback7 speaker-and-hdmi">
+ <path name="compress-offload-playback7 hdmi" />
+ <path name="compress-offload-playback7" />
+ </path>
+
+ <path name="compress-offload-playback7 speaker-and-display-port">
+ <path name="compress-offload-playback7 display-port" />
+ <path name="compress-offload-playback7" />
+ </path>
+
+ <path name="compress-offload-playback7 afe-proxy">
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia14" value="1" />
+ </path>
+
+ <path name="compress-offload-playback7 usb-headphones">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia14" value="1" />
+ </path>
+
+ <path name="compress-offload-playback7 usb-headset">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia14" value="1" />
+ </path>
+
+ <path name="compress-offload-playback7 speaker-and-usb-headphones">
+ <path name="compress-offload-playback7 usb-headphones" />
+ <path name="compress-offload-playback7" />
+ </path>
+
+ <path name="compress-offload-playback7 headphones">
+ <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia14" value="1" />
+ </path>
+
+ <path name="compress-offload-playback7 headphones-44.1">
+ <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia14" value="1" />
+ </path>
+
+ <path name="compress-offload-playback7 headphones-dsd">
+ </path>
+
+ <path name="compress-offload-playback7 speaker-and-headphones">
+ <path name="compress-offload-playback7 headphones" />
+ <path name="compress-offload-playback7" />
+ </path>
+
+ <path name="compress-offload-playback7 speaker-and-bt-sco">
+ <path name="compress-offload-playback7 bt-sco" />
+ <path name="compress-offload-playback7" />
+ </path>
+
+ <path name="compress-offload-playback7 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback7 bt-sco-wb" />
+ <path name="compress-offload-playback7" />
+ </path>
+
+ <path name="compress-offload-playback8">
+ <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia15" value="1" />
+ </path>
+
+ <path name="compress-offload-playback8 display-port">
+ <ctl name="DISPLAY_PORT Mixer MultiMedia15" value="1" />
+ </path>
+
+ <path name="compress-offload-playback8 bt-sco">
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia15" value="1" />
+ </path>
+
+ <path name="compress-offload-playback8 bt-sco-wb">
+ <ctl name="BT SampleRate" value="KHZ_16" />
+ <path name="compress-offload-playback8 bt-sco" />
+ </path>
+
+ <path name="compress-offload-playback8 speaker-and-hdmi">
+ <path name="compress-offload-playback8 hdmi" />
+ <path name="compress-offload-playback8" />
+ </path>
+
+ <path name="compress-offload-playback8 speaker-and-display-port">
+ <path name="compress-offload-playback8 display-port" />
+ <path name="compress-offload-playback8" />
+ </path>
+
+ <path name="compress-offload-playback8 afe-proxy">
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia15" value="1" />
+ </path>
+
+ <path name="compress-offload-playback8 usb-headphones">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia15" value="1" />
+ </path>
+
+ <path name="compress-offload-playback8 usb-headset">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia15" value="1" />
+ </path>
+
+ <path name="compress-offload-playback8 speaker-and-usb-headphones">
+ <path name="compress-offload-playback8 usb-headphones" />
+ <path name="compress-offload-playback8" />
+ </path>
+
+ <path name="compress-offload-playback8 headphones">
+ <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia15" value="1" />
+ </path>
+
+ <path name="compress-offload-playback8 headphones-44.1">
+ <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia15" value="1" />
+ </path>
+
+ <path name="compress-offload-playback8 headphones-dsd">
+ </path>
+
+ <path name="compress-offload-playback8 speaker-and-headphones">
+ <path name="compress-offload-playback8 headphones" />
+ <path name="compress-offload-playback8" />
+ </path>
+
+ <path name="compress-offload-playback8 speaker-and-bt-sco">
+ <path name="compress-offload-playback8 bt-sco" />
+ <path name="compress-offload-playback8" />
+ </path>
+
+ <path name="compress-offload-playback8 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback8 bt-sco-wb" />
+ <path name="compress-offload-playback8" />
+ </path>
+
+ <path name="compress-offload-playback9">
+ <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="compress-offload-playback9 display-port">
+ <ctl name="DISPLAY_PORT Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="compress-offload-playback9 bt-sco">
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="compress-offload-playback9 bt-sco-wb">
+ <ctl name="BT SampleRate" value="KHZ_16" />
+ <path name="compress-offload-playback9 bt-sco" />
+ </path>
+
+ <path name="compress-offload-playback9 speaker-and-hdmi">
+ <path name="compress-offload-playback9 hdmi" />
+ <path name="compress-offload-playback9" />
+ </path>
+
+ <path name="compress-offload-playback9 speaker-and-display-port">
+ <path name="compress-offload-playback9 display-port" />
+ <path name="compress-offload-playback9" />
+ </path>
+
+ <path name="compress-offload-playback9 afe-proxy">
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="compress-offload-playback9 usb-headphones">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="compress-offload-playback9 usb-headset">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="compress-offload-playback9 speaker-and-usb-headphones">
+ <path name="compress-offload-playback9 usb-headphones" />
+ <path name="compress-offload-playback9" />
+ </path>
+
+ <path name="compress-offload-playback9 headphones">
+ <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="compress-offload-playback9 headphones-44.1">
+ <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="compress-offload-playback9 headphones-dsd">
+ </path>
+
+ <path name="compress-offload-playback9 speaker-and-headphones">
+ <path name="compress-offload-playback9 headphones" />
+ <path name="compress-offload-playback9" />
+ </path>
+
+ <path name="compress-offload-playback9 speaker-and-bt-sco">
+ <path name="compress-offload-playback9 bt-sco" />
+ <path name="compress-offload-playback9" />
+ </path>
+
+ <path name="compress-offload-playback9 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback9 bt-sco-wb" />
+ <path name="compress-offload-playback9" />
+ </path>
+
+ <path name="audio-record">
+ <ctl name="MultiMedia1 Mixer INT3_MI2S_TX" value="1" />
+ </path>
+
+ <path name="audio-record usb-headset-mic">
+ <ctl name="MultiMedia1 Mixer USB_AUDIO_TX" value="1" />
+ </path>
+
+ <path name="audio-record bt-sco">
+ <ctl name="MultiMedia1 Mixer SLIM_7_TX" value="1" />
+ </path>
+
+ <path name="audio-record bt-sco-wb">
+ <ctl name="BT SampleRate" value="KHZ_16" />
+ <path name="audio-record bt-sco" />
+ </path>
+
+ <path name="audio-record capture-fm">
+ <ctl name="MultiMedia1 Mixer SLIM_8_TX" value="1" />
+ </path>
+
+ <path name="audio-record-compress">
+ <ctl name="MultiMedia8 Mixer INT3_MI2S_TX" value="1" />
+ </path>
+
+ <path name="audio-record-compress2">
+ <ctl name="MultiMedia17 Mixer INT3_MI2S_TX" value="1" />
+ </path>
+
+ <path name="audio-record-compress3">
+ <ctl name="MultiMedia18 Mixer INT3_MI2S_TX" value="1" />
+ </path>
+
+ <path name="audio-record-compress4">
+ <ctl name="MultiMedia19 Mixer INT3_MI2S_TX" value="1" />
+ </path>
+
+ <path name="audio-record-compress5">
+ <ctl name="MultiMedia28 Mixer INT3_MI2S_TX" value="1" />
+ </path>
+
+ <path name="audio-record-compress6">
+ <ctl name="MultiMedia29 Mixer INT3_MI2S_TX" value="1" />
+ </path>
+
+ <path name="audio-record-compress bt-sco">
+ <ctl name="MultiMedia8 Mixer SLIM_7_TX" value="1" />
+ </path>
+
+ <path name="audio-record-compress bt-sco-wb">
+ <ctl name="BT SampleRate" value="KHZ_16" />
+ <path name="audio-record-compress bt-sco" />
+ </path>
+
+ <path name="audio-record-compress usb-headset-mic">
+ <ctl name="MultiMedia8 Mixer USB_AUDIO_TX" value="1" />
+ </path>
+
+ <path name="low-latency-record">
+ <ctl name="MultiMedia8 Mixer INT3_MI2S_TX" value="1" />
+ </path>
+
+ <path name="low-latency-record bt-sco">
+ <ctl name="MultiMedia8 Mixer SLIM_7_TX" value="1" />
+ </path>
+
+ <path name="low-latency-record bt-sco-wb">
+ <ctl name="BT SampleRate" value="KHZ_16" />
+ <path name="low-latency-record bt-sco" />
+ </path>
+
+ <path name="low-latency-record usb-headset-mic">
+ <ctl name="MultiMedia8 Mixer USB_AUDIO_TX" value="1" />
+ </path>
+
+ <path name="low-latency-record capture-fm">
+ <ctl name="MultiMedia8 Mixer SLIM_8_TX" value="1" />
+ </path>
+
+ <path name="fm-virtual-record capture-fm">
+ <ctl name="MultiMedia2 Mixer SLIM_8_TX" value="1" />
+ </path>
+
+ <path name="play-fm">
+ <ctl name="SLIMBUS_8 LOOPBACK Volume" value="1" />
+ <ctl name="INT4_MI2S_RX Port Mixer SLIM_8_TX" value="1" />
+ <ctl name="INT4_MI2S_RX_DL_HL Switch" value="1" />
+ </path>
+
+ <path name="play-fm headphones">
+ <ctl name="SLIMBUS_8 LOOPBACK Volume" value="1" />
+ <ctl name="INT0_MI2S_RX Port Mixer SLIM_8_TX" value="1" />
+ <ctl name="INT0_MI2S_RX_DL_HL Switch" value="1" />
+ </path>
+
+ <path name="incall-rec-uplink">
+ <ctl name="MultiMedia1 Mixer VOC_REC_UL" value="1" />
+ </path>
+
+ <path name="incall-rec-uplink bt-sco">
+ <path name="incall-rec-uplink" />
+ </path>
+
+ <path name="incall-rec-uplink bt-sco-wb">
+ <path name="incall-rec-uplink" />
+ </path>
+
+ <path name="incall-rec-uplink usb-headset-mic">
+ <path name="incall-rec-uplink" />
+ </path>
+
+ <path name="incall-rec-uplink afe-proxy">
+ <path name="incall-rec-uplink" />
+ </path>
+
+ <path name="incall-rec-uplink-compress">
+ <ctl name="MultiMedia8 Mixer VOC_REC_UL" value="1" />
+ </path>
+
+ <path name="incall-rec-uplink-compress bt-sco">
+ <path name="incall-rec-uplink-compress" />
+ </path>
+
+ <path name="incall-rec-uplink-compress bt-sco-wb">
+ <path name="incall-rec-uplink-compress" />
+ </path>
+
+ <path name="incall-rec-uplink-compress usb-headset-mic">
+ <path name="incall-rec-uplink-compress" />
+ </path>
+
+ <path name="incall-rec-uplink-compress afe-proxy">
+ <path name="incall-rec-uplink-compress" />
+ </path>
+
+ <path name="incall-rec-downlink">
+ <ctl name="MultiMedia1 Mixer VOC_REC_DL" value="1" />
+ </path>
+
+ <path name="incall-rec-downlink bt-sco">
+ <path name="incall-rec-downlink" />
+ </path>
+
+ <path name="incall-rec-downlink bt-sco-wb">
+ <path name="incall-rec-downlink" />
+ </path>
+
+ <path name="incall-rec-downlink usb-headset-mic">
+ <path name="incall-rec-downlink" />
+ </path>
+
+ <path name="incall-rec-downlink afe-proxy">
+ <path name="incall-rec-downlink" />
+ </path>
+
+ <path name="incall-rec-downlink-compress">
+ <ctl name="MultiMedia8 Mixer VOC_REC_DL" value="1" />
+ </path>
+
+ <path name="incall-rec-downlink-compress bt-sco">
+ <path name="incall-rec-downlink-compress" />
+ </path>
+
+ <path name="incall-rec-downlink-compress bt-sco-wb">
+ <path name="incall-rec-downlink-compress" />
+ </path>
+
+ <path name="incall-rec-downlink-compress usb-headset-mic">
+ <path name="incall-rec-downlink-compress" />
+ </path>
+
+ <path name="incall-rec-downlink-compress afe-proxy">
+ <path name="incall-rec-downlink-compress" />
+ </path>
+
+ <path name="incall-rec-uplink-and-downlink">
+ <path name="incall-rec-uplink" />
+ <path name="incall-rec-downlink" />
+ </path>
+
+ <path name="incall-rec-uplink-and-downlink bt-sco">
+ <path name="incall-rec-uplink-and-downlink" />
+ </path>
+
+ <path name="incall-rec-uplink-and-downlink bt-sco-wb">
+ <path name="incall-rec-uplink-and-downlink" />
+ </path>
+
+ <path name="incall-rec-uplink-and-downlink usb-headset-mic">
+ <path name="incall-rec-uplink-and-downlink" />
+ </path>
+
+ <path name="incall-rec-uplink-and-downlink afe-proxy">
+ <path name="incall-rec-uplink-and-downlink" />
+ </path>
+
+ <path name="incall-rec-uplink-and-downlink-compress">
+ <path name="incall-rec-uplink-compress" />
+ <path name="incall-rec-downlink-compress" />
+ </path>
+
+ <path name="incall-rec-uplink-and-downlink-compress bt-sco">
+ <path name="incall-rec-uplink-and-downlink-compress" />
+ </path>
+
+ <path name="incall-rec-uplink-and-downlink-compress bt-sco-wb">
+ <path name="incall-rec-uplink-and-downlink-compress" />
+ </path>
+
+ <path name="incall-rec-uplink-and-downlink-compress usb-headset-mic">
+ <path name="incall-rec-uplink-and-downlink-compress" />
+ </path>
+
+ <path name="incall-rec-uplink-and-downlink-compress afe-proxy">
+ <path name="incall-rec-uplink-and-downlink-compress" />
+ </path>
+
+ <path name="hfp-sco">
+ <ctl name="HFP_SLIM7_UL_HL Switch" value="1" />
+ <ctl name="INT4_MI2S_RX Port Mixer SLIM_7_TX" value="1" />
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia6" value="1" />
+ <ctl name="MultiMedia6 Mixer INT3_MI2S_TX" value="1" />
+ <ctl name="INT4_MI2S_RX_DL_HL Switch" value="1" />
+ </path>
+
+ <path name="hfp-sco headphones">
+ <ctl name="HFP_SLIM7_UL_HL Switch" value="1" />
+ <ctl name="INT0_MI2S_RX Port Mixer SLIM_7_TX" value="1" />
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia6" value="1" />
+ <ctl name="MultiMedia6 Mixer INT3_MI2S_TX" value="1" />
+ <ctl name="INT0_MI2S_RX_DL_HL Switch" value="1" />
+ </path>
+
+ <path name="hfp-sco-wb">
+ <ctl name="BT SampleRate" value="KHZ_16" />
+ <path name="hfp-sco" />
+ </path>
+
+ <path name="hfp-sco-wb headphones">
+ <ctl name="BT SampleRate" value="KHZ_16" />
+ <path name="hfp-sco headphones" />
+ </path>
+
+ <path name="compress-voip-call">
+ <ctl name="INT4_MI2S_RX_Voice Mixer Voip" value="1" />
+ <ctl name="Voip_Tx Mixer INT3_MI2S_TX_Voip" value="1" />
+ </path>
+
+ <path name="compress-voip-call bt-a2dp">
+ <ctl name="SLIM_7_RX_Voice Mixer Voip" value="1" />
+ <ctl name="Voip_Tx Mixer INT3_MI2S_TX_Voip" value="1" />
+ </path>
+
+ <path name="compress-voip-call headphones">
+ <ctl name="INT0_MI2S_RX_Voice Mixer Voip" value="1" />
+ <ctl name="Voip_Tx Mixer INT3_MI2S_TX_Voip" value="1" />
+ </path>
+
+
+ <path name="compress-voip-call bt-sco">
+ <ctl name="SLIM_7_RX_Voice Mixer Voip" value="1" />
+ <ctl name="Voip_Tx Mixer SLIM_7_TX_Voip" value="1" />
+ </path>
+
+ <path name="compress-voip-call bt-sco-wb">
+ <ctl name="BT SampleRate" value="KHZ_16" />
+ <path name="compress-voip-call bt-sco" />
+ </path>
+
+ <path name="compress-voip-call afe-proxy">
+ <ctl name="AFE_PCM_RX_Voice Mixer Voip" value="1" />
+ <ctl name="Voip_Tx Mixer AFE_PCM_TX_Voip" value="1" />
+ </path>
+
+ <path name="compress-voip-call usb-headphones">
+ <ctl name="USB_AUDIO_RX_Voice Mixer Voip" value="1" />
+ <ctl name="Voip_Tx Mixer INT3_MI2S_TX_Voip" value="1" />
+ </path>
+
+ <path name="compress-voip-call usb-headset">
+ <ctl name="USB_AUDIO_RX_Voice Mixer Voip" value="1" />
+ <ctl name="Voip_Tx Mixer USB_AUDIO_TX_Voip" value="1" />
+ </path>
+
+ <path name="voicemmode1-call">
+ <ctl name="INT4_MI2S_RX_Voice Mixer VoiceMMode1" value="1" />
+ <ctl name="VoiceMMode1_Tx Mixer INT3_MI2S_TX_MMode1" value="1" />
+ </path>
+
+ <path name="voicemmode1-call headphones">
+ <ctl name="INT0_MI2S_RX_Voice Mixer VoiceMMode1" value="1" />
+ <ctl name="VoiceMMode1_Tx Mixer INT3_MI2S_TX_MMode1" value="1" />
+ </path>
+
+
+ <path name="voicemmode1-call bt-sco">
+ <ctl name="SLIM_7_RX_Voice Mixer VoiceMMode1" value="1" />
+ <ctl name="VoiceMMode1_Tx Mixer SLIM_7_TX_MMode1" value="1" />
+ </path>
+
+ <path name="voicemmode1-call bt-sco-wb">
+ <ctl name="BT SampleRate" value="KHZ_16" />
+ <path name="voicemmode1-call bt-sco" />
+ </path>
+
+ <path name="voicemmode1-call afe-proxy">
+ <ctl name="AFE_PCM_RX_Voice Mixer VoiceMMode1" value="1" />
+ <ctl name="VoiceMMode1_Tx Mixer AFE_PCM_TX_MMode1" value="1" />
+ </path>
+
+ <path name="voicemmode1-call usb-headphones">
+ <ctl name="USB_AUDIO_RX_Voice Mixer VoiceMMode1" value="1" />
+ <ctl name="VoiceMMode1_Tx Mixer INT3_MI2S_TX_MMode1" value="1" />
+ </path>
+
+ <path name="voicemmode1-call usb-headset">
+ <ctl name="USB_AUDIO_RX_Voice Mixer VoiceMMode1" value="1" />
+ <ctl name="VoiceMMode1_Tx Mixer USB_AUDIO_TX_MMode1" value="1" />
+ </path>
+
+ <path name="voicemmode2-call">
+ <ctl name="INT4_MI2S_RX_Voice Mixer VoiceMMode2" value="1" />
+ <ctl name="VoiceMMode2_Tx Mixer INT3_MI2S_TX_MMode2" value="1" />
+ </path>
+
+ <path name="voicemmode2-call headphones">
+ <ctl name="INT0_MI2S_RX_Voice Mixer VoiceMMode2" value="1" />
+ <ctl name="VoiceMMode2_Tx Mixer INT3_MI2S_TX_MMode2" value="1" />
+ </path>
+
+ <path name="voicemmode2-call bt-sco">
+ <ctl name="SLIM_7_RX_Voice Mixer VoiceMMode2" value="1" />
+ <ctl name="VoiceMMode2_Tx Mixer SLIM_7_TX_MMode2" value="1" />
+ </path>
+
+ <path name="voicemmode2-call bt-sco-wb">
+ <ctl name="BT SampleRate" value="KHZ_16" />
+ <path name="voicemmode2-call bt-sco" />
+ </path>
+
+ <path name="voicemmode2-call afe-proxy">
+ <ctl name="AFE_PCM_RX_Voice Mixer VoiceMMode2" value="1" />
+ <ctl name="VoiceMMode2_Tx Mixer AFE_PCM_TX_MMode2" value="1" />
+ </path>
+
+ <path name="voicemmode2-call usb-headphones">
+ <ctl name="USB_AUDIO_RX_Voice Mixer VoiceMMode2" value="1" />
+ <ctl name="VoiceMMode2_Tx Mixer INT3_MI2S_TX_MMode2" value="1" />
+ </path>
+
+ <path name="voicemmode2-call usb-headset">
+ <ctl name="USB_AUDIO_RX_Voice Mixer VoiceMMode2" value="1" />
+ <ctl name="VoiceMMode2_Tx Mixer USB_AUDIO_TX_MMode2" value="1" />
+ </path>
+
+ <!-- VOIP Rx settings -->
+ <path name="audio-playback-voip">
+ <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia10" value="1" />
+ </path>
+
+ <path name="audio-playback-voip headphones">
+ <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia10" value="1" />
+ </path>
+
+ <path name="audio-playback-voip bt-sco">
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia10" value="1" />
+ </path>
+
+ <path name="audio-playback-voip bt-a2dp">
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia10" value="1" />
+ </path>
+
+ <path name="audio-playback-voip bt-sco-wb">
+ <ctl name="BT SampleRate" value="KHZ_16" />
+ <path name="audio-playback-voip bt-sco" />
+ </path>
+
+ <path name="audio-playback-voip afe-proxy">
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia10" value="1" />
+ </path>
+
+ <path name="audio-playback-voip usb-headphones">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia10" value="1" />
+ </path>
+
+ <path name="audio-playback-voip usb-headset">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia10" value="1" />
+ </path>
+
+ <path name="audio-playback-voip display-port">
+ <ctl name="DISPLAY_PORT Audio Mixer MultiMedia10" value="1" />
+ </path>
+
+ <path name="audio-playback-voip speaker-and-display-port">
+ <path name="audio-playback-voip display-port" />
+ <path name="audio-playback-voip" />
+ </path>
+
+ <!-- VoIP Tx settings -->
+ <path name="audio-record-voip">
+ <ctl name="MultiMedia10 Mixer INT3_MI2S_TX" value="1" />
+ </path>
+
+ <path name="audio-record-voip usb-headset-mic">
+ <ctl name="MultiMedia10 Mixer USB_AUDIO_TX" value="1" />
+ </path>
+
+ <path name="audio-record-voip bt-sco">
+ <ctl name="MultiMedia10 Mixer SLIM_7_TX" value="1" />
+ </path>
+
+ <path name="audio-record-voip bt-sco-wb">
+ <ctl name="BT SampleRate" value="KHZ_16" />
+ <path name="audio-record-voip bt-sco" />
+ </path>
+
+ <path name="spkr-rx-calib">
+ <ctl name="INT4_MI2S_RX_DL_HL Switch" value="1" />
+ </path>
+
+ <path name="spkr-vi-record">
+ </path>
+
+ <!-- These are actual sound device specific mixer settings -->
+ <path name="adc1">
+ <ctl name="ADC1 Volume" value="6" />
+ <ctl name="DEC1 MUX" value="ADC1" />
+ <ctl name="ADC1_INP1 Switch" value="1" />
+ </path>
+
+ <path name="adc2">
+ <ctl name="ADC2 Volume" value="6" />
+ <ctl name="DEC1 MUX" value="ADC2" />
+ <ctl name="ADC2 MUX" value="INP2" />
+ </path>
+
+ <path name="adc3">
+ <ctl name="ADC3 Volume" value="6" />
+ <ctl name="DEC1 MUX" value="ADC2" />
+ <ctl name="ADC2 MUX" value="INP3" />
+ </path>
+
+ <!-- DMIC numbered from 1 to 4 -->
+ <path name="dmic1">
+ <ctl name="DEC1 MUX" value="DMIC1" />
+ </path>
+
+ <path name="dmic2">
+ <ctl name="DEC1 MUX" value="DMIC2" />
+ </path>
+
+ <path name="dmic3">
+ <ctl name="DEC1 MUX" value="DMIC3" />
+ </path>
+
+ <path name="dmic4">
+ <ctl name="DEC1 MUX" value="DMIC4" />
+ </path>
+
+ <path name="speaker">
+ <ctl name="INT4_MI2S_RX Channels" value="Two" />
+ <ctl name="RX4 MIX1 INP1" value="RX4" />
+ <ctl name="RX5 MIX1 INP1" value="RX5" />
+ <ctl name="COMP1 Switch" value="1" />
+ <ctl name="COMP2 Switch" value="1" />
+ <ctl name="SpkrLeft COMP Switch" value="1" />
+ <ctl name="SpkrLeft BOOST Switch" value="1" />
+ <ctl name="SpkrLeft VISENSE Switch" value="1" />
+ <ctl name="SpkrLeft SWR DAC_Port Switch" value="1" />
+ <ctl name="SpkrRight COMP Switch" value="1" />
+ <ctl name="SpkrRight BOOST Switch" value="1" />
+ <ctl name="SpkrRight VISENSE Switch" value="1" />
+ <ctl name="SpkrRight SWR DAC_Port Switch" value="1" />
+ <ctl name="SpkrLeft WSA PA Mute" value="0" />
+ <ctl name="SpkrRight WSA PA Mute" value="0" />
+ </path>
+
+ <path name="speaker-mono">
+ <ctl name="INT4_MI2S_RX Channels" value="One" />
+ <ctl name="RX4 MIX1 INP1" value="RX4" />
+ <ctl name="COMP1 Switch" value="1" />
+ <ctl name="SpkrLeft COMP Switch" value="1" />
+ <ctl name="SpkrLeft BOOST Switch" value="1" />
+ <ctl name="SpkrLeft VISENSE Switch" value="1" />
+ <ctl name="SpkrLeft SWR DAC_Port Switch" value="1" />
+ <ctl name="SpkrLeft WSA PA Mute" value="0" />
+ </path>
+
+ <path name="speaker-mono-2">
+ <ctl name="INT4_MI2S_RX Channels" value="One" />
+ <ctl name="RX5 MIX1 INP1" value="RX4" />
+ <ctl name="COMP2 Switch" value="1" />
+ <ctl name="SpkrRight COMP Switch" value="1" />
+ <ctl name="SpkrRight BOOST Switch" value="1" />
+ <ctl name="SpkrRight VISENSE Switch" value="1" />
+ <ctl name="SpkrRight SWR DAC_Port Switch" value="1" />
+ <ctl name="SpkrRight WSA PA Mute" value="0" />
+ </path>
+
+ <path name="speaker-fluid">
+ <path name="speaker-mono" />
+ </path>
+
+ <path name="speaker-liquid">
+ <path name="speaker" />
+ </path>
+
+ <path name="sidetone-iir">
+ <ctl name="IIR1 Enable Band1" value="1" />
+ <ctl name="IIR1 Enable Band2" value="1" />
+ <ctl name="IIR1 Enable Band3" value="1" />
+ <ctl name="IIR1 Enable Band4" value="1" />
+ <ctl name="IIR1 Enable Band5" value="1" />
+ </path>
+
+ <path name="sidetone-headphones">
+ <path name="sidetone-iir" />
+ <ctl name="RX1 MIX2 INP1" value="IIR1" />
+ <ctl name="RX2 MIX2 INP1" value="IIR1" />
+ <ctl name="IIR1 INP1 Volume" value="53" />
+ </path>
+
+ <path name="sidetone-handset">
+ <path name="sidetone-iir" />
+ <ctl name="IIR1 INP1 Volume" value="53" />
+ <ctl name="RX1 MIX2 INP1" value="IIR1" />
+ </path>
+
+ <path name="speaker-mic">
+ <path name="dmic2" />
+ </path>
+
+ <path name="speaker-mic-liquid">
+ <path name="dmic2" />
+ </path>
+
+ <path name="speaker-mic-sbc">
+ </path>
+
+ <path name="speaker-protected">
+ <ctl name="AIF1_VI_SDW Mixer SPKR_VI_1" value="1" />
+ <ctl name="AIF1_VI_SDW Mixer SPKR_VI_2" value="1" />
+ <path name="speaker" />
+ <ctl name="VI_FEED_TX Channels" value="Two" />
+ <ctl name="INT4_MI2S_RX_VI_FB_STEREO_CH_MUX" value="INT5_MI2S_TX" />
+ </path>
+
+ <path name="voice-speaker-protected">
+ <ctl name="AIF1_VI_SDW Mixer SPKR_VI_1" value="1" />
+ <path name="speaker-mono" />
+ <ctl name="VI_FEED_TX Channels" value="One" />
+ <ctl name="INT4_MI2S_RX_VI_FB_MONO_CH_MUX" value="INT5_MI2S_TX" />
+ </path>
+
+ <path name="voice-speaker-2-protected">
+ <ctl name="AIF1_VI_SDW Mixer SPKR_VI_2" value="1" />
+ <path name="speaker-mono-2" />
+ <ctl name="VI_FEED_TX Channels" value="One" />
+ <ctl name="INT4_MI2S_RX_VI_FB_MONO_CH_MUX" value="INT5_MI2S_TX" />
+ <ctl name="INT5 MI2S VI MONO" value="Right" />
+ </path>
+
+ <path name="vi-feedback">
+ </path>
+
+ <path name="vi-feedback-mono-1">
+ </path>
+
+ <path name="vi-feedback-mono-2">
+ </path>
+
+ <path name="handset">
+ <ctl name="EAR SPKR PA Gain" value="G_3_DB" />
+ <path name="speaker-mono" />
+ </path>
+
+ <path name="handset-mic">
+ <path name="dmic3" />
+ </path>
+
+ <path name="handset-mic-db">
+ </path>
+
+ <path name="handset-mic-cdp">
+ <path name="dmic2" />
+ </path>
+
+ <path name="handset-mic-sbc">
+ </path>
+
+ <path name="three-mic">
+ <ctl name="INT3_MI2S_TX Channels" value="Three" />
+ <ctl name="DEC1 MUX" value="DMIC1" />
+ <ctl name="DEC2 MUX" value="DMIC3" />
+ <ctl name="DEC3 MUX" value="DMIC4" />
+ <ctl name="I2S TX2 INP1" value="DEC3" />
+ </path>
+
+ <path name="anc-handset">
+ </path>
+
+ <path name="headphones">
+ <ctl name="INT0_MI2S_RX Channels" value="Two" />
+ <ctl name="RX1 MIX1 INP1" value="RX1" />
+ <ctl name="RX2 MIX1 INP1" value="RX2" />
+ <ctl name="RDAC2 MUX" value="RX2" />
+ <ctl name="RX HPH Mode" value="HD2" />
+ <ctl name="COMP0 RX1" value="1" />
+ <ctl name="COMP0 RX2" value="1" />
+ <ctl name="HPHL" value="Switch" />
+ <ctl name="HPHR" value="Switch" />
+ </path>
+
+ <path name="headphones-44.1">
+ <path name="headphones" />
+ </path>
+
+ <path name="true-native-mode">
+ </path>
+
+ <path name="line">
+ <path name="headphones" />
+ </path>
+
+ <path name="headset-mic">
+ <path name="adc2" />
+ </path>
+
+ <path name="headset-mic-liquid">
+ <path name="adc2" />
+ </path>
+
+ <path name="voice-handset">
+ <path name="handset" />
+ </path>
+
+ <path name="voice-handset-tmus">
+ <path name="handset" />
+ </path>
+
+ <path name="voice-speaker">
+ <path name="speaker-mono" />
+ </path>
+
+ <path name="voice-speaker-2">
+ <path name="speaker-mono-2" />
+ </path>
+
+ <path name="voice-speaker-fluid">
+ <path name="speaker-fluid" />
+ </path>
+
+ <path name="voice-speaker-mic">
+ <path name="speaker-mic" />
+ </path>
+
+ <path name="voice-headphones">
+ <path name="headphones" />
+ </path>
+
+ <path name="voice-line">
+ <path name="voice-headphones" />
+ </path>
+
+ <path name="voice-headset-mic">
+ <path name="headset-mic" />
+ </path>
+
+ <path name="speaker-and-headphones">
+ <path name="headphones" />
+ <path name="speaker" />
+ </path>
+
+ <path name="speaker-and-line">
+ <path name="speaker-and-headphones" />
+ </path>
+
+ <path name="speaker-and-headphones-liquid">
+ <path name="headphones" />
+ <path name="speaker" />
+ </path>
+
+ <path name="speaker-and-line-liquid">
+ <path name="speaker-and-headphones-liquid" />
+ </path>
+
+ <path name="usb-headphones">
+ </path>
+
+ <path name="usb-headset">
+ </path>
+
+ <path name="afe-proxy">
+ </path>
+
+ <path name="anc-headphones">
+ <path name="headphones" />
+ </path>
+
+ <path name="speaker-and-anc-headphones">
+ <path name="anc-headphones" />
+ <path name="speaker" />
+ </path>
+
+ <path name="anc-fb-headphones">
+ <path name="anc-headphones" />
+ </path>
+
+ <path name="speaker-and-anc-fb-headphones">
+ <path name="anc-fb-headphones" />
+ <path name="speaker" />
+ </path>
+
+ <path name="voice-anc-headphones">
+ <path name="voice-headphones" />
+ </path>
+
+ <path name="voice-anc-fb-headphones">
+ <path name="voice-headphones" />
+ </path>
+
+ <path name="speaker-and-anc-headphones-liquid">
+ <path name="anc-headphones" />
+ </path>
+
+ <path name="hdmi">
+ </path>
+
+ <path name="display-port">
+ </path>
+
+ <path name="speaker-and-usb-headphones">
+ <path name="speaker" />
+ <path name="usb-headphones" />
+ </path>
+
+ <path name="speaker-and-hdmi">
+ <path name="speaker" />
+ <path name="hdmi" />
+ </path>
+
+ <path name="speaker-and-display-port">
+ <path name="speaker" />
+ <path name="display-port" />
+ </path>
+
+ <path name="voice-rec-mic">
+ <path name="handset-mic" />
+ </path>
+
+ <path name="camcorder-mic">
+ <path name="handset-mic" />
+ </path>
+
+ <path name="hdmi-tx">
+ <path name="handset-mic" />
+ </path>
+
+ <path name="bt-sco-headset">
+ </path>
+
+ <path name="bt-sco-mic">
+ </path>
+
+ <path name="bt-sco-headset-wb">
+ </path>
+
+ <path name="bt-sco-mic-wb">
+ </path>
+
+ <path name="usb-headset-mic">
+ </path>
+
+ <path name="capture-fm">
+ </path>
+
+ <path name="aanc-path">
+ </path>
+
+ <path name="aanc-handset-mic">
+ </path>
+
+ <!-- Dual MIC devices -->
+ <path name="handset-dmic-endfire">
+ <ctl name="DEC1 MUX" value="DMIC3" />
+ <ctl name="DEC2 MUX" value="DMIC4" />
+ <ctl name="INT3_MI2S_TX Channels" value="Two" />
+ </path>
+
+ <path name="speaker-dmic-endfire">
+ <ctl name="DEC1 MUX" value="DMIC2" />
+ <ctl name="DEC2 MUX" value="DMIC4" />
+ <ctl name="INT3_MI2S_TX Channels" value="Two" />
+ </path>
+
+ <path name="dmic-endfire">
+ <path name="handset-dmic-endfire" />
+ <ctl name="IIR1 INP1 MUX" value="DEC1" />
+ </path>
+
+ <path name="dmic-endfire-liquid">
+ <path name="handset-dmic-endfire" />
+ <ctl name="IIR1 INP1 MUX" value="DEC1" />
+ </path>
+
+ <path name="handset-stereo-dmic-ef">
+ <path name="handset-dmic-endfire" />
+ </path>
+
+ <path name="speaker-stereo-dmic-ef">
+ <path name="speaker-dmic-endfire" />
+ </path>
+
+ <path name="voice-dmic-ef-tmus">
+ <path name="dmic-endfire" />
+ </path>
+
+ <path name="voice-dmic-ef">
+ <path name="dmic-endfire" />
+ </path>
+
+ <path name="voice-speaker-dmic-ef">
+ <path name="speaker-dmic-endfire" />
+ </path>
+
+ <path name="voice-rec-dmic-ef">
+ <path name="dmic-endfire" />
+ </path>
+
+ <path name="voice-rec-dmic-ef-fluence">
+ <path name="dmic-endfire" />
+ </path>
+
+ <path name="handset-stereo-dmic-ef-liquid">
+ <path name="handset-dmic-endfire" />
+ </path>
+
+ <path name="speaker-stereo-dmic-ef-liquid">
+ <path name="speaker-dmic-endfire" />
+ </path>
+
+ <path name="voice-dmic-ef-liquid-liquid">
+ <path name="dmic-endfire-liquid" />
+ </path>
+
+ <path name="voice-speaker-dmic-ef-liquid">
+ <path name="dmic-endfire-liquid" />
+ </path>
+
+ <path name="voice-rec-dmic-ef-liquid">
+ <path name="dmic-endfire-liquid" />
+ </path>
+
+ <path name="voice-rec-dmic-ef-fluence-liquid">
+ <path name="dmic-endfire-liquid" />
+ </path>
+
+ <path name="speaker-dmic-broadside">
+ <ctl name="INT3_MI2S_TX Channels" value="Two" />
+ <ctl name="DEC1 MUX" value="DMIC2" />
+ <ctl name="DEC2 MUX" value="DMIC3" />
+ </path>
+
+ <path name="dmic-broadside">
+ <path name="speaker-dmic-broadside" />
+ <ctl name="IIR1 INP1 MUX" value="DEC7" />
+ </path>
+
+ <path name="voice-speaker-dmic-broadside">
+ <path name="dmic-broadside" />
+ </path>
+
+ <!-- Quad MIC devices -->
+ <path name="speaker-qmic">
+ <ctl name="INT3_MI2S_TX Channels" value="Four" />
+ <ctl name="DEC1 MUX" value="DMIC2" />
+ <ctl name="DEC2 MUX" value="DMIC1" />
+ <ctl name="DEC3 MUX" value="DMIC3" />
+ <ctl name="I2S TX2 INP1" value="DEC3" />
+ <ctl name="DEC4 MUX" value="DMIC4" />
+ <ctl name="I2S TX2 INP2" value="DEC4" />
+ </path>
+
+ <path name="speaker-qmic-liquid">
+ </path>
+
+ <path name="voice-speaker-qmic">
+ <path name="speaker-qmic" />
+ </path>
+
+ <path name="quad-mic">
+ <path name="speaker-qmic" />
+ </path>
+
+ <path name="voice-speaker-qmic-liquid">
+ <path name="speaker-qmic-liquid" />
+ </path>
+
+ <path name="quad-mic-liquid">
+ <path name="speaker-qmic-liquid" />
+ </path>
+
+ <!-- TTY devices -->
+
+ <path name="tty-headphones">
+ <ctl name="RX1 MIX1 INP1" value="RX1" />
+ <ctl name="HPHL" value="Switch" />
+ </path>
+
+ <path name="voice-tty-full-headphones">
+ <ctl name="TTY Mode" value="FULL" />
+ <path name="tty-headphones" />
+ </path>
+
+ <path name="voice-tty-vco-headphones">
+ <ctl name="TTY Mode" value="VCO" />
+ <path name="tty-headphones" />
+ </path>
+
+ <path name="voice-tty-hco-handset">
+ <ctl name="TTY Mode" value="HCO" />
+ <path name="handset" />
+ </path>
+
+ <path name="voice-tty-full-headset-mic">
+ <path name="adc2" />
+ </path>
+
+ <path name="voice-tty-hco-headset-mic">
+ <path name="voice-tty-full-headset-mic" />
+ </path>
+
+ <path name="voice-tty-vco-handset-mic">
+ <path name="dmic1" />
+ </path>
+
+ <path name="unprocessed-handset-mic">
+ <path name="handset-mic" />
+ </path>
+
+ <path name="unprocessed-mic">
+ <path name="unprocessed-handset-mic" />
+ </path>
+
+ <path name="unprocessed-stereo-mic">
+ <path name="voice-rec-dmic-ef" />
+ </path>
+
+ <path name="unprocessed-three-mic">
+ <path name="three-mic" />
+ </path>
+
+ <path name="unprocessed-quad-mic">
+ <path name="quad-mic" />
+ </path>
+
+ <path name="unprocessed-headset-mic">
+ <path name="headset-mic" />
+ </path>
+
+ <!-- USB TTY start -->
+
+ <!-- full: both end tty -->
+ <path name="voice-tty-full-usb">
+ <ctl name="TTY Mode" value="FULL" />
+ <path name="usb-headphones" />
+ </path>
+
+ <path name="voice-tty-full-usb-mic">
+ <path name="usb-headset-mic" />
+ </path>
+
+ <!-- vco, in: handset mic use existing, out: tty -->
+ <path name="voice-tty-vco-usb">
+ <ctl name="TTY Mode" value="VCO" />
+ <path name="usb-headphones" />
+ </path>
+
+ <!-- hco, in: tty, out: speaker, use existing handset -->
+ <path name="voice-tty-hco-usb-mic">
+ <path name="voice-tty-full-usb-mic" />
+ </path>
+
+ <!-- USB TTY end -->
+
+ <!-- Added for ADSP testfwk -->
+ <path name="ADSP testfwk">
+ <ctl name="INT4_MI2S_RX_DL_HL Switch" value="1" />
+ </path>
+
+ <path name="bt-a2dp">
+ <ctl name="SLIM7_RX ADM Channels" value="Two" />
+ </path>
+
+ <path name="speaker-and-bt-a2dp">
+ <path name="speaker" />
+ <path name="bt-a2dp" />
+ </path>
+
+ <path name="deep-buffer-playback bt-a2dp">
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia1" value="1" />
+ </path>
+
+ <path name="low-latency-playback bt-a2dp">
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia5" value="1" />
+ </path>
+
+ <path name="compress-offload-playback bt-a2dp">
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia4" value="1" />
+ </path>
+
+ <path name="compress-offload-playback2 bt-a2dp">
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia7" value="1" />
+ </path>
+
+ <path name="compress-offload-playback3 bt-a2dp">
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia10" value="1" />
+ </path>
+
+ <path name="compress-offload-playback4 bt-a2dp">
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia11" value="1" />
+ </path>
+
+ <path name="compress-offload-playback5 bt-a2dp">
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia12" value="1" />
+ </path>
+
+ <path name="compress-offload-playback6 bt-a2dp">
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia13" value="1" />
+ </path>
+
+ <path name="compress-offload-playback7 bt-a2dp">
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia14" value="1" />
+ </path>
+
+ <path name="compress-offload-playback8 bt-a2dp">
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia15" value="1" />
+ </path>
+
+ <path name="compress-offload-playback9 bt-a2dp">
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="audio-ull-playback bt-a2dp">
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia8" value="1" />
+ </path>
+
+ <path name="deep-buffer-playback speaker-and-bt-a2dp">
+ <path name="deep-buffer-playback bt-a2dp" />
+ <path name="deep-buffer-playback" />
+ </path>
+
+ <path name="compress-offload-playback speaker-and-bt-a2dp">
+ <path name="compress-offload-playback bt-a2dp" />
+ <path name="compress-offload-playback" />
+ </path>
+
+ <path name="low-latency-playback speaker-and-bt-a2dp">
+ <path name="low-latency-playback bt-a2dp" />
+ <path name="low-latency-playback" />
+ </path>
+
+ <path name="compress-offload-playback2 speaker-and-bt-a2dp">
+ <path name="compress-offload-playback2 bt-a2dp" />
+ <path name="compress-offload-playback2" />
+ </path>
+
+ <path name="compress-offload-playback3 speaker-and-bt-a2dp">
+ <path name="compress-offload-playback3 bt-a2dp" />
+ <path name="compress-offload-playback3" />
+ </path>
+
+ <path name="compress-offload-playback4 speaker-and-bt-a2dp">
+ <path name="compress-offload-playback4 bt-a2dp" />
+ <path name="compress-offload-playback4" />
+ </path>
+
+ <path name="compress-offload-playback5 speaker-and-bt-a2dp">
+ <path name="compress-offload-playback5 bt-a2dp" />
+ <path name="compress-offload-playback5" />
+ </path>
+
+ <path name="compress-offload-playback6 speaker-and-bt-a2dp">
+ <path name="compress-offload-playback6 bt-a2dp" />
+ <path name="compress-offload-playback6" />
+ </path>
+
+ <path name="compress-offload-playback7 speaker-and-bt-a2dp">
+ <path name="compress-offload-playback7 bt-a2dp" />
+ <path name="compress-offload-playback7" />
+ </path>
+
+ <path name="compress-offload-playback8 speaker-and-bt-a2dp">
+ <path name="compress-offload-playback8 bt-a2dp" />
+ <path name="compress-offload-playback8" />
+ </path>
+
+ <path name="compress-offload-playback9 speaker-and-bt-a2dp">
+ <path name="compress-offload-playback9 bt-a2dp" />
+ <path name="compress-offload-playback9" />
+ </path>
+
+ <path name="audio-ull-playback speaker-and-bt-a2dp">
+ <path name="audio-ull-playback bt-a2dp" />
+ <path name="audio-ull-playback" />
+ </path>
+
+ <path name="mmap-playback">
+ <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-playback headphones">
+ <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-playback speaker-and-headphones">
+ <path name="mmap-playback" />
+ <path name="mmap-playback headphones" />
+ </path>
+
+ <path name="mmap-playback bt-sco">
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-playback bt-sco-wb">
+ <ctl name="BT SampleRate" value="16000" />
+ <path name="mmap-playback bt-sco" />
+ </path>
+
+ <path name="mmap-playback afe-proxy">
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-playback usb-headphones">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-playback usb-headset">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-playback display-port">
+ <ctl name="DISPLAY_PORT Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-buffer-playback hdmi">
+ <ctl name="HDMI Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-playback speaker-and-hdmi">
+ <path name="mmap-playback hdmi" />
+ <path name="mmap-playback" />
+ </path>
+
+ <path name="mmap-playback speaker-and-display-port">
+ <path name="mmap-playback display-port" />
+ <path name="mmap-playback" />
+ </path>
+
+ <path name="mmap-playback speaker-and-usb-headphones">
+ <path name="mmap-playback usb-headphones" />
+ <path name="mmap-playback" />
+ </path>
+
+ <path name="mmap-record">
+ <ctl name="MultiMedia16 Mixer INT3_MI2S_TX " value="1" />
+ </path>
+
+ <path name="mmap-record bt-sco">
+ <ctl name="MultiMedia16 Mixer SLIM_7_TX" value="1" />
+ </path>
+
+ <path name="mmap-record bt-sco-wb">
+ <ctl name="BT SampleRate" value="KHZ_16" />
+ <path name="mmap-record bt-sco" />
+ </path>
+
+ <path name="mmap-record capture-fm">
+ <ctl name="MultiMedia16 Mixer SLIM_8_TX" value="1" />
+ </path>
+
+ <path name="mmap-record usb-headset-mic">
+ <ctl name="MultiMedia16 Mixer USB_AUDIO_TX" value="1" />
+ </path>
+
+ <path name="hifi-playback display-port">
+ <ctl name="DISPLAY_PORT Mixer MultiMedia2" value="1" />
+ </path>
+
+ <path name="hifi-playback afe-proxy">
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia2" value="1" />
+ </path>
+
+ <path name="hifi-playback usb-headset">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia2" value="1" />
+ </path>
+
+ <path name="hifi-playback usb-headphones">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia2" value="1" />
+ </path>
+
+ <path name="hifi-record usb-headset-mic">
+ <ctl name="MultiMedia2 Mixer USB_AUDIO_TX" value="1" />
+ </path>
+
+</mixer>
diff --git a/configs/sdm710/audio_output_policy.conf b/configs/sdm710/audio_output_policy.conf
index 72003e21..acbf81c4 100644
--- a/configs/sdm710/audio_output_policy.conf
+++ b/configs/sdm710/audio_output_policy.conf
@@ -99,20 +99,84 @@ inputs {
bit_width 24
app_type 69945
}
- record_fluence1 {
+ record_fluence {
+ flags AUDIO_INPUT_FLAG_NONE
+ profile record_fluence
+ formats AUDIO_FORMAT_PCM_16_BIT
+ sampling_rates 16000|48000
+ bit_width 16
+ app_type 69944
+ }
+ record_fluence_compress {
flags AUDIO_INPUT_FLAG_COMPRESS
profile record_fluence
formats AUDIO_FORMAT_PCM_16_BIT
- sampling_rates 48000
+ sampling_rates 16000|48000
bit_width 16
app_type 69944
}
- record_fluence {
+ record_fluence_timestamp {
flags AUDIO_INPUT_FLAG_TIMESTAMP
profile record_fluence
formats AUDIO_FORMAT_PCM_16_BIT
- sampling_rates 48000
+ sampling_rates 16000|48000
+ bit_width 16
+ app_type 69944
+ }
+ record_fluence_compress_timestamp {
+ flags AUDIO_INPUT_FLAG_COMPRESS|AUDIO_INPUT_FLAG_TIMESTAMP
+ profile record_fluence
+ formats AUDIO_FORMAT_PCM_16_BIT
+ sampling_rates 16000|48000
bit_width 16
app_type 69944
}
+ record_ambisonic_16 {
+ profile record_ambisonic
+ flags AUDIO_INPUT_FLAG_NONE
+ formats AUDIO_FORMAT_PCM_16_BIT
+ sampling_rates 48000
+ bit_width 16
+ app_type 69949
+ }
+ record_ambisonic_24 {
+ profile record_ambisonic
+ flags AUDIO_INPUT_FLAG_NONE
+ formats AUDIO_FORMAT_PCM_24_BIT_PACKED
+ sampling_rates 48000
+ bit_width 24
+ app_type 69950
+ }
+ record_ambisonic_compress_16 {
+ profile record_ambisonic
+ flags AUDIO_INPUT_FLAG_COMPRESS
+ formats AUDIO_FORMAT_PCM_16_BIT
+ sampling_rates 48000
+ bit_width 16
+ app_type 69949
+ }
+ record_ambisonic_compress_24 {
+ profile record_ambisonic
+ flags AUDIO_INPUT_FLAG_COMPRESS
+ formats AUDIO_FORMAT_PCM_24_BIT_PACKED
+ sampling_rates 48000
+ bit_width 24
+ app_type 69950
+ }
+ record_ambisonic_compress_timestamp_16 {
+ profile record_ambisonic
+ flags AUDIO_INPUT_FLAG_COMPRESS|AUDIO_INPUT_FLAG_TIMESTAMP
+ formats AUDIO_FORMAT_PCM_16_BIT
+ sampling_rates 48000
+ bit_width 16
+ app_type 69949
+ }
+ record_ambisonic_compress_timestamp_24 {
+ profile record_ambisonic
+ flags AUDIO_INPUT_FLAG_COMPRESS|AUDIO_INPUT_FLAG_TIMESTAMP
+ formats AUDIO_FORMAT_PCM_24_BIT_PACKED
+ sampling_rates 48000
+ bit_width 24
+ app_type 69950
+ }
}
diff --git a/configs/sdm710/audio_platform_info_skuw.xml b/configs/sdm710/audio_platform_info_skuw.xml
index b7839d55..e15bf488 100644
--- a/configs/sdm710/audio_platform_info_skuw.xml
+++ b/configs/sdm710/audio_platform_info_skuw.xml
@@ -68,8 +68,8 @@
<config_params>
<!-- In the below value string, the value indicates default mono -->
<!-- speaker. It can be set to either left or right -->
- <param key="spkr_1_tz_name" value="wsatz.13"/>
- <param key="spkr_2_tz_name" value="wsatz.14"/>
+ <param key="spkr_1_tz_name" value="wsatz.11"/>
+ <param key="spkr_2_tz_name" value="wsatz.12"/>
<param key="true_32_bit" value="true"/>
<param key="native_audio_mode" value="true"/>
<param key="hfp_pcm_dev_id" value="39"/>
diff --git a/configs/sdm710/mixer_paths_tasha.xml b/configs/sdm710/mixer_paths_tasha.xml
index 3d05c96d..69291ea7 100644
--- a/configs/sdm710/mixer_paths_tasha.xml
+++ b/configs/sdm710/mixer_paths_tasha.xml
@@ -541,6 +541,11 @@
<!-- vbat related data end-->
<!-- audio record compress-->
<ctl name="MultiMedia8 Mixer SLIM_0_TX" value="0" />
+ <ctl name="MultiMedia17 Mixer SLIM_0_TX" value="0" />
+ <ctl name="MultiMedia18 Mixer SLIM_0_TX" value="0" />
+ <ctl name="MultiMedia19 Mixer SLIM_0_TX" value="0" />
+ <ctl name="MultiMedia28 Mixer SLIM_0_TX" value="0" />
+ <ctl name="MultiMedia29 Mixer SLIM_0_TX" value="0" />
<ctl name="MultiMedia8 Mixer SLIM_7_TX" value="0" />
<ctl name="MultiMedia8 Mixer AFE_PCM_TX" value="0" />
<!-- audio record compress end-->
@@ -1461,6 +1466,26 @@
<ctl name="MultiMedia8 Mixer SLIM_0_TX" value="1" />
</path>
+ <path name="audio-record-compress2">
+ <ctl name="MultiMedia17 Mixer SLIM_0_TX" value="1" />
+ </path>
+
+ <path name="audio-record-compress3">
+ <ctl name="MultiMedia18 Mixer SLIM_0_TX" value="1" />
+ </path>
+
+ <path name="audio-record-compress4">
+ <ctl name="MultiMedia19 Mixer SLIM_0_TX" value="1" />
+ </path>
+
+ <path name="audio-record-compress5">
+ <ctl name="MultiMedia28 Mixer SLIM_0_TX" value="1" />
+ </path>
+
+ <path name="audio-record-compress6">
+ <ctl name="MultiMedia29 Mixer SLIM_0_TX" value="1" />
+ </path>
+
<path name="audio-record-compress bt-sco">
<ctl name="MultiMedia8 Mixer SLIM_7_TX" value="1" />
</path>
diff --git a/configs/sdm710/mixer_paths_tavil.xml b/configs/sdm710/mixer_paths_tavil.xml
index 0b1d3c92..319b3ea6 100644
--- a/configs/sdm710/mixer_paths_tavil.xml
+++ b/configs/sdm710/mixer_paths_tavil.xml
@@ -297,6 +297,11 @@
<ctl name="MultiMedia1 Mixer SLIM_7_TX" value="0" />
<!-- audio record compress-->
<ctl name="MultiMedia8 Mixer SLIM_0_TX" value="0" />
+ <ctl name="MultiMedia17 Mixer SLIM_0_TX" value="0" />
+ <ctl name="MultiMedia18 Mixer SLIM_0_TX" value="0" />
+ <ctl name="MultiMedia19 Mixer SLIM_0_TX" value="0" />
+ <ctl name="MultiMedia28 Mixer SLIM_0_TX" value="0" />
+ <ctl name="MultiMedia29 Mixer SLIM_0_TX" value="0" />
<ctl name="MultiMedia8 Mixer SLIM_7_TX" value="0" />
<ctl name="MultiMedia8 Mixer AFE_PCM_TX" value="0" />
<!-- audio record compress end-->
@@ -1365,6 +1370,26 @@
<ctl name="MultiMedia8 Mixer SLIM_0_TX" value="1" />
</path>
+ <path name="audio-record-compress2">
+ <ctl name="MultiMedia17 Mixer SLIM_0_TX" value="1" />
+ </path>
+
+ <path name="audio-record-compress3">
+ <ctl name="MultiMedia18 Mixer SLIM_0_TX" value="1" />
+ </path>
+
+ <path name="audio-record-compress4">
+ <ctl name="MultiMedia19 Mixer SLIM_0_TX" value="1" />
+ </path>
+
+ <path name="audio-record-compress5">
+ <ctl name="MultiMedia28 Mixer SLIM_0_TX" value="1" />
+ </path>
+
+ <path name="audio-record-compress6">
+ <ctl name="MultiMedia29 Mixer SLIM_0_TX" value="1" />
+ </path>
+
<path name="audio-record-compress bt-sco">
<ctl name="MultiMedia8 Mixer SLIM_7_TX" value="1" />
</path>
diff --git a/configs/sdm710/sdm710.mk b/configs/sdm710/sdm710.mk
index 536cc2ce..776c2e11 100644
--- a/configs/sdm710/sdm710.mk
+++ b/configs/sdm710/sdm710.mk
@@ -140,6 +140,11 @@ PRODUCT_PROPERTY_OVERRIDES += \
PRODUCT_PROPERTY_OVERRIDES += \
vendor.audio_hal.period_size=192
+##Ambisonic Capture
+PRODUCT_PROPERTY_OVERRIDES += \
+persist.vendor.audio.ambisonic.capture=false \
+persist.vendor.audio.ambisonic.auto.profile=false
+
##fluencetype can be "fluence" or "fluencepro" or "none"
PRODUCT_PROPERTY_OVERRIDES += \
ro.vendor.audio.sdk.fluencetype=none\
diff --git a/configs/sdm845/mixer_paths_i2s.xml b/configs/sdm845/mixer_paths_i2s.xml
index 75d984f8..86dd74e1 100644
--- a/configs/sdm845/mixer_paths_i2s.xml
+++ b/configs/sdm845/mixer_paths_i2s.xml
@@ -144,9 +144,9 @@
</path>
<path name="adc2">
- <ctl name="AIF1_CAP Mixer SLIM TX6" value="1"/>
- <ctl name="MI2S_TX Channels" value="One" />
- <ctl name="SLIM TX6 MUX" value="DEC6" />
+ <ctl name="AIF1_CAP Mixer I2S TX6" value="1"/>
+ <ctl name="CDC_IF TX6 MUX" value="DEC6" />
+ <ctl name="PRI_MI2S_TX Channels" value="One" />
<ctl name="ADC MUX6" value="AMIC" />
<ctl name="AMIC MUX6" value="ADC2" />
</path>
@@ -208,6 +208,7 @@
<path name="handset-mic">
<path name="adc2" />
+ <ctl name="DEC6 Volume" value="84" />
</path>
<path name="headphones">
@@ -226,11 +227,11 @@
<path name="headset-mic">
<path name="adc2" />
- <ctl name="DEC8 Volume" value="84" />
+ <ctl name="DEC6 Volume" value="84" />
</path>
<path name="voice-handset">
- <path name="handset" />
+ <path name="headphones" />
</path>
<path name="voice-handset-tmus">
diff --git a/configure.ac b/configure.ac
index a84e2cd4..ef90749c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -81,6 +81,15 @@ if (test x$TARGET_SUPPORT = x8x96autogvmquintcu); then
AC_SUBST([TARGET_PLATFORM], ["msm8974"])
TARGET_CFLAGS="-DPLATFORM_MSM8996"
fi
+if (test x$TARGET_SUPPORT = xqcs605); then
+ AC_SUBST([TARGET_PLATFORM], ["msm8974"])
+ TARGET_CFLAGS=" -DPLATFORM_QCS605"
+fi
+if (test x$TARGET_SUPPORT = xqcs40x); then
+ AC_SUBST([TARGET_PLATFORM], ["msm8974"])
+ TARGET_CFLAGS=" -DPLATFORM_QCS405"
+fi
+
AC_SUBST([TARGET_CFLAGS])
AM_CONDITIONAL([QTI_AUDIO_SERVER_ENABLED],[test x$BOARD_SUPPORTS_QTI_AUDIO_SERVER = xtrue])
@@ -127,6 +136,7 @@ AM_CONDITIONAL([QAP], [test x$AUDIO_FEATURE_ENABLED_QAP = xtrue])
AM_CONDITIONAL([AUDIO_HW_FFV], [test x$AUDIO_FEATURE_ENABLED_FFV = xtrue])
AM_CONDITIONAL([CUSTOM_STEREO], [test x$AUDIO_FEATURE_ENABLED_CUSTOM_STEREO = xtrue])
AM_CONDITIONAL([RUN_KEEP_ALIVE_IN_ARM_FFV], [test x$AUDIO_FEATURE_ENABLED_KEEP_ALIVE_ARM_FFV = xtrue])
+AM_CONDITIONAL([INSTANCE_ID], [test x$AUDIO_FEATURE_ENABLED_INSTANCE_ID = xtrue])
AC_CONFIG_FILES([ \
Makefile \
diff --git a/hal/Android.mk b/hal/Android.mk
index 94c21bd3..db47d544 100644
--- a/hal/Android.mk
+++ b/hal/Android.mk
@@ -414,6 +414,16 @@ ifeq ($(strip $(AUDIO_FEATURE_ENABLED_BATTERY_LISTENER)), true)
LOCAL_STATIC_LIBRARIES := libhealthhalutils
endif
+ifeq ($(strip $(AUDIO_FEATURE_ENABLED_KEEP_ALIVE_ARM_FFV)), true)
+ LOCAL_CFLAGS += -DRUN_KEEP_ALIVE_IN_ARM_FFV
+endif
+
+ifeq ($(strip $(AUDIO_FEATURE_ENABLED_FFV)), true)
+ LOCAL_CFLAGS += -DFFV_ENABLED
+ LOCAL_C_INCLUDES += $(TARGET_OUT_HEADERS)/mm-audio-noship/include/ffv
+ LOCAL_SRC_FILES += audio_extn/ffv.c
+endif
+
LOCAL_CFLAGS += -Wall -Werror
LOCAL_COPY_HEADERS_TO := mm-audio
diff --git a/hal/Makefile.am b/hal/Makefile.am
index 95224d05..995622d5 100644
--- a/hal/Makefile.am
+++ b/hal/Makefile.am
@@ -4,6 +4,7 @@ AM_CFLAGS = -I ${WORKSPACE}/external/tinyalsa/include \
-I $(top_srcdir)/hal \
-I $(top_srcdir)/hal/audio_extn \
-I $(top_srcdir)/hal/voice_extn \
+ -I $(PKG_CONFIG_SYSROOT_DIR)/usr/include/audio-kernel \
-I $(top_srcdir)/hal/${TARGET_PLATFORM}
c_sources = audio_hw.c \
@@ -203,6 +204,10 @@ if CUSTOM_STEREO
AM_CFLAGS += -DCUSTOM_STEREO_ENABLED
endif
+if INSTANCE_ID
+AM_CFLAGS += -DINSTANCE_ID_ENABLED
+endif
+
h_sources = audio_extn/audio_defs.h \
audio_extn/audio_extn.h \
audio_hw.h \
diff --git a/hal/audio_extn/audio_defs.h b/hal/audio_extn/audio_defs.h
index 3921f499..0e1848e3 100755..100644
--- a/hal/audio_extn/audio_defs.h
+++ b/hal/audio_extn/audio_defs.h
@@ -113,10 +113,15 @@
*/
#define AUDIO_INPUT_FLAG_TIMESTAMP 0x80000000
#define AUDIO_INPUT_FLAG_COMPRESS 0x40000000
+#define AUDIO_INPUT_FLAG_PASSTHROUGH 0x20000000
/* MAX SECTORS for sourcetracking feature */
#define MAX_SECTORS 8
+/* Max length for license string */
+#define AUDIO_PRODUCT_STR_MAX_LENGTH (64)
+#define AUDIO_LICENSE_STR_MAX_LENGTH (64)
+
struct source_tracking_param {
uint8_t vad[MAX_SECTORS];
uint16_t doa_speech;
@@ -255,6 +260,13 @@ typedef struct mix_matrix_params {
uint32_t mixer_coeffs[AUDIO_CHANNEL_COUNT_MAX][AUDIO_CHANNEL_COUNT_MAX];
} mix_matrix_params_t;
+
+typedef struct audio_license_params {
+ char product[AUDIO_PRODUCT_STR_MAX_LENGTH + 1];
+ int key;
+ char license[AUDIO_LICENSE_STR_MAX_LENGTH + 1];
+} audio_license_params_t;
+
typedef union {
struct source_tracking_param st_params;
struct sound_focus_param sf_params;
@@ -268,6 +280,7 @@ typedef union {
struct audio_out_channel_map_param channel_map_param;
struct audio_device_cfg_param device_cfg;
struct mix_matrix_params mm_params;
+ struct audio_license_params license_params;
} audio_extn_param_payload;
typedef enum {
@@ -288,7 +301,9 @@ typedef enum {
/* Pan/scale params to be set on ASM */
AUDIO_EXTN_PARAM_OUT_MIX_MATRIX_PARAMS,
/* Downmix params to be set on ADM */
- AUDIO_EXTN_PARAM_CH_MIX_MATRIX_PARAMS
+ AUDIO_EXTN_PARAM_CH_MIX_MATRIX_PARAMS,
+ /* License information */
+ AUDIO_EXTN_PARAM_LICENSE_PARAMS,
} audio_extn_param_id;
#endif /* AUDIO_DEFS_H */
diff --git a/hal/audio_extn/audio_extn.c b/hal/audio_extn/audio_extn.c
index d125b2f5..dd48a35a 100755
--- a/hal/audio_extn/audio_extn.c
+++ b/hal/audio_extn/audio_extn.c
@@ -64,6 +64,8 @@
#define MAX_SLEEP_RETRY 100
#define WIFI_INIT_WAIT_SLEEP 50
+#define MAX_NUM_CHANNELS 8
+#define Q14_GAIN_UNITY 0x4000
struct audio_extn_module {
bool anc_enabled;
@@ -301,6 +303,74 @@ void audio_extn_customstereo_set_parameters(struct audio_device *adev,
ALOGV("%s: Setting custom stereo state success", __func__);
}
}
+
+void audio_extn_send_dual_mono_mixing_coefficients(struct stream_out *out)
+{
+ struct audio_device *adev = out->dev;
+ struct mixer_ctl *ctl;
+ char mixer_ctl_name[128];
+ int cust_ch_mixer_cfg[128], len = 0;
+ int ip_channel_cnt = audio_channel_count_from_out_mask(out->channel_mask);
+ int pcm_device_id = platform_get_pcm_device_id(out->usecase, PCM_PLAYBACK);
+ int op_channel_cnt= 2;
+ int i, j, err;
+
+ ALOGV("%s", __func__);
+ if (!out->started) {
+ out->set_dual_mono = true;
+ goto exit;
+ }
+
+ ALOGD("%s: i/p channel count %d, o/p channel count %d, pcm id %d", __func__,
+ ip_channel_cnt, op_channel_cnt, pcm_device_id);
+
+ snprintf(mixer_ctl_name, sizeof(mixer_ctl_name),
+ "Audio Stream %d Channel Mix Cfg", pcm_device_id);
+ ctl = mixer_get_ctl_by_name(adev->mixer, mixer_ctl_name);
+ if (!ctl) {
+ ALOGE("%s: ERROR. Could not get ctl for mixer cmd - %s",
+ __func__, mixer_ctl_name);
+ goto exit;
+ }
+
+ /* Output channel count corresponds to backend configuration channels.
+ * Input channel count corresponds to ASM session channels.
+ * Set params is called with channels that need to be selected from
+ * input to generate output.
+ * ex: "8,2" to downmix from 8 to 2 i.e. to downmix from 8 to 2,
+ *
+ * This mixer control takes values in the following sequence:
+ * - input channel count(m)
+ * - output channel count(n)
+ * - weight coeff for [out ch#1, in ch#1]
+ * ....
+ * - weight coeff for [out ch#1, in ch#m]
+ *
+ * - weight coeff for [out ch#2, in ch#1]
+ * ....
+ * - weight coeff for [out ch#2, in ch#m]
+ *
+ * - weight coeff for [out ch#n, in ch#1]
+ * ....
+ * - weight coeff for [out ch#n, in ch#m]
+ *
+ * To get dualmono ouptu weightage coeff is calculated as Unity gain
+ * divided by number of input channels.
+ */
+ cust_ch_mixer_cfg[len++] = ip_channel_cnt;
+ cust_ch_mixer_cfg[len++] = op_channel_cnt;
+ for (i = 0; i < op_channel_cnt; i++) {
+ for (j = 0; j < ip_channel_cnt; j++) {
+ cust_ch_mixer_cfg[len++] = Q14_GAIN_UNITY/ip_channel_cnt;
+ }
+ }
+
+ err = mixer_ctl_set_array(ctl, cust_ch_mixer_cfg, len);
+ if (err)
+ ALOGE("%s: ERROR. Mixer ctl set failed", __func__);
+exit:
+ return;
+}
#endif /* CUSTOM_STEREO_ENABLED */
#ifndef DTS_EAGLE
@@ -1303,7 +1373,15 @@ int audio_extn_check_and_set_multichannel_usecase(struct audio_device *adev,
if (ssr_supported) {
return audio_extn_ssr_set_usecase(in, config, update_params);
} else if (audio_extn_ffv_check_usecase(in)) {
- return audio_extn_ffv_set_usecase(in);
+ char ffv_lic[LICENSE_STR_MAX_LEN + 1] = {0};
+ int ffv_key = 0;
+ if(platform_get_license_by_product(adev->platform, PRODUCT_FFV, &ffv_key, ffv_lic))
+ {
+ ALOGD("%s: Valid licence not availble for %s ", __func__, PRODUCT_FFV);
+ return -EINVAL;
+ }
+ ALOGD("%s: KEY: %d LICENSE: %s ", __func__, ffv_key, ffv_lic);
+ return audio_extn_ffv_set_usecase(in, ffv_key, ffv_lic);
} else {
return audio_extn_set_multichannel_mask(adev, in, config,
update_params);
@@ -1529,3 +1607,5 @@ int audio_extn_set_device_cfg_params(struct audio_device *adev,
return 0;
}
+
+
diff --git a/hal/audio_extn/audio_extn.h b/hal/audio_extn/audio_extn.h
index d3e7a5fc..959985d3 100644
--- a/hal/audio_extn/audio_extn.h
+++ b/hal/audio_extn/audio_extn.h
@@ -43,6 +43,8 @@
#include "ip_hdlr_intf.h"
#include "battery_listener.h"
+#define AUDIO_PARAMETER_DUAL_MONO "dual_mono"
+
#ifndef AFE_PROXY_ENABLED
#define AUDIO_DEVICE_OUT_PROXY 0x40000
#endif
@@ -51,6 +53,10 @@
#define AUDIO_DEVICE_IN_PROXY (AUDIO_DEVICE_BIT_IN | 0x1000000)
#endif
+#ifndef AUDIO_DEVICE_IN_HDMI_ARC
+#define AUDIO_DEVICE_IN_HDMI_ARC (AUDIO_DEVICE_BIT_IN | 0x8000000)
+#endif
+
#ifndef INCALL_MUSIC_ENABLED
#define AUDIO_OUTPUT_FLAG_INCALL_MUSIC 0x80000000 //0x8000
#endif
@@ -912,6 +918,7 @@ int audio_extn_snd_mon_unregister_listener(void *stream);
#ifdef COMPRESS_INPUT_ENABLED
bool audio_extn_cin_applicable_stream(struct stream_in *in);
bool audio_extn_cin_attached_usecase(audio_usecase_t uc_id);
+bool audio_extn_cin_format_supported(audio_format_t format);
size_t audio_extn_cin_get_buffer_size(struct stream_in *in);
int audio_extn_cin_start_input_stream(struct stream_in *in);
void audio_extn_cin_stop_input_stream(struct stream_in *in);
@@ -922,6 +929,7 @@ int audio_extn_cin_configure_input_stream(struct stream_in *in);
#else
#define audio_extn_cin_applicable_stream(in) (false)
#define audio_extn_cin_attached_usecase(uc_id) (false)
+#define audio_extn_cin_format_supported(format) (false)
#define audio_extn_cin_get_buffer_size(in) (0)
#define audio_extn_cin_start_input_stream(in) (0)
#define audio_extn_cin_stop_input_stream(in) (0)
@@ -1069,8 +1077,8 @@ static void __unused audio_extn_hw_loopback_deinit(struct audio_device *adev __u
#define audio_extn_ffv_init(adev) (0)
#define audio_extn_ffv_deinit() (0)
#define audio_extn_ffv_check_usecase(in) (0)
-#define audio_extn_ffv_set_usecase(in) (0)
-#define audio_extn_ffv_stream_init(in) (0)
+#define audio_extn_ffv_set_usecase(in, key, lic) (0)
+#define audio_extn_ffv_stream_init(in, key, lic) (0)
#define audio_extn_ffv_stream_deinit() (0)
#define audio_extn_ffv_update_enabled() (0)
#define audio_extn_ffv_get_enabled() (0)
@@ -1087,8 +1095,8 @@ static void __unused audio_extn_hw_loopback_deinit(struct audio_device *adev __u
int32_t audio_extn_ffv_init(struct audio_device *adev);
int32_t audio_extn_ffv_deinit();
bool audio_extn_ffv_check_usecase(struct stream_in *in);
-int audio_extn_ffv_set_usecase(struct stream_in *in);
-int32_t audio_extn_ffv_stream_init(struct stream_in *in);
+int audio_extn_ffv_set_usecase( struct stream_in *in, int key, char* lic);
+int32_t audio_extn_ffv_stream_init(struct stream_in *in, int key, char* lic);
int32_t audio_extn_ffv_stream_deinit();
void audio_extn_ffv_update_enabled();
bool audio_extn_ffv_get_enabled();
@@ -1106,4 +1114,11 @@ void audio_extn_ffv_check_and_append_ec_ref_dev(char *device_name);
snd_device_t audio_extn_ffv_get_capture_snd_device();
void audio_extn_ffv_append_ec_ref_dev_name(char *device_name);
#endif
+
+#ifndef CUSTOM_STEREO_ENABLED
+#define audio_extn_send_dual_mono_mixing_coefficients(out) (0)
+#else
+void audio_extn_send_dual_mono_mixing_coefficients(struct stream_out *out);
+#endif
+int audio_extn_utils_get_license_params(const struct audio_device *adev, struct audio_license_params *lic_params);
#endif /* AUDIO_EXTN_H */
diff --git a/hal/audio_extn/compress_in.c b/hal/audio_extn/compress_in.c
index 305ed5bd..3066f3ca 100644
--- a/hal/audio_extn/compress_in.c
+++ b/hal/audio_extn/compress_in.c
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
+* Copyright (c) 2016-2018, 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
@@ -157,13 +157,22 @@ static void free_cin_usecase(audio_usecase_t uc_id)
pthread_mutex_unlock(&cin_lock);
}
+bool audio_extn_cin_format_supported(audio_format_t format)
+{
+ if (format == AUDIO_FORMAT_IEC61937)
+ return true;
+ else
+ return false;
+}
+
size_t audio_extn_cin_get_buffer_size(struct stream_in *in)
{
size_t sz = 0;
cin_private_data_t *cin_data = (cin_private_data_t *) in->cin_extn;
sz = cin_data->compr_config.fragment_size;
- if (in->flags & AUDIO_INPUT_FLAG_TIMESTAMP)
+ if ((in->flags & AUDIO_INPUT_FLAG_TIMESTAMP) ||
+ (in->flags & AUDIO_INPUT_FLAG_PASSTHROUGH))
sz -= sizeof(struct snd_codec_metadata);
ALOGV("%s: in %p, flags 0x%x, cin_data %p, size %zd",
@@ -230,7 +239,7 @@ int audio_extn_cin_read(struct stream_in *in, void *buffer,
if (!is_compress_running(cin_data->compr))
compress_start(cin_data->compr);
- if (!(in->flags & AUDIO_INPUT_FLAG_TIMESTAMP))
+ if (!(in->flags & (AUDIO_INPUT_FLAG_TIMESTAMP | AUDIO_INPUT_FLAG_PASSTHROUGH)))
mdata_size = 0;
if (buffer && read_size) {
@@ -265,7 +274,7 @@ int audio_extn_cin_configure_input_stream(struct stream_in *in)
cin_private_data_t *cin_data = NULL;
if (!COMPRESSED_TIMESTAMP_FLAG &&
- (in->flags & AUDIO_INPUT_FLAG_TIMESTAMP)) {
+ (in->flags & (AUDIO_INPUT_FLAG_TIMESTAMP | AUDIO_INPUT_FLAG_PASSTHROUGH))) {
ALOGE("%s: timestamp mode not supported!", __func__);
return -EINVAL;
}
@@ -305,7 +314,16 @@ int audio_extn_cin_configure_input_stream(struct stream_in *in)
cin_data->compr_config.codec->ch_in = in->config.channels;
cin_data->compr_config.codec->ch_out = in->config.channels;
cin_data->compr_config.codec->format = hal_format_to_alsa(in->format);
- if (in->flags & AUDIO_INPUT_FLAG_TIMESTAMP) {
+
+ if (cin_data->compr_config.codec->id == SND_AUDIOCODEC_PCM)
+ cin_data->compr_config.codec->compr_passthr = LEGACY_PCM;
+ else if (cin_data->compr_config.codec->id == SND_AUDIOCODEC_IEC61937)
+ cin_data->compr_config.codec->compr_passthr = PASSTHROUGH_IEC61937;
+ else
+ cin_data->compr_config.codec->compr_passthr = PASSTHROUGH_GEN;
+
+ if ((in->flags & AUDIO_INPUT_FLAG_TIMESTAMP) ||
+ (in->flags & AUDIO_INPUT_FLAG_PASSTHROUGH)) {
compress_config_set_timstamp_flag(&cin_data->compr_config);
cin_data->compr_config.fragment_size += meta_size;
}
diff --git a/hal/audio_extn/ffv.c b/hal/audio_extn/ffv.c
index 027849cb..145a0171 100644..100755
--- a/hal/audio_extn/ffv.c
+++ b/hal/audio_extn/ffv.c
@@ -59,14 +59,29 @@
#define AUDIO_PARAMETER_FFV_EC_REF_DEVICE "ffv_ec_ref_dev"
#define AUDIO_PARAMETER_FFV_CHANNEL_INDEX "ffv_channel_index"
-#define FFV_LIB "libffv.so"
+#if LINUX_ENABLED
#define FFV_CONFIG_FILE_PATH "/etc/BF_1out.cfg"
+#ifdef __LP64__
+#define FFV_LIB "/usr/lib64/libffv.so"
+#else
+#define FFV_LIB "/usr/lib/libffv.so"
+#endif
+#else
+#define FFV_CONFIG_FILE_PATH "/vendor/etc/BF_1out.cfg"
+#ifdef __LP64__
+#define FFV_LIB "/vendor/lib64/libffv.so"
+#else
+#define FFV_LIB "/vendor/lib/libffv.so"
+#endif
+#endif
+
#define FFV_SAMPLING_RATE_16000 16000
#define FFV_EC_REF_LOOPBACK_DEVICE_MONO "ec-ref-loopback-mono"
#define FFV_EC_REF_LOOPBACK_DEVICE_STEREO "ec-ref-loopback-stereo"
#define FFV_CHANNEL_MODE_MONO 1
#define FFV_CHANNEL_MODE_STEREO 2
+#define FFV_CHANNEL_MODE_QUAD 6
#define FFV_CHANNEL_MODE_HEX 6
#define FFV_CHANNEL_MODE_OCT 8
@@ -100,7 +115,8 @@ do {\
static FfvStatusType (*ffv_init_fn)(void** handle, int num_tx_in_ch,
int num_out_ch, int num_ec_ref_ch, int frame_len, int sample_rate,
const char *config_file_name, char *svaModelBuffer,
- uint32_t svaModelSize, int* totMemSize);
+ uint32_t svaModelSize, int* totMemSize,
+ int product_id, const char* prduct_license);
static void (*ffv_deinit_fn)(void* handle);
static void (*ffv_process_fn)(void *handle, const int16_t *in_pcm,
int16_t *out_pcm, const int16_t *ec_ref_pcm);
@@ -365,12 +381,12 @@ bool audio_extn_ffv_check_usecase(struct stream_in *in) {
return ret;
}
-int audio_extn_ffv_set_usecase(struct stream_in *in)
+int audio_extn_ffv_set_usecase(struct stream_in *in, int ffv_key, char* ffv_lic)
{
int ret = -EINVAL;
if (audio_extn_ffv_check_usecase(in)) {
- if (!audio_extn_ffv_stream_init(in)) {
+ if (!audio_extn_ffv_stream_init(in, ffv_key, ffv_lic)) {
ALOGD("%s: Created FFV session succesfully", __func__);
ret = 0;
} else {
@@ -392,7 +408,7 @@ void audio_extn_ffv_update_pcm_config(struct pcm_config *config)
config->period_size = ffvmod.capture_config.period_size;
}
-int32_t audio_extn_ffv_init(struct audio_device *adev)
+int32_t audio_extn_ffv_init(struct audio_device *adev __unused)
{
int ret = 0;
@@ -414,7 +430,7 @@ int32_t audio_extn_ffv_deinit()
return 0;
}
-int32_t audio_extn_ffv_stream_init(struct stream_in *in)
+int32_t audio_extn_ffv_stream_init(struct stream_in *in, int key, char* lic)
{
uint32_t ret = -EINVAL;
int num_tx_in_ch, num_out_ch, num_ec_ref_ch;
@@ -472,8 +488,8 @@ int32_t audio_extn_ffv_stream_init(struct stream_in *in)
__func__, num_ec_ref_ch, num_tx_in_ch, num_out_ch, frame_len, sample_rate);
ALOGD("%s: config file path %s", __func__, config_file_path);
status_type = ffv_init_fn(&ffvmod.handle, num_tx_in_ch, num_out_ch, num_ec_ref_ch,
- frame_len, sample_rate, config_file_path, sm_buffer, 0,
- &total_mem_size);
+ frame_len, sample_rate, config_file_path, (char *)sm_buffer, 0,
+ &total_mem_size, key, lic);
if (status_type) {
ALOGE("%s: ERROR. ffv_init returned %d", __func__, status_type);
ret = -EINVAL;
@@ -565,6 +581,8 @@ snd_device_t audio_extn_ffv_get_capture_snd_device()
return SND_DEVICE_IN_HANDSET_8MIC;
} else if (ffvmod.capture_config.channels == FFV_CHANNEL_MODE_HEX) {
return SND_DEVICE_IN_HANDSET_6MIC;
+ } else if (ffvmod.capture_config.channels == FFV_CHANNEL_MODE_QUAD) {
+ return SND_DEVICE_IN_HANDSET_QMIC;
} else {
ALOGE("%s: Invalid channels configured for capture", __func__);
return SND_DEVICE_NONE;
@@ -572,7 +590,7 @@ snd_device_t audio_extn_ffv_get_capture_snd_device()
}
int audio_extn_ffv_init_ec_ref_loopback(struct audio_device *adev,
- snd_device_t snd_device)
+ snd_device_t snd_device __unused)
{
struct audio_usecase *uc_info_tx = NULL;
snd_device_t in_snd_device;
@@ -664,7 +682,7 @@ void audio_extn_ffv_append_ec_ref_dev_name(char *device_name)
}
int audio_extn_ffv_deinit_ec_ref_loopback(struct audio_device *adev,
- snd_device_t snd_device)
+ snd_device_t snd_device __unused)
{
struct audio_usecase *uc_info_tx = NULL;
snd_device_t in_snd_device;
@@ -694,7 +712,7 @@ int audio_extn_ffv_deinit_ec_ref_loopback(struct audio_device *adev,
return ret;
}
-int32_t audio_extn_ffv_read(struct audio_stream_in *stream,
+int32_t audio_extn_ffv_read(struct audio_stream_in *stream __unused,
void *buffer, size_t bytes)
{
int status = 0;
@@ -702,7 +720,7 @@ int32_t audio_extn_ffv_read(struct audio_stream_in *stream,
int16_t *process_ec_ref_ptr = NULL;
size_t in_buf_size, out_buf_size, bytes_to_copy;
int retry_num = 0;
- int i, j, ch;
+ int i, ch;
int total_in_ch, in_ch, ec_ref_ch;
if (!ffvmod.ffv_lib_handle) {
@@ -790,7 +808,7 @@ int32_t audio_extn_ffv_read(struct audio_stream_in *stream,
total_in_ch = ffvmod.capture_config.channels;
ec_ref_ch = ffvmod.ec_ref_config.channels;
in_ch = total_in_ch - ec_ref_ch;
- for (i = 0; i < ffvmod.capture_config.period_size; i++) {
+ for (i = 0; i < (int)ffvmod.capture_config.period_size; i++) {
for (ch = 0; ch < in_ch; ch++) {
process_in_ptr[i*in_ch+ch] =
in_ptr[i*total_in_ch+ch];
@@ -810,7 +828,7 @@ int32_t audio_extn_ffv_read(struct audio_stream_in *stream,
bytes_to_copy = (bytes <= out_buf_size) ? bytes : out_buf_size;
memcpy(buffer, process_out_ptr, bytes_to_copy);
if (bytes_to_copy != out_buf_size)
- ALOGD("%s: out buffer data dropped, copied %d bytes",
+ ALOGD("%s: out buffer data dropped, copied %zu bytes",
__func__, bytes_to_copy);
#ifdef FFV_PCM_DUMP
@@ -831,7 +849,6 @@ exit:
void audio_extn_ffv_set_parameters(struct audio_device *adev __unused,
struct str_parms *parms)
{
- int err;
int val;
int ret = 0;
char value[128];
@@ -876,18 +893,30 @@ void audio_extn_ffv_set_parameters(struct audio_device *adev __unused,
ALOGE("%s: Invalid ec ref", __func__);
}
}
-
- ret = str_parms_get_int(parms, AUDIO_PARAMETER_FFV_EC_REF_DEVICE, &val);
- if (ret >= 0) {
+ ret = -1;
+ if (str_parms_get_int(parms, AUDIO_PARAMETER_FFV_EC_REF_DEVICE, &val) >= 0) {
+ ret = 1;
str_parms_del(parms, AUDIO_PARAMETER_FFV_EC_REF_DEVICE);
+ } else if (str_parms_get_int(parms, AUDIO_PARAMETER_DEVICE_CONNECT, &val) >= 0) {
+ ret = 1;
+ str_parms_del(parms, AUDIO_PARAMETER_DEVICE_CONNECT);
+ }
+ if (ret == 1) {
if (val & AUDIO_DEVICE_OUT_SPEAKER) {
ALOGD("%s: capture ec ref from speaker", __func__);
ffvmod.ec_ref_dev = AUDIO_DEVICE_OUT_SPEAKER;
} else if (val & AUDIO_DEVICE_OUT_LINE) {
ALOGD("%s: capture ec ref from line out", __func__);
ffvmod.ec_ref_dev = AUDIO_DEVICE_OUT_LINE;
- } else {
- ALOGE("%s: Invalid ec ref out device", __func__);
+ }
+ }
+
+ ret = str_parms_get_int(parms, AUDIO_PARAMETER_DEVICE_DISCONNECT, &val);
+ if (ret >= 0) {
+ str_parms_del(parms, AUDIO_PARAMETER_DEVICE_DISCONNECT);
+ if (val & AUDIO_DEVICE_OUT_LINE) {
+ ALOGD("%s: capture ec ref from speaker", __func__);
+ ffvmod.ec_ref_dev = AUDIO_DEVICE_OUT_SPEAKER;
}
}
diff --git a/hal/audio_extn/hfp.c b/hal/audio_extn/hfp.c
index 0c4c888a..b0c14cdb 100644
--- a/hal/audio_extn/hfp.c
+++ b/hal/audio_extn/hfp.c
@@ -55,7 +55,7 @@ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.*/
#define HFP_RX_VOLUME "SEC AUXPCM LOOPBACK Volume"
#elif defined PLATFORM_MSM8996
#define HFP_RX_VOLUME "PRI AUXPCM LOOPBACK Volume"
-#elif defined (PLATFORM_MSM8998) || defined (PLATFORM_MSMFALCON) || defined (PLATFORM_SDM845) || defined (PLATFORM_SDM710) || defined (PLATFORM_QCS605) || defined (PLATFORM_MSMNILE) || defined (PLATFORM_MSMSTEPPE)
+#elif defined (PLATFORM_MSM8998) || defined (PLATFORM_MSMFALCON) || defined (PLATFORM_SDM845) || defined (PLATFORM_SDM710) || defined (PLATFORM_QCS605) || defined (PLATFORM_MSMNILE) || defined (PLATFORM_MSMSTEPPE) || defined (PLATFORM_QCS405)
#define HFP_RX_VOLUME "SLIMBUS_7 LOOPBACK Volume"
#else
#define HFP_RX_VOLUME "Internal HFP RX Volume"
diff --git a/hal/audio_extn/hw_loopback.c b/hal/audio_extn/hw_loopback.c
index 78e42152..990a283d 100644
--- a/hal/audio_extn/hw_loopback.c
+++ b/hal/audio_extn/hw_loopback.c
@@ -66,17 +66,6 @@
#include <sound/compress_offload.h>
#include <system/audio.h>
-/*
-* Unique patch handle ID = (unique_patch_handle_type << 8 | patch_handle_num)
-* Eg : HDMI_IN_SPKR_OUT handles can be 0x1000, 0x1001 and so on..
-*/
-typedef enum patch_handle_type {
- AUDIO_PATCH_HDMI_IN_SPKR_OUT=0x10,
- AUDIO_PATCH_SPDIF_IN_SPKR_OUT,
- AUDIO_PATCH_MIC_IN_SPKR_OUT,
- AUDIO_PATCH_MIC_IN_HDMI_OUT
-} patch_handle_type_t;
-
typedef enum patch_state {
PATCH_INACTIVE,// Patch is not created yet
PATCH_CREATED, // Patch created but not in running state yet, probably due
@@ -103,8 +92,10 @@ typedef struct patch_db_struct {
typedef struct audio_loopback {
struct audio_device *adev;
patch_db_t patch_db;
- audio_usecase_t uc_id;
- usecase_type_t uc_type;
+ audio_usecase_t uc_id_rx;
+ audio_usecase_t uc_id_tx;
+ usecase_type_t uc_type_rx;
+ usecase_type_t uc_type_tx;
pthread_mutex_t lock;
} audio_loopback_t;
@@ -188,9 +179,12 @@ bool is_supported_sink_device(audio_devices_t sink_device_mask)
/* Get patch type based on source and sink ports configuration */
/* Only ports of type 'DEVICE' are supported */
-patch_handle_type_t get_loopback_patch_type(loopback_patch_t* loopback_patch)
+audio_patch_handle_t get_loopback_patch_type(loopback_patch_t* loopback_patch)
{
- bool is_source_hdmi=false, is_sink_supported=false;
+ bool is_source_supported = false, is_sink_supported = false;
+ audio_devices_t source_device = loopback_patch->loopback_source.ext.device.type;
+ audio_devices_t sink_device = loopback_patch->loopback_sink.ext.device.type;
+
if (loopback_patch->patch_handle_id != PATCH_HANDLE_INVALID) {
ALOGE("%s, Patch handle already exists", __func__);
return loopback_patch->patch_handle_id;
@@ -199,8 +193,9 @@ patch_handle_type_t get_loopback_patch_type(loopback_patch_t* loopback_patch)
if (loopback_patch->loopback_source.role == AUDIO_PORT_ROLE_SOURCE) {
switch (loopback_patch->loopback_source.type) {
case AUDIO_PORT_TYPE_DEVICE :
- if ((loopback_patch->loopback_source.config_mask &
- AUDIO_PORT_CONFIG_FORMAT) && (loopback_patch->loopback_source.ext.device.type & AUDIO_DEVICE_IN_HDMI)) {
+ if ((loopback_patch->loopback_source.config_mask & AUDIO_PORT_CONFIG_FORMAT)) {
+ if ((loopback_patch->loopback_source.ext.device.type & AUDIO_DEVICE_IN_HDMI) ||
+ (loopback_patch->loopback_source.ext.device.type & AUDIO_DEVICE_IN_SPDIF)) {
switch (loopback_patch->loopback_source.format) {
case AUDIO_FORMAT_PCM:
case AUDIO_FORMAT_PCM_16_BIT:
@@ -209,16 +204,20 @@ patch_handle_type_t get_loopback_patch_type(loopback_patch_t* loopback_patch)
case AUDIO_FORMAT_IEC61937:
case AUDIO_FORMAT_AC3:
case AUDIO_FORMAT_E_AC3:
- is_source_hdmi = true;
+ is_source_supported = true;
break;
+ }
+ } else if (loopback_patch->loopback_source.ext.device.type & AUDIO_DEVICE_IN_LINE) {
+ is_source_supported = true;
+ }
}
- }
break;
default :
break;
//Unsupported as of now, need to extend for other source types
}
}
+
if (loopback_patch->loopback_sink.role == AUDIO_PORT_ROLE_SINK) {
switch (loopback_patch->loopback_sink.type) {
case AUDIO_PORT_TYPE_DEVICE :
@@ -245,9 +244,10 @@ patch_handle_type_t get_loopback_patch_type(loopback_patch_t* loopback_patch)
//Unsupported as of now, need to extend for other sink types
}
}
- if (is_source_hdmi && is_sink_supported) {
- return AUDIO_PATCH_HDMI_IN_SPKR_OUT;
+ if (is_source_supported && is_sink_supported) {
+ return source_device | sink_device;
}
+
ALOGE("%s, Unsupported source or sink port config", __func__);
return loopback_patch->patch_handle_id;
}
@@ -257,13 +257,15 @@ patch_handle_type_t get_loopback_patch_type(loopback_patch_t* loopback_patch)
int32_t release_loopback_session(loopback_patch_t *active_loopback_patch)
{
int32_t ret = 0;
- struct audio_usecase *uc_info;
+ struct audio_usecase *uc_info_rx, *uc_info_tx;
struct audio_device *adev = audio_loopback_mod->adev;
struct stream_inout *inout = &active_loopback_patch->patch_stream;
struct audio_port_config *source_patch_config = &active_loopback_patch->
loopback_source;
+ int32_t pcm_dev_asm_rx_id = platform_get_pcm_device_id(USECASE_AUDIO_TRANSCODE_LOOPBACK_RX,
+ PCM_PLAYBACK);
- /* 1. Close the PCM devices */
+ /* Close the PCM devices */
if (active_loopback_patch->source_stream) {
compress_close(active_loopback_patch->source_stream);
active_loopback_patch->source_stream = NULL;
@@ -279,27 +281,44 @@ int32_t release_loopback_session(loopback_patch_t *active_loopback_patch)
__func__);
}
- uc_info = get_usecase_from_list(adev, audio_loopback_mod->uc_id);
- if (uc_info == NULL) {
+ uc_info_tx = get_usecase_from_list(adev, audio_loopback_mod->uc_id_tx);
+ if (uc_info_tx == NULL) {
ALOGE("%s: Could not find the loopback usecase (%d) in the list",
__func__, active_loopback_patch->patch_handle_id);
return -EINVAL;
}
- active_loopback_patch->patch_state = PATCH_INACTIVE;
+ disable_audio_route(adev, uc_info_tx);
+
+ /* Disable tx device */
+ disable_snd_device(adev, uc_info_tx->in_snd_device);
+
+ /* Reset backend device to default state */
+ platform_invalidate_backend_config(adev->platform,uc_info_tx->in_snd_device);
+
+ list_remove(&uc_info_tx->list);
+ free(uc_info_tx);
+
+ uc_info_rx = get_usecase_from_list(adev, audio_loopback_mod->uc_id_rx);
+ if (uc_info_rx == NULL) {
+ ALOGE("%s: Could not find the loopback usecase (%d) in the list",
+ __func__, active_loopback_patch->patch_handle_id);
+ return -EINVAL;
+ }
- /* 2. Get and set stream specific mixer controls */
- disable_audio_route(adev, uc_info);
+ if (adev->offload_effects_stop_output != NULL)
+ adev->offload_effects_stop_output(active_loopback_patch->patch_handle_id, pcm_dev_asm_rx_id);
+
+ active_loopback_patch->patch_state = PATCH_INACTIVE;
- /* 3. Disable the rx and tx devices */
- disable_snd_device(adev, uc_info->out_snd_device);
- disable_snd_device(adev, uc_info->in_snd_device);
+ /* Get and set stream specific mixer controls */
+ disable_audio_route(adev, uc_info_rx);
- /* 4. Reset backend device to default state */
- platform_invalidate_backend_config(adev->platform,uc_info->in_snd_device);
+ /* Disable the rx device */
+ disable_snd_device(adev, uc_info_rx->out_snd_device);
- list_remove(&uc_info->list);
- free(uc_info);
+ list_remove(&uc_info_rx->list);
+ free(uc_info_rx);
adev->active_input = get_next_active_input(adev);
@@ -363,7 +382,7 @@ static void transcode_loopback_util_set_latency_mode(
int create_loopback_session(loopback_patch_t *active_loopback_patch)
{
int32_t ret = 0, bits_per_sample;
- struct audio_usecase *uc_info;
+ struct audio_usecase *uc_info_rx, *uc_info_tx;
int32_t pcm_dev_asm_rx_id, pcm_dev_asm_tx_id;
char dummy_write_buf[64];
struct audio_device *adev = audio_loopback_mod->adev;
@@ -380,21 +399,38 @@ int create_loopback_session(loopback_patch_t *active_loopback_patch)
ALOGD("%s: Create loopback session begin", __func__);
- uc_info = (struct audio_usecase *)calloc(1, sizeof(struct audio_usecase));
+ uc_info_rx = (struct audio_usecase *)calloc(1, sizeof(struct audio_usecase));
- if (!uc_info) {
+ if (!uc_info_rx) {
ALOGE("%s: Failure to open loopback session", __func__);
return -ENOMEM;
}
- uc_info->id = USECASE_AUDIO_TRANSCODE_LOOPBACK;
- uc_info->type = audio_loopback_mod->uc_type;
- uc_info->stream.inout = &active_loopback_patch->patch_stream;
- uc_info->devices = active_loopback_patch->patch_stream.out_config.devices;
- uc_info->in_snd_device = SND_DEVICE_NONE;
- uc_info->out_snd_device = SND_DEVICE_NONE;
+ uc_info_tx = (struct audio_usecase *)calloc(1, sizeof(struct audio_usecase));
+
+ if (!uc_info_tx) {
+ free(uc_info_rx);
+ ALOGE("%s: Failure to open loopback session", __func__);
+ return -ENOMEM;
+ }
- list_add_tail(&adev->usecase_list, &uc_info->list);
+ uc_info_rx->id = USECASE_AUDIO_TRANSCODE_LOOPBACK_RX;
+ uc_info_rx->type = audio_loopback_mod->uc_type_rx;
+ uc_info_rx->stream.inout = &active_loopback_patch->patch_stream;
+ uc_info_rx->devices = active_loopback_patch->patch_stream.out_config.devices;
+ uc_info_rx->in_snd_device = SND_DEVICE_NONE;
+ uc_info_rx->out_snd_device = SND_DEVICE_NONE;
+
+
+ uc_info_tx->id = USECASE_AUDIO_TRANSCODE_LOOPBACK_TX;
+ uc_info_tx->type = audio_loopback_mod->uc_type_tx;
+ uc_info_tx->stream.inout = &active_loopback_patch->patch_stream;
+ uc_info_tx->devices = active_loopback_patch->patch_stream.in_config.devices;
+ uc_info_tx->in_snd_device = SND_DEVICE_NONE;
+ uc_info_tx->out_snd_device = SND_DEVICE_NONE;
+
+ list_add_tail(&adev->usecase_list, &uc_info_rx->list);
+ list_add_tail(&adev->usecase_list, &uc_info_tx->list);
loopback_source_stream.source = AUDIO_SOURCE_UNPROCESSED;
loopback_source_stream.device = inout->in_config.devices;
@@ -403,23 +439,24 @@ int create_loopback_session(loopback_patch_t *active_loopback_patch)
loopback_source_stream.sample_rate = inout->in_config.sample_rate;
loopback_source_stream.format = inout->in_config.format;
- memcpy(&loopback_source_stream.usecase, uc_info,
+ memcpy(&loopback_source_stream.usecase, uc_info_rx,
sizeof(struct audio_usecase));
adev->active_input = &loopback_source_stream;
- select_devices(adev, uc_info->id);
+ select_devices(adev, uc_info_rx->id);
+ select_devices(adev, uc_info_tx->id);
- pcm_dev_asm_rx_id = platform_get_pcm_device_id(uc_info->id, PCM_PLAYBACK);
- pcm_dev_asm_tx_id = platform_get_pcm_device_id(uc_info->id, PCM_CAPTURE);
+ pcm_dev_asm_rx_id = platform_get_pcm_device_id(uc_info_rx->id, PCM_PLAYBACK);
+ pcm_dev_asm_tx_id = platform_get_pcm_device_id(uc_info_tx->id, PCM_CAPTURE);
if (pcm_dev_asm_rx_id < 0 || pcm_dev_asm_tx_id < 0 ) {
- ALOGE("%s: Invalid PCM devices (asm: rx %d tx %d) for the usecase(%d)",
- __func__, pcm_dev_asm_rx_id, pcm_dev_asm_tx_id, uc_info->id);
+ ALOGE("%s: Invalid PCM devices (asm: rx %d tx %d) for the RX usecase(%d), TX usecase(%d)",
+ __func__, pcm_dev_asm_rx_id, pcm_dev_asm_tx_id, uc_info_rx->id, uc_info_tx->id);
ret = -EIO;
goto exit;
}
- ALOGD("%s: LOOPBACK PCM devices (rx: %d tx: %d) usecase(%d)",
- __func__, pcm_dev_asm_rx_id, pcm_dev_asm_tx_id, uc_info->id);
+ ALOGD("%s: LOOPBACK PCM devices (rx: %d tx: %d) RX usecase(%d) TX usecase(%d)",
+ __func__, pcm_dev_asm_rx_id, pcm_dev_asm_tx_id, uc_info_rx->id, uc_info_tx->id);
/* setup a channel for client <--> adsp communication for stream events */
inout->dev = adev;
@@ -437,7 +474,7 @@ int create_loopback_session(loopback_patch_t *active_loopback_patch)
}
if (audio_extn_ip_hdlr_intf_supported(source_patch_config->format,false, true)) {
ret = audio_extn_ip_hdlr_intf_init(&inout->ip_hdlr_handle, NULL, NULL, adev,
- USECASE_AUDIO_TRANSCODE_LOOPBACK);
+ USECASE_AUDIO_TRANSCODE_LOOPBACK_RX);
if (ret < 0) {
ALOGE("%s: audio_extn_ip_hdlr_intf_init failed %d", __func__, ret);
inout->ip_hdlr_handle = NULL;
@@ -532,7 +569,7 @@ int create_loopback_session(loopback_patch_t *active_loopback_patch)
}
if (inout->ip_hdlr_handle) {
ret = audio_extn_ip_hdlr_intf_open(inout->ip_hdlr_handle, true, inout,
- USECASE_AUDIO_TRANSCODE_LOOPBACK);
+ USECASE_AUDIO_TRANSCODE_LOOPBACK_RX);
if (ret < 0) {
ALOGE("%s: audio_extn_ip_hdlr_intf_open failed %d",__func__, ret);
goto exit;
@@ -542,6 +579,11 @@ int create_loopback_session(loopback_patch_t *active_loopback_patch)
/* Move patch state to running, now that session is set up */
active_loopback_patch->patch_state = PATCH_RUNNING;
ALOGD("%s: Create loopback session end: status(%d)", __func__, ret);
+
+ if (adev->offload_effects_start_output != NULL)
+ adev->offload_effects_start_output(active_loopback_patch->patch_handle_id,
+ pcm_dev_asm_rx_id, adev->mixer);
+
return ret;
exit:
@@ -569,7 +611,7 @@ int audio_extn_hw_loopback_create_audio_patch(struct audio_hw_device *dev,
audio_patch_handle_t *handle)
{
int status = 0;
- patch_handle_type_t loopback_patch_type=0x0;
+ audio_patch_handle_t loopback_patch_id = 0x0;
loopback_patch_t loopback_patch, *active_loopback_patch = NULL;
ALOGV("%s : Create audio patch begin", __func__);
@@ -599,6 +641,9 @@ int audio_extn_hw_loopback_create_audio_patch(struct audio_hw_device *dev,
/* Use an empty patch from patch database and initialze */
active_loopback_patch = &(audio_loopback_mod->patch_db.loopback_patch[
audio_loopback_mod->patch_db.num_patches]);
+
+ memset(active_loopback_patch, 0, sizeof(loopback_patch_t));
+
active_loopback_patch->patch_handle_id = PATCH_HANDLE_INVALID;
active_loopback_patch->patch_state = PATCH_INACTIVE;
active_loopback_patch->patch_stream.ip_hdlr_handle = NULL;
@@ -609,9 +654,9 @@ int audio_extn_hw_loopback_create_audio_patch(struct audio_hw_device *dev,
audio_port_config));
/* Get loopback patch type based on source and sink ports configuration */
- loopback_patch_type = get_loopback_patch_type(active_loopback_patch);
+ loopback_patch_id = get_loopback_patch_type(active_loopback_patch);
- if (loopback_patch_type == PATCH_HANDLE_INVALID) {
+ if (loopback_patch_id == PATCH_HANDLE_INVALID) {
ALOGE("%s, Unsupported patch type", __func__);
status = -EINVAL;
goto exit_create_patch;
@@ -623,8 +668,7 @@ int audio_extn_hw_loopback_create_audio_patch(struct audio_hw_device *dev,
&active_loopback_patch->loopback_sink);
// Lock patch database, create patch handle and add patch handle to the list
- active_loopback_patch->patch_handle_id = (loopback_patch_type << 8 |
- audio_loopback_mod->patch_db.num_patches);
+ active_loopback_patch->patch_handle_id = loopback_patch_id;
/* Is usecase transcode loopback? If yes, invoke loopback driver */
if ((active_loopback_patch->loopback_source.type == AUDIO_PORT_TYPE_DEVICE)
@@ -865,8 +909,10 @@ int audio_extn_hw_loopback_init(struct audio_device *adev)
ret = init_patch_database(&audio_loopback_mod->patch_db);
- audio_loopback_mod->uc_id = USECASE_AUDIO_TRANSCODE_LOOPBACK;
- audio_loopback_mod->uc_type = TRANSCODE_LOOPBACK;
+ audio_loopback_mod->uc_id_rx = USECASE_AUDIO_TRANSCODE_LOOPBACK_RX;
+ audio_loopback_mod->uc_id_tx = USECASE_AUDIO_TRANSCODE_LOOPBACK_TX;
+ audio_loopback_mod->uc_type_rx = TRANSCODE_LOOPBACK_RX;
+ audio_loopback_mod->uc_type_tx = TRANSCODE_LOOPBACK_TX;
loopback_done:
if (ret != 0) {
diff --git a/hal/audio_extn/ip_hdlr_intf.c b/hal/audio_extn/ip_hdlr_intf.c
index ece7af3f..649c99f3 100755
--- a/hal/audio_extn/ip_hdlr_intf.c
+++ b/hal/audio_extn/ip_hdlr_intf.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2017-2018, 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
@@ -164,7 +164,7 @@ int audio_extn_ip_hdlr_intf_rtic_ack(void *aud_sess_handle, struct rtic_ack_info
stream_info = node_to_item(node, struct ip_hdlr_stream, list);
/* send the error if rtic failure notifcation is received */
if ((stream_info->stream == aud_sess_handle) &&
- (stream_info->usecase == USECASE_AUDIO_TRANSCODE_LOOPBACK)) {
+ (stream_info->usecase == USECASE_AUDIO_TRANSCODE_LOOPBACK_RX)) {
struct stream_inout *inout = (struct stream_inout *)aud_sess_handle;
usecase = stream_info->usecase;
adev = inout->dev;
@@ -230,7 +230,7 @@ int audio_extn_ip_hdlr_intf_rtic_fail(void *aud_sess_handle)
stream_info = node_to_item(node, struct ip_hdlr_stream, list);
/* send the error if rtic failure notifcation is received */
if ((stream_info->stream == aud_sess_handle) &&
- (stream_info->usecase == USECASE_AUDIO_TRANSCODE_LOOPBACK)) {
+ (stream_info->usecase == USECASE_AUDIO_TRANSCODE_LOOPBACK_RX)) {
struct stream_inout *inout = (struct stream_inout *)aud_sess_handle;
pthread_mutex_lock(&inout->pre_lock);
pthread_mutex_lock(&inout->lock);
@@ -288,7 +288,7 @@ static int audio_extn_ip_hdlr_intf_open_dsp(void *handle, void *stream_handle, a
param->payload_length = sizeof(struct reg_event);
param->payload = reg_ev;
- if (usecase == USECASE_AUDIO_TRANSCODE_LOOPBACK) {
+ if (usecase == USECASE_AUDIO_TRANSCODE_LOOPBACK_RX) {
inout = (struct stream_inout *)stream_handle;
adsp_hdlr_stream_handle = inout->adsp_hdlr_stream_handle;
dev = inout->dev;
@@ -408,7 +408,7 @@ int audio_extn_ip_hdlr_intf_close(void *handle, bool is_dsp_decode, void *aud_se
ALOGD("%s:[%d] handle = %p, usecase = %d",__func__, ip_hdlr->ref_cnt, handle, usecase);
if (is_dsp_decode) {
- if (usecase == USECASE_AUDIO_TRANSCODE_LOOPBACK) {
+ if (usecase == USECASE_AUDIO_TRANSCODE_LOOPBACK_RX) {
struct stream_inout *inout = (struct stream_inout *)aud_sess_handle;
adsp_hdlr_stream_handle = inout->adsp_hdlr_stream_handle;
} else {
diff --git a/hal/audio_extn/qaf.c b/hal/audio_extn/qaf.c
index ced137f0..ced137f0 100755..100644
--- a/hal/audio_extn/qaf.c
+++ b/hal/audio_extn/qaf.c
diff --git a/hal/audio_extn/soundtrigger.c b/hal/audio_extn/soundtrigger.c
index b2e1befd..95907f36 100644
--- a/hal/audio_extn/soundtrigger.c
+++ b/hal/audio_extn/soundtrigger.c
@@ -81,6 +81,7 @@ typedef enum {
AUDIO_EVENT_CAPTURE_STREAM_INACTIVE,
AUDIO_EVENT_CAPTURE_STREAM_ACTIVE,
AUDIO_EVENT_BATTERY_STATUS_CHANGED,
+ AUDIO_EVENT_GET_PARAM
} audio_event_type_t;
typedef enum {
@@ -123,6 +124,12 @@ struct sound_trigger_device_info {
int device;
};
+struct sound_trigger_get_param_data {
+ char *param;
+ int sm_handle;
+ struct str_parms *reply;
+};
+
struct audio_event_info {
union {
ssr_event_status_t status;
@@ -131,6 +138,7 @@ struct audio_event_info {
struct audio_read_samples_info aud_info;
char str_value[ST_EVENT_CONFIG_MAX_STR_VALUE];
struct audio_hal_usecase usecase;
+ struct sound_trigger_get_param_data st_get_param_data;
} u;
struct sound_trigger_device_info device_info;
};
@@ -166,6 +174,8 @@ do {\
#define SOUND_TRIGGER_LIBRARY_PATH "/vendor/lib/hw/sound_trigger.primary.%s.so"
#endif
+#define SVA_PARAM_DIRECTION_OF_ARRIVAL "st_direction_of_arrival"
+#define SVA_PARAM_CHANNEL_INDEX "st_channel_index"
/*
* Current proprietary API version used by AHAL. Queried by STHAL
* for compatibility check with AHAL
@@ -590,13 +600,15 @@ void audio_extn_sound_trigger_set_parameters(struct audio_device *adev __unused,
}
ret = str_parms_get_int(params, AUDIO_PARAMETER_DEVICE_CONNECT, &val);
- if ((ret >= 0) && audio_is_input_device(val)) {
+ if ((ret >= 0) && (audio_is_input_device(val) ||
+ (val == AUDIO_DEVICE_OUT_LINE))) {
event.u.value = val;
st_dev->st_callback(AUDIO_EVENT_DEVICE_CONNECT, &event);
}
ret = str_parms_get_int(params, AUDIO_PARAMETER_DEVICE_DISCONNECT, &val);
- if ((ret >= 0) && audio_is_input_device(val)) {
+ if ((ret >= 0) && (audio_is_input_device(val) ||
+ (val == AUDIO_DEVICE_OUT_LINE))) {
event.u.value = val;
st_dev->st_callback(AUDIO_EVENT_DEVICE_DISCONNECT, &event);
}
@@ -612,7 +624,7 @@ void audio_extn_sound_trigger_get_parameters(const struct audio_device *adev __u
struct str_parms *query, struct str_parms *reply)
{
audio_event_info_t event;
- int ret;
+ int ret, val;
char value[32];
ret = str_parms_get_str(query, "SVA_EXEC_MODE_STATUS", value,
@@ -621,6 +633,22 @@ void audio_extn_sound_trigger_get_parameters(const struct audio_device *adev __u
st_dev->st_callback(AUDIO_EVENT_SVA_EXEC_MODE_STATUS, &event);
str_parms_add_int(reply, "SVA_EXEC_MODE_STATUS", event.u.value);
}
+
+ ret = str_parms_get_int(query, SVA_PARAM_DIRECTION_OF_ARRIVAL, &val);
+ if (ret >= 0) {
+ event.u.st_get_param_data.sm_handle = val;
+ event.u.st_get_param_data.param = SVA_PARAM_DIRECTION_OF_ARRIVAL;
+ event.u.st_get_param_data.reply = reply;
+ st_dev->st_callback(AUDIO_EVENT_GET_PARAM, &event);
+ }
+
+ ret = str_parms_get_int(query, SVA_PARAM_CHANNEL_INDEX, &val);
+ if (ret >= 0) {
+ event.u.st_get_param_data.sm_handle = val;
+ event.u.st_get_param_data.param = SVA_PARAM_CHANNEL_INDEX;
+ event.u.st_get_param_data.reply = reply;
+ st_dev->st_callback(AUDIO_EVENT_GET_PARAM, &event);
+ }
}
int audio_extn_sound_trigger_init(struct audio_device *adev)
@@ -659,7 +687,9 @@ int audio_extn_sound_trigger_init(struct audio_device *adev)
st_dev->sthal_prop_api_version = 0;
status = 0; /* passthru for backward compability */
} else {
- st_dev->sthal_prop_api_version = *(int*)sthal_prop_api_version;
+ if (sthal_prop_api_version != NULL) {
+ st_dev->sthal_prop_api_version = *(int*)sthal_prop_api_version;
+ }
if (MAJOR_VERSION(st_dev->sthal_prop_api_version) !=
MAJOR_VERSION(STHAL_PROP_API_CURRENT_VERSION)) {
ALOGE("%s: Incompatible API versions ahal:0x%x != sthal:0x%x",
diff --git a/hal/audio_extn/spkr_protection.c b/hal/audio_extn/spkr_protection.c
index fc97cce9..26c15927 100644
--- a/hal/audio_extn/spkr_protection.c
+++ b/hal/audio_extn/spkr_protection.c
@@ -554,7 +554,6 @@ void destroy_thread_params()
pthread_cond_destroy(&handle.spkr_prot_thermalsync);
}
}
-
static void audio_extn_check_wsa(struct audio_device *adev,
unsigned int num_of_spkrs, bool *wsa_is_8815)
{
diff --git a/hal/audio_extn/utils.c b/hal/audio_extn/utils.c
index 0a489535..1af22c28 100644
--- a/hal/audio_extn/utils.c
+++ b/hal/audio_extn/utils.c
@@ -144,6 +144,7 @@ const struct string_to_enum s_flag_name_to_enum_table[] = {
STRING_TO_ENUM(AUDIO_INPUT_FLAG_SYNC),
STRING_TO_ENUM(AUDIO_INPUT_FLAG_TIMESTAMP),
STRING_TO_ENUM(AUDIO_INPUT_FLAG_COMPRESS),
+ STRING_TO_ENUM(AUDIO_INPUT_FLAG_PASSTHROUGH),
};
const struct string_to_enum s_format_name_to_enum_table[] = {
@@ -707,13 +708,14 @@ void audio_extn_utils_update_stream_output_app_type_cfg(void *platform,
struct stream_format *sf_info;
char value[PROPERTY_VALUE_MAX] = {0};
- if ((bit_width >= 24) &&
- (devices & AUDIO_DEVICE_OUT_SPEAKER)) {
- int32_t bw = platform_get_snd_device_bit_width(SND_DEVICE_OUT_SPEAKER);
- if (-ENOSYS != bw)
+ if (devices & AUDIO_DEVICE_OUT_SPEAKER) {
+ int bw = platform_get_snd_device_bit_width(SND_DEVICE_OUT_SPEAKER);
+ if ((-ENOSYS != bw) && (bit_width > (uint32_t)bw))
bit_width = (uint32_t)bw;
+ else if (-ENOSYS == bw)
+ bit_width = CODEC_BACKEND_DEFAULT_BIT_WIDTH;
sample_rate = DEFAULT_OUTPUT_SAMPLING_RATE;
- ALOGI("%s Allowing 24-bit playback on speaker ONLY at default sampling rate", __func__);
+ ALOGI("%s Allowing 24 and above bits playback on speaker ONLY at default sampling rate", __func__);
}
property_get("vendor.audio.playback.mch.downsample",value,"");
@@ -854,7 +856,7 @@ void audio_extn_utils_update_stream_app_type_cfg_for_usecase(
&usecase->stream.in->app_type_cfg);
ALOGV("%s Selected apptype: %d", __func__, usecase->stream.in->app_type_cfg.app_type);
break;
- case TRANSCODE_LOOPBACK :
+ case TRANSCODE_LOOPBACK_RX :
audio_extn_utils_update_stream_output_app_type_cfg(adev->platform,
&adev->streams_output_cfg_list,
usecase->stream.inout->out_config.devices,
@@ -914,7 +916,7 @@ static int send_app_type_cfg_for_device(struct audio_device *adev,
platform_get_snd_device_name(split_snd_device));
if (usecase->type != PCM_PLAYBACK && usecase->type != PCM_CAPTURE &&
- usecase->type != TRANSCODE_LOOPBACK) {
+ usecase->type != TRANSCODE_LOOPBACK_RX) {
ALOGE("%s: not a playback/capture path, no need to cfg app type", __func__);
rc = 0;
goto exit_send_app_type_cfg;
@@ -924,7 +926,7 @@ static int send_app_type_cfg_for_device(struct audio_device *adev,
(usecase->id != USECASE_AUDIO_PLAYBACK_MULTI_CH) &&
(usecase->id != USECASE_AUDIO_PLAYBACK_ULL) &&
(usecase->id != USECASE_AUDIO_PLAYBACK_VOIP) &&
- (usecase->id != USECASE_AUDIO_TRANSCODE_LOOPBACK) &&
+ (usecase->id != USECASE_AUDIO_TRANSCODE_LOOPBACK_RX) &&
(!is_interactive_usecase(usecase->id)) &&
(!is_offload_usecase(usecase->id)) &&
(usecase->type != PCM_CAPTURE)) {
@@ -940,7 +942,7 @@ static int send_app_type_cfg_for_device(struct audio_device *adev,
goto exit_send_app_type_cfg;
}
- if (usecase->type == PCM_PLAYBACK || usecase->type == TRANSCODE_LOOPBACK) {
+ if (usecase->type == PCM_PLAYBACK || usecase->type == TRANSCODE_LOOPBACK_RX) {
pcm_device_id = platform_get_pcm_device_id(usecase->id, PCM_PLAYBACK);
snprintf(mixer_ctl_name, sizeof(mixer_ctl_name),
"Audio Stream %d App Type Cfg", pcm_device_id);
@@ -1076,7 +1078,7 @@ static int send_app_type_cfg_for_device(struct audio_device *adev,
__func__, app_type, acdb_dev_id, sample_rate, snd_device_be_idx);
} else {
app_type = platform_get_default_app_type_v2(adev->platform, usecase->type);
- if(usecase->type == TRANSCODE_LOOPBACK) {
+ if(usecase->type == TRANSCODE_LOOPBACK_RX) {
sample_rate = usecase->stream.inout->out_config.sample_rate;
app_type = usecase->stream.inout->out_app_type_cfg.app_type;
}
@@ -1106,7 +1108,7 @@ int audio_extn_utils_send_app_type_cfg(struct audio_device *adev,
switch (usecase->type) {
case PCM_PLAYBACK:
- case TRANSCODE_LOOPBACK:
+ case TRANSCODE_LOOPBACK_RX:
ALOGD("%s: usecase->out_snd_device %s",
__func__, platform_get_snd_device_name(usecase->out_snd_device));
/* check for out combo device */
@@ -1449,7 +1451,7 @@ void audio_extn_utils_send_audio_calibration(struct audio_device *adev,
platform_send_audio_calibration(adev->platform, usecase,
platform_get_default_app_type_v2(adev->platform, usecase->type),
48000);
- } else if (type == TRANSCODE_LOOPBACK && usecase->stream.inout != NULL) {
+ } else if (type == TRANSCODE_LOOPBACK_RX && usecase->stream.inout != NULL) {
int snd_device = usecase->out_snd_device;
snd_device = (snd_device == SND_DEVICE_OUT_SPEAKER) ?
platform_get_spkr_prot_snd_device(snd_device) : snd_device;
@@ -2518,3 +2520,15 @@ int audio_extn_utils_get_channels_from_string(const char *id_string)
return -EINVAL;
}
+
+int audio_extn_utils_get_license_params
+(
+const struct audio_device *adev,
+struct audio_license_params *license_params
+)
+{
+ if(!license_params)
+ return -EINVAL;
+ return platform_get_license_by_product(adev->platform, (const char*)license_params->product, &license_params->key, license_params->license);
+}
+
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 904b3698..1594be22 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -90,6 +90,7 @@
#define DIRECT_PCM_NUM_FRAGMENTS 2
#define COMPRESS_PLAYBACK_VOLUME_MAX 0x2000
#define VOIP_PLAYBACK_VOLUME_MAX 0x2000
+#define PCM_PLAYBACK_VOLUME_MAX 0x2000
#define DSD_VOLUME_MIN_DB (-110)
#define PROXY_OPEN_RETRY_COUNT 100
@@ -337,7 +338,8 @@ const char * const use_case_table[AUDIO_USECASE_MAX] = {
[USECASE_AUDIO_PLAYBACK_SILENCE] = "silence-playback",
/* Transcode loopback cases */
- [USECASE_AUDIO_TRANSCODE_LOOPBACK] = "audio-transcode-loopback",
+ [USECASE_AUDIO_TRANSCODE_LOOPBACK_RX] = "audio-transcode-loopback-rx",
+ [USECASE_AUDIO_TRANSCODE_LOOPBACK_TX] = "audio-transcode-loopback-tx",
[USECASE_AUDIO_PLAYBACK_VOIP] = "audio-playback-voip",
[USECASE_AUDIO_RECORD_VOIP] = "audio-record-voip",
@@ -445,6 +447,7 @@ static int last_known_cal_step = -1 ;
static int check_a2dp_restore_l(struct audio_device *adev, struct stream_out *out, bool restore);
static int out_set_compr_volume(struct audio_stream_out *stream, float left, float right);
static int out_set_voip_volume(struct audio_stream_out *stream, float left, float right);
+static int out_set_pcm_volume(struct audio_stream_out *stream, float left, float right);
static bool may_use_noirq_mode(struct audio_device *adev, audio_usecase_t uc_id,
int flags __unused)
@@ -970,7 +973,7 @@ int enable_audio_route(struct audio_device *adev,
ALOGV("%s: enter: usecase(%d)", __func__, usecase->id);
- if (usecase->type == PCM_CAPTURE)
+ if (usecase->type == PCM_CAPTURE || usecase->type == TRANSCODE_LOOPBACK_TX)
snd_device = usecase->in_snd_device;
else
snd_device = usecase->out_snd_device;
@@ -1008,7 +1011,7 @@ int disable_audio_route(struct audio_device *adev,
return -EINVAL;
ALOGV("%s: enter: usecase(%d)", __func__, usecase->id);
- if (usecase->type == PCM_CAPTURE)
+ if (usecase->type == PCM_CAPTURE || usecase->type == TRANSCODE_LOOPBACK_TX)
snd_device = usecase->in_snd_device;
else
snd_device = usecase->out_snd_device;
@@ -1106,7 +1109,8 @@ int enable_snd_device(struct audio_device *adev,
"true-native-mode");
adev->native_playback_enabled = true;
}
- if ((snd_device == SND_DEVICE_IN_HANDSET_6MIC) &&
+ if (((snd_device == SND_DEVICE_IN_HANDSET_6MIC) ||
+ (snd_device == SND_DEVICE_IN_HANDSET_QMIC)) &&
(audio_extn_ffv_get_stream() == adev->active_input)) {
ALOGD("%s: init ec ref loopback", __func__);
audio_extn_ffv_init_ec_ref_loopback(adev, snd_device);
@@ -1268,7 +1272,7 @@ static snd_device_t derive_playback_snd_device(void * platform,
snd_device_t d2 = new_snd_device;
switch (uc->type) {
- case TRANSCODE_LOOPBACK :
+ case TRANSCODE_LOOPBACK_RX :
a1 = uc->stream.inout->out_config.devices;
a2 = new_uc->stream.inout->out_config.devices;
break;
@@ -1945,7 +1949,8 @@ static bool force_device_switch(struct audio_usecase *usecase)
bool is_it_true_mode = false;
if (usecase->type == PCM_CAPTURE ||
- usecase->type == TRANSCODE_LOOPBACK) {
+ usecase->type == TRANSCODE_LOOPBACK_RX ||
+ usecase->type == TRANSCODE_LOOPBACK_TX) {
return false;
}
@@ -2035,10 +2040,10 @@ int select_devices(struct audio_device *adev, audio_usecase_t uc_id)
struct stream_out stream_out;
audio_usecase_t hfp_ucid;
int status = 0;
- audio_devices_t audio_device;
- audio_channel_mask_t channel_mask;
- int sample_rate;
- int acdb_id;
+ audio_devices_t audio_device = AUDIO_DEVICE_NONE;
+ audio_channel_mask_t channel_mask = AUDIO_CHANNEL_NONE;
+ int sample_rate = 0;
+ int acdb_id = 0;
ALOGD("%s for use case (%s)", __func__, use_case_table[uc_id]);
@@ -2059,7 +2064,7 @@ int select_devices(struct audio_device *adev, audio_usecase_t uc_id)
usecase->stream.out);
in_snd_device = platform_get_input_snd_device(adev->platform, usecase->stream.out->devices);
usecase->devices = usecase->stream.out->devices;
- } else if (usecase->type == TRANSCODE_LOOPBACK ) {
+ } else if (usecase->type == TRANSCODE_LOOPBACK_RX) {
if (usecase->stream.inout == NULL) {
ALOGE("%s: stream.inout is NULL", __func__);
return -EINVAL;
@@ -2070,8 +2075,14 @@ int select_devices(struct audio_device *adev, audio_usecase_t uc_id)
stream_out.channel_mask = usecase->stream.inout->out_config.channel_mask;
out_snd_device = platform_get_output_snd_device(adev->platform,
&stream_out);
+ usecase->devices = out_snd_device;
+ } else if (usecase->type == TRANSCODE_LOOPBACK_TX ) {
+ if (usecase->stream.inout == NULL) {
+ ALOGE("%s: stream.inout is NULL", __func__);
+ return -EINVAL;
+ }
in_snd_device = platform_get_input_snd_device(adev->platform, AUDIO_DEVICE_NONE);
- usecase->devices = (out_snd_device | in_snd_device);
+ usecase->devices = in_snd_device;
} else {
/*
* If the voice call is active, use the sound devices of voice call usecase
@@ -2522,6 +2533,14 @@ int start_input_stream(struct stream_in *in)
in->pcm = pcm_open(adev->snd_card, in->pcm_device_id,
flags, &config);
ATRACE_END();
+ if (errno == ENETRESET && !pcm_is_ready(in->pcm)) {
+ ALOGE("%s: pcm_open failed errno:%d\n", __func__, errno);
+ adev->card_status = CARD_STATUS_OFFLINE;
+ in->card_status = CARD_STATUS_OFFLINE;
+ ret = -EIO;
+ goto error_open;
+ }
+
if (in->pcm == NULL || !pcm_is_ready(in->pcm)) {
ALOGE("%s: %s", __func__, pcm_get_error(in->pcm));
if (in->pcm != NULL) {
@@ -3123,11 +3142,23 @@ int start_output_stream(struct stream_out *out)
}
}
+ if (out->realtime)
+ platform_set_stream_channel_map(adev->platform, out->channel_mask,
+ out->pcm_device_id, &out->channel_map_param.channel_map[0]);
+
while (1) {
ATRACE_BEGIN("pcm_open");
out->pcm = pcm_open(adev->snd_card, out->pcm_device_id,
flags, &out->config);
ATRACE_END();
+ if (errno == ENETRESET && !pcm_is_ready(out->pcm)) {
+ ALOGE("%s: pcm_open failed errno:%d\n", __func__, errno);
+ out->card_status = CARD_STATUS_OFFLINE;
+ adev->card_status = CARD_STATUS_OFFLINE;
+ ret = -EIO;
+ goto error_open;
+ }
+
if (out->pcm == NULL || !pcm_is_ready(out->pcm)) {
ALOGE("%s: %s", __func__, pcm_get_error(out->pcm));
if (out->pcm != NULL) {
@@ -3143,6 +3174,9 @@ int start_output_stream(struct stream_out *out)
}
break;
}
+ if (!out->realtime)
+ platform_set_stream_channel_map(adev->platform, out->channel_mask,
+ out->pcm_device_id, &out->channel_map_param.channel_map[0]);
ALOGV("%s: pcm_prepare", __func__);
if (pcm_is_ready(out->pcm)) {
@@ -3156,11 +3190,14 @@ int start_output_stream(struct stream_out *out)
goto error_open;
}
}
- platform_set_stream_channel_map(adev->platform, out->channel_mask,
- out->pcm_device_id, &out->channel_map_param.channel_map[0]);
// apply volume for voip playback after path is set up
if (out->usecase == USECASE_AUDIO_PLAYBACK_VOIP)
out_set_voip_volume(&out->stream, out->volume_l, out->volume_r);
+ else if ((out->usecase == USECASE_AUDIO_PLAYBACK_LOW_LATENCY || out->usecase == USECASE_AUDIO_PLAYBACK_DEEP_BUFFER) &&
+ (out->apply_volume)) {
+ out_set_pcm_volume(&out->stream, out->volume_l, out->volume_r);
+ out->apply_volume = false;
+ }
} else {
platform_set_stream_channel_map(adev->platform, out->channel_mask,
out->pcm_device_id, &out->channel_map_param.channel_map[0]);
@@ -3173,6 +3210,14 @@ int start_output_stream(struct stream_out *out)
out->pcm_device_id,
COMPRESS_IN, &out->compr_config);
ATRACE_END();
+ if (errno == ENETRESET && !is_compress_ready(out->compr)) {
+ ALOGE("%s: compress_open failed errno:%d\n", __func__, errno);
+ adev->card_status = CARD_STATUS_OFFLINE;
+ out->card_status = CARD_STATUS_OFFLINE;
+ ret = -EIO;
+ goto error_open;
+ }
+
if (out->compr && !is_compress_ready(out->compr)) {
ALOGE("%s: failed /w error %s", __func__, compress_get_error(out->compr));
compress_close(out->compr);
@@ -3272,7 +3317,8 @@ static int check_input_parameters(uint32_t sample_rate,
(format != AUDIO_FORMAT_PCM_24_BIT_PACKED) && (format != AUDIO_FORMAT_PCM_32_BIT) &&
(format != AUDIO_FORMAT_PCM_FLOAT)) &&
!voice_extn_compress_voip_is_format_supported(format) &&
- !audio_extn_compr_cap_format_supported(format))
+ !audio_extn_compr_cap_format_supported(format) &&
+ !audio_extn_cin_format_supported(format))
ret = -EINVAL;
switch (channel_count) {
@@ -3917,6 +3963,13 @@ static int out_set_parameters(struct audio_stream *stream, const char *kvpairs)
pthread_mutex_unlock(&out->lock);
}
+ err = str_parms_get_str(parms, AUDIO_PARAMETER_DUAL_MONO, value,
+ sizeof(value));
+ if (err >= 0) {
+ if (!strncmp("true", value, sizeof("true")) || atoi(value))
+ audio_extn_send_dual_mono_mixing_coefficients(out);
+ }
+
err = str_parms_get_str(parms, AUDIO_PARAMETER_STREAM_PROFILE, value, sizeof(value));
if (err >= 0) {
strlcpy(out->profile, value, sizeof(out->profile));
@@ -4292,6 +4345,38 @@ static int out_set_voip_volume(struct audio_stream_out *stream, float left,
return 0;
}
+static int out_set_pcm_volume(struct audio_stream_out *stream, float left,
+ float right)
+{
+ struct stream_out *out = (struct stream_out *)stream;
+ /* Volume control for pcm playback */
+ if (left != right) {
+ return -EINVAL;
+ } else {
+ char mixer_ctl_name[128];
+ struct audio_device *adev = out->dev;
+ struct mixer_ctl *ctl;
+ int pcm_device_id = platform_get_pcm_device_id(out->usecase, PCM_PLAYBACK);
+ snprintf(mixer_ctl_name, sizeof(mixer_ctl_name), "Playback %d Volume", pcm_device_id);
+ ctl = mixer_get_ctl_by_name(adev->mixer, mixer_ctl_name);
+ if (!ctl) {
+ ALOGE("%s : Could not get ctl for mixer cmd - %s", __func__, mixer_ctl_name);
+ return -EINVAL;
+ }
+
+ int volume = (int) (left * PCM_PLAYBACK_VOLUME_MAX);
+ int ret = mixer_ctl_set_value(ctl, 0, volume);
+ if (ret < 0) {
+ ALOGE("%s: Could not set ctl, error:%d ", __func__, ret);
+ return -EINVAL;
+ }
+
+ ALOGV("%s : Pcm set volume value %d left %f", __func__, volume, left);
+
+ return 0;
+ }
+}
+
static int out_set_volume(struct audio_stream_out *stream, float left,
float right)
{
@@ -4341,6 +4426,17 @@ static int out_set_volume(struct audio_stream_out *stream, float left,
out->volume_l = left;
out->volume_r = right;
return ret;
+ } else if (out->usecase == USECASE_AUDIO_PLAYBACK_LOW_LATENCY ||
+ out->usecase == USECASE_AUDIO_PLAYBACK_DEEP_BUFFER) {
+ /* Volume control for pcm playback */
+ if (!out->standby)
+ ret = out_set_pcm_volume(stream, left, right);
+ else
+ out->apply_volume = true;
+
+ out->volume_l = left;
+ out->volume_r = right;
+ return ret;
}
return -ENOSYS;
@@ -4486,6 +4582,8 @@ static ssize_t out_write(struct audio_stream_out *stream, const void *buffer,
ret = -EINVAL;
goto exit;
}
+ if (out->set_dual_mono)
+ audio_extn_send_dual_mono_mixing_coefficients(out);
}
if (adev->is_channel_status_set == false && (out->devices & AUDIO_DEVICE_OUT_AUX_DIGITAL)){
@@ -5036,8 +5134,15 @@ static int out_create_mmap_buffer(const struct audio_stream_out *stream,
uint32_t mmap_size;
ALOGV("%s", __func__);
+ lock_output_stream(out);
pthread_mutex_lock(&adev->lock);
+ if (CARD_STATUS_OFFLINE == out->card_status ||
+ CARD_STATUS_OFFLINE == adev->card_status) {
+ ALOGW("out->card_status or adev->card_status offline, try again");
+ ret = -EIO;
+ goto exit;
+ }
if (info == NULL || min_size_frames == 0) {
ALOGE("%s: info = %p, min_size_frames = %d", __func__, info, min_size_frames);
ret = -EINVAL;
@@ -5062,6 +5167,14 @@ static int out_create_mmap_buffer(const struct audio_stream_out *stream,
__func__, adev->snd_card, out->pcm_device_id, out->config.channels);
out->pcm = pcm_open(adev->snd_card, out->pcm_device_id,
(PCM_OUT | PCM_MMAP | PCM_NOIRQ | PCM_MONOTONIC), &out->config);
+ if (errno == ENETRESET && !pcm_is_ready(out->pcm)) {
+ ALOGE("%s: pcm_open failed errno:%d\n", __func__, errno);
+ out->card_status = CARD_STATUS_OFFLINE;
+ adev->card_status = CARD_STATUS_OFFLINE;
+ ret = -EIO;
+ goto exit;
+ }
+
if (out->pcm == NULL || !pcm_is_ready(out->pcm)) {
step = "open";
ret = -ENODEV;
@@ -5108,6 +5221,7 @@ exit:
}
}
pthread_mutex_unlock(&adev->lock);
+ pthread_mutex_unlock(&out->lock);
return ret;
}
@@ -5643,6 +5757,13 @@ static int in_create_mmap_buffer(const struct audio_stream_in *stream,
pthread_mutex_lock(&adev->lock);
ALOGV("%s in %p", __func__, in);
+ if (CARD_STATUS_OFFLINE == in->card_status||
+ CARD_STATUS_OFFLINE == adev->card_status) {
+ ALOGW("in->card_status or adev->card_status offline, try again");
+ ret = -EIO;
+ goto exit;
+ }
+
if (info == NULL || min_size_frames == 0) {
ALOGE("%s invalid argument info %p min_size_frames %d", __func__, info, min_size_frames);
ret = -EINVAL;
@@ -5668,6 +5789,14 @@ static int in_create_mmap_buffer(const struct audio_stream_in *stream,
__func__, adev->snd_card, in->pcm_device_id, in->config.channels);
in->pcm = pcm_open(adev->snd_card, in->pcm_device_id,
(PCM_IN | PCM_MMAP | PCM_NOIRQ | PCM_MONOTONIC), &in->config);
+ if (errno == ENETRESET && !pcm_is_ready(in->pcm)) {
+ ALOGE("%s: pcm_open failed errno:%d\n", __func__, errno);
+ in->card_status = CARD_STATUS_OFFLINE;
+ adev->card_status = CARD_STATUS_OFFLINE;
+ ret = -EIO;
+ goto exit;
+ }
+
if (in->pcm == NULL || !pcm_is_ready(in->pcm)) {
step = "open";
ret = -ENODEV;
@@ -5832,6 +5961,7 @@ int adev_open_output_stream(struct audio_hw_device *dev,
out->a2dp_compress_mute = false;
out->hal_output_suspend_supported = 0;
out->dynamic_pm_qos_config_supported = 0;
+ out->set_dual_mono = false;
if ((flags & AUDIO_OUTPUT_FLAG_BD) &&
(property_get_bool("vendor.audio.matrix.limiter.enable", false)))
diff --git a/hal/audio_hw.h b/hal/audio_hw.h
index 202e09af..c1b8e078 100755..100644
--- a/hal/audio_hw.h
+++ b/hal/audio_hw.h
@@ -50,9 +50,15 @@
#include "audio_hw_extn_api.h"
#if LINUX_ENABLED
-#define VISUALIZER_LIBRARY_PATH "libqcomvisualizer.so"
-#define OFFLOAD_EFFECTS_BUNDLE_LIBRARY_PATH "libqcompostprocbundle.so"
-#define ADM_LIBRARY_PATH "libadm.so"
+#if defined(__LP64__)
+#define VISUALIZER_LIBRARY_PATH "/usr/lib64/libqcomvisualizer.so"
+#define OFFLOAD_EFFECTS_BUNDLE_LIBRARY_PATH "/usr/lib64/libqcompostprocbundle.so"
+#define ADM_LIBRARY_PATH "/usr/lib64/libadm.so"
+#else
+#define VISUALIZER_LIBRARY_PATH "/usr/lib/libqcomvisualizer.so"
+#define OFFLOAD_EFFECTS_BUNDLE_LIBRARY_PATH "/usr/lib/libqcompostprocbundle.so"
+#define ADM_LIBRARY_PATH "/usr/lib/libadm.so"
+#endif
#else
#define VISUALIZER_LIBRARY_PATH "/vendor/lib/soundfx/libqcomvisualizer.so"
#define OFFLOAD_EFFECTS_BUNDLE_LIBRARY_PATH "/vendor/lib/soundfx/libqcompostprocbundle.so"
@@ -189,7 +195,8 @@ enum {
USECASE_AUDIO_PLAYBACK_SILENCE,
- USECASE_AUDIO_TRANSCODE_LOOPBACK,
+ USECASE_AUDIO_TRANSCODE_LOOPBACK_RX,
+ USECASE_AUDIO_TRANSCODE_LOOPBACK_TX,
USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM1,
USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM2,
@@ -347,6 +354,7 @@ struct stream_out {
bool a2dp_compress_mute;
float volume_l;
float volume_r;
+ bool apply_volume;
char pm_qos_mixer_path[MAX_MIXER_PATH_LEN];
int hal_output_suspend_supported;
@@ -354,6 +362,7 @@ struct stream_out {
bool stream_config_changed;
mix_matrix_params_t pan_scale_params;
mix_matrix_params_t downmix_params;
+ bool set_dual_mono;
};
struct stream_in {
@@ -400,7 +409,8 @@ typedef enum {
VOICE_CALL,
VOIP_CALL,
PCM_HFP_CALL,
- TRANSCODE_LOOPBACK
+ TRANSCODE_LOOPBACK_RX,
+ TRANSCODE_LOOPBACK_TX
} usecase_type_t;
union stream_ptr {
diff --git a/hal/audio_hw_extn_api.c b/hal/audio_hw_extn_api.c
index 4e49a830..f5e06596 100644
--- a/hal/audio_hw_extn_api.c
+++ b/hal/audio_hw_extn_api.c
@@ -140,6 +140,10 @@ int qahwi_get_param_data(const struct audio_hw_device *adev,
ret = audio_extn_get_sourcetrack_data(dev,
(struct source_tracking_param*)payload);
break;
+ case AUDIO_EXTN_PARAM_LICENSE_PARAMS:
+ ret = audio_extn_utils_get_license_params(dev,
+ (struct audio_license_params *)(payload));
+ break;
default:
ALOGE("%s::INVALID PARAM ID:%d\n",__func__,param_id);
ret = -EINVAL;
@@ -200,7 +204,8 @@ ssize_t qahwi_in_read_v2(struct audio_stream_in *stream, void* buffer,
return -EINVAL;
}
if (COMPRESSED_TIMESTAMP_FLAG &&
- (in->flags & AUDIO_INPUT_FLAG_TIMESTAMP)) {
+ ((in->flags & AUDIO_INPUT_FLAG_TIMESTAMP) ||
+ (in->flags & AUDIO_INPUT_FLAG_PASSTHROUGH))) {
if (bytes != in->stream.common.get_buffer_size(&stream->common)) {
ALOGE("%s: bytes requested must be fragment size in timestamp mode!", __func__);
return -EINVAL;
@@ -209,10 +214,15 @@ ssize_t qahwi_in_read_v2(struct audio_stream_in *stream, void* buffer,
buf = (char *) in->qahwi_in.ibuf;
ret = in->qahwi_in.base.read(&in->stream, (void *)buf, bytes + mdata_size);
if (ret == bytes + mdata_size) {
- bytes_read = bytes;
- memcpy(buffer, buf + mdata_size, bytes);
+ mdata = (struct snd_codec_metadata *) buf;
+ bytes_read = mdata->length;
+ if (bytes_read > bytes) {
+ ALOGE("%s: bytes requested to small (given %zu, required %zu)",
+ __func__, bytes, bytes_read);
+ return -EINVAL;
+ }
+ memcpy(buffer, buf + mdata_size, bytes_read);
if (timestamp) {
- mdata = (struct snd_codec_metadata *) buf;
*timestamp = mdata->timestamp;
}
} else {
@@ -277,7 +287,8 @@ static int qahwi_open_input_stream(struct audio_hw_device *dev,
in->qahwi_in.is_inititalized = true;
if (COMPRESSED_TIMESTAMP_FLAG &&
- (flags & AUDIO_INPUT_FLAG_TIMESTAMP)) {
+ ((in->flags & AUDIO_INPUT_FLAG_TIMESTAMP) ||
+ (in->flags & AUDIO_INPUT_FLAG_PASSTHROUGH))) {
// set read to NULL as this is not supported in timestamp mode
in->stream.read = NULL;
diff --git a/hal/msm8916/platform.c b/hal/msm8916/platform.c
index 5f80a8d6..3ea991be 100644
--- a/hal/msm8916/platform.c
+++ b/hal/msm8916/platform.c
@@ -164,6 +164,7 @@
/* Query external audio device connection status */
#define AUDIO_PARAMETER_KEY_EXT_AUDIO_DEVICE "ext_audio_device"
+#define AUDIO_PARAMETER_KEY_SPKR_DEVICE_CHMAP "spkr_device_chmap"
#define EVENT_EXTERNAL_SPK_1 "qc_ext_spk_1"
#define EVENT_EXTERNAL_SPK_2 "qc_ext_spk_2"
#define EVENT_EXTERNAL_MIC "qc_ext_mic"
@@ -306,6 +307,12 @@ struct platform_data {
uint32_t declared_mic_count;
struct audio_microphone_characteristic_t microphones[AUDIO_MICROPHONE_MAX_COUNT];
struct snd_device_to_mic_map mic_map[SND_DEVICE_MAX];
+ struct spkr_device_chmap *spkr_ch_map;
+};
+
+struct spkr_device_chmap {
+ int num_ch;
+ char chmap[AUDIO_CHANNEL_COUNT_MAX];
};
static bool is_external_codec = false;
@@ -387,7 +394,8 @@ int pcm_device_table[AUDIO_USECASE_MAX][2] = {
[USECASE_AUDIO_RECORD_AFE_PROXY] = {AFE_PROXY_PLAYBACK_PCM_DEVICE,
AFE_PROXY_RECORD_PCM_DEVICE},
[USECASE_AUDIO_PLAYBACK_SILENCE] = {MULTIMEDIA9_PCM_DEVICE, -1},
- [USECASE_AUDIO_TRANSCODE_LOOPBACK] = {TRANSCODE_LOOPBACK_RX_DEV_ID, TRANSCODE_LOOPBACK_TX_DEV_ID},
+ [USECASE_AUDIO_TRANSCODE_LOOPBACK_RX] = {TRANSCODE_LOOPBACK_RX_DEV_ID, -1},
+ [USECASE_AUDIO_TRANSCODE_LOOPBACK_TX] = {-1, TRANSCODE_LOOPBACK_TX_DEV_ID},
[USECASE_AUDIO_PLAYBACK_VOIP] = {AUDIO_PLAYBACK_VOIP_PCM_DEVICE, AUDIO_PLAYBACK_VOIP_PCM_DEVICE},
[USECASE_AUDIO_RECORD_VOIP] = {AUDIO_RECORD_VOIP_PCM_DEVICE, AUDIO_RECORD_VOIP_PCM_DEVICE},
@@ -570,6 +578,7 @@ static const char * const device_table[SND_DEVICE_MAX] = {
[SND_DEVICE_IN_INCALL_REC_RX] = "incall-rec-rx",
[SND_DEVICE_IN_INCALL_REC_TX] = "incall-rec-tx",
[SND_DEVICE_IN_INCALL_REC_RX_TX] = "incall-rec-rx-tx",
+ [SND_DEVICE_IN_LINE] = "line-in",
};
// Platform specific backend bit width table
@@ -744,7 +753,8 @@ static int acdb_device_table[SND_DEVICE_MAX] = {
[SND_DEVICE_IN_HANDSET_8MIC] = 4,
[SND_DEVICE_IN_EC_REF_LOOPBACK_MONO] = 4,
[SND_DEVICE_IN_EC_REF_LOOPBACK_STEREO] = 4,
- [SND_DEVICE_IN_HANDSET_GENERIC_QMIC] = 150
+ [SND_DEVICE_IN_HANDSET_GENERIC_QMIC] = 150,
+ [SND_DEVICE_IN_LINE] = 4,
};
struct name_to_index {
@@ -818,6 +828,7 @@ static struct name_to_index snd_device_name_index[SND_DEVICE_MAX] = {
{TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED_VBAT)},
{TO_NAME_INDEX(SND_DEVICE_OUT_SPEAKER_PROTECTED_RAS)},
{TO_NAME_INDEX(SND_DEVICE_OUT_SPEAKER_PROTECTED_VBAT_RAS)},
+ {TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_SPEAKER_AND_VOICE_HEADPHONES)},
#ifdef RECORD_PLAY_CONCURRENCY
{TO_NAME_INDEX(SND_DEVICE_OUT_VOIP_HANDSET)},
{TO_NAME_INDEX(SND_DEVICE_OUT_VOIP_SPEAKER)},
@@ -905,6 +916,7 @@ static struct name_to_index snd_device_name_index[SND_DEVICE_MAX] = {
{TO_NAME_INDEX(SND_DEVICE_IN_INCALL_REC_RX)},
{TO_NAME_INDEX(SND_DEVICE_IN_INCALL_REC_TX)},
{TO_NAME_INDEX(SND_DEVICE_IN_INCALL_REC_RX_TX)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_LINE)},
};
static char * backend_tag_table[SND_DEVICE_MAX] = {0};
@@ -958,6 +970,8 @@ static struct name_to_index usecase_name_index[AUDIO_USECASE_MAX] = {
{TO_NAME_INDEX(USECASE_AUDIO_A2DP_ABR_FEEDBACK)},
{TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_VOIP)},
{TO_NAME_INDEX(USECASE_AUDIO_RECORD_VOIP)},
+ {TO_NAME_INDEX(USECASE_AUDIO_TRANSCODE_LOOPBACK_RX)},
+ {TO_NAME_INDEX(USECASE_AUDIO_TRANSCODE_LOOPBACK_TX)},
};
#define NO_COLS 2
@@ -1749,6 +1763,7 @@ static void set_platform_defaults(struct platform_data * my_data)
hw_interface_table[SND_DEVICE_IN_HANDSET_GENERIC_QMIC] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_INCALL_REC_RX] = strdup("INCALL_RECORD_RX");
hw_interface_table[SND_DEVICE_IN_INCALL_REC_TX] = strdup("INCALL_RECORD_TX");
+ hw_interface_table[SND_DEVICE_IN_LINE] = strdup("SLIMBUS_0_TX");
my_data->max_mic_count = PLATFORM_DEFAULT_MIC_COUNT;
/*remove ALAC & APE from DSP decoder list based on software decoder availability*/
@@ -2077,7 +2092,6 @@ static bool check_and_get_wsa_info(char *snd_card_name, int *wsaCount,
}
while ((tdirent = readdir(tdir))) {
- char buf[50];
struct dirent *tzdirent;
DIR *tzdir = NULL;
@@ -2085,6 +2099,7 @@ static bool check_and_get_wsa_info(char *snd_card_name, int *wsaCount,
if (!tzdir)
continue;
while ((tzdirent = readdir(tzdir))) {
+ char buf[50] = {0};
if (strcmp(tzdirent->d_name, "type"))
continue;
snprintf(name, MAX_PATH, TZ_TYPE, tzn);
@@ -2092,11 +2107,11 @@ static bool check_and_get_wsa_info(char *snd_card_name, int *wsaCount,
read_line_from_file(name, buf, sizeof(buf));
if (strstr(buf, file)) {
wsa_count++;
- /*We support max only two WSA speakers*/
- if (wsa_count == 2)
- break;
}
tzn++;
+ /*We support max only two WSA speakers*/
+ if (wsa_count == 2)
+ break;
}
closedir(tzdir);
}
@@ -2326,6 +2341,7 @@ void *platform_init(struct audio_device *adev)
my_data->mono_speaker = SPKR_1;
my_data->voice_speaker_stereo = false;
my_data->declared_mic_count = 0;
+ my_data->spkr_ch_map = NULL;
be_dai_name_table = NULL;
@@ -2783,6 +2799,17 @@ acdb_init_fail:
return my_data;
}
+void platform_release_acdb_metainfo_key(void *platform)
+{
+ struct platform_data *my_data = (struct platform_data *)platform;
+ struct listnode *node, *tempnode;
+
+ list_for_each_safe(node, tempnode, &my_data->acdb_meta_key_list) {
+ list_remove(node);
+ free(node_to_item(node, struct meta_key_list, list));
+ }
+}
+
void platform_deinit(void *platform)
{
struct platform_data *my_data = (struct platform_data *)platform;
@@ -2831,6 +2858,33 @@ void platform_deinit(void *platform)
my_data->adev->mixer = NULL;
}
+ if (my_data->spkr_ch_map) {
+ free(my_data->spkr_ch_map);
+ my_data->spkr_ch_map = NULL;
+ }
+
+ int32_t idx;
+
+ for (idx = 0; idx < MAX_CODEC_BACKENDS; idx++) {
+ if (my_data->current_backend_cfg[idx].bitwidth_mixer_ctl) {
+ free(my_data->current_backend_cfg[idx].bitwidth_mixer_ctl);
+ my_data->current_backend_cfg[idx].bitwidth_mixer_ctl = NULL;
+ }
+
+ if (my_data->current_backend_cfg[idx].samplerate_mixer_ctl) {
+ free(my_data->current_backend_cfg[idx].samplerate_mixer_ctl);
+ my_data->current_backend_cfg[idx].samplerate_mixer_ctl = NULL;
+ }
+
+ if (my_data->current_backend_cfg[idx].channels_mixer_ctl) {
+ free(my_data->current_backend_cfg[idx].channels_mixer_ctl);
+ my_data->current_backend_cfg[idx].channels_mixer_ctl = NULL;
+ }
+ }
+
+ /* free acdb_meta_key_list */
+ platform_release_acdb_metainfo_key(platform);
+
free(platform);
/* deinit usb */
audio_extn_usb_deinit();
@@ -3154,6 +3208,60 @@ int platform_set_acdb_metainfo_key(void *platform, char *name, int key)
return 0;
}
+int platform_get_license_by_product
+(
+ void *platform,
+ const char* product_name,
+ int* product_id,
+ char* product_license
+)
+{
+ int ret = 0;
+ int id = 0;
+ acdb_audio_cal_cfg_t cal;
+ uint32_t param_len = LICENSE_STR_MAX_LEN;
+ struct platform_data *my_data = (struct platform_data *)platform;
+
+ if ((NULL == platform) || (NULL == product_name) || (NULL == product_id)) {
+ ALOGE("[%s] Invalid input parameters",__func__);
+ ret = -EINVAL;
+ goto on_error;
+ }
+
+ id = platform_get_meta_info_key_from_list(platform, (char*)product_name);
+ if(0 == id)
+ {
+ ALOGE("%s:Id not found for %s", __func__, product_name);
+ ret = -EINVAL;
+ goto on_error;
+ }
+
+ ALOGD("%s: Found Id[%d] for %s", __func__, id, product_name);
+ if(NULL == my_data->acdb_get_audio_cal){
+ ALOGE("[%s] acdb_get_audio_cal is NULL.",__func__);
+ ret = -ENOSYS;
+ goto on_error;
+ }
+
+ memset(&cal, 0, sizeof(cal));
+ cal.persist = 1;
+ cal.cal_type = AUDIO_CORE_METAINFO_CAL_TYPE;
+ cal.acdb_dev_id = (uint32_t) id;
+ ret = my_data->acdb_get_audio_cal((void*)&cal, (void*)product_license, &param_len);
+
+ if (0 == ret) {
+ ALOGD("%s: Got Length[%d] License[%s]", __func__, param_len, product_license );
+ *product_id = id;
+ return 0;
+ }
+ ALOGD("%s: License not found for %s", __func__, product_name);
+
+on_error:
+ if (product_id)
+ *product_id = 0;
+ return ret;
+}
+
int platform_get_meta_info_key_from_list(void *platform, char *mod_name)
{
struct listnode *node;
@@ -3466,7 +3574,7 @@ int platform_send_audio_calibration(void *platform, struct audio_usecase *usecas
snd_device = voice_get_incall_rec_snd_device(usecase->in_snd_device);
else if ((usecase->type == PCM_HFP_CALL) || (usecase->type == PCM_CAPTURE))
snd_device = usecase->in_snd_device;
- else if (usecase->type == TRANSCODE_LOOPBACK)
+ else if (usecase->type == TRANSCODE_LOOPBACK_RX)
snd_device = usecase->out_snd_device;
acdb_dev_id = acdb_device_table[platform_get_spkr_prot_snd_device(snd_device)];
@@ -4734,6 +4842,8 @@ snd_device_t platform_get_input_snd_device(void *platform, audio_devices_t out_d
snd_device = SND_DEVICE_IN_HANDSET_MIC;
} else if (in_device & AUDIO_DEVICE_IN_BACK_MIC) {
snd_device = SND_DEVICE_IN_SPEAKER_MIC;
+ } else if (in_device & AUDIO_DEVICE_IN_LINE) {
+ snd_device = SND_DEVICE_IN_LINE;
} else if (in_device & AUDIO_DEVICE_IN_WIRED_HEADSET) {
snd_device = SND_DEVICE_IN_HEADSET_MIC;
} else if (in_device & AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET) {
@@ -5073,6 +5183,47 @@ done_key_audcal:
if(dptr != NULL)
free(dptr);
}
+static void platform_spkr_device_set_params(struct platform_data *platform,
+ struct str_parms *parms,
+ char *value, int len)
+{
+ int err = 0, i = 0, num_ch = 0;
+ char *test_r = NULL;
+ char *opts = NULL;
+ char *ch_count = NULL;
+
+ err = str_parms_get_str(parms, AUDIO_PARAMETER_KEY_SPKR_DEVICE_CHMAP,
+ value, len);
+ if (err >= 0) {
+ platform->spkr_ch_map = calloc(1, sizeof(struct spkr_device_chmap));
+ if (!platform->spkr_ch_map) {
+ ALOGE("%s: failed to allocate mem for adm channel map\n", __func__);
+ str_parms_del(parms, AUDIO_PARAMETER_KEY_SPKR_DEVICE_CHMAP);
+ return ;
+ }
+
+ ch_count = strtok_r(value, ", ", &test_r);
+ if (ch_count == NULL) {
+ ALOGE("%s: incorrect ch_map\n", __func__);
+ free(platform->spkr_ch_map);
+ platform->spkr_ch_map = NULL;
+ str_parms_del(parms, AUDIO_PARAMETER_KEY_SPKR_DEVICE_CHMAP);
+ return;
+ }
+
+ num_ch = atoi(ch_count);
+ if ((num_ch > 0) && (num_ch <= AUDIO_CHANNEL_COUNT_MAX) ) {
+ platform->spkr_ch_map->num_ch = num_ch;
+ for (i = 0; i < num_ch; i++) {
+ opts = strtok_r(NULL, ", ", &test_r);
+ if (opts != NULL)
+ platform->spkr_ch_map->chmap[i] = strtoul(opts, NULL, 16);
+ }
+ }
+ str_parms_del(parms, AUDIO_PARAMETER_KEY_SPKR_DEVICE_CHMAP);
+ }
+}
+
int platform_set_parameters(void *platform, struct str_parms *parms)
{
struct platform_data *my_data = (struct platform_data *)platform;
@@ -5197,6 +5348,7 @@ int platform_set_parameters(void *platform, struct str_parms *parms)
audio_extn_hfp_set_parameters(my_data->adev, parms);
true_32_bit_set_params(parms, value, len);
audio_extn_ffv_set_parameters(my_data->adev, parms);
+ platform_spkr_device_set_params(platform, parms, value, len);
ALOGV("%s: exit with code(%d)", __func__, ret);
return ret;
}
@@ -6179,7 +6331,11 @@ static bool platform_check_codec_backend_cfg(struct audio_device* adev,
bit_width = out->bit_width;
if (sample_rate < out->sample_rate)
sample_rate = out->sample_rate;
- if (out->sample_rate < OUTPUT_SAMPLING_RATE_44100)
+ /*
+ * TODO: Add Support for Backend configuration for devices which support
+ * sample rate less than 44.1
+ */
+ if (sample_rate < OUTPUT_SAMPLING_RATE_44100)
sample_rate = CODEC_BACKEND_DEFAULT_SAMPLE_RATE;
if (channels < out_channels)
channels = out_channels;
@@ -6370,10 +6526,11 @@ bool platform_check_and_set_codec_backend_cfg(struct audio_device* adev,
int i, num_devices = 1;
struct audio_backend_cfg backend_cfg;
bool ret = false;
+ struct platform_data *my_data = (struct platform_data *)adev->platform;
backend_idx = platform_get_backend_index(snd_device);
- if (usecase->type == TRANSCODE_LOOPBACK) {
+ if (usecase->type == TRANSCODE_LOOPBACK_RX) {
backend_cfg.bit_width = usecase->stream.inout->out_config.bit_width;
backend_cfg.sample_rate = usecase->stream.inout->out_config.sample_rate;
backend_cfg.format = usecase->stream.inout->out_config.format;
@@ -6409,6 +6566,11 @@ bool platform_check_and_set_codec_backend_cfg(struct audio_device* adev,
backend_cfg.sample_rate, backend_cfg.channels, backend_idx, usecase->id,
platform_get_snd_device_name(snd_device));
+ if ((my_data->spkr_ch_map != NULL) &&
+ (platform_get_backend_index(snd_device) == DEFAULT_CODEC_BACKEND))
+ platform_set_channel_map(my_data, my_data->spkr_ch_map->num_ch,
+ my_data->spkr_ch_map->chmap, -1);
+
if (platform_split_snd_device(adev->platform, snd_device,
&num_devices, new_snd_devices) < 0)
new_snd_devices[0] = snd_device;
@@ -6529,7 +6691,7 @@ bool platform_check_and_set_capture_codec_backend_cfg(struct audio_device* adev,
backend_cfg.passthrough_enabled = false;
- if (usecase->type == TRANSCODE_LOOPBACK) {
+ if (usecase->type == TRANSCODE_LOOPBACK_TX) {
backend_cfg.bit_width = usecase->stream.inout->in_config.bit_width;
backend_cfg.sample_rate = usecase->stream.inout->in_config.sample_rate;
backend_cfg.format = usecase->stream.inout->in_config.format;
diff --git a/hal/msm8916/platform.h b/hal/msm8916/platform.h
index 62367467..ad8c9aa6 100644
--- a/hal/msm8916/platform.h
+++ b/hal/msm8916/platform.h
@@ -244,6 +244,7 @@ enum {
SND_DEVICE_IN_INCALL_REC_RX,
SND_DEVICE_IN_INCALL_REC_TX,
SND_DEVICE_IN_INCALL_REC_RX_TX,
+ SND_DEVICE_IN_LINE,
SND_DEVICE_IN_END,
SND_DEVICE_MAX = SND_DEVICE_IN_END,
diff --git a/hal/msm8974/hw_info.c b/hal/msm8974/hw_info.c
index b2c9f9c3..d9002c01 100644
--- a/hal/msm8974/hw_info.c
+++ b/hal/msm8974/hw_info.c
@@ -498,6 +498,20 @@ static void update_hardware_info_msmnile(struct hardware_info *hw_info, const c
}
}
+static void update_hardware_info_sda845(struct hardware_info *hw_info, const char *snd_card_name)
+{
+ if (!strncmp(snd_card_name, "sda845-tavil-i2s-snd-card", sizeof("sda845-tavil-i2s-snd-card"))) {
+ strlcpy(hw_info->type, " mtp", sizeof(hw_info->type));
+ strlcpy(hw_info->name, "sda845", sizeof(hw_info->name));
+ hw_info->snd_devices = NULL;
+ hw_info->num_snd_devices = 0;
+ hw_info->is_stereo_spkr = false;
+ strlcpy(hw_info->dev_extn, "", sizeof(hw_info->dev_extn));
+ } else {
+ ALOGW("%s: Not a sda845 device", __func__);
+ }
+}
+
static void update_hardware_info_sdx(struct hardware_info *hw_info __unused, const char *snd_card_name __unused)
{
ALOGW("%s: Not a sdx device", __func__);
@@ -601,6 +615,12 @@ static void update_hardware_info_bear(struct hardware_info *hw_info, const char
if (!strncmp(snd_card_name, "sdm660-snd-card",
sizeof("sdm660-snd-card"))) {
strlcpy(hw_info->name, "sdm660", sizeof(hw_info->name));
+ } else if (!strncmp(snd_card_name, "qcs405-sku1-snd-card",
+ sizeof("qcs405-sku1-snd-card"))) {
+ strlcpy(hw_info->name, "qcs405", sizeof(hw_info->name));
+ } else if (!strncmp(snd_card_name, "qcs605-lc-snd-card",
+ sizeof("qcs605-lc-snd-card"))) {
+ strlcpy(hw_info->name, "qcs605-lc", sizeof(hw_info->name));
} else if (!strncmp(snd_card_name, "sdm660-tavil-snd-card",
sizeof("sdm660-tavil-snd-card"))) {
strlcpy(hw_info->name, "sdm660", sizeof(hw_info->name));
@@ -625,7 +645,15 @@ static void update_hardware_info_bear(struct hardware_info *hw_info, const char
} else if (!strncmp(snd_card_name, "sm6150-tavil-snd-card",
sizeof("sm6150-tavil-snd-card"))) {
strlcpy(hw_info->name, "sm6150", sizeof(hw_info->name));
-
+ hw_info->is_stereo_spkr = false;
+ } else if ( !strncmp(snd_card_name, "sdm670-tavil-hdk-snd-card",
+ sizeof("sdm670-tavil-hdk-snd-card"))) {
+ strlcpy(hw_info->type, " hdk", sizeof(hw_info->type));
+ strlcpy(hw_info->name, "sdm670", sizeof(hw_info->name));
+ hw_info->snd_devices = (snd_device_t *)tavil_qrd_variant_devices;
+ hw_info->num_snd_devices = ARRAY_SIZE(tavil_qrd_variant_devices);
+ hw_info->is_stereo_spkr = false;
+ strlcpy(hw_info->dev_extn, "-hdk", sizeof(hw_info->dev_extn));
} else {
ALOGW("%s: Not an SDM device", __func__);
}
@@ -677,7 +705,8 @@ void *hw_info_init(const char *snd_card_name)
ALOGV("SDM845 - variant soundcard");
update_hardware_info_sdm845(hw_info, snd_card_name);
} else if (strstr(snd_card_name, "sdm660") || strstr(snd_card_name, "sdm670")
- || strstr(snd_card_name, "sm6150")) {
+ || strstr(snd_card_name, "sm6150") || strstr(snd_card_name, "qcs605-lc")
+ || strstr(snd_card_name, "qcs405")) {
ALOGV("Bear - variant soundcard");
update_hardware_info_bear(hw_info, snd_card_name);
} else if (strstr(snd_card_name, "sdx")) {
@@ -687,6 +716,9 @@ void *hw_info_init(const char *snd_card_name)
strstr(snd_card_name, "sa8155")) {
ALOGV("MSMNILE - variant soundcard");
update_hardware_info_msmnile(hw_info, snd_card_name);
+ } else if (strstr(snd_card_name, "sda845")) {
+ ALOGV("SDA845 - variant soundcard");
+ update_hardware_info_sda845(hw_info, snd_card_name);
} else {
ALOGE("%s: Unsupported target %s:",__func__, snd_card_name);
free(hw_info);
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index 509dbc5d..c68a19aa 100755..100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -66,6 +66,7 @@
#define MIXER_XML_PATH_AUXPCM "/etc/mixer_paths_auxpcm.xml"
#define MIXER_XML_PATH_I2S "/etc/mixer_paths_i2s.xml"
#define PLATFORM_INFO_XML_PATH_I2S "/etc/audio_platform_info_extcodec.xml"
+#define PLATFORM_INFO_XML_PATH_WSA "/etc/audio_platform_info_wsa.xml"
#else
#define MIXER_XML_BASE_STRING "/vendor/etc/mixer_paths"
#define MIXER_XML_DEFAULT_PATH "/vendor/etc/mixer_paths.xml"
@@ -77,10 +78,11 @@
#define MIXER_XML_PATH_AUXPCM "/vendor/etc/mixer_paths_auxpcm.xml"
#define MIXER_XML_PATH_I2S "/vendor/etc/mixer_paths_i2s.xml"
#define PLATFORM_INFO_XML_PATH_I2S "/vendor/etc/audio_platform_info_i2s.xml"
+#define PLATFORM_INFO_XML_PATH_WSA "/vendor/etc/audio_platform_info_wsa.xml"
#endif
#include <linux/msm_audio.h>
-#if defined (PLATFORM_MSM8998) || (PLATFORM_SDM845) || (PLATFORM_SDM710) || defined (PLATFORM_QCS605) || defined (PLATFORM_MSMNILE) || defined (PLATFORM_MSMSTEPPE)
+#if defined (PLATFORM_MSM8998) || (PLATFORM_SDM845) || (PLATFORM_SDM710) || defined (PLATFORM_QCS605) || defined (PLATFORM_MSMNILE) || defined (PLATFORM_MSMSTEPPE) || defined (PLATFORM_QCS405)
#include <sound/devdep_params.h>
#endif
@@ -144,6 +146,7 @@
*/
#define AUDIO_PARAMETER_KEY_DP_FOR_VOICE_USECASE "dp_for_voice"
#define AUDIO_PARAMETER_KEY_DP_CHANNEL_MASK "dp_channel_mask"
+#define AUDIO_PARAMETER_KEY_SPKR_DEVICE_CHMAP "spkr_device_chmap"
#define EVENT_EXTERNAL_SPK_1 "qc_ext_spk_1"
#define EVENT_EXTERNAL_SPK_2 "qc_ext_spk_2"
@@ -231,6 +234,8 @@ struct platform_data {
int fluence_type;
int fluence_mode;
char fluence_cap[PROPERTY_VALUE_MAX];
+ bool ambisonic_capture;
+ bool ambisonic_profile;
bool slowtalk;
bool hd_voice;
bool ec_ref_enabled;
@@ -284,7 +289,12 @@ struct platform_data {
uint32_t declared_mic_count;
struct audio_microphone_characteristic_t microphones[AUDIO_MICROPHONE_MAX_COUNT];
struct snd_device_to_mic_map mic_map[SND_DEVICE_MAX];
+ struct spkr_device_chmap *spkr_ch_map;
+};
+struct spkr_device_chmap {
+ int num_ch;
+ char chmap[AUDIO_CHANNEL_COUNT_MAX];
};
static int pcm_device_table[AUDIO_USECASE_MAX][2] = {
@@ -372,7 +382,8 @@ static int pcm_device_table[AUDIO_USECASE_MAX][2] = {
[USECASE_AUDIO_RECORD_AFE_PROXY] = {AFE_PROXY_PLAYBACK_PCM_DEVICE,
AFE_PROXY_RECORD_PCM_DEVICE},
[USECASE_AUDIO_PLAYBACK_SILENCE] = {MULTIMEDIA9_PCM_DEVICE, -1},
- [USECASE_AUDIO_TRANSCODE_LOOPBACK] = {TRANSCODE_LOOPBACK_RX_DEV_ID, TRANSCODE_LOOPBACK_TX_DEV_ID},
+ [USECASE_AUDIO_TRANSCODE_LOOPBACK_RX] = {TRANSCODE_LOOPBACK_RX_DEV_ID, -1},
+ [USECASE_AUDIO_TRANSCODE_LOOPBACK_TX] = {-1, TRANSCODE_LOOPBACK_TX_DEV_ID},
[USECASE_AUDIO_PLAYBACK_VOIP] = {AUDIO_PLAYBACK_VOIP_PCM_DEVICE, AUDIO_PLAYBACK_VOIP_PCM_DEVICE},
[USECASE_AUDIO_RECORD_VOIP] = {AUDIO_RECORD_VOIP_PCM_DEVICE, AUDIO_RECORD_VOIP_PCM_DEVICE},
@@ -489,7 +500,9 @@ static const char * const device_table[SND_DEVICE_MAX] = {
[SND_DEVICE_IN_HEADSET_MIC_FLUENCE] = "headset-mic",
[SND_DEVICE_IN_VOICE_SPEAKER_MIC] = "voice-speaker-mic",
[SND_DEVICE_IN_VOICE_HEADSET_MIC] = "voice-headset-mic",
- [SND_DEVICE_IN_HDMI_MIC] = "hdmi-mic",
+ [SND_DEVICE_IN_SPDIF] = "spdif-in",
+ [SND_DEVICE_IN_HDMI_MIC] = "hdmi-in",
+ [SND_DEVICE_IN_HDMI_ARC] = "hdmi-arc-in",
[SND_DEVICE_IN_BT_SCO_MIC] = "bt-sco-mic",
[SND_DEVICE_IN_BT_SCO_MIC_NREC] = "bt-sco-mic",
[SND_DEVICE_IN_BT_SCO_MIC_WB] = "bt-sco-mic-wb",
@@ -557,6 +570,7 @@ static const char * const device_table[SND_DEVICE_MAX] = {
[SND_DEVICE_IN_INCALL_REC_RX] = "incall-rec-rx",
[SND_DEVICE_IN_INCALL_REC_TX] = "incall-rec-tx",
[SND_DEVICE_IN_INCALL_REC_RX_TX] = "incall-rec-rx-tx",
+ [SND_DEVICE_IN_LINE] = "line-in",
};
// Platform specific backend bit width table
@@ -672,7 +686,9 @@ static int acdb_device_table[SND_DEVICE_MAX] = {
[SND_DEVICE_IN_HEADSET_MIC_FLUENCE] = 47,
[SND_DEVICE_IN_VOICE_SPEAKER_MIC] = 11,
[SND_DEVICE_IN_VOICE_HEADSET_MIC] = 8,
- [SND_DEVICE_IN_HDMI_MIC] = 4,
+ [SND_DEVICE_IN_SPDIF] = 143,
+ [SND_DEVICE_IN_HDMI_MIC] = 143,
+ [SND_DEVICE_IN_HDMI_ARC] = 143,
[SND_DEVICE_IN_BT_SCO_MIC] = 21,
[SND_DEVICE_IN_BT_SCO_MIC_NREC] = 122,
[SND_DEVICE_IN_BT_SCO_MIC_WB] = 38,
@@ -737,6 +753,7 @@ static int acdb_device_table[SND_DEVICE_MAX] = {
[SND_DEVICE_IN_UNPROCESSED_QUAD_MIC] = 146,
[SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC] = 147,
[SND_DEVICE_IN_HANDSET_GENERIC_QMIC] = 150,
+ [SND_DEVICE_IN_LINE] = 4,
};
struct name_to_index {
@@ -829,7 +846,9 @@ static struct name_to_index snd_device_name_index[SND_DEVICE_MAX] = {
{TO_NAME_INDEX(SND_DEVICE_IN_HEADSET_MIC_FLUENCE)},
{TO_NAME_INDEX(SND_DEVICE_IN_VOICE_SPEAKER_MIC)},
{TO_NAME_INDEX(SND_DEVICE_IN_VOICE_HEADSET_MIC)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_SPDIF)},
{TO_NAME_INDEX(SND_DEVICE_IN_HDMI_MIC)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_HDMI_ARC)},
{TO_NAME_INDEX(SND_DEVICE_IN_BT_SCO_MIC)},
{TO_NAME_INDEX(SND_DEVICE_IN_BT_SCO_MIC_NREC)},
{TO_NAME_INDEX(SND_DEVICE_IN_BT_SCO_MIC_WB)},
@@ -896,6 +915,7 @@ static struct name_to_index snd_device_name_index[SND_DEVICE_MAX] = {
{TO_NAME_INDEX(SND_DEVICE_IN_INCALL_REC_RX)},
{TO_NAME_INDEX(SND_DEVICE_IN_INCALL_REC_TX)},
{TO_NAME_INDEX(SND_DEVICE_IN_INCALL_REC_RX_TX)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_LINE)},
};
static char * backend_tag_table[SND_DEVICE_MAX] = {0};
@@ -948,6 +968,9 @@ static struct name_to_index usecase_name_index[AUDIO_USECASE_MAX] = {
{TO_NAME_INDEX(USECASE_AUDIO_A2DP_ABR_FEEDBACK)},
{TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_VOIP)},
{TO_NAME_INDEX(USECASE_AUDIO_RECORD_VOIP)},
+ {TO_NAME_INDEX(USECASE_AUDIO_TRANSCODE_LOOPBACK_RX)},
+ {TO_NAME_INDEX(USECASE_AUDIO_TRANSCODE_LOOPBACK_TX)},
+
};
#define NO_COLS 2
@@ -1087,7 +1110,9 @@ static void update_codec_type_and_interface(struct platform_data * my_data, cons
!strncmp(snd_card_name, "sm6150-qrd-snd-card",
sizeof("sm6150-qrd-snd-card")) ||
!strncmp(snd_card_name, "sm6150-idp-snd-card",
- sizeof("sm6150-idp-snd-card")) ) {
+ sizeof("sm6150-idp-snd-card")) ||
+ !strncmp(snd_card_name, "qcs605-lc-snd-card",
+ sizeof("qcs605-lc-snd-card"))) {
ALOGI("%s: snd_card_name: %s",__func__,snd_card_name);
my_data->is_internal_codec = true;
my_data->is_slimbus_interface = false;
@@ -1417,7 +1442,9 @@ static bool platform_is_i2s_ext_modem(const char *snd_card_name,
!strncmp(snd_card_name, "apq8096-tasha-i2c-snd-card",
sizeof("apq8096-tasha-i2c-snd-card")) ||
!strncmp(snd_card_name, "sdx-tavil-i2s-snd-card",
- sizeof("sdx-tavil-i2s-snd-card"))){
+ sizeof("sdx-tavil-i2s-snd-card")) ||
+ !strncmp(snd_card_name, "sda845-tavil-i2s-snd-card",
+ sizeof("sda845-tavil-i2s-snd-card"))) {
plat_data->is_i2s_ext_modem = true;
}
ALOGV("%s, is_i2s_ext_modem:%d soundcard name is %s",__func__,
@@ -1446,7 +1473,9 @@ static void set_platform_defaults(struct platform_data * my_data)
backend_tag_table[SND_DEVICE_IN_BT_SCO_MIC_WB] = strdup("bt-sco-wb");
backend_tag_table[SND_DEVICE_IN_BT_SCO_MIC_NREC] = strdup("bt-sco");
backend_tag_table[SND_DEVICE_IN_BT_SCO_MIC_WB_NREC] = strdup("bt-sco-wb");
- backend_tag_table[SND_DEVICE_IN_HDMI_MIC] = strdup("hdmi-mic");
+ backend_tag_table[SND_DEVICE_IN_SPDIF] = strdup("spdif-in");
+ backend_tag_table[SND_DEVICE_IN_HDMI_MIC] = strdup("hdmi-in");
+ backend_tag_table[SND_DEVICE_IN_HDMI_ARC] = strdup("hdmi-arc-in");
backend_tag_table[SND_DEVICE_OUT_BT_SCO] = strdup("bt-sco");
backend_tag_table[SND_DEVICE_OUT_BT_SCO_WB] = strdup("bt-sco-wb");
backend_tag_table[SND_DEVICE_OUT_HDMI] = strdup("hdmi");
@@ -1576,7 +1605,9 @@ static void set_platform_defaults(struct platform_data * my_data)
hw_interface_table[SND_DEVICE_IN_HEADSET_MIC_FLUENCE] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_VOICE_SPEAKER_MIC] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_VOICE_HEADSET_MIC] = strdup("SLIMBUS_0_TX");
- hw_interface_table[SND_DEVICE_IN_HDMI_MIC] = strdup("HDMI");
+ hw_interface_table[SND_DEVICE_IN_SPDIF] = strdup("PRI_SPDIF_TX");
+ hw_interface_table[SND_DEVICE_IN_HDMI_MIC] = strdup("SEC_MI2S_TX");
+ hw_interface_table[SND_DEVICE_IN_HDMI_ARC] = strdup("SEC_SPDIF_TX");
hw_interface_table[SND_DEVICE_IN_BT_SCO_MIC] = strdup("SLIMBUS_7_TX");
hw_interface_table[SND_DEVICE_IN_BT_SCO_MIC_NREC] = strdup("SLIMBUS_7_TX");
hw_interface_table[SND_DEVICE_IN_BT_SCO_MIC_WB] = strdup("SLIMBUS_7_TX");
@@ -1635,6 +1666,7 @@ static void set_platform_defaults(struct platform_data * my_data)
hw_interface_table[SND_DEVICE_IN_HANDSET_GENERIC_QMIC] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_INCALL_REC_RX] = strdup("INCALL_RECORD_RX");
hw_interface_table[SND_DEVICE_IN_INCALL_REC_TX] = strdup("INCALL_RECORD_TX");
+ hw_interface_table[SND_DEVICE_IN_LINE] = strdup("SLIMBUS_0_TX");
my_data->max_mic_count = PLATFORM_DEFAULT_MIC_COUNT;
@@ -2160,6 +2192,8 @@ void *platform_init(struct audio_device *adev)
my_data->external_mic = false;
my_data->fluence_type = FLUENCE_NONE;
my_data->fluence_mode = FLUENCE_ENDFIRE;
+ my_data->ambisonic_capture = false;
+ my_data->ambisonic_profile = false;
my_data->slowtalk = false;
my_data->hd_voice = false;
my_data->edid_info = NULL;
@@ -2169,6 +2203,7 @@ void *platform_init(struct audio_device *adev)
my_data->speaker_lr_swap = false;
my_data->voice_speaker_stereo = false;
my_data->declared_mic_count = 0;
+ my_data->spkr_ch_map = NULL;
be_dai_name_table = NULL;
@@ -2220,6 +2255,13 @@ void *platform_init(struct audio_device *adev)
my_data->fluence_in_hfp_call = true;
}
}
+ /* Check for Ambisonic Capture Enablement */
+ if (property_get_bool("persist.vendor.audio.ambisonic.capture",false))
+ my_data->ambisonic_capture = true;
+
+ /* Check for Ambisonic Profile Assignment*/
+ if (property_get_bool("persist.vendor.audio.ambisonic.auto.profile",false))
+ my_data->ambisonic_profile = true;
my_data->voice_speaker_stereo =
property_get_bool("persist.vendor.audio.voicecall.speaker.stereo", false);
@@ -2250,6 +2292,9 @@ void *platform_init(struct audio_device *adev)
else if (!strncmp(snd_card_name, "sm6150-qrd-snd-card",
sizeof("sm6150-qrd-snd-card")))
platform_info_init(PLATFORM_INFO_XML_PATH_QRD, my_data, PLATFORM);
+ else if (!strncmp(snd_card_name, "qcs405-wsa-snd-card",
+ sizeof("qcs405-wsa-snd-card")))
+ platform_info_init(PLATFORM_INFO_XML_PATH_WSA, my_data, PLATFORM);
else if (my_data->is_internal_codec)
platform_info_init(PLATFORM_INFO_XML_PATH_INTCODEC, my_data, PLATFORM);
else
@@ -2406,8 +2451,10 @@ acdb_init_fail:
property_get("ro.baseband", baseband, "");
if ((!strncmp("apq8084", platform, sizeof("apq8084")) ||
!strncmp("msm8996", platform, sizeof("msm8996")) ||
- !strncmp("sdx", platform, sizeof("sdx"))) &&
- !strncmp("mdm", baseband, (sizeof("mdm")-1))) {
+ !strncmp("sdx", platform, sizeof("sdx")) ||
+ !strncmp("sdm845", platform, sizeof("sdm845"))) &&
+ ( !strncmp("mdm", baseband, (sizeof("mdm")-1)) ||
+ !strncmp("sdx", baseband, (sizeof("sdx")-1)))) {
my_data->csd = open_csd_client(my_data->is_i2s_ext_modem);
} else {
my_data->csd = NULL;
@@ -2496,7 +2543,9 @@ acdb_init_fail:
free(default_rx_backend);
default_rx_backend = strdup("WSA_CDC_DMA_RX_0");
} else if (!strncmp(snd_card_name, "sdm660", strlen("sdm660")) ||
- !strncmp(snd_card_name, "sdm670", strlen("sdm670"))) {
+ !strncmp(snd_card_name, "sdm670", strlen("sdm670")) ||
+ !strncmp(snd_card_name, "qcs605", strlen("qcs605"))) {
+
my_data->current_backend_cfg[DEFAULT_CODEC_BACKEND].bitwidth_mixer_ctl =
strdup("INT4_MI2S_RX Format");
@@ -2536,11 +2585,22 @@ acdb_init_fail:
strdup("INT0_MI2S_RX SampleRate");
}
} else {
+ if (!strncmp(snd_card_name, "qcs405", strlen("qcs405"))) {
+ my_data->current_backend_cfg[DEFAULT_CODEC_BACKEND].bitwidth_mixer_ctl =
+ strdup("WSA_CDC_DMA_RX_0 Format");
+ my_data->current_backend_cfg[DEFAULT_CODEC_BACKEND].samplerate_mixer_ctl =
+ strdup("WSA_CDC_DMA_RX_0 SampleRate");
- my_data->current_backend_cfg[DEFAULT_CODEC_TX_BACKEND].bitwidth_mixer_ctl =
- strdup("SLIM_0_TX Format");
- my_data->current_backend_cfg[DEFAULT_CODEC_TX_BACKEND].samplerate_mixer_ctl =
- strdup("SLIM_0_TX SampleRate");
+ my_data->current_backend_cfg[DEFAULT_CODEC_TX_BACKEND].bitwidth_mixer_ctl =
+ strdup("VA_CDC_DMA_TX_0 Format");
+ my_data->current_backend_cfg[DEFAULT_CODEC_TX_BACKEND].samplerate_mixer_ctl =
+ strdup("VA_CDC_DMA_TX_0 SampleRate");
+ } else {
+ my_data->current_backend_cfg[DEFAULT_CODEC_TX_BACKEND].bitwidth_mixer_ctl =
+ strdup("SLIM_0_TX Format");
+ my_data->current_backend_cfg[DEFAULT_CODEC_TX_BACKEND].samplerate_mixer_ctl =
+ strdup("SLIM_0_TX SampleRate");
+ }
my_data->current_backend_cfg[HEADPHONE_BACKEND].bitwidth_mixer_ctl =
strdup("SLIM_6_RX Format");
my_data->current_backend_cfg[HEADPHONE_BACKEND].samplerate_mixer_ctl =
@@ -2554,12 +2614,36 @@ acdb_init_fail:
my_data->current_backend_cfg[USB_AUDIO_TX_BACKEND].channels_mixer_ctl =
strdup("USB_AUDIO_TX Channels");
- my_data->current_backend_cfg[HDMI_TX_BACKEND].bitwidth_mixer_ctl =
- strdup("QUAT_MI2S_TX Format");
- my_data->current_backend_cfg[HDMI_TX_BACKEND].samplerate_mixer_ctl =
- strdup("QUAT_MI2S_TX SampleRate");
- my_data->current_backend_cfg[HDMI_TX_BACKEND].channels_mixer_ctl =
- strdup("QUAT_MI2S_TX Channels");
+ if (!strncmp(platform_get_snd_device_backend_interface(SND_DEVICE_IN_HDMI_MIC),
+ "SEC_MI2S_TX", sizeof("SEC_MI2S_TX"))) {
+ my_data->current_backend_cfg[HDMI_TX_BACKEND].bitwidth_mixer_ctl =
+ strdup("SEC_MI2S_TX Format");
+ my_data->current_backend_cfg[HDMI_TX_BACKEND].samplerate_mixer_ctl =
+ strdup("SEC_MI2S_TX SampleRate");
+ my_data->current_backend_cfg[HDMI_TX_BACKEND].channels_mixer_ctl =
+ strdup("SEC_MI2S_TX Channels");
+ } else {
+ my_data->current_backend_cfg[HDMI_TX_BACKEND].bitwidth_mixer_ctl =
+ strdup("QUAT_MI2S_TX Format");
+ my_data->current_backend_cfg[HDMI_TX_BACKEND].samplerate_mixer_ctl =
+ strdup("QUAT_MI2S_TX SampleRate");
+ my_data->current_backend_cfg[HDMI_TX_BACKEND].channels_mixer_ctl =
+ strdup("QUAT_MI2S_TX Channels");
+ }
+
+ my_data->current_backend_cfg[SPDIF_TX_BACKEND].bitwidth_mixer_ctl =
+ strdup("PRIM_SPDIF_TX Format");
+ my_data->current_backend_cfg[SPDIF_TX_BACKEND].samplerate_mixer_ctl =
+ strdup("PRIM_SPDIF_TX SampleRate");
+ my_data->current_backend_cfg[SPDIF_TX_BACKEND].channels_mixer_ctl =
+ strdup("PRIM_SPDIF_TX Channels");
+
+ my_data->current_backend_cfg[HDMI_ARC_TX_BACKEND].bitwidth_mixer_ctl =
+ strdup("SEC_SPDIF_TX Format");
+ my_data->current_backend_cfg[HDMI_ARC_TX_BACKEND].samplerate_mixer_ctl =
+ strdup("SEC_SPDIF_TX SampleRate");
+ my_data->current_backend_cfg[HDMI_ARC_TX_BACKEND].channels_mixer_ctl =
+ strdup("SEC_SPDIF_TX Channels");
for (idx = 0; idx < MAX_CODEC_BACKENDS; idx++) {
if (my_data->current_backend_cfg[idx].bitwidth_mixer_ctl) {
@@ -2652,6 +2736,17 @@ acdb_init_fail:
return my_data;
}
+void platform_release_acdb_metainfo_key(void *platform)
+{
+ struct platform_data *my_data = (struct platform_data *)platform;
+ struct listnode *node, *tempnode;
+
+ list_for_each_safe(node, tempnode, &my_data->acdb_meta_key_list) {
+ list_remove(node);
+ free(node_to_item(node, struct meta_key_list, list));
+ }
+}
+
void platform_deinit(void *platform)
{
struct platform_data *my_data = (struct platform_data *)platform;
@@ -2699,6 +2794,35 @@ void platform_deinit(void *platform)
my_data->adev->mixer = NULL;
}
+
+
+ if (my_data->spkr_ch_map) {
+ free(my_data->spkr_ch_map);
+ my_data->spkr_ch_map = NULL;
+ }
+
+ int32_t idx;
+
+ for (idx = 0; idx < MAX_CODEC_BACKENDS; idx++) {
+ if (my_data->current_backend_cfg[idx].bitwidth_mixer_ctl) {
+ free(my_data->current_backend_cfg[idx].bitwidth_mixer_ctl);
+ my_data->current_backend_cfg[idx].bitwidth_mixer_ctl = NULL;
+ }
+
+ if (my_data->current_backend_cfg[idx].samplerate_mixer_ctl) {
+ free(my_data->current_backend_cfg[idx].samplerate_mixer_ctl);
+ my_data->current_backend_cfg[idx].samplerate_mixer_ctl = NULL;
+ }
+
+ if (my_data->current_backend_cfg[idx].channels_mixer_ctl) {
+ free(my_data->current_backend_cfg[idx].channels_mixer_ctl);
+ my_data->current_backend_cfg[idx].channels_mixer_ctl = NULL;
+ }
+ }
+
+ /* free acdb_meta_key_list */
+ platform_release_acdb_metainfo_key(platform);
+
if (my_data->acdb_deallocate)
my_data->acdb_deallocate();
@@ -3315,8 +3439,12 @@ int platform_get_backend_index(snd_device_t snd_device)
port = USB_AUDIO_TX_BACKEND;
else if (strstr(backend_tag_table[snd_device], "bt-sco") != NULL)
port = BT_SCO_TX_BACKEND;
- else if (strcmp(backend_tag_table[snd_device], "hdmi-mic") == 0)
+ else if (strcmp(backend_tag_table[snd_device], "spdif-in") == 0)
+ port = SPDIF_TX_BACKEND;
+ else if (strcmp(backend_tag_table[snd_device], "hdmi-in") == 0)
port = HDMI_TX_BACKEND;
+ else if (strcmp(backend_tag_table[snd_device], "hdmi-arc-in") == 0)
+ port = HDMI_ARC_TX_BACKEND;
}
} else {
ALOGW("%s:napb: Invalid device - %d ", __func__, snd_device);
@@ -3342,7 +3470,7 @@ int platform_send_audio_calibration(void *platform, struct audio_usecase *usecas
snd_device = voice_get_incall_rec_snd_device(usecase->in_snd_device);
else if ((usecase->type == PCM_HFP_CALL) || (usecase->type == PCM_CAPTURE))
snd_device = usecase->in_snd_device;
- else if (usecase->type == TRANSCODE_LOOPBACK)
+ else if (usecase->type == TRANSCODE_LOOPBACK_RX)
snd_device = usecase->out_snd_device;
acdb_dev_id = acdb_device_table[platform_get_spkr_prot_snd_device(snd_device)];
@@ -4510,6 +4638,35 @@ snd_device_t platform_get_input_snd_device(void *platform, audio_devices_t out_d
source == AUDIO_SOURCE_MIC)) {
snd_device = SND_DEVICE_IN_HANDSET_GENERIC_QMIC;
platform_set_echo_reference(adev, true, out_device);
+ } else if (my_data->use_generic_handset == true && // System prop is enabled
+ (my_data->ambisonic_capture == true) && // Enable Ambisonic capture
+ (my_data->source_mic_type & SOURCE_QUAD_MIC) && // AND 4mic is available
+ ((in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) || // AND device is Built-in
+ (in_device & AUDIO_DEVICE_IN_BACK_MIC)) && // OR Back-mic
+ (source == AUDIO_SOURCE_MIC || // AND source is MIC for 16bit
+ source == AUDIO_SOURCE_UNPROCESSED || // OR unprocessed for 24bit
+ source == AUDIO_SOURCE_CAMCORDER)) { // OR camera usecase
+ snd_device = SND_DEVICE_IN_HANDSET_GENERIC_QMIC;
+ /* Below check is true only in LA build to set
+ ambisonic profile. In LE hal client will set profile
+ */
+ if (my_data->ambisonic_profile == true) {
+ strlcpy(adev->active_input->profile, "record_ambisonic",
+ sizeof(adev->active_input->profile));
+ }
+
+ if (!strncmp(adev->active_input->profile, "record_ambisonic",
+ strlen("record_ambisonic"))) {
+ /* Validate input stream configuration for
+ Ambisonic capture.
+ */
+ if (((int)channel_mask != (int)AUDIO_CHANNEL_INDEX_MASK_4) ||
+ (adev->active_input->sample_rate != 48000)) {
+ snd_device = SND_DEVICE_NONE;
+ ALOGW("Unsupported Input configuration for ambisonic capture");
+ goto exit;
+ }
+ }
} else if (source == AUDIO_SOURCE_CAMCORDER) {
if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC ||
in_device & AUDIO_DEVICE_IN_BACK_MIC) {
@@ -4664,6 +4821,8 @@ snd_device_t platform_get_input_snd_device(void *platform, audio_devices_t out_d
snd_device = SND_DEVICE_IN_HANDSET_MIC;
} else if (in_device & AUDIO_DEVICE_IN_BACK_MIC) {
snd_device = SND_DEVICE_IN_SPEAKER_MIC;
+ } else if (in_device & AUDIO_DEVICE_IN_LINE) {
+ snd_device = SND_DEVICE_IN_LINE;
} else if (in_device & AUDIO_DEVICE_IN_WIRED_HEADSET) {
snd_device = SND_DEVICE_IN_HEADSET_MIC;
} else if (in_device & AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET) {
@@ -4678,8 +4837,12 @@ snd_device_t platform_get_input_snd_device(void *platform, audio_devices_t out_d
else
snd_device = SND_DEVICE_IN_BT_SCO_MIC;
}
+ } else if (in_device & AUDIO_DEVICE_IN_SPDIF) {
+ snd_device = SND_DEVICE_IN_SPDIF;
} else if (in_device & AUDIO_DEVICE_IN_AUX_DIGITAL) {
snd_device = SND_DEVICE_IN_HDMI_MIC;
+ } else if (in_device & AUDIO_DEVICE_IN_HDMI_ARC) {
+ snd_device = SND_DEVICE_IN_HDMI_ARC;
} else if (in_device & AUDIO_DEVICE_IN_ANLG_DOCK_HEADSET ||
in_device & AUDIO_DEVICE_IN_DGTL_DOCK_HEADSET) {
snd_device = SND_DEVICE_IN_USB_HEADSET_MIC;
@@ -4739,6 +4902,9 @@ snd_device_t platform_get_input_snd_device(void *platform, audio_devices_t out_d
snd_device = fixup_usb_headset_mic_snd_device(platform,
SND_DEVICE_IN_USB_HEADSET_MIC,
SND_DEVICE_IN_USB_HEADSET_MULTI_CHANNEL_MIC);
+ else
+ snd_device = SND_DEVICE_IN_HANDSET_MIC;
+
} else {
ALOGE("%s: Unknown output device(s) %#x", __func__, out_device);
ALOGW("%s: Using default handset-mic", __func__);
@@ -5102,6 +5268,46 @@ static void perf_lock_set_params(struct platform_data *platform,
}
}
+static void platform_spkr_device_set_params(struct platform_data *platform,
+ struct str_parms *parms,
+ char *value, int len)
+{
+ int err = 0, i = 0, num_ch = 0;
+ char *test_r = NULL;
+ char *opts = NULL;
+ char *ch_count = NULL;
+
+ err = str_parms_get_str(parms, AUDIO_PARAMETER_KEY_SPKR_DEVICE_CHMAP,
+ value, len);
+ if (err >= 0) {
+ platform->spkr_ch_map = calloc(1, sizeof(struct spkr_device_chmap));
+ if (!platform->spkr_ch_map) {
+ ALOGE("%s: failed to allocate mem for adm channel map\n", __func__);
+ str_parms_del(parms, AUDIO_PARAMETER_KEY_SPKR_DEVICE_CHMAP);
+ return ;
+ }
+
+ ch_count = strtok_r(value, ", ", &test_r);
+ if (ch_count == NULL) {
+ ALOGE("%s: incorrect ch_map\n", __func__);
+ free(platform->spkr_ch_map);
+ platform->spkr_ch_map = NULL;
+ str_parms_del(parms, AUDIO_PARAMETER_KEY_SPKR_DEVICE_CHMAP);
+ return;
+ }
+
+ num_ch = atoi(ch_count);
+ if ((num_ch > 0) && (num_ch <= AUDIO_CHANNEL_COUNT_MAX) ) {
+ platform->spkr_ch_map->num_ch = num_ch;
+ for (i = 0; i < num_ch; i++) {
+ opts = strtok_r(NULL, ", ", &test_r);
+ platform->spkr_ch_map->chmap[i] = strtoul(opts, NULL, 16);
+ }
+ }
+ str_parms_del(parms, AUDIO_PARAMETER_KEY_SPKR_DEVICE_CHMAP);
+ }
+}
+
int platform_set_parameters(void *platform, struct str_parms *parms)
{
struct platform_data *my_data = (struct platform_data *)platform;
@@ -5243,6 +5449,7 @@ int platform_set_parameters(void *platform, struct str_parms *parms)
audio_extn_hfp_set_parameters(adev, parms);
perf_lock_set_params(platform, parms, value, len);
true_32_bit_set_params(parms, value, len);
+ platform_spkr_device_set_params(platform, parms, value, len);
done:
ALOGV("%s: exit with code(%d)", __func__, ret);
if(kv_pairs != NULL)
@@ -5885,7 +6092,9 @@ static int platform_set_codec_backend_cfg(struct audio_device* adev,
if (rate_str == NULL) {
switch (sample_rate) {
case 32000:
- if (passthrough_enabled || (backend_idx == HDMI_TX_BACKEND )) {
+ if (passthrough_enabled || (backend_idx == SPDIF_TX_BACKEND ) ||
+ (backend_idx == HDMI_TX_BACKEND ) ||
+ (backend_idx == HDMI_ARC_TX_BACKEND )) {
rate_str = "KHZ_32";
break;
}
@@ -5995,8 +6204,18 @@ static int platform_set_codec_backend_cfg(struct audio_device* adev,
} else if (backend_idx == DISP_PORT_RX_BACKEND) {
ext_disp_format = "Display Port RX Format";
set_ext_disp_format = true;
+ } else if (backend_idx == SPDIF_TX_BACKEND) {
+ ext_disp_format = "PRI SPDIF TX Format";
+ set_mi2s_tx_data_format = true;
} else if (backend_idx == HDMI_TX_BACKEND) {
- ext_disp_format = "QUAT MI2S TX Format";
+ if (!strncmp(platform_get_snd_device_backend_interface(snd_device),
+ "SEC_MI2S_TX", sizeof("SEC_MI2S_TX")))
+ ext_disp_format = "SEC MI2S TX Format";
+ else
+ ext_disp_format = "QUAT MI2S TX Format";
+ set_mi2s_tx_data_format = true;
+ } else if (backend_idx == HDMI_ARC_TX_BACKEND) {
+ ext_disp_format = "SEC SPDIF TX Format";
set_mi2s_tx_data_format = true;
} else {
ALOGV("%s: Format doesnt have to be set", __func__);
@@ -6013,10 +6232,10 @@ static int platform_set_codec_backend_cfg(struct audio_device* adev,
return -EINVAL;
}
if (format == AUDIO_FORMAT_PCM) {
- ALOGE("%s:MI2S data format LPCM", __func__);
+ ALOGE("%s:Set %s to LPCM", __func__, ext_disp_format);
mixer_ctl_set_enum_by_string(ctl, "LPCM");
} else {
- ALOGE("%s:MI2S data format Compr", __func__);
+ ALOGE("%s:Set %s to Compr", __func__, ext_disp_format);
mixer_ctl_set_enum_by_string(ctl, "Compr");
}
my_data->current_backend_cfg[backend_idx].format = format;
@@ -6236,7 +6455,11 @@ static bool platform_check_codec_backend_cfg(struct audio_device* adev,
bit_width = out->bit_width;
if (sample_rate < out->sample_rate)
sample_rate = out->sample_rate;
- if (out->sample_rate < OUTPUT_SAMPLING_RATE_44100)
+ /*
+ * TODO: Add Support for Backend configuration for devices which support
+ * sample rate less than 44.1
+ */
+ if (sample_rate < OUTPUT_SAMPLING_RATE_44100)
sample_rate = CODEC_BACKEND_DEFAULT_SAMPLE_RATE;
if (channels < out_channels)
channels = out_channels;
@@ -6307,13 +6530,15 @@ static bool platform_check_codec_backend_cfg(struct audio_device* adev,
* Handset and speaker may have diffrent backend. Check if the device is speaker or handset,
* and these devices are restricited to 48kHz.
*/
- if ((platform_get_backend_index(snd_device) == DEFAULT_CODEC_BACKEND) &&
- (platform_check_backends_match(SND_DEVICE_OUT_SPEAKER, snd_device) ||
- platform_check_backends_match(SND_DEVICE_OUT_HANDSET, snd_device))) {
- if (bit_width >= 24) {
- bit_width = platform_get_snd_device_bit_width(SND_DEVICE_OUT_SPEAKER);
+ if (platform_check_backends_match(SND_DEVICE_OUT_SPEAKER, snd_device)) {
+ int bw = platform_get_snd_device_bit_width(SND_DEVICE_OUT_SPEAKER);
+ if ((-ENOSYS != bw) && (bit_width > (uint32_t)bw)) {
+ bit_width = (uint32_t)bw;
ALOGD("%s:becf: afe: reset bitwidth to %d (based on supported"
- " value for this platform)", __func__, bit_width);
+ " value for this platform)", __func__, bit_width);
+ } else if (-ENOSYS == bw) {
+ bit_width = CODEC_BACKEND_DEFAULT_BIT_WIDTH;
+ ALOGD("%s:becf: afe: reset to default bitwidth %d", __func__, bit_width);
}
sample_rate = CODEC_BACKEND_DEFAULT_SAMPLE_RATE;
ALOGD("%s:becf: afe: playback on codec device not supporting native playback set "
@@ -6429,6 +6654,7 @@ bool platform_check_and_set_codec_backend_cfg(struct audio_device* adev,
backend_idx = platform_get_backend_index(snd_device);
+
//initialize backend config if current snd_device is SND_DEVICE_NONE
if (usecase->out_snd_device == SND_DEVICE_NONE) {
my_data->current_backend_cfg[backend_idx].sample_rate = CODEC_BACKEND_DEFAULT_SAMPLE_RATE;
@@ -6436,7 +6662,8 @@ bool platform_check_and_set_codec_backend_cfg(struct audio_device* adev,
my_data->current_backend_cfg[backend_idx].channels = CODEC_BACKEND_DEFAULT_CHANNELS;
}
- if (usecase->type == TRANSCODE_LOOPBACK) {
+
+ if (usecase->type == TRANSCODE_LOOPBACK_RX) {
backend_cfg.bit_width = usecase->stream.inout->out_config.bit_width;
backend_cfg.sample_rate = usecase->stream.inout->out_config.sample_rate;
backend_cfg.format = usecase->stream.inout->out_config.format;
@@ -6476,6 +6703,11 @@ bool platform_check_and_set_codec_backend_cfg(struct audio_device* adev,
backend_cfg.sample_rate, backend_cfg.channels, backend_idx, usecase->id,
platform_get_snd_device_name(snd_device));
+ if ((my_data->spkr_ch_map != NULL) &&
+ (platform_get_backend_index(snd_device) == DEFAULT_CODEC_BACKEND))
+ platform_set_channel_map(my_data, my_data->spkr_ch_map->num_ch,
+ my_data->spkr_ch_map->chmap, -1);
+
if (platform_split_snd_device(my_data, snd_device, &num_devices,
new_snd_devices) < 0)
new_snd_devices[0] = snd_device;
@@ -6595,7 +6827,7 @@ bool platform_check_and_set_capture_codec_backend_cfg(struct audio_device* adev,
backend_cfg.passthrough_enabled = false;
- if (usecase->type == TRANSCODE_LOOPBACK) {
+ if (usecase->type == TRANSCODE_LOOPBACK_TX) {
backend_cfg.bit_width = usecase->stream.inout->in_config.bit_width;
backend_cfg.sample_rate = usecase->stream.inout->in_config.sample_rate;
backend_cfg.format = usecase->stream.inout->in_config.format;
@@ -8133,7 +8365,8 @@ int platform_get_supported_copp_sampling_rate(uint32_t stream_sr)
return sample_rate;
}
-#if defined (PLATFORM_MSM8998) || (PLATFORM_SDM845) || (PLATFORM_SDM710) || defined (PLATFORM_QCS605) || defined (PLATFORM_MSMNILE) || defined (PLATFORM_MSMSTEPPE)
+#if defined (PLATFORM_MSM8998) || (PLATFORM_SDM845) || (PLATFORM_SDM710) || defined (PLATFORM_QCS605) || defined (PLATFORM_MSMNILE) || defined (PLATFORM_MSMSTEPPE) || defined (PLATFORM_QCS405)
+
int platform_get_mmap_data_fd(void *platform, int fe_dev, int dir, int *fd,
uint32_t *size)
{
@@ -8288,3 +8521,11 @@ end:
*mic_count = actual_mic_count;
return 0;
}
+
+int platform_get_license_by_product(void *platform __unused,
+ const char* product_name __unused,
+ int *product_id __unused,
+ char* product_license __unused)
+{
+ return -ENOSYS;
+}
diff --git a/hal/msm8974/platform.h b/hal/msm8974/platform.h
index 28a3248e..74ce72ff 100644
--- a/hal/msm8974/platform.h
+++ b/hal/msm8974/platform.h
@@ -179,7 +179,9 @@ enum {
SND_DEVICE_IN_HEADSET_MIC_FLUENCE,
SND_DEVICE_IN_VOICE_SPEAKER_MIC,
SND_DEVICE_IN_VOICE_HEADSET_MIC,
+ SND_DEVICE_IN_SPDIF,
SND_DEVICE_IN_HDMI_MIC,
+ SND_DEVICE_IN_HDMI_ARC,
SND_DEVICE_IN_BT_SCO_MIC,
SND_DEVICE_IN_BT_SCO_MIC_NREC,
SND_DEVICE_IN_BT_SCO_MIC_WB,
@@ -250,6 +252,7 @@ enum {
SND_DEVICE_IN_INCALL_REC_RX,
SND_DEVICE_IN_INCALL_REC_TX,
SND_DEVICE_IN_INCALL_REC_RX_TX,
+ SND_DEVICE_IN_LINE,
SND_DEVICE_IN_END,
SND_DEVICE_MAX = SND_DEVICE_IN_END,
@@ -279,7 +282,9 @@ enum {
DEFAULT_CODEC_TX_BACKEND = SLIMBUS_0_TX,
USB_AUDIO_TX_BACKEND,
BT_SCO_TX_BACKEND,
+ SPDIF_TX_BACKEND,
HDMI_TX_BACKEND,
+ HDMI_ARC_TX_BACKEND,
MAX_CODEC_BACKENDS
};
@@ -384,11 +389,11 @@ enum {
#define PLAYBACK_OFFLOAD_DEVICE 9
// Direct_PCM
-#if defined (PLATFORM_MSM8994) || defined (PLATFORM_MSM8996) || defined (PLATFORM_APQ8084) || defined (PLATFORM_MSM8998) || defined (PLATFORM_SDM845) || defined (PLATFORM_SDM710) ||defined (PLATFORM_QCS605) ||defined (PLATFORM_SDX24) || defined (PLATFORM_MSMNILE) || defined (PLATFORM_MSMSTEPPE)
+#if defined (PLATFORM_MSM8994) || defined (PLATFORM_MSM8996) || defined (PLATFORM_APQ8084) || defined (PLATFORM_MSM8998) || defined (PLATFORM_SDM845) || defined (PLATFORM_SDM710) ||defined (PLATFORM_QCS605) ||defined (PLATFORM_SDX24) || defined (PLATFORM_MSMNILE) || defined (PLATFORM_MSMSTEPPE) || defined (PLATFORM_QCS405)
#define PLAYBACK_OFFLOAD_DEVICE2 17
#endif
-#if defined (PLATFORM_APQ8084) || defined (PLATFORM_MSM8996) || defined (PLATFORM_MSM8998) || defined (PLATFORM_SDM845) || defined (PLATFORM_SDM710) || defined(PLATFORM_QCS605) || defined (PLATFORM_SDX24) || defined (PLATFORM_MSMNILE) || defined (PLATFORM_MSMSTEPPE)
+#if defined (PLATFORM_APQ8084) || defined (PLATFORM_MSM8996) || defined (PLATFORM_MSM8998) || defined (PLATFORM_SDM845) || defined (PLATFORM_SDM710) || defined(PLATFORM_QCS605) || defined (PLATFORM_SDX24) || defined (PLATFORM_MSMNILE) || defined (PLATFORM_MSMSTEPPE) || defined (PLATFORM_QCS405)
#define PLAYBACK_OFFLOAD_DEVICE3 18
#define PLAYBACK_OFFLOAD_DEVICE4 34
#define PLAYBACK_OFFLOAD_DEVICE5 35
@@ -513,7 +518,7 @@ enum {
#define FM_RX_VOLUME "PRI MI2S LOOPBACK Volume"
#elif PLATFORM_MSM8996
#define FM_RX_VOLUME "Tert MI2S LOOPBACK Volume"
-#elif defined (PLATFORM_MSM8998) || defined (PLATFORM_SDM845) || defined (PLATFORM_MSMFALCON) || defined (PLATFORM_SDM710) || defined (PLATFORM_QCS605) || defined (PLATFORM_MSMNILE) || defined (PLATFORM_MSMSTEPPE)
+#elif defined (PLATFORM_MSM8998) || defined (PLATFORM_SDM845) || defined (PLATFORM_MSMFALCON) || defined (PLATFORM_SDM710) || defined (PLATFORM_QCS605) || defined (PLATFORM_MSMNILE) || defined (PLATFORM_MSMSTEPPE) || defined (PLATFORM_QCS405)
#define FM_RX_VOLUME "SLIMBUS_8 LOOPBACK Volume"
#else
#define FM_RX_VOLUME "Internal FM RX Volume"
diff --git a/hal/platform_api.h b/hal/platform_api.h
index 6ba962d1..6474b61c 100644
--- a/hal/platform_api.h
+++ b/hal/platform_api.h
@@ -31,6 +31,9 @@
#define SAMPLE_RATE_11025 11025
#define sample_rate_multiple(sr, base) ((sr % base)== 0?true:false)
#define MAX_VOLUME_CAL_STEPS 15
+#define LICENSE_STR_MAX_LEN (64)
+#define PRODUCT_FFV "ffv"
+#define PRODUCT_ALLPLAY "allplay"
typedef enum {
PLATFORM,
@@ -131,6 +134,7 @@ int platform_get_effect_config_data(snd_device_t snd_device,
effect_type_t effect_type);
int platform_get_snd_device_bit_width(snd_device_t snd_device);
int platform_set_acdb_metainfo_key(void *platform, char *name, int key);
+void platform_release_acdb_metainfo_key(void *platform);
int platform_get_meta_info_key_from_list(void *platform, char *mod_name);
int platform_set_native_support(int na_mode);
int platform_get_native_support();
@@ -304,4 +308,6 @@ int platform_get_active_microphones(void *platform, unsigned int channels,
audio_usecase_t usecase,
struct audio_microphone_characteristic_t *mic_array,
size_t *mic_count);
+
+int platform_get_license_by_product(void *platform, const char* product_name, int *product_id, char* product_license);
#endif // AUDIO_PLATFORM_API_H
diff --git a/mm-audio/aenc-aac/qdsp6/Makefile.am b/mm-audio/aenc-aac/qdsp6/Makefile.am
index 08c9bee0..67f0bf18 100644
--- a/mm-audio/aenc-aac/qdsp6/Makefile.am
+++ b/mm-audio/aenc-aac/qdsp6/Makefile.am
@@ -17,6 +17,7 @@ AM_CPPFLAGS += -DFEATURE_DSM_DUP_ITEMS
AM_CPPFLAGS += -DNDEBUG
AM_CPPFLAGS += -Iinc
AM_CPPFLAGS += -I ${WORKSPACE}/hardware/qcom/media/mm-core/inc/
+AM_CPPFLAGS += -I $(PKG_CONFIG_SYSROOT_DIR)/usr/include/audio-kernel
c_sources =src/omx_aac_aenc.cpp
c_sources +=src/aenc_svr.c
diff --git a/mm-audio/aenc-amrnb/qdsp6/Makefile.am b/mm-audio/aenc-amrnb/qdsp6/Makefile.am
index 8becd078..1b7ed7c5 100644
--- a/mm-audio/aenc-amrnb/qdsp6/Makefile.am
+++ b/mm-audio/aenc-amrnb/qdsp6/Makefile.am
@@ -17,6 +17,7 @@ AM_CPPFLAGS += -DFEATURE_LINUX
AM_CPPFLAGS += -DFEATURE_NATIVELINUX -Dstrlcpy=g_strlcpy
AM_CPPFLAGS += -DFEATURE_DSM_DUP_ITEMS
AM_CPPFLAGS += -I ${WORKSPACE}/hardware/qcom/media/mm-core/inc/
+AM_CPPFLAGS += -I $(PKG_CONFIG_SYSROOT_DIR)/usr/include/audio-kernel
AM_CPPFLAGS += -g
AM_CPPFLAGS += -DNDEBUG
diff --git a/mm-audio/aenc-g711/qdsp6/Makefile.am b/mm-audio/aenc-g711/qdsp6/Makefile.am
index 02b0d575..9f424490 100644
--- a/mm-audio/aenc-g711/qdsp6/Makefile.am
+++ b/mm-audio/aenc-g711/qdsp6/Makefile.am
@@ -11,6 +11,7 @@ AM_CFLAGS = -Wall \
-DNDEBUG \
-DAUDIOV2 \
-I inc \
+ -I $(PKG_CONFIG_SYSROOT_DIR)/usr/include/audio-kernel \
-I ${WORKSPACE}/hardware/qcom/media/mm-core/inc/
C_SOURCES = src/aenc_svr.c \
diff --git a/post_proc/Android.mk b/post_proc/Android.mk
index b7d97c0c..9d58497e 100644
--- a/post_proc/Android.mk
+++ b/post_proc/Android.mk
@@ -122,6 +122,10 @@ ifeq ($(strip $(AUDIO_FEATURE_ENABLED_DTS_EAGLE)), true)
LOCAL_CFLAGS += -DHW_ACC_HPX
endif
+ifeq ($(strip $(AUDIO_FEATURE_ENABLED_INSTANCE_ID)), true)
+ LOCAL_CFLAGS += -DINSTANCE_ID_ENABLED
+endif
+
LOCAL_MODULE:= libhwacceffectswrapper
LOCAL_VENDOR_MODULE := true
diff --git a/post_proc/Makefile.am b/post_proc/Makefile.am
index e161f8d9..54602a25 100644
--- a/post_proc/Makefile.am
+++ b/post_proc/Makefile.am
@@ -1,4 +1,5 @@
AM_CFLAGS = -I ${WORKSPACE}/external/tinyalsa/include \
+ -I $(PKG_CONFIG_SYSROOT_DIR)/usr/include/audio-kernel \
-I ${WORKSPACE}/system/media/audio_effects/include
c_sources = bundle.c \
diff --git a/qahw/Makefile.am b/qahw/Makefile.am
index 1375157a..b78c9b78 100644
--- a/qahw/Makefile.am
+++ b/qahw/Makefile.am
@@ -13,6 +13,10 @@ lib_LTLIBRARIES = libqahwwrapper.la
libqahwwrapper_la_SOURCES = src/qahw.c \
src/qahw_effect.c
+if SVA_AUDIO_CONCURRENCY
+AM_CFLAGS += -DSVA_AUDIO_CONC
+endif
+
libqahwwrapper_la_CFLAGS = $(AM_CFLAGS)
libqahwwrapper_la_CFLAGS += -include stddef.h
libqahwwrapper_la_CFLAGS += -Dstrlcpy=g_strlcpy $(GLIB_CFLAGS) -include glib.h
diff --git a/qahw/configure.ac b/qahw/configure.ac
index 04fde197..5bd3a229 100644
--- a/qahw/configure.ac
+++ b/qahw/configure.ac
@@ -29,6 +29,7 @@ AC_PROG_LN_S
AC_PROG_MAKE_SET
PKG_PROG_PKG_CONFIG
+AM_CONDITIONAL([SVA_AUDIO_CONCURRENCY],[test x$BOARD_SUPPORTS_SVA_AUDIO_CONCURRENCY = xtrue])
AC_ARG_WITH([glib],
AC_HELP_STRING([--with-glib],
[enable glib, Build against glib. Use this when building for HLOS systems which use glib]))
diff --git a/qahw/inc/qahw_defs.h b/qahw/inc/qahw_defs.h
index c13a1a44..4e7faff7 100644
--- a/qahw/inc/qahw_defs.h
+++ b/qahw/inc/qahw_defs.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
* Not a Contribution.
*
* Copyright (C) 2011 The Android Open Source Project *
@@ -170,6 +170,7 @@ __BEGIN_DECLS
*/
#define QAHW_INPUT_FLAG_TIMESTAMP 0x80000000
#define QAHW_INPUT_FLAG_COMPRESS 0x40000000
+#define QAHW_INPUT_FLAG_PASSTHROUGH 0x20000000
/* Query fm volume */
#define QAHW_PARAMETER_KEY_FM_VOLUME "fm_volume"
@@ -196,6 +197,25 @@ __BEGIN_DECLS
#define QAHW_PCM_CHANNEL_FRC 14 /* Front right of center. */
#define QAHW_PCM_CHANNEL_RLC 15 /* Rear left of center. */
#define QAHW_PCM_CHANNEL_RRC 16 /* Rear right of center. */
+#define QAHW_PCM_CHANNEL_LFE2 17 /* Secondary low frequency effect channel. */
+#define QAHW_PCM_CHANNEL_SL 18 /* Side left channel. */
+#define QAHW_PCM_CHANNEL_SR 19 /* Side right channel. */
+#define QAHW_PCM_CHANNEL_TFL 20 /* Top front left channel. */
+#define QAHW_PCM_CHANNEL_LVH QAHW_PCM_CHANNEL_TFL /* Left vertical height channel.*/
+#define QAHW_PCM_CHANNEL_TFR 21 /* Top front right channel. */
+#define QAHW_PCM_CHANNEL_RVH QAHW_PCM_CHANNEL_TFR /* Right vertical height channel.*/
+#define QAHW_PCM_CHANNEL_TC 22 /* Top center channel. */
+#define QAHW_PCM_CHANNEL_TBL 23 /* Top back left channel. */
+#define QAHW_PCM_CHANNEL_TBR 24 /* Top back right channel. */
+#define QAHW_PCM_CHANNEL_TSL 25 /* Top side left channel. */
+#define QAHW_PCM_CHANNEL_TSR 26 /* Top side right channel. */
+#define QAHW_PCM_CHANNEL_TBC 27 /* Top back center channel. */
+#define QAHW_PCM_CHANNEL_BFC 28 /* Bottom front center channel. */
+#define QAHW_PCM_CHANNEL_BFL 29 /* Bottom front left channel. */
+#define QAHW_PCM_CHANNEL_BFR 30 /* Bottom front right channel. */
+#define QAHW_PCM_CHANNEL_LW 31 /* Left wide channel. */
+#define QAHW_PCM_CHANNEL_RW 32 /* Right wide channel. */
+#define QAHW_PCM_CHANNEL_RSD 34 /* Right side direct channel. */
/* type of asynchronous write callback events. Mutually exclusive */
typedef enum {
@@ -354,6 +374,14 @@ typedef struct qahw_mix_matrix_params {
float mixer_coeffs[AUDIO_CHANNEL_COUNT_MAX][AUDIO_CHANNEL_COUNT_MAX];
} qahw_mix_matrix_params_t;
+#define QAHW_LICENCE_STR_MAX_LENGTH (64)
+#define QAHW_PRODUCT_STR_MAX_LENGTH (64)
+typedef struct qahw_license_params {
+ char product[QAHW_PRODUCT_STR_MAX_LENGTH + 1];
+ int key;
+ char license[QAHW_LICENCE_STR_MAX_LENGTH + 1];
+} qahw_license_params_t;
+
typedef union {
struct qahw_source_tracking_param st_params;
struct qahw_sound_focus_param sf_params;
@@ -367,6 +395,7 @@ typedef union {
struct qahw_out_channel_map_param channel_map_params;
struct qahw_device_cfg_param device_cfg_params;
struct qahw_mix_matrix_params mix_matrix_params;
+ struct qahw_license_params license_params;
} qahw_param_payload;
typedef enum {
@@ -385,6 +414,7 @@ typedef enum {
QAHW_PARAM_DEVICE_CONFIG, /* PARAM to set device config */
QAHW_PARAM_OUT_MIX_MATRIX_PARAMS,
QAHW_PARAM_CH_MIX_MATRIX_PARAMS,
+ QAHW_PARAM_LICENSE_PARAMS,
} qahw_param_id;
__END_DECLS
diff --git a/qahw/src/qahw.c b/qahw/src/qahw.c
index 91fc5bfc..0c00158b 100644
--- a/qahw/src/qahw.c
+++ b/qahw/src/qahw.c
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
+* Copyright (c) 2016-2018, 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
@@ -37,6 +37,7 @@
#include <cutils/list.h>
#include <hardware/audio.h>
+#include <hardware/sound_trigger.h>
#include "qahw.h"
#define NO_ERROR 0
@@ -113,6 +114,7 @@ typedef enum {
static struct listnode qahw_module_list;
static int qahw_list_count;
static pthread_mutex_t qahw_module_init_lock = PTHREAD_MUTEX_INITIALIZER;
+sound_trigger_hw_device_t *st_hw_device = NULL;
/** Start of internal functions */
@@ -1720,7 +1722,8 @@ int qahw_open_input_stream_l(qahw_module_handle_t *hw_module,
}
/* dlsym qahwi_in_read_v2 if timestamp flag is used */
- if (!rc && (flags & QAHW_INPUT_FLAG_TIMESTAMP)) {
+ if (!rc && ((flags & QAHW_INPUT_FLAG_TIMESTAMP) ||
+ (flags & QAHW_INPUT_FLAG_PASSTHROUGH))) {
const char *error;
/* clear any existing errors */
@@ -1776,6 +1779,45 @@ int qahw_get_version_l() {
return QAHW_MODULE_API_VERSION_CURRENT;
}
+/* Load AHAL module to run audio and sva concurrency */
+static void load_st_hal()
+{
+#ifdef SVA_AUDIO_CONC
+ int rc = -EINVAL;
+ const hw_module_t* module = NULL;
+
+ rc = hw_get_module_by_class(SOUND_TRIGGER_HARDWARE_MODULE_ID, "primary", &module);
+ if (rc) {
+ ALOGE("%s: AHAL Loading failed %d", __func__, rc);
+ goto error;
+ }
+
+ rc = sound_trigger_hw_device_open(module, &st_hw_device);
+ if (rc) {
+ ALOGE("%s: AHAL Device open failed %d", __func__, rc);
+ st_hw_device = NULL;
+ }
+error:
+ return;
+#else
+ return;
+#endif /*SVA_AUDIO_CONC*/
+}
+
+static void unload_st_hal()
+{
+#ifdef SVA_AUDIO_CONC
+ if (st_hw_device == NULL) {
+ ALOGE("%s: audio device is NULL",__func__);
+ return;
+ }
+ sound_trigger_hw_device_close(st_hw_device);
+ st_hw_device = NULL;
+#else
+ return;
+#endif /*SVA_AUDIO_CONC*/
+}
+
/* convenience API for opening and closing an audio HAL module */
qahw_module_handle_t *qahw_load_module_l(const char *hw_module_id)
@@ -1867,7 +1909,7 @@ qahw_module_handle_t *qahw_load_module_l(const char *hw_module_id)
/* Add module list to global module list */
list_add_tail(&qahw_module_list, &qahw_module->module_list);
-
+ load_st_hal();
error_exit:
pthread_mutex_unlock(&qahw_module_init_lock);
@@ -1924,6 +1966,7 @@ int qahw_unload_module_l(qahw_module_handle_t *hw_module)
"is not closed", __func__);
rc = -EINVAL;
}
+ unload_st_hal();
error_exit:
pthread_mutex_unlock(&qahw_module_init_lock);
diff --git a/qahw_api/inc/qahw_defs.h b/qahw_api/inc/qahw_defs.h
index a33caf64..c6d42cab 100644
--- a/qahw_api/inc/qahw_defs.h
+++ b/qahw_api/inc/qahw_defs.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
* Not a Contribution.
*
* Copyright (C) 2011 The Android Open Source Project *
@@ -170,6 +170,7 @@ __BEGIN_DECLS
*/
#define QAHW_INPUT_FLAG_TIMESTAMP 0x80000000
#define QAHW_INPUT_FLAG_COMPRESS 0x40000000
+#define QAHW_INPUT_FLAG_PASSTHROUGH 0x20000000
/* Query fm volume */
#define QAHW_PARAMETER_KEY_FM_VOLUME "fm_volume"
@@ -354,6 +355,15 @@ typedef struct qahw_mix_matrix_params {
float mixer_coeffs[AUDIO_CHANNEL_COUNT_MAX][AUDIO_CHANNEL_COUNT_MAX];
} qahw_mix_matrix_params_t;
+
+#define QAHW_LICENCE_STR_MAX_LENGTH (64)
+#define QAHW_PRODUCT_STR_MAX_LENGTH (64)
+typedef struct qahw_license_params {
+ char product[QAHW_PRODUCT_STR_MAX_LENGTH + 1];
+ int key;
+ char license[QAHW_LICENCE_STR_MAX_LENGTH + 1];
+} qahw_license_params_t;
+
typedef union {
struct qahw_source_tracking_param st_params;
struct qahw_sound_focus_param sf_params;
@@ -367,6 +377,7 @@ typedef union {
struct qahw_out_channel_map_param channel_map_params;
struct qahw_device_cfg_param device_cfg_params;
struct qahw_mix_matrix_params mix_matrix_params;
+ struct qahw_license_params license_params;
} qahw_param_payload;
typedef enum {
@@ -385,6 +396,7 @@ typedef enum {
QAHW_PARAM_DEVICE_CONFIG, /* PARAM to set device config */
QAHW_PARAM_OUT_MIX_MATRIX_PARAMS,
QAHW_PARAM_CH_MIX_MATRIX_PARAMS,
+ QAHW_PARAM_LICENSE_PARAMS,
} qahw_param_id;
__END_DECLS
diff --git a/qahw_api/inc/qahw_effect_audiosphere.h b/qahw_api/inc/qahw_effect_audiosphere.h
index 2d294def..7bad4b03 100644
--- a/qahw_api/inc/qahw_effect_audiosphere.h
+++ b/qahw_api/inc/qahw_effect_audiosphere.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2017, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2017-2018, 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
@@ -32,7 +32,7 @@
#include <qahw_effect_api.h>
-#if __cplusplus
+#ifdef __cplusplus
extern "C" {
#endif
@@ -54,7 +54,7 @@ typedef enum
ASPHERE_PARAM_STATUS,
} qahw_asphere_params;
-#if __cplusplus
+#ifdef __cplusplus
} // extern "C"
#endif
diff --git a/qahw_api/inc/qahw_effect_bassboost.h b/qahw_api/inc/qahw_effect_bassboost.h
index 24b02e1b..2ca8409a 100644
--- a/qahw_api/inc/qahw_effect_bassboost.h
+++ b/qahw_api/inc/qahw_effect_bassboost.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2017-2018, The Linux Foundation. All rights reserved.
* Not a Contribution.
*
* Copyright (C) 2011 The Android Open Source Project
@@ -22,7 +22,7 @@
#include <qahw_effect_api.h>
-#if __cplusplus
+#ifdef __cplusplus
extern "C" {
#endif
@@ -43,7 +43,7 @@ typedef enum
BASSBOOST_PARAM_STRENGTH
} qahw_bassboost_params;
-#if __cplusplus
+#ifdef __cplusplus
} // extern "C"
#endif
diff --git a/qahw_api/inc/qahw_effect_equalizer.h b/qahw_api/inc/qahw_effect_equalizer.h
index 4f9e8f30..fd71c4cb 100644
--- a/qahw_api/inc/qahw_effect_equalizer.h
+++ b/qahw_api/inc/qahw_effect_equalizer.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2017-2018, The Linux Foundation. All rights reserved.
* Not a Contribution.
*
* Copyright (C) 2011 The Android Open Source Project
@@ -22,7 +22,7 @@
#include <qahw_effect_api.h>
-#if __cplusplus
+#ifdef __cplusplus
extern "C" {
#endif
@@ -76,7 +76,7 @@ typedef struct s_equalizer_settings {
uint16_t bandLevels[];
} qahw_equalizer_settings;
-#if __cplusplus
+#ifdef __cplusplus
} // extern "C"
#endif
diff --git a/qahw_api/inc/qahw_effect_presetreverb.h b/qahw_api/inc/qahw_effect_presetreverb.h
index 1edd0a59..ef3376a4 100644
--- a/qahw_api/inc/qahw_effect_presetreverb.h
+++ b/qahw_api/inc/qahw_effect_presetreverb.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2017-2018, The Linux Foundation. All rights reserved.
* Not a Contribution.
*
* Copyright (C) 2011 The Android Open Source Project
@@ -22,7 +22,7 @@
#include <qahw_effect_api.h>
-#if __cplusplus
+#ifdef __cplusplus
extern "C" {
#endif
@@ -59,7 +59,7 @@ typedef enum
REVERB_PRESET_LAST = REVERB_PRESET_PLATE
} qahw_reverb_presets;
-#if __cplusplus
+#ifdef __cplusplus
} // extern "C"
#endif
diff --git a/qahw_api/inc/qahw_effect_virtualizer.h b/qahw_api/inc/qahw_effect_virtualizer.h
index 73af2320..5ff95ce8 100644
--- a/qahw_api/inc/qahw_effect_virtualizer.h
+++ b/qahw_api/inc/qahw_effect_virtualizer.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2017-2018, The Linux Foundation. All rights reserved.
* Not a Contribution.
*
* Copyright (C) 2011 The Android Open Source Project
@@ -22,7 +22,7 @@
#include <qahw_effect_api.h>
-#if __cplusplus
+#ifdef __cplusplus
extern "C" {
#endif
@@ -78,7 +78,7 @@ typedef enum
VIRTUALIZER_PARAM_VIRTUALIZATION_MODE
} qahw_virtualizer_params;
-#if __cplusplus
+#ifdef __cplusplus
} // extern "C"
#endif
diff --git a/qahw_api/src/qahw_api.cpp b/qahw_api/src/qahw_api.cpp
index 8967e795..cbd90410 100644
--- a/qahw_api/src/qahw_api.cpp
+++ b/qahw_api/src/qahw_api.cpp
@@ -1113,6 +1113,7 @@ int qahw_get_version()
int qahw_unload_module(qahw_module_handle_t *hw_module)
{
+ int rc = -EINVAL;
ALOGV("%d:%s",__LINE__, __func__);
if (g_binder_enabled) {
if (!g_qas_died && ((g_qas_load_count > 0) && (--g_qas_load_count == 0))) {
@@ -1120,7 +1121,13 @@ int qahw_unload_module(qahw_module_handle_t *hw_module)
if (qas_status(qas) == -1)
return -ENODEV;
pthread_mutex_destroy(&list_lock);
- return qas->qahw_unload_module(hw_module);
+ rc = qas->qahw_unload_module(hw_module);
+ if (g_death_notifier != NULL) {
+ IInterface::asBinder(qas)->unlinkToDeath(g_death_notifier);
+ g_death_notifier.clear();
+ }
+ g_qas = NULL;
+ return rc;
} else {
return -ENODEV;
}
diff --git a/qahw_api/test/qahw_multi_record_test.c b/qahw_api/test/qahw_multi_record_test.c
index 67aa78c3..c3455098 100644
--- a/qahw_api/test/qahw_multi_record_test.c
+++ b/qahw_api/test/qahw_multi_record_test.c
@@ -75,6 +75,8 @@ struct audio_config_params {
double record_length;
char profile[50];
char kvpairs[256];
+ bool timestamp_mode;
+ char timestamp_file_in[256];
};
struct timed_params {
@@ -261,6 +263,7 @@ void *start_input(void *thread_param)
char file_name[256] = "/data/rec";
int data_sz = 0, name_len = strlen(file_name);
qahw_in_buffer_t in_buf;
+ static int64_t timestamp = 1;
struct audio_config_params* params = (struct audio_config_params*) thread_param;
qahw_module_handle_t *qahw_mod_handle = params->qahw_mod_handle;
@@ -276,6 +279,9 @@ void *start_input(void *thread_param)
case 4:
params->config.channel_mask = AUDIO_CHANNEL_INDEX_MASK_4;
break;
+ case 8:
+ params->config.channel_mask = AUDIO_CHANNEL_INDEX_MASK_8;
+ break;
default:
fprintf(log_file, "ERROR :::: channle count %d not supported, handle(%d)", params->channels, params->handle);
if (log_file != stdout)
@@ -348,7 +354,11 @@ void *start_input(void *thread_param)
if (log_file != stdout)
fprintf(stdout, "\n ADL: Please speak into the microphone for %lf seconds, handle(%d)\n", params->record_length, params->handle);
- snprintf(file_name + name_len, sizeof(file_name) - name_len, "%d.wav", (0x99A - params->handle));
+ if (audio_is_linear_pcm(params->config.format))
+ snprintf(file_name + name_len, sizeof(file_name) - name_len, "%d.wav", (0x99A - params->handle));
+ else
+ snprintf(file_name + name_len, sizeof(file_name) - name_len, "%d.raw", (0x99A - params->handle));
+
FILE *fd = fopen(file_name,"w");
if (fd == NULL) {
fprintf(log_file, "File open failed \n");
@@ -358,6 +368,19 @@ void *start_input(void *thread_param)
test_end();
pthread_exit(0);
}
+
+ FILE *fd_in_ts = NULL;
+ if (params->timestamp_mode) {
+ if (*(params->timestamp_file_in))
+ fd_in_ts = fopen(params->timestamp_file_in, "w+");
+ if (fd_in_ts == NULL) {
+ fprintf(log_file, "playback timestamps file open failed \n");
+ if (log_file != stdout)
+ fprintf(stdout, "playback timestamps file open failed \n");
+ test_end();
+ pthread_exit(0);
+ }
+ }
int bps = 16;
switch(params->config.format) {
@@ -387,7 +410,8 @@ void *start_input(void *thread_param)
hdr.bits_per_sample = bps;
hdr.data_id = ID_DATA;
hdr.data_sz = 0;
- fwrite(&hdr, 1, sizeof(hdr), fd);
+ if (audio_is_linear_pcm(params->config.format))
+ fwrite(&hdr, 1, sizeof(hdr), fd);
memset(&in_buf,0, sizeof(qahw_in_buffer_t));
start_time = time(0);
@@ -411,8 +435,12 @@ void *start_input(void *thread_param)
in_buf.buffer = buffer;
in_buf.bytes = buffer_size;
+ if (params->timestamp_mode)
+ in_buf.timestamp = &timestamp;
bytes_read = qahw_in_read(in_handle, &in_buf);
+ if (params->timestamp_mode)
+ fprintf(fd_in_ts, "timestamp:%lld\n", timestamp);
if (kpi_mode) {
if (count == 0) {
ret = clock_gettime(CLOCK_MONOTONIC, &tsColdF);
@@ -430,31 +458,42 @@ void *start_input(void *thread_param)
}
time_elapsed = difftime(time(0), start_time);
- written_size = fwrite(in_buf.buffer, 1, buffer_size, fd);
- if (written_size < buffer_size) {
+ written_size = fwrite(in_buf.buffer, 1, bytes_read, fd);
+ if (written_size < bytes_read) {
printf("Error in fwrite(%d)=%s\n",ferror(fd), strerror(ferror(fd)));
break;
}
- data_sz += buffer_size;
+ data_sz += bytes_read;
+ }
+ if ((params->timestamp_mode) && fd_in_ts) {
+ fclose(fd_in_ts);
+ fd_in_ts = NULL;
}
+
/*Stopping sourcetracking thread*/
sourcetrack_done = 1;
- /* update lengths in header */
- hdr.data_sz = data_sz;
- hdr.riff_sz = data_sz + 44 - 8;
- fseek(fd, 0, SEEK_SET);
- fwrite(&hdr, 1, sizeof(hdr), fd);
+ if (audio_is_linear_pcm(params->config.format)) {
+ /* update lengths in header */
+ hdr.data_sz = data_sz;
+ hdr.riff_sz = data_sz + 44 - 8;
+ fseek(fd, 0, SEEK_SET);
+ fwrite(&hdr, 1, sizeof(hdr), fd);
+ }
free(buffer);
fclose(fd);
+ fd = NULL;
/* capture latency kpis if required */
if (kpi_mode) {
tCold = tsColdF.tv_sec*1000 - tsColdI.tv_sec*1000 +
tsColdF.tv_nsec/1000000 - tsColdI.tv_nsec/1000000;
- fread((void *) latencyBuf, 100, 1, fdLatencyNode);
- fclose(fdLatencyNode);
+ if (fdLatencyNode) {
+ fread((void *) latencyBuf, 100, 1, fdLatencyNode);
+ fclose(fdLatencyNode);
+ fdLatencyNode = NULL;
+ }
sscanf(latencyBuf, " %llu,%llu", &tsec, &tusec);
tCont = ((uint64_t)tsCont.tv_sec)*1000 - tsec*1000 + ((uint64_t)tsCont.tv_nsec)/1000000 - tusec/1000;
if (log_file != stdout) {
@@ -547,6 +586,7 @@ void fill_default_params(struct audio_config_params *thread_param, int rec_sessi
thread_param->source = 1;
thread_param->record_length = 8 /*sec*/;
thread_param->record_delay = 0 /*sec*/;
+ thread_param->timestamp_mode = false;
thread_param->handle = 0x99A - rec_session;
}
@@ -567,6 +607,7 @@ void usage() {
printf(" -D --recording-delay <in seconds> - Delay in seconds after which recording should be started\n\n");
printf(" -l --log-file <FILEPATH> - File path for debug msg, to print\n");
printf(" on console use stdout or 1 \n\n");
+ printf(" -m --timestamp-mode <FILEPATH> - Use this flag to support timestamp-mode and timestamp file path for debug msg\n");
printf(" -K --kpi-mode - Use this flag to measure latency KPIs for this recording\n\n");
printf(" -i --interactive-mode - Use this flag if prefer configuring streams using interactive mode\n");
printf(" All other flags passed would be ignore if this flag is used\n\n");
@@ -585,6 +626,8 @@ void usage() {
printf(" hal_rec_test -F 1 --kpi-mode -> start a recording with low latency input flag and calculate latency KPIs\n\n");
printf(" hal_rec_test -c 1 -r 16000 -t 30 -k ffvOn=true;ffv_ec_ref_ch_cnt=2 -> Enable FFV with stereo ec ref\n");
printf(" For mono channel 16kHz rate for 30seconds\n\n");
+ printf(" hal_rec_test -d 2 -f 1 -r 44100 -c 2 -t 8 -D 2 -m <FILEPATH> -F 2147483648 --> enable timestamp mode and\n");
+ printf(" print timestamp debug msg in specified FILEPATH\n");
}
static void qti_audio_server_death_notify_cb(void *ctxt __unused) {
@@ -621,6 +664,7 @@ int main(int argc, char* argv[]) {
{"recording-time", required_argument, 0, 't'},
{"recording-delay", required_argument, 0, 'D'},
{"log-file", required_argument, 0, 'l'},
+ {"timestamp-file", required_argument, 0, 'm'},
{"kpi-mode", no_argument, 0, 'K'},
{"interactive", no_argument, 0, 'i'},
{"source-tracking", no_argument, 0, 'S'},
@@ -633,7 +677,7 @@ int main(int argc, char* argv[]) {
int option_index = 0;
while ((opt = getopt_long(argc,
argv,
- "-d:f:F:r:c:s:p:t:D:l:k:KiSh",
+ "-d:f:F:r:c:s:p:t:D:l:m:k:KiSh",
long_options,
&option_index)) != -1) {
switch (opt) {
@@ -667,6 +711,10 @@ int main(int argc, char* argv[]) {
case 'l':
snprintf(log_filename, sizeof(log_filename), "%s", optarg);
break;
+ case 'm':
+ params[0].timestamp_mode = true;
+ snprintf(params[0].timestamp_file_in, sizeof(params[0].timestamp_file_in), "%s", optarg);
+ break;
case 'K':
kpi_mode = true;
break;
@@ -808,7 +856,11 @@ int main(int argc, char* argv[]) {
/* Register the SIGINT to close the App properly */
if (signal(SIGINT, stop_signal_handler) == SIG_ERR)
- fprintf(log_file, "Failed to register SIGINT:%d\n",errno);
+ fprintf(log_file, "Failed to register SIGINT:%d\n", errno);
+
+ /* Register the SIGTERM to close the App properly */
+ if (signal(SIGTERM, stop_signal_handler) == SIG_ERR)
+ fprintf(log_file, "Failed to register SIGTERM:%d\n", errno);
for (i = 0; i < MAX_RECORD_SESSIONS; i++) {
if (thread_active[i] == 1) {
@@ -874,10 +926,13 @@ sourcetrack_error:
/* Caution: Below ADL log shouldnt be altered without notifying automation APT since it used
* for automation testing
*/
- fprintf(log_file, "\n ADL: Done with hal record test \n");
- if (log_file != stdout) {
- fprintf(stdout, "\n ADL: Done with hal record test \n");
- fclose(log_file);
+ if (log_file != NULL) {
+ fprintf(log_file, "\n ADL: Done with hal record test \n");
+ if (log_file != stdout) {
+ fprintf(stdout, "\n ADL: Done with hal record test \n");
+ fclose(log_file);
+ log_file = NULL;
+ }
}
wakelock_acquired = request_wake_lock(wakelock_acquired, false);
return 0;
diff --git a/qahw_api/test/qahw_playback_test.c b/qahw_api/test/qahw_playback_test.c
index 4160754c..fba8ed56 100644
--- a/qahw_api/test/qahw_playback_test.c
+++ b/qahw_api/test/qahw_playback_test.c
@@ -161,6 +161,18 @@ audio_io_handle_t stream_handle = 0x999;
"music_offload_wma_encode_option2=%d;" \
"music_offload_wma_format_tag=%d;"
+#define APE_KVPAIR "music_offload_ape_bits_per_sample=%d;" \
+ "music_offload_ape_blocks_per_frame=%d;" \
+ "music_offload_ape_compatible_version=%d;" \
+ "music_offload_ape_compression_level=%d;" \
+ "music_offload_ape_final_frame_blocks=%d;" \
+ "music_offload_ape_format_flags=%d;" \
+ "music_offload_ape_num_channels=%d;" \
+ "music_offload_ape_sample_rate=%d;" \
+ "music_offload_ape_total_frames=%d;" \
+ "music_offload_sample_rate=%d;" \
+ "music_offload_seek_table_present=%d;"
+
#ifndef AUDIO_OUTPUT_FLAG_ASSOCIATED
#define AUDIO_OUTPUT_FLAG_ASSOCIATED 0x10000000
#endif
@@ -204,7 +216,7 @@ static bool request_wake_lock(bool wakelock_acquired, bool enable)
}
#ifndef AUDIO_FORMAT_AAC_LATM
-#define AUDIO_FORMAT_AAC_LATM 0x23000000UL
+#define AUDIO_FORMAT_AAC_LATM 0x80000000UL
#define AUDIO_FORMAT_AAC_LATM_LC (AUDIO_FORMAT_AAC_LATM | AUDIO_FORMAT_AAC_SUB_LC)
#define AUDIO_FORMAT_AAC_LATM_HE_V1 (AUDIO_FORMAT_AAC_LATM | AUDIO_FORMAT_AAC_SUB_HE_V1)
#define AUDIO_FORMAT_AAC_LATM_HE_V2 (AUDIO_FORMAT_AAC_LATM | AUDIO_FORMAT_AAC_SUB_HE_V2)
@@ -251,6 +263,7 @@ static void init_streams(void)
stream_param[i].ethread_data = nullptr;
stream_param[i].device_url = "stream";
stream_param[i].play_later = false;
+ stream_param[i].set_params = nullptr;
pthread_mutex_init(&stream_param[i].write_lock, (const pthread_mutexattr_t *)NULL);
pthread_cond_init(&stream_param[i].write_cond, (const pthread_condattr_t *) NULL);
@@ -302,6 +315,9 @@ void read_kvpair(char *kvpair, char* kvpair_values, int filetype)
case FILE_WMA:
kvpair_type = WMA_KVPAIR;
break;
+ case FILE_APE:
+ kvpair_type = APE_KVPAIR;
+ break;
default:
break;
}
@@ -647,6 +663,7 @@ void *start_stream_playback (void* stream_data)
case FILE_VORBIS:
case FILE_ALAC:
case FILE_FLAC:
+ case FILE_APE:
fprintf(log_file, "%s:calling setparam for kvpairs\n", __func__);
if (!(params->kvpair_values)) {
fprintf(log_file, "stream %d: error!!No metadata for the clip\n", params->stream_index);
@@ -797,6 +814,14 @@ void *start_stream_playback (void* stream_data)
if (bytes_to_read <= 0)
read_complete_file = true;
+ if (params->set_params) {
+ rc = qahw_out_set_parameters(params->out_handle, params->set_params);
+ if (rc) {
+ fprintf(log_file, "stream %s: failed to set kvpairs\n", params->set_params);
+ fprintf(stderr, "stream %s: failed to set kvpairs\n", params->set_params);
+ }
+ }
+
while (!exit && !stop_playback) {
if (!bytes_remaining) {
fprintf(log_file, "\nstream %d: reading bytes %zd\n", params->stream_index, bytes_wanted);
@@ -1109,6 +1134,9 @@ void get_file_format(stream_config *stream_info)
case FILE_IEC61937:
stream_info->config.offload_info.format = AUDIO_FORMAT_IEC61937;
break;
+ case FILE_APE:
+ stream_info->config.offload_info.format = AUDIO_FORMAT_APE;
+ break;
default:
fprintf(log_file, "Does not support given filetype\n");
fprintf(stderr, "Does not support given filetype\n");
@@ -1200,7 +1228,6 @@ int measure_kpi_values(qahw_stream_handle_t* out_handle, bool is_offload) {
char latency_buf[200] = {0};
fread((void *) latency_buf, 100, 1, fd_latency_node);
- fclose(fd_latency_node);
sscanf(latency_buf, " %llu,%llu,%*llu,%*llu,%llu,%llu", &scold, &uscold, &scont, &uscont);
tcold = scold*1000 - ((uint64_t)ts_cold.tv_sec)*1000 + uscold/1000 - ((uint64_t)ts_cold.tv_nsec)/1000000;
tcont = scont*1000 - ((uint64_t)ts_cont.tv_sec)*1000 + uscont/1000 - ((uint64_t)ts_cont.tv_nsec)/1000000;
@@ -1629,6 +1656,9 @@ void usage() {
printf(" ->Note:all the USB device commmands(above) should be accompanied with the host side commands\n\n");
printf("hal_play_test -f interactive_audio.wav -d 2 -l out.txt -k \"mixer_ctrl=pan_scale;c=1;o=6;I=fc;O=fl,fr,fc,lfe,bl,br;M=0.5,0.5,0,0,0,0\" -i 1\n");
printf(" ->kv_pair for downmix or pan_scale should folow the above sequence, one can pass downmix & pan_scale params/coeff matrices. For each control params should be sent separately \n");
+ printf("hal_play_test -f /data/ape_dsp.isf.0x152E.bitstream.0x10100400.0x2.0x12F32.rx.bin -k 16,73728,3990,2000,53808,32,2,44100,157,44100,1 -t 18 -r 48000 -c 2 -v 0.5 -d 131072");
+ printf(" -> kvpair(-k) values represent media-info of clip & values should be in below mentioned sequence\n");
+ printf(" ->bits_per_sample,blocks_per_frame,compatible_version,compression_level,final_frame_blocks,format_flags,num_channels,sample_rate,total_frames,sample_rate,seek_table_present \n");
}
int get_wav_header_length (FILE* file_stream)
@@ -2095,7 +2125,7 @@ int main(int argc, char* argv[]) {
while ((opt = getopt_long(argc,
argv,
- "-f:r:c:b:d:s:v:V:l:t:a:w:k:PD:KF:Ee:A:u:m:S:C:p::x:y:qQh:i:h:g:",
+ "-f:r:c:b:d:s:v:V:l:t:a:w:k:PD:KF:Ee:A:u:m:S:C:p::x:y:qQh:i:h:g:O:",
long_options,
&option_index)) != -1) {
@@ -2233,6 +2263,9 @@ int main(int argc, char* argv[]) {
case 'K':
kpi_mode = true;
break;
+ case 'O':
+ stream_param[i].set_params = optarg;
+ break;
case 'F':
stream_param[i].flags = atoll(optarg);
stream_param[i].flags_set = true;
@@ -2297,6 +2330,8 @@ int main(int argc, char* argv[]) {
fprintf(stderr, " In Device config \n");
send_device_config = true;
+ memset(&device_cfg_params, 0, sizeof(struct qahw_device_cfg_param));
+
//Read Sample Rate
if (optind < argc && *argv[optind] != '-') {
device_cfg_params.sample_rate = atoi(optarg);
@@ -2391,8 +2426,14 @@ int main(int argc, char* argv[]) {
/* Register the SIGINT to close the App properly */
if (signal(SIGINT, stop_signal_handler) == SIG_ERR) {
- fprintf(log_file, "Failed to register SIGINT:%d\n",errno);
- fprintf(stderr, "Failed to register SIGINT:%d\n",errno);
+ fprintf(log_file, "Failed to register SIGINT:%d\n", errno);
+ fprintf(stderr, "Failed to register SIGINT:%d\n", errno);
+ }
+
+ /* Register the SIGTERM to close the App properly */
+ if (signal(SIGTERM, stop_signal_handler) == SIG_ERR) {
+ fprintf(log_file, "Failed to register SIGTERM:%d\n", errno);
+ fprintf(stderr, "Failed to register SIGTERM:%d\n", errno);
}
/* Check for Dual main content */
@@ -2533,6 +2574,7 @@ int main(int argc, char* argv[]) {
fprintf(log_file, "stream %d: Bitwidth:%d\n", stream->stream_index, stream->config.offload_info.bit_width);
fprintf(log_file, "stream %d: AAC Format Type:%d\n", stream->stream_index, stream->aac_fmt_type);
fprintf(log_file, "stream %d: Kvpair Values:%s\n", stream->stream_index, stream->kvpair_values);
+ fprintf(log_file, "stream %d: set params Values:%s\n", stream->stream_index, stream->set_params);
fprintf(log_file, "Log file:%s\n", log_filename);
fprintf(log_file, "Volume level:%f\n", vol_level);
diff --git a/qahw_api/test/qahw_playback_test.h b/qahw_api/test/qahw_playback_test.h
index 66229f51..0ac51dfa 100644
--- a/qahw_api/test/qahw_playback_test.h
+++ b/qahw_api/test/qahw_playback_test.h
@@ -60,7 +60,8 @@ enum {
FILE_MP2,
FILE_APTX,
FILE_TRUEHD,
- FILE_IEC61937
+ FILE_IEC61937,
+ FILE_APE
};
typedef enum {
@@ -143,6 +144,7 @@ typedef struct {
pthread_cond_t input_buffer_available_cond;
pthread_mutex_t input_buffer_available_lock;
uint32_t input_buffer_available_size;
+ char *set_params;
}stream_config;
qahw_module_handle_t * load_hal(audio_devices_t dev);
diff --git a/qahw_api/test/qap_wrapper_extn.c b/qahw_api/test/qap_wrapper_extn.c
index a0842771..9cd9fd6a 100644
--- a/qahw_api/test/qap_wrapper_extn.c
+++ b/qahw_api/test/qap_wrapper_extn.c
@@ -814,6 +814,22 @@ void qap_wrapper_module_callback(qap_module_handle_t module_handle, void* priv_d
break;
}
+ case QAP_MODULE_CALLBACK_EVENT_INPUT_CFG_CHANGE:
+ {
+ if (size < sizeof(qap_input_config_t)) {
+ ALOGE("%s %d event id %d, wrong payload size %d\n",
+ __func__, __LINE__, event_id, size);
+ break;
+ }
+ qap_input_config_t *p_stream_format = (qap_input_config_t*)data;
+
+ ALOGV(" %s %d Input format updated; sample_rate %lu, channels %lu, bitwidth %lu",
+ __func__, __LINE__,
+ p_stream_format->sample_rate,
+ p_stream_format->channels,
+ p_stream_format->bit_width);
+ break;
+ }
default:
break;
}
diff --git a/qahw_api/test/trans_loopback_test.c b/qahw_api/test/trans_loopback_test.c
index 2cb2a29c..6f5cb757 100644
--- a/qahw_api/test/trans_loopback_test.c
+++ b/qahw_api/test/trans_loopback_test.c
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2017, The Linux Foundation. All rights reserved.
+* Copyright (c) 2017-2018, 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
@@ -95,9 +95,6 @@ const char *log_filename = NULL;
#define TRANSCODE_LOOPBACK_SOURCE_PORT_ID 0x4C00
#define TRANSCODE_LOOPBACK_SINK_PORT_ID 0x4D00
-#define DEVICE_SOURCE 0
-#define DEVICE_SINK 1
-
#define MAX_MODULE_NAME_LENGTH 100
#define DEV_NODE_CHECK(node_name,node_id) strncmp(node_name,node_id,strlen(node_name))
@@ -110,7 +107,8 @@ typedef enum source_port_type {
SOURCE_PORT_NONE,
SOURCE_PORT_HDMI,
SOURCE_PORT_SPDIF,
- SOURCE_PORT_MIC
+ SOURCE_PORT_MIC,
+ SOURCE_PORT_BT
} source_port_type_t;
typedef enum source_port_state {
@@ -449,12 +447,15 @@ void source_data_event_handler(transcode_loopback_config_t *transcode_loopback_c
{
int status =0;
source_port_type_t source_port_type = transcode_loopback_config->source_port_config.source_port_type;
- status = read_and_set_source_config(source_port_type,&transcode_loopback_config->source_config);
- if ( status )
- {
- fprintf(log_file,"\nFailure in source port configuration with status: %d\n", status);
- return;
+ if (source_port_type == SOURCE_PORT_HDMI) {
+ status = read_and_set_source_config(source_port_type,&transcode_loopback_config->source_config);
+ if (status) {
+ fprintf(log_file,"\nFailure in source port configuration with status: %d\n", status);
+ return;
+ }
+ } else {
+ transcode_loopback_config->source_port_config.source_port_state = SOURCE_PORT_CONFIG_CHANGED;
}
fprintf(log_file,"\nSource port state : %d\n", transcode_loopback_config->source_port_config.source_port_state);
@@ -517,6 +518,11 @@ void process_loopback_data(void *ptr)
j++;
}
+ if (dev_path == NULL) {
+ fprintf(log_file, "NULL dev_path!");
+ continue;
+ }
+
if ((dev_path != NULL) && (switch_name != NULL))
fprintf(log_file,"devpath = %s, switch_name = %s \n",dev_path, switch_name);
@@ -540,17 +546,27 @@ void process_loopback_data(void *ptr)
exit_process_thread = true;
}
-void set_device(uint32_t device_type, uint32_t device_id)
+void set_device(uint32_t source_device, uint32_t sink_device)
{
transcode_loopback_config_t *transcode_loopback_config = &g_trnscode_loopback_config;
- switch( device_type )
- {
- case DEVICE_SINK:
- transcode_loopback_config->sink_config.ext.device.type = device_id;
- break;
- case DEVICE_SOURCE:
- transcode_loopback_config->source_config.ext.device.type = device_id;
- break;
+
+ transcode_loopback_config->sink_config.ext.device.type = sink_device;
+ transcode_loopback_config->source_config.ext.device.type = source_device;
+
+ switch (source_device) {
+ case AUDIO_DEVICE_IN_SPDIF:
+ g_trnscode_loopback_config.source_port_config.source_port_type = SOURCE_PORT_SPDIF;
+ break;
+ case AUDIO_DEVICE_IN_BLUETOOTH_A2DP:
+ g_trnscode_loopback_config.source_port_config.source_port_type = SOURCE_PORT_BT;
+ break;
+ case AUDIO_DEVICE_IN_LINE:
+ g_trnscode_loopback_config.source_port_config.source_port_type = SOURCE_PORT_MIC;
+ break;
+ case AUDIO_DEVICE_IN_HDMI:
+ default:
+ g_trnscode_loopback_config.source_port_config.source_port_type = SOURCE_PORT_HDMI;
+ break;
}
}
@@ -558,6 +574,7 @@ int main(int argc, char *argv[]) {
int status = 0;
uint32_t play_duration_in_seconds = 600,play_duration_elapsed_msec = 0,play_duration_in_msec = 0, sink_device = 2, volume_in_millibels = 0;
+ uint32_t source_device = AUDIO_DEVICE_IN_HDMI;
source_port_type_t source_port_type = SOURCE_PORT_NONE;
log_file = stdout;
transcode_loopback_config_t *transcode_loopback_config = NULL;
@@ -565,7 +582,8 @@ int main(int argc, char *argv[]) {
struct option long_options[] = {
/* These options set a flag. */
- {"sink-device", required_argument, 0, 'd'},
+ {"sink-device", required_argument, 0, 'o'},
+ {"source-device", required_argument, 0, 'i'},
{"play-duration", required_argument, 0, 'p'},
{"play-volume", required_argument, 0, 'v'},
{"help", no_argument, 0, 'h'},
@@ -577,15 +595,18 @@ int main(int argc, char *argv[]) {
while ((opt = getopt_long(argc,
argv,
- "-d:p:v:h",
+ "-o:i:p:v:h",
long_options,
&option_index)) != -1) {
fprintf(log_file, "for argument %c, value is %s\n", opt, optarg);
switch (opt) {
- case 'd':
- sink_device = atoi(optarg);
+ case 'o':
+ sink_device = atoll(optarg);
+ break;
+ case 'i':
+ source_device = atoll(optarg);
break;
case 'p':
play_duration_in_seconds = atoi(optarg);
@@ -601,6 +622,7 @@ int main(int argc, char *argv[]) {
}
}
+ fprintf(log_file, "source %#x sink %#x\n", source_device, sink_device);
fprintf(log_file,"\nTranscode loopback test begin\n");
if (play_duration_in_seconds < 0 | play_duration_in_seconds > 360000) {
fprintf(log_file,
@@ -621,7 +643,7 @@ int main(int argc, char *argv[]) {
transcode_loopback_config = &g_trnscode_loopback_config;
/* Set devices */
- set_device(DEVICE_SINK,sink_device);
+ set_device(source_device, sink_device);
/* Load HAL */
fprintf(log_file,"\nLoading HAL for loopback usecase begin\n");