diff options
author | Naresh Tanniru <ntanniru@codeaurora.org> | 2018-10-12 20:42:07 +0530 |
---|---|---|
committer | Naresh Tanniru <ntanniru@codeaurora.org> | 2018-10-15 17:00:56 +0530 |
commit | cb5b57891769acd7d9a8e6081c326c16e072664c (patch) | |
tree | 777f09b955fc6ce7114cc3c287934803367cdab9 | |
parent | 1921622b0def507510ad166b2f545ff091f5dd26 (diff) | |
parent | e1f65e84d306206a860961f662bd78060cac06b1 (diff) | |
download | android_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
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, ¶m_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 = ×tamp; 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"); |