Merge "hal: Dolby trumpet security changes"
diff --git a/configs/kona/audio_configs.xml b/configs/kona/audio_configs.xml
index fa07ca2..8c24bb2 100644
--- a/configs/kona/audio_configs.xml
+++ b/configs/kona/audio_configs.xml
@@ -92,6 +92,7 @@
<flag name="incall_music_enabled" value="true" />
<flag name="keep_alive_enabled" value="true" />
<flag name="kpi_optimize_enabled" value="true" />
+ <flag name="maxx_audio_enabled" value="false" />
<flag name="receiver_aided_stereo" value="true" />
<flag name="snd_monitor_enabled" value="true" />
<flag name="source_track_enabled" value="true" />
diff --git a/configs/kona/audio_platform_info.xml b/configs/kona/audio_platform_info.xml
index fc9f72e..09cb923 100644
--- a/configs/kona/audio_platform_info.xml
+++ b/configs/kona/audio_platform_info.xml
@@ -108,6 +108,7 @@
<usecase name="USECASE_AUDIO_PLAYBACK_MMAP" type="out" id="29" />
<usecase name="USECASE_AUDIO_RECORD_MMAP" type="in" id="29" />
<usecase name="USECASE_AUDIO_A2DP_ABR_FEEDBACK" type="in" id="36" />
+ <usecase name="USECASE_AUDIO_A2DP_ABR_FEEDBACK" type="out" id="36" />
<usecase name="USECASE_INCALL_MUSIC_UPLINK" type="out" id="23" />
</pcm_ids>
<config_params>
diff --git a/configs/kona/audio_platform_info_intcodec.xml b/configs/kona/audio_platform_info_intcodec.xml
index 3f424b2..467aab9 100644
--- a/configs/kona/audio_platform_info_intcodec.xml
+++ b/configs/kona/audio_platform_info_intcodec.xml
@@ -64,6 +64,7 @@
<usecase name="USECASE_AUDIO_PLAYBACK_MMAP" type="out" id="29" />
<usecase name="USECASE_AUDIO_RECORD_MMAP" type="in" id="29" />
<usecase name="USECASE_AUDIO_A2DP_ABR_FEEDBACK" type="in" id="36" />
+ <usecase name="USECASE_AUDIO_A2DP_ABR_FEEDBACK" type="out" id="36" />
<usecase name="USECASE_INCALL_MUSIC_UPLINK" type="out" id="23" />
</pcm_ids>
<config_params>
diff --git a/configs/kona/audio_platform_info_qrd.xml b/configs/kona/audio_platform_info_qrd.xml
index 4851f0d..8b1f0b6 100644
--- a/configs/kona/audio_platform_info_qrd.xml
+++ b/configs/kona/audio_platform_info_qrd.xml
@@ -64,6 +64,7 @@
<usecase name="USECASE_AUDIO_PLAYBACK_MMAP" type="out" id="29" />
<usecase name="USECASE_AUDIO_RECORD_MMAP" type="in" id="29" />
<usecase name="USECASE_AUDIO_A2DP_ABR_FEEDBACK" type="in" id="36" />
+ <usecase name="USECASE_AUDIO_A2DP_ABR_FEEDBACK" type="out" id="36" />
<usecase name="USECASE_INCALL_MUSIC_UPLINK" type="out" id="23" />
</pcm_ids>
<config_params>
diff --git a/configs/kona/kona.mk b/configs/kona/kona.mk
index 9d308c0..f0f175a 100644
--- a/configs/kona/kona.mk
+++ b/configs/kona/kona.mk
@@ -42,7 +42,7 @@
AUDIO_FEATURE_ENABLED_AUDIOSPHERE := true
AUDIO_FEATURE_ENABLED_USB_TUNNEL := true
AUDIO_FEATURE_ENABLED_A2DP_OFFLOAD := true
-AUDIO_FEATURE_ENABLED_3D_AUDIO := false
+AUDIO_FEATURE_ENABLED_3D_AUDIO := true
AUDIO_FEATURE_ENABLED_AHAL_EXT := true
DOLBY_ENABLE := false
endif
diff --git a/configs/kona/mixer_paths.xml b/configs/kona/mixer_paths.xml
index 8ebeed5..3e40870 100644
--- a/configs/kona/mixer_paths.xml
+++ b/configs/kona/mixer_paths.xml
@@ -352,10 +352,10 @@
<ctl name="HPHR Volume" value="20" />
<ctl name="EAR SPKR PA Gain" value="G_DEFAULT" />
- <ctl name="TX_DEC0 Volume" value="84" />
- <ctl name="TX_DEC1 Volume" value="84" />
- <ctl name="TX_DEC2 Volume" value="84" />
- <ctl name="TX_DEC3 Volume" value="84" />
+ <ctl name="TX_DEC0 Volume" value="102" />
+ <ctl name="TX_DEC1 Volume" value="102" />
+ <ctl name="TX_DEC2 Volume" value="102" />
+ <ctl name="TX_DEC3 Volume" value="102" />
<ctl name="TX_DEC4 Volume" value="84" />
<ctl name="TX_DEC5 Volume" value="84" />
<ctl name="TX_DEC6 Volume" value="84" />
@@ -482,6 +482,10 @@
<path name="deep-buffer-playback bt-sco" />
</path>
+ <path name="deep-buffer-playback bt-sco-swb">
+ <path name="deep-buffer-playback bt-sco" />
+ </path>
+
<path name="deep-buffer-playback afe-proxy">
<ctl name="AFE_PCM_RX Audio Mixer MultiMedia1" value="1" />
</path>
@@ -518,6 +522,11 @@
<path name="deep-buffer-playback" />
</path>
+ <path name="deep-buffer-playback speaker-and-bt-sco-swb">
+ <path name="deep-buffer-playback bt-sco-swb" />
+ <path name="deep-buffer-playback" />
+ </path>
+
<path name="low-latency-playback">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia5" value="1" />
</path>
@@ -539,6 +548,10 @@
<path name="low-latency-playback bt-sco" />
</path>
+ <path name="low-latency-playback bt-sco-swb">
+ <path name="low-latency-playback bt-sco" />
+ </path>
+
<path name="low-latency-playback speaker-and-display-port">
<path name="low-latency-playback display-port" />
<path name="low-latency-playback" />
@@ -583,6 +596,11 @@
<path name="low-latency-playback" />
</path>
+ <path name="low-latency-playback speaker-and-bt-sco-swb">
+ <path name="low-latency-playback bt-sco-swb" />
+ <path name="low-latency-playback" />
+ </path>
+
<path name="audio-ull-playback">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia8" value="1" />
</path>
@@ -613,6 +631,10 @@
<path name="audio-ull-playback bt-sco" />
</path>
+ <path name="audio-ull-playback bt-sco-swb">
+ <path name="audio-ull-playback bt-sco" />
+ </path>
+
<path name="audio-ull-playback speaker-and-display-port">
<path name="audio-ull-playback display-port" />
<path name="audio-ull-playback" />
@@ -640,6 +662,11 @@
<path name="audio-ull-playback" />
</path>
+ <path name="audio-ull-playback speaker-and-bt-sco-swb">
+ <path name="audio-ull-playback bt-sco-swb" />
+ <path name="audio-ull-playback" />
+ </path>
+
<path name="multi-channel-playback display-port">
<ctl name="DISPLAY_PORT Mixer MultiMedia2" value="1" />
</path>
@@ -673,6 +700,10 @@
<path name="compress-offload-playback bt-sco" />
</path>
+ <path name="compress-offload-playback bt-sco-swb">
+ <path name="compress-offload-playback bt-sco" />
+ </path>
+
<path name="compress-offload-playback speaker-and-display-port">
<path name="compress-offload-playback display-port" />
<path name="compress-offload-playback" />
@@ -722,6 +753,11 @@
<path name="compress-offload-playback" />
</path>
+ <path name="compress-offload-playback speaker-and-bt-sco-swb">
+ <path name="compress-offload-playback bt-sco-swb" />
+ <path name="compress-offload-playback" />
+ </path>
+
<path name="compress-offload-playback2">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia7" value="1" />
</path>
@@ -739,6 +775,10 @@
<path name="compress-offload-playback2 bt-sco" />
</path>
+ <path name="compress-offload-playback2 bt-sco-swb">
+ <path name="compress-offload-playback2 bt-sco" />
+ </path>
+
<path name="compress-offload-playback2 speaker-and-display-port">
<path name="compress-offload-playback2 display-port" />
<path name="compress-offload-playback2" />
@@ -789,6 +829,11 @@
<path name="compress-offload-playback2" />
</path>
+ <path name="compress-offload-playback2 speaker-and-bt-sco-swb">
+ <path name="compress-offload-playback2 bt-sco-swb" />
+ <path name="compress-offload-playback2" />
+ </path>
+
<path name="compress-offload-playback3">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia10" value="1" />
</path>
@@ -806,6 +851,10 @@
<path name="compress-offload-playback3 bt-sco" />
</path>
+ <path name="compress-offload-playback3 bt-sco-swb">
+ <path name="compress-offload-playback3 bt-sco" />
+ </path>
+
<path name="compress-offload-playback3 speaker-and-display-port">
<path name="compress-offload-playback3 display-port" />
<path name="compress-offload-playback3" />
@@ -855,6 +904,11 @@
<path name="compress-offload-playback3" />
</path>
+ <path name="compress-offload-playback3 speaker-and-bt-sco-swb">
+ <path name="compress-offload-playback3 bt-sco-swb" />
+ <path name="compress-offload-playback3" />
+ </path>
+
<path name="compress-offload-playback4">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia11" value="1" />
</path>
@@ -872,6 +926,10 @@
<path name="compress-offload-playback4 bt-sco" />
</path>
+ <path name="compress-offload-playback4 bt-sco-swb">
+ <path name="compress-offload-playback4 bt-sco" />
+ </path>
+
<path name="compress-offload-playback4 speaker-and-display-port">
<path name="compress-offload-playback4 display-port" />
<path name="compress-offload-playback4" />
@@ -922,6 +980,11 @@
<path name="compress-offload-playback4" />
</path>
+ <path name="compress-offload-playback4 speaker-and-bt-sco-swb">
+ <path name="compress-offload-playback4 bt-sco-swb" />
+ <path name="compress-offload-playback4" />
+ </path>
+
<path name="compress-offload-playback5">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia12" value="1" />
</path>
@@ -939,6 +1002,10 @@
<path name="compress-offload-playback5 bt-sco" />
</path>
+ <path name="compress-offload-playback5 bt-sco-swb">
+ <path name="compress-offload-playback5 bt-sco" />
+ </path>
+
<path name="compress-offload-playback5 speaker-and-display-port">
<path name="compress-offload-playback5 display-port" />
<path name="compress-offload-playback5" />
@@ -988,6 +1055,11 @@
<path name="compress-offload-playback5" />
</path>
+ <path name="compress-offload-playback5 speaker-and-bt-sco-swb">
+ <path name="compress-offload-playback5 bt-sco-swb" />
+ <path name="compress-offload-playback5" />
+ </path>
+
<path name="compress-offload-playback6">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia13" value="1" />
</path>
@@ -1005,6 +1077,10 @@
<path name="compress-offload-playback6 bt-sco" />
</path>
+ <path name="compress-offload-playback6 bt-sco-swb">
+ <path name="compress-offload-playback6 bt-sco" />
+ </path>
+
<path name="compress-offload-playback6 speaker-and-display-port">
<path name="compress-offload-playback6 display-port" />
<path name="compress-offload-playback6" />
@@ -1054,6 +1130,11 @@
<path name="compress-offload-playback6" />
</path>
+ <path name="compress-offload-playback6 speaker-and-bt-sco-swb">
+ <path name="compress-offload-playback6 bt-sco-swb" />
+ <path name="compress-offload-playback6" />
+ </path>
+
<path name="compress-offload-playback7">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia14" value="1" />
</path>
@@ -1071,6 +1152,10 @@
<path name="compress-offload-playback7 bt-sco" />
</path>
+ <path name="compress-offload-playback7 bt-sco-swb">
+ <path name="compress-offload-playback7 bt-sco" />
+ </path>
+
<path name="compress-offload-playback7 speaker-and-display-port">
<path name="compress-offload-playback7 display-port" />
<path name="compress-offload-playback7" />
@@ -1120,6 +1205,11 @@
<path name="compress-offload-playback7" />
</path>
+ <path name="compress-offload-playback7 speaker-and-bt-sco-swb">
+ <path name="compress-offload-playback7 bt-sco-swb" />
+ <path name="compress-offload-playback7" />
+ </path>
+
<path name="compress-offload-playback8">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia15" value="1" />
</path>
@@ -1137,6 +1227,10 @@
<path name="compress-offload-playback8 bt-sco" />
</path>
+ <path name="compress-offload-playback8 bt-sco-swb">
+ <path name="compress-offload-playback8 bt-sco" />
+ </path>
+
<path name="compress-offload-playback8 speaker-and-display-port">
<path name="compress-offload-playback8 display-port" />
<path name="compress-offload-playback8" />
@@ -1186,6 +1280,11 @@
<path name="compress-offload-playback8" />
</path>
+ <path name="compress-offload-playback8 speaker-and-bt-sco-swb">
+ <path name="compress-offload-playback8 bt-sco-swb" />
+ <path name="compress-offload-playback8" />
+ </path>
+
<path name="compress-offload-playback9">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia16" value="1" />
</path>
@@ -1203,6 +1302,10 @@
<path name="compress-offload-playback9 bt-sco" />
</path>
+ <path name="compress-offload-playback9 bt-sco-swb">
+ <path name="compress-offload-playback9 bt-sco" />
+ </path>
+
<path name="compress-offload-playback9 speaker-and-display-port">
<path name="compress-offload-playback9 display-port" />
<path name="compress-offload-playback9" />
@@ -1252,6 +1355,11 @@
<path name="compress-offload-playback9" />
</path>
+ <path name="compress-offload-playback9 speaker-and-bt-sco-swb">
+ <path name="compress-offload-playback9 bt-sco-swb" />
+ <path name="compress-offload-playback9" />
+ </path>
+
<path name="audio-record">
<ctl name="MultiMedia1 Mixer TX_CDC_DMA_TX_3" value="1" />
</path>
@@ -1269,6 +1377,10 @@
<path name="audio-record bt-sco" />
</path>
+ <path name="audio-record bt-sco-swb">
+ <path name="audio-record bt-sco" />
+ </path>
+
<path name="audio-record capture-fm">
<ctl name="MultiMedia1 Mixer TERT_MI2S_TX" value="1" />
</path>
@@ -1286,6 +1398,10 @@
<path name="audio-record-compress bt-sco" />
</path>
+ <path name="audio-record-compress bt-sco-swb">
+ <path name="audio-record-compress bt-sco" />
+ </path>
+
<path name="audio-record-compress usb-headset-mic">
<ctl name="MultiMedia8 Mixer USB_AUDIO_TX" value="1" />
</path>
@@ -1303,6 +1419,10 @@
<path name="low-latency-record bt-sco" />
</path>
+ <path name="low-latency-record bt-sco-swb">
+ <path name="low-latency-record bt-sco" />
+ </path>
+
<path name="low-latency-record usb-headset-mic">
<ctl name="MultiMedia8 Mixer USB_AUDIO_TX" value="1" />
</path>
@@ -1339,6 +1459,10 @@
<path name="incall-rec-uplink" />
</path>
+ <path name="incall-rec-uplink bt-sco-swb">
+ <path name="incall-rec-uplink" />
+ </path>
+
<path name="incall-rec-uplink usb-headset-mic">
<path name="incall-rec-uplink" />
</path>
@@ -1359,6 +1483,10 @@
<path name="incall-rec-uplink-compress" />
</path>
+ <path name="incall-rec-uplink-compress bt-sco-swb">
+ <path name="incall-rec-uplink-compress" />
+ </path>
+
<path name="incall-rec-uplink-compress usb-headset-mic">
<path name="incall-rec-uplink-compress" />
</path>
@@ -1379,6 +1507,10 @@
<path name="incall-rec-downlink" />
</path>
+ <path name="incall-rec-downlink bt-sco-swb">
+ <path name="incall-rec-downlink" />
+ </path>
+
<path name="incall-rec-downlink usb-headset-mic">
<path name="incall-rec-downlink" />
</path>
@@ -1399,6 +1531,10 @@
<path name="incall-rec-downlink-compress" />
</path>
+ <path name="incall-rec-downlink-compress bt-sco-swb">
+ <path name="incall-rec-downlink-compress" />
+ </path>
+
<path name="incall-rec-downlink-compress usb-headset-mic">
<path name="incall-rec-downlink-compress" />
</path>
@@ -1420,6 +1556,10 @@
<path name="incall-rec-uplink-and-downlink" />
</path>
+ <path name="incall-rec-uplink-and-downlink bt-sco-swb">
+ <path name="incall-rec-uplink-and-downlink" />
+ </path>
+
<path name="incall-rec-uplink-and-downlink usb-headset-mic">
<path name="incall-rec-uplink-and-downlink" />
</path>
@@ -1441,6 +1581,10 @@
<path name="incall-rec-uplink-and-downlink-compress" />
</path>
+ <path name="incall-rec-uplink-and-downlink-compress bt-sco-swb">
+ <path name="incall-rec-uplink-and-downlink-compress" />
+ </path>
+
<path name="incall-rec-uplink-and-downlink-compress usb-headset-mic">
<path name="incall-rec-uplink-and-downlink-compress" />
</path>
@@ -1489,6 +1633,10 @@
<path name="compress-voip-call bt-sco" />
</path>
+ <path name="compress-voip-call bt-sco-swb">
+ <path name="compress-voip-call bt-sco" />
+ </path>
+
<path name="compress-voip-call afe-proxy">
<ctl name="AFE_PCM_RX_Voice Mixer Voip" value="1" />
<ctl name="Voip_Tx Mixer AFE_PCM_TX_Voip" value="1" />
@@ -1524,6 +1672,10 @@
<path name="voicemmode1-call bt-sco" />
</path>
+ <path name="voicemmode1-call bt-sco-swb">
+ <path name="voicemmode1-call bt-sco" />
+ </path>
+
<path name="voicemmode1-call afe-proxy">
<ctl name="AFE_PCM_RX_Voice Mixer VoiceMMode1" value="1" />
<ctl name="VoiceMMode1_Tx Mixer AFE_PCM_TX_MMode1" value="1" />
@@ -1569,6 +1721,10 @@
<path name="voicemmode2-call bt-sco" />
</path>
+ <path name="voicemmode2-call bt-sco-swb">
+ <path name="voicemmode2-call bt-sco" />
+ </path>
+
<path name="voicemmode2-call afe-proxy">
<ctl name="AFE_PCM_RX_Voice Mixer VoiceMMode2" value="1" />
<ctl name="VoiceMMode2_Tx Mixer AFE_PCM_TX_MMode2" value="1" />
@@ -1612,6 +1768,10 @@
<path name="audio-playback-voip bt-sco" />
</path>
+ <path name="audio-playback-voip bt-sco-swb">
+ <path name="audio-playback-voip bt-sco" />
+ </path>
+
<path name="audio-playback-voip bt-a2dp">
<ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia10" value="1" />
</path>
@@ -1655,6 +1815,10 @@
<path name="audio-record-voip bt-sco" />
</path>
+ <path name="audio-record-voip bt-sco-swb">
+ <path name="audio-record-voip bt-sco" />
+ </path>
+
<path name="spkr-rx-calib">
<ctl name="WSA_CDC_DMA_RX_0_DL_HL Switch" value="1" />
</path>
@@ -1852,7 +2016,7 @@
</path>
<path name="handset-mic">
- <path name="dmic1" />
+ <path name="dmic2" />
</path>
<path name="headphones">
@@ -1892,6 +2056,7 @@
<path name="headset-mic">
<path name="amic2" />
+ <ctl name="TX_DEC0 Volume" value="84" />
</path>
<path name="headset-mic-liquid">
@@ -2016,6 +2181,12 @@
<path name="bt-sco-mic-wb">
</path>
+ <path name="bt-sco-headset-swb">
+ </path>
+
+ <path name="bt-sco-mic-swb">
+ </path>
+
<path name="usb-headset-mic">
</path>
@@ -2026,17 +2197,17 @@
<path name="handset-dmic-endfire">
<ctl name="TX_CDC_DMA_TX_3 Channels" value="Two" />
<ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
- <ctl name="TX DMIC MUX0" value="DMIC0" />
+ <ctl name="TX DMIC MUX0" value="DMIC1" />
<ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
- <ctl name="TX DMIC MUX1" value="DMIC2" />
+ <ctl name="TX DMIC MUX1" value="DMIC3" />
</path>
<path name="speaker-dmic-endfire">
<ctl name="TX_CDC_DMA_TX_3 Channels" value="Two" />
<ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
- <ctl name="TX DMIC MUX0" value="DMIC0" />
+ <ctl name="TX DMIC MUX0" value="DMIC4" />
<ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
- <ctl name="TX DMIC MUX1" value="DMIC4" />
+ <ctl name="TX DMIC MUX1" value="DMIC1" />
</path>
<path name="dmic-endfire">
@@ -2103,9 +2274,9 @@
<path name="speaker-dmic-broadside">
<ctl name="TX_CDC_DMA_TX_3 Channels" value="Two" />
<ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
- <ctl name="TX DMIC MUX0" value="DMIC0" />
+ <ctl name="TX DMIC MUX0" value="DMIC4" />
<ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
- <ctl name="TX DMIC MUX1" value="DMIC4" />
+ <ctl name="TX DMIC MUX1" value="DMIC1" />
</path>
<path name="dmic-broadside">
@@ -2131,9 +2302,9 @@
<path name="speaker-tmic">
<ctl name="TX_CDC_DMA_TX_3 Channels" value="Three" />
<ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
- <ctl name="TX DMIC MUX0" value="DMIC0" />
+ <ctl name="TX DMIC MUX0" value="DMIC4" />
<ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
- <ctl name="TX DMIC MUX1" value="DMIC2" />
+ <ctl name="TX DMIC MUX1" value="DMIC1" />
<ctl name="TX_AIF1_CAP Mixer DEC2" value="1" />
<ctl name="TX DMIC MUX2" value="DMIC3" />
</path>
@@ -2146,13 +2317,13 @@
<path name="speaker-qmic">
<ctl name="TX_CDC_DMA_TX_3 Channels" value="Four" />
<ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
- <ctl name="TX DMIC MUX0" value="DMIC0" />
+ <ctl name="TX DMIC MUX0" value="DMIC4" />
<ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
<ctl name="TX DMIC MUX1" value="DMIC1" />
<ctl name="TX_AIF1_CAP Mixer DEC2" value="1" />
- <ctl name="TX DMIC MUX2" value="DMIC2" />
+ <ctl name="TX DMIC MUX2" value="DMIC3" />
<ctl name="TX_AIF1_CAP Mixer DEC3" value="1" />
- <ctl name="TX DMIC MUX3" value="DMIC4" />
+ <ctl name="TX DMIC MUX3" value="DMIC0" />
</path>
<path name="speaker-qmic-liquid">
@@ -2209,6 +2380,7 @@
<path name="voice-tty-full-headset-mic">
<path name="amic2" />
<ctl name="ADC2 Volume" value="0" />
+ <ctl name="TX_DEC0 Volume" value="84" />
</path>
<path name="voice-tty-hco-headset-mic">
@@ -2412,6 +2584,10 @@
<path name="mmap-playback bt-sco" />
</path>
+ <path name="mmap-playback bt-sco-swb">
+ <path name="mmap-playback bt-sco" />
+ </path>
+
<path name="mmap-playback afe-proxy">
<ctl name="AFE_PCM_RX Audio Mixer MultiMedia16" value="1" />
</path>
@@ -2460,6 +2636,10 @@
<path name="mmap-record bt-sco" />
</path>
+ <path name="mmap-record bt-sco-swb">
+ <path name="mmap-record bt-sco" />
+ </path>
+
<path name="mmap-record capture-fm">
<ctl name="MultiMedia16 Mixer TERT_MI2S_TX" value="1" />
</path>
@@ -2520,6 +2700,10 @@
<path name="incall_music_uplink" />
</path>
+ <path name="incall_music_uplink bt-sco-swb">
+ <path name="incall_music_uplink" />
+ </path>
+
<path name="incall_music_uplink speaker-and-display-port">
<path name="incall_music_uplink" />
</path>
diff --git a/configs/kona/mixer_paths_qrd.xml b/configs/kona/mixer_paths_qrd.xml
index 8570ac9..70f047d 100644
--- a/configs/kona/mixer_paths_qrd.xml
+++ b/configs/kona/mixer_paths_qrd.xml
@@ -490,6 +490,10 @@
<path name="deep-buffer-playback bt-sco" />
</path>
+ <path name="deep-buffer-playback bt-sco-swb">
+ <path name="deep-buffer-playback bt-sco" />
+ </path>
+
<path name="deep-buffer-playback afe-proxy">
<ctl name="AFE_PCM_RX Audio Mixer MultiMedia1" value="1" />
</path>
@@ -526,6 +530,11 @@
<path name="deep-buffer-playback" />
</path>
+ <path name="deep-buffer-playback speaker-and-bt-sco-swb">
+ <path name="deep-buffer-playback bt-sco-swb" />
+ <path name="deep-buffer-playback" />
+ </path>
+
<path name="low-latency-playback">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia5" value="1" />
</path>
@@ -551,6 +560,10 @@
<path name="low-latency-playback bt-sco" />
</path>
+ <path name="low-latency-playback bt-sco-swb">
+ <path name="low-latency-playback bt-sco" />
+ </path>
+
<path name="low-latency-playback speaker-and-display-port">
<path name="low-latency-playback display-port" />
<path name="low-latency-playback" />
@@ -592,6 +605,11 @@
<path name="low-latency-playback" />
</path>
+ <path name="low-latency-playback speaker-and-bt-sco-swb">
+ <path name="low-latency-playback bt-sco-swb" />
+ <path name="low-latency-playback" />
+ </path>
+
<path name="audio-ull-playback">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia8" value="1" />
</path>
@@ -626,6 +644,10 @@
<path name="audio-ull-playback bt-sco" />
</path>
+ <path name="audio-ull-playback bt-sco-swb">
+ <path name="audio-ull-playback bt-sco" />
+ </path>
+
<path name="audio-ull-playback speaker-and-display-port">
<path name="audio-ull-playback display-port" />
<path name="audio-ull-playback" />
@@ -653,6 +675,11 @@
<path name="audio-ull-playback" />
</path>
+ <path name="audio-ull-playback speaker-and-bt-sco-swb">
+ <path name="audio-ull-playback bt-sco-swb" />
+ <path name="audio-ull-playback" />
+ </path>
+
<path name="multi-channel-playback display-port">
<ctl name="DISPLAY_PORT Mixer MultiMedia2" value="1" />
</path>
@@ -690,6 +717,10 @@
<path name="compress-offload-playback bt-sco" />
</path>
+ <path name="compress-offload-playback bt-sco-swb">
+ <path name="compress-offload-playback bt-sco" />
+ </path>
+
<path name="compress-offload-playback speaker-and-display-port">
<path name="compress-offload-playback display-port" />
<path name="compress-offload-playback" />
@@ -735,6 +766,11 @@
<path name="compress-offload-playback" />
</path>
+ <path name="compress-offload-playback speaker-and-bt-sco-swb">
+ <path name="compress-offload-playback bt-sco-swb" />
+ <path name="compress-offload-playback" />
+ </path>
+
<path name="compress-offload-playback2">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia7" value="1" />
</path>
@@ -756,6 +792,10 @@
<path name="compress-offload-playback2 bt-sco" />
</path>
+ <path name="compress-offload-playback2 bt-sco-swb">
+ <path name="compress-offload-playback2 bt-sco" />
+ </path>
+
<path name="compress-offload-playback2 speaker-and-display-port">
<path name="compress-offload-playback2 display-port" />
<path name="compress-offload-playback2" />
@@ -801,6 +841,11 @@
<path name="compress-offload-playback2" />
</path>
+ <path name="compress-offload-playback2 speaker-and-bt-sco-swb">
+ <path name="compress-offload-playback2 bt-sco-swb" />
+ <path name="compress-offload-playback2" />
+ </path>
+
<path name="compress-offload-playback3">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia10" value="1" />
</path>
@@ -822,6 +867,10 @@
<path name="compress-offload-playback3 bt-sco" />
</path>
+ <path name="compress-offload-playback3 bt-sco-swb">
+ <path name="compress-offload-playback3 bt-sco" />
+ </path>
+
<path name="compress-offload-playback3 speaker-and-display-port">
<path name="compress-offload-playback3 display-port" />
<path name="compress-offload-playback3" />
@@ -867,6 +916,11 @@
<path name="compress-offload-playback3" />
</path>
+ <path name="compress-offload-playback3 speaker-and-bt-sco-swb">
+ <path name="compress-offload-playback3 bt-sco-swb" />
+ <path name="compress-offload-playback3" />
+ </path>
+
<path name="compress-offload-playback4">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia11" value="1" />
</path>
@@ -888,6 +942,10 @@
<path name="compress-offload-playback4 bt-sco" />
</path>
+ <path name="compress-offload-playback4 bt-sco-swb">
+ <path name="compress-offload-playback4 bt-sco" />
+ </path>
+
<path name="compress-offload-playback4 speaker-and-display-port">
<path name="compress-offload-playback4 display-port" />
<path name="compress-offload-playback4" />
@@ -934,6 +992,11 @@
<path name="compress-offload-playback4" />
</path>
+ <path name="compress-offload-playback4 speaker-and-bt-sco-swb">
+ <path name="compress-offload-playback4 bt-sco-swb" />
+ <path name="compress-offload-playback4" />
+ </path>
+
<path name="compress-offload-playback5">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia12" value="1" />
</path>
@@ -955,6 +1018,10 @@
<path name="compress-offload-playback5 bt-sco" />
</path>
+ <path name="compress-offload-playback5 bt-sco-swb">
+ <path name="compress-offload-playback5 bt-sco" />
+ </path>
+
<path name="compress-offload-playback5 speaker-and-display-port">
<path name="compress-offload-playback5 display-port" />
<path name="compress-offload-playback5" />
@@ -1000,6 +1067,11 @@
<path name="compress-offload-playback5" />
</path>
+ <path name="compress-offload-playback5 speaker-and-bt-sco-swb">
+ <path name="compress-offload-playback5 bt-sco-swb" />
+ <path name="compress-offload-playback5" />
+ </path>
+
<path name="compress-offload-playback6">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia13" value="1" />
</path>
@@ -1021,6 +1093,10 @@
<path name="compress-offload-playback6 bt-sco" />
</path>
+ <path name="compress-offload-playback6 bt-sco-swb">
+ <path name="compress-offload-playback6 bt-sco" />
+ </path>
+
<path name="compress-offload-playback6 speaker-and-display-port">
<path name="compress-offload-playback6 display-port" />
<path name="compress-offload-playback6" />
@@ -1066,6 +1142,11 @@
<path name="compress-offload-playback6" />
</path>
+ <path name="compress-offload-playback6 speaker-and-bt-sco-swb">
+ <path name="compress-offload-playback6 bt-sco-swb" />
+ <path name="compress-offload-playback6" />
+ </path>
+
<path name="compress-offload-playback7">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia14" value="1" />
</path>
@@ -1087,6 +1168,10 @@
<path name="compress-offload-playback7 bt-sco" />
</path>
+ <path name="compress-offload-playback7 bt-sco-swb">
+ <path name="compress-offload-playback7 bt-sco" />
+ </path>
+
<path name="compress-offload-playback7 speaker-and-display-port">
<path name="compress-offload-playback7 display-port" />
<path name="compress-offload-playback7" />
@@ -1132,6 +1217,11 @@
<path name="compress-offload-playback7" />
</path>
+ <path name="compress-offload-playback7 speaker-and-bt-sco-swb">
+ <path name="compress-offload-playback7 bt-sco-swb" />
+ <path name="compress-offload-playback7" />
+ </path>
+
<path name="compress-offload-playback8">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia15" value="1" />
</path>
@@ -1153,6 +1243,10 @@
<path name="compress-offload-playback8 bt-sco" />
</path>
+ <path name="compress-offload-playback8 bt-sco-swb">
+ <path name="compress-offload-playback8 bt-sco" />
+ </path>
+
<path name="compress-offload-playback8 speaker-and-display-port">
<path name="compress-offload-playback8 display-port" />
<path name="compress-offload-playback8" />
@@ -1198,6 +1292,11 @@
<path name="compress-offload-playback8" />
</path>
+ <path name="compress-offload-playback8 speaker-and-bt-sco-swb">
+ <path name="compress-offload-playback8 bt-sco-swb" />
+ <path name="compress-offload-playback8" />
+ </path>
+
<path name="compress-offload-playback9">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia16" value="1" />
</path>
@@ -1219,6 +1318,10 @@
<path name="compress-offload-playback9 bt-sco" />
</path>
+ <path name="compress-offload-playback9 bt-sco-swb">
+ <path name="compress-offload-playback9 bt-sco" />
+ </path>
+
<path name="compress-offload-playback9 speaker-and-display-port">
<path name="compress-offload-playback9 display-port" />
<path name="compress-offload-playback9" />
@@ -1264,6 +1367,11 @@
<path name="compress-offload-playback9" />
</path>
+ <path name="compress-offload-playback9 speaker-and-bt-sco-swb">
+ <path name="compress-offload-playback9 bt-sco-swb" />
+ <path name="compress-offload-playback9" />
+ </path>
+
<path name="audio-record">
<ctl name="MultiMedia1 Mixer TX_CDC_DMA_TX_3" value="1" />
</path>
@@ -1281,6 +1389,10 @@
<path name="audio-record bt-sco" />
</path>
+ <path name="audio-record bt-sco-swb">
+ <path name="audio-record bt-sco" />
+ </path>
+
<path name="audio-record capture-fm">
<ctl name="MultiMedia1 Mixer TERT_MI2S_TX" value="1" />
</path>
@@ -1298,6 +1410,10 @@
<path name="audio-record-compress bt-sco" />
</path>
+ <path name="audio-record-compress bt-sco-swb">
+ <path name="audio-record-compress bt-sco" />
+ </path>
+
<path name="audio-record-compress usb-headset-mic">
<ctl name="MultiMedia8 Mixer USB_AUDIO_TX" value="1" />
</path>
@@ -1315,6 +1431,10 @@
<path name="low-latency-record bt-sco" />
</path>
+ <path name="low-latency-record bt-sco-swb">
+ <path name="low-latency-record bt-sco" />
+ </path>
+
<path name="low-latency-record usb-headset-mic">
<ctl name="MultiMedia8 Mixer USB_AUDIO_TX" value="1" />
</path>
@@ -1351,6 +1471,10 @@
<path name="incall-rec-uplink" />
</path>
+ <path name="incall-rec-uplink bt-sco-swb">
+ <path name="incall-rec-uplink" />
+ </path>
+
<path name="incall-rec-uplink usb-headset-mic">
<path name="incall-rec-uplink" />
</path>
@@ -1371,6 +1495,10 @@
<path name="incall-rec-uplink-compress" />
</path>
+ <path name="incall-rec-uplink-compress bt-sco-swb">
+ <path name="incall-rec-uplink-compress" />
+ </path>
+
<path name="incall-rec-uplink-compress usb-headset-mic">
<path name="incall-rec-uplink-compress" />
</path>
@@ -1391,6 +1519,10 @@
<path name="incall-rec-downlink" />
</path>
+ <path name="incall-rec-downlink bt-sco-swb">
+ <path name="incall-rec-downlink" />
+ </path>
+
<path name="incall-rec-downlink usb-headset-mic">
<path name="incall-rec-downlink" />
</path>
@@ -1411,6 +1543,10 @@
<path name="incall-rec-downlink-compress" />
</path>
+ <path name="incall-rec-downlink-compress bt-sco-swb">
+ <path name="incall-rec-downlink-compress" />
+ </path>
+
<path name="incall-rec-downlink-compress usb-headset-mic">
<path name="incall-rec-downlink-compress" />
</path>
@@ -1432,6 +1568,10 @@
<path name="incall-rec-uplink-and-downlink" />
</path>
+ <path name="incall-rec-uplink-and-downlink bt-sco-swb">
+ <path name="incall-rec-uplink-and-downlink" />
+ </path>
+
<path name="incall-rec-uplink-and-downlink usb-headset-mic">
<path name="incall-rec-uplink-and-downlink" />
</path>
@@ -1453,6 +1593,10 @@
<path name="incall-rec-uplink-and-downlink-compress" />
</path>
+ <path name="incall-rec-uplink-and-downlink-compress bt-sco-swb">
+ <path name="incall-rec-uplink-and-downlink-compress" />
+ </path>
+
<path name="incall-rec-uplink-and-downlink-compress usb-headset-mic">
<path name="incall-rec-uplink-and-downlink-compress" />
</path>
@@ -1505,6 +1649,10 @@
<path name="compress-voip-call bt-sco" />
</path>
+ <path name="compress-voip-call bt-sco-swb">
+ <path name="compress-voip-call bt-sco" />
+ </path>
+
<path name="compress-voip-call afe-proxy">
<ctl name="AFE_PCM_RX_Voice Mixer Voip" value="1" />
<ctl name="Voip_Tx Mixer AFE_PCM_TX_Voip" value="1" />
@@ -1545,6 +1693,10 @@
<path name="voicemmode1-call bt-sco" />
</path>
+ <path name="voicemmode1-call bt-sco-swb">
+ <path name="voicemmode1-call bt-sco" />
+ </path>
+
<path name="voicemmode1-call afe-proxy">
<ctl name="AFE_PCM_RX_Voice Mixer VoiceMMode1" value="1" />
<ctl name="VoiceMMode1_Tx Mixer AFE_PCM_TX_MMode1" value="1" />
@@ -1595,6 +1747,10 @@
<path name="voicemmode2-call bt-sco" />
</path>
+ <path name="voicemmode2-call bt-sco-swb">
+ <path name="voicemmode2-call bt-sco" />
+ </path>
+
<path name="voicemmode2-call afe-proxy">
<ctl name="AFE_PCM_RX_Voice Mixer VoiceMMode2" value="1" />
<ctl name="VoiceMMode2_Tx Mixer AFE_PCM_TX_MMode2" value="1" />
@@ -1642,6 +1798,10 @@
<path name="audio-playback-voip bt-sco" />
</path>
+ <path name="audio-playback-voip bt-sco-swb">
+ <path name="audio-playback-voip bt-sco" />
+ </path>
+
<path name="audio-playback-voip afe-proxy">
<ctl name="AFE_PCM_RX Audio Mixer MultiMedia10" value="1" />
</path>
@@ -1681,6 +1841,10 @@
<path name="audio-record-voip bt-sco" />
</path>
+ <path name="audio-record-voip bt-sco-swb">
+ <path name="audio-record-voip bt-sco" />
+ </path>
+
<path name="bt-a2dp">
<ctl name="SLIM7_RX ADM Channels" value="Two" />
</path>
@@ -1824,6 +1988,10 @@
<path name="mmap-playback bt-sco" />
</path>
+ <path name="mmap-playback bt-sco-swb">
+ <path name="mmap-playback bt-sco" />
+ </path>
+
<path name="mmap-playback afe-proxy">
<ctl name="AFE_PCM_RX Audio Mixer MultiMedia16" value="1" />
</path>
@@ -1872,6 +2040,10 @@
<path name="mmap-record bt-sco" />
</path>
+ <path name="mmap-record bt-sco-swb">
+ <path name="mmap-record bt-sco" />
+ </path>
+
<path name="mmap-record capture-fm">
<ctl name="MultiMedia16 Mixer TERT_MI2S_TX" value="1" />
</path>
@@ -1928,6 +2100,10 @@
<path name="incall_music_uplink" />
</path>
+ <path name="incall_music_uplink bt-sco-swb">
+ <path name="incall_music_uplink" />
+ </path>
+
<path name="incall_music_uplink speaker-and-display-port">
<path name="incall_music_uplink" />
</path>
@@ -2100,7 +2276,7 @@
</path>
<path name="speaker-mic">
- <path name="dmic2" />
+ <path name="dmic3" />
</path>
<path name="speaker-protected">
@@ -2280,6 +2456,12 @@
<path name="bt-sco-mic-wb">
</path>
+ <path name="bt-sco-mic-swb">
+ </path>
+
+ <path name="bt-sco-headset-swb">
+ </path>
+
<path name="usb-headset-mic">
</path>
@@ -2296,7 +2478,11 @@
</path>
<path name="speaker-dmic-endfire">
- <path name="handset-dmic-endfire" />
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="Two" />
+ <ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="TX DMIC MUX0" value="DMIC2" />
+ <ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
+ <ctl name="TX DMIC MUX0" value="DMIC1" />
</path>
<path name="dmic-endfire">
@@ -2395,6 +2581,36 @@
<path name="three-mic" />
</path>
+ <path name="speaker-tmic">
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="Three" />
+ <ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="TX DMIC MUX0" value="DMIC2" />
+ <ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
+ <ctl name="TX DMIC MUX1" value="DMIC1" />
+ <ctl name="TX_AIF1_CAP Mixer DEC2" value="1" />
+ <ctl name="TX DMIC MUX2" value="DMIC3" />
+ </path>
+
+ <path name="voice-speaker-tmic">
+ <path name="speaker-tmic" />
+ </path>
+
+ <path name="speaker-qmic">
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="Four" />
+ <ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="TX DMIC MUX0" value="DMIC2" />
+ <ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
+ <ctl name="TX DMIC MUX1" value="DMIC1" />
+ <ctl name="TX_AIF1_CAP Mixer DEC2" value="1" />
+ <ctl name="TX DMIC MUX2" value="DMIC3" />
+ <ctl name="TX_AIF1_CAP Mixer DEC4" value="1" />
+ <ctl name="TX DMIC MUX2" value="DMIC3" />
+ </path>
+
+ <path name="voice-speaker-qmic">
+ <path name="speaker-qmic" />
+ </path>
+
<path name="unprocessed-quad-mic">
<path name="quad-mic" />
</path>
diff --git a/configs/kona/sound_trigger_mixer_paths.xml b/configs/kona/sound_trigger_mixer_paths.xml
index 2b407bb..8cb6622 100644
--- a/configs/kona/sound_trigger_mixer_paths.xml
+++ b/configs/kona/sound_trigger_mixer_paths.xml
@@ -213,7 +213,7 @@
<path name="listen-ape-handset-mic">
<ctl name="VA_AIF1_CAP Mixer DEC0" value="1" />
<ctl name="VA DEC0 MUX" value="MSM_DMIC" />
- <ctl name="VA DMIC MUX0" value="DMIC0" />
+ <ctl name="VA DMIC MUX0" value="DMIC4" />
</path>
<path name="listen-ape-handset-mic-preproc">
@@ -226,8 +226,8 @@
<ctl name="VA_AIF1_CAP Mixer DEC1" value="1" />
<ctl name="VA DEC0 MUX" value="MSM_DMIC" />
<ctl name="VA DEC1 MUX" value="MSM_DMIC" />
- <ctl name="VA DMIC MUX0" value="DMIC0" />
- <ctl name="VA DMIC MUX1" value="DMIC1" />
+ <ctl name="VA DMIC MUX0" value="DMIC4" />
+ <ctl name="VA DMIC MUX1" value="DMIC0" />
</path>
<path name="listen-ape-handset-tmic">
@@ -238,9 +238,9 @@
<ctl name="VA DEC0 MUX" value="MSM_DMIC" />
<ctl name="VA DEC1 MUX" value="MSM_DMIC" />
<ctl name="VA DEC2 MUX" value="MSM_DMIC" />
- <ctl name="VA DMIC MUX0" value="DMIC0" />
- <ctl name="VA DMIC MUX1" value="DMIC1" />
- <ctl name="VA DMIC MUX2" value="DMIC4" />
+ <ctl name="VA DMIC MUX0" value="DMIC4" />
+ <ctl name="VA DMIC MUX1" value="DMIC0" />
+ <ctl name="VA DMIC MUX2" value="DMIC1" />
</path>
<path name="listen-ape-handset-qmic">
@@ -253,10 +253,10 @@
<ctl name="VA DEC1 MUX" value="MSM_DMIC" />
<ctl name="VA DEC2 MUX" value="MSM_DMIC" />
<ctl name="VA DEC3 MUX" value="MSM_DMIC" />
- <ctl name="VA DMIC MUX0" value="DMIC0" />
- <ctl name="VA DMIC MUX1" value="DMIC1" />
- <ctl name="VA DMIC MUX2" value="DMIC2" />
- <ctl name="VA DMIC MUX3" value="DMIC4" />
+ <ctl name="VA DMIC MUX0" value="DMIC4" />
+ <ctl name="VA DMIC MUX1" value="DMIC0" />
+ <ctl name="VA DMIC MUX2" value="DMIC1" />
+ <ctl name="VA DMIC MUX3" value="DMIC2" />
</path>
<path name="listen-ape-headset-mic">
diff --git a/configs/msm8937/audio_configs.xml b/configs/msm8937/audio_configs.xml
index e221be7..ed3ed8d 100644
--- a/configs/msm8937/audio_configs.xml
+++ b/configs/msm8937/audio_configs.xml
@@ -92,6 +92,7 @@
<flag name="incall_music_enabled" value="false" />
<flag name="keep_alive_enabled" value="false" />
<flag name="kpi_optimize_enabled" value="true" />
+ <flag name="maxx_audio_enabled" value="false" />
<flag name="receiver_aided_stereo" value="false" />
<flag name="snd_monitor_enabled" value="true" />
<flag name="source_track_enabled" value="true" />
diff --git a/configs/msmnile/audio_configs.xml b/configs/msmnile/audio_configs.xml
index fa07ca2..8c24bb2 100644
--- a/configs/msmnile/audio_configs.xml
+++ b/configs/msmnile/audio_configs.xml
@@ -92,6 +92,7 @@
<flag name="incall_music_enabled" value="true" />
<flag name="keep_alive_enabled" value="true" />
<flag name="kpi_optimize_enabled" value="true" />
+ <flag name="maxx_audio_enabled" value="false" />
<flag name="receiver_aided_stereo" value="true" />
<flag name="snd_monitor_enabled" value="true" />
<flag name="source_track_enabled" value="true" />
diff --git a/configs/msmnile/audio_configs_stock.xml b/configs/msmnile/audio_configs_stock.xml
index b9ecf45..6414675 100644
--- a/configs/msmnile/audio_configs_stock.xml
+++ b/configs/msmnile/audio_configs_stock.xml
@@ -57,6 +57,7 @@
<flag name="incall_music_enabled" value="true" />
<flag name="keep_alive_enabled" value="false" />
<flag name="kpi_optimize_enabled" value="false" />
+ <flag name="maxx_audio_enabled" value="true" />
<flag name="receiver_aided_stereo" value="false" />
<flag name="record_play_concurrency" value="false" />
<flag name="snd_monitor_enabled" value="true" />
diff --git a/configs/msmnile/msmnile.mk b/configs/msmnile/msmnile.mk
index 45a09b9..efb3c46 100644
--- a/configs/msmnile/msmnile.mk
+++ b/configs/msmnile/msmnile.mk
@@ -12,7 +12,6 @@
TARGET_USES_AOSP_FOR_AUDIO := false
ifneq ($(TARGET_USES_AOSP_FOR_AUDIO), true)
-USE_CUSTOM_AUDIO_POLICY := 1
AUDIO_FEATURE_QSSI_COMPLIANCE := false
AUDIO_FEATURE_ENABLED_COMPRESS_CAPTURE := false
AUDIO_FEATURE_ENABLED_COMPRESS_INPUT := true
@@ -42,7 +41,7 @@
AUDIO_FEATURE_ENABLED_AUDIOSPHERE := true
AUDIO_FEATURE_ENABLED_USB_TUNNEL := true
AUDIO_FEATURE_ENABLED_A2DP_OFFLOAD := true
-AUDIO_FEATURE_ENABLED_3D_AUDIO := false
+AUDIO_FEATURE_ENABLED_3D_AUDIO := true
AUDIO_FEATURE_ENABLED_AHAL_EXT := true
DOLBY_ENABLE := false
endif
@@ -81,6 +80,81 @@
AUDIO_FEATURE_ENABLED_BATTERY_LISTENER := true
##AUDIO_FEATURE_FLAGS
+AUDIO_HARDWARE := audio.a2dp.default
+AUDIO_HARDWARE += audio.usb.default
+AUDIO_HARDWARE += audio.r_submix.default
+AUDIO_HARDWARE += audio.primary.msmnile
+
+#HAL Wrapper
+AUDIO_WRAPPER := libqahw
+AUDIO_WRAPPER += libqahwwrapper
+
+#HAL Test app
+AUDIO_HAL_TEST_APPS := hal_play_test
+AUDIO_HAL_TEST_APPS += hal_rec_test
+
+PRODUCT_PACKAGES += $(AUDIO_HARDWARE)
+PRODUCT_PACKAGES += $(AUDIO_WRAPPER)
+PRODUCT_PACKAGES += $(AUDIO_HAL_TEST_APPS)
+
+ifeq ($(AUDIO_FEATURE_ENABLED_DLKM),true)
+BOARD_VENDOR_KERNEL_MODULES := \
+ $(KERNEL_MODULES_OUT)/audio_apr.ko \
+ $(KERNEL_MODULES_OUT)/audio_wglink.ko \
+ $(KERNEL_MODULES_OUT)/audio_q6_pdr.ko \
+ $(KERNEL_MODULES_OUT)/audio_q6_notifier.ko \
+ $(KERNEL_MODULES_OUT)/audio_adsp_loader.ko \
+ $(KERNEL_MODULES_OUT)/audio_q6.ko \
+ $(KERNEL_MODULES_OUT)/audio_usf.ko \
+ $(KERNEL_MODULES_OUT)/audio_pinctrl_wcd.ko \
+ $(KERNEL_MODULES_OUT)/audio_swr.ko \
+ $(KERNEL_MODULES_OUT)/audio_wcd_core.ko \
+ $(KERNEL_MODULES_OUT)/audio_swr_ctrl.ko \
+ $(KERNEL_MODULES_OUT)/audio_wsa881x.ko \
+ $(KERNEL_MODULES_OUT)/audio_platform.ko \
+ $(KERNEL_MODULES_OUT)/audio_hdmi.ko \
+ $(KERNEL_MODULES_OUT)/audio_stub.ko \
+ $(KERNEL_MODULES_OUT)/audio_wcd9xxx.ko \
+ $(KERNEL_MODULES_OUT)/audio_mbhc.ko \
+ $(KERNEL_MODULES_OUT)/audio_wcd934x.ko \
+ $(KERNEL_MODULES_OUT)/audio_wcd9360.ko \
+ $(KERNEL_MODULES_OUT)/audio_wcd_spi.ko \
+ $(KERNEL_MODULES_OUT)/audio_native.ko \
+ $(KERNEL_MODULES_OUT)/audio_machine_msmnile.ko
+endif
+
+# install lkdtm only for userdebug and eng build variants
+ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT)))
+ ifeq (,$(findstring perf_defconfig, $(KERNEL_DEFCONFIG)))
+ BOARD_VENDOR_KERNEL_MODULES += $(KERNEL_MODULES_OUT)/lkdtm.ko
+ endif
+endif
+
+#Audio DLKM
+AUDIO_DLKM := audio_apr.ko
+AUDIO_DLKM += audio_wglink.ko
+AUDIO_DLKM += audio_q6_pdr.ko
+AUDIO_DLKM += audio_q6_notifier.ko
+AUDIO_DLKM += audio_adsp_loader.ko
+AUDIO_DLKM += audio_q6.ko
+AUDIO_DLKM += audio_usf.ko
+AUDIO_DLKM += audio_pinctrl_wcd.ko
+AUDIO_DLKM += audio_swr.ko
+AUDIO_DLKM += audio_wcd_core.ko
+AUDIO_DLKM += audio_swr_ctrl.ko
+AUDIO_DLKM += audio_wsa881x.ko
+AUDIO_DLKM += audio_platform.ko
+AUDIO_DLKM += audio_hdmi.ko
+AUDIO_DLKM += audio_stub.ko
+AUDIO_DLKM += audio_wcd9xxx.ko
+AUDIO_DLKM += audio_mbhc.ko
+AUDIO_DLKM += audio_wcd9360.ko
+AUDIO_DLKM += audio_wcd_spi.ko
+AUDIO_DLKM += audio_native.ko
+AUDIO_DLKM += audio_machine_msmnile.ko
+AUDIO_DLKM += audio_wcd934x.ko
+PRODUCT_PACKAGES += $(AUDIO_DLKM)
+
ifneq ($(strip $(TARGET_USES_RRO)), true)
#Audio Specific device overlays
DEVICE_PACKAGE_OVERLAYS += vendor/qcom/opensource/audio-hal/primary-hal/configs/common/overlay
@@ -137,6 +211,19 @@
persist.vendor.audio.fluence.speaker=true\
persist.vendor.audio.fluence.tmic.enabled=false
+#
+#snapdragon value add features
+#
+PRODUCT_PROPERTY_OVERRIDES += \
+ro.qc.sdk.audio.ssr=false
+
+##fluencetype can be "fluence" or "fluencepro" or "none"
+PRODUCT_PROPERTY_OVERRIDES += \
+ro.qc.sdk.audio.fluencetype=none\
+persist.audio.fluence.voicecall=true\
+persist.audio.fluence.voicerec=false\
+persist.audio.fluence.speaker=true
+
#disable tunnel encoding
PRODUCT_PROPERTY_OVERRIDES += \
vendor.audio.tunnel.encode=false
diff --git a/configs/msmsteppe/msmsteppe.mk b/configs/msmsteppe/msmsteppe.mk
index ce4a01c..4c404ea 100644
--- a/configs/msmsteppe/msmsteppe.mk
+++ b/configs/msmsteppe/msmsteppe.mk
@@ -5,7 +5,6 @@
TARGET_USES_AOSP_FOR_AUDIO := false
ifneq ($(TARGET_USES_AOSP_FOR_AUDIO), true)
-USE_CUSTOM_AUDIO_POLICY := 1
AUDIO_FEATURE_ENABLED_COMPRESS_CAPTURE := false
AUDIO_FEATURE_ENABLED_COMPRESS_VOIP := false
AUDIO_FEATURE_ENABLED_DYNAMIC_ECNS := true
@@ -69,6 +68,93 @@
AUDIO_FEATURE_ENABLED_BATTERY_LISTENER := true
##AUDIO_FEATURE_FLAGS
+AUDIO_HARDWARE := audio.a2dp.default
+AUDIO_HARDWARE += audio.usb.default
+AUDIO_HARDWARE += audio.r_submix.default
+AUDIO_HARDWARE += audio.primary.$(MSMSTEPPE)
+
+#HAL Wrapper
+AUDIO_WRAPPER := libqahw
+AUDIO_WRAPPER += libqahwwrapper
+
+#HAL Test app
+AUDIO_HAL_TEST_APPS := hal_play_test
+AUDIO_HAL_TEST_APPS += hal_rec_test
+
+PRODUCT_PACKAGES += $(AUDIO_HARDWARE)
+PRODUCT_PACKAGES += $(AUDIO_WRAPPER)
+PRODUCT_PACKAGES += $(AUDIO_HAL_TEST_APPS)
+
+ifeq ($(AUDIO_FEATURE_ENABLED_DLKM),true)
+BOARD_VENDOR_KERNEL_MODULES := \
+ $(KERNEL_MODULES_OUT)/audio_apr.ko \
+ $(KERNEL_MODULES_OUT)/audio_snd_event.ko \
+ $(KERNEL_MODULES_OUT)/audio_wglink.ko \
+ $(KERNEL_MODULES_OUT)/audio_q6_pdr.ko \
+ $(KERNEL_MODULES_OUT)/audio_q6_notifier.ko \
+ $(KERNEL_MODULES_OUT)/audio_adsp_loader.ko \
+ $(KERNEL_MODULES_OUT)/audio_q6.ko \
+ $(KERNEL_MODULES_OUT)/audio_usf.ko \
+ $(KERNEL_MODULES_OUT)/audio_pinctrl_wcd.ko \
+ $(KERNEL_MODULES_OUT)/audio_pinctrl_lpi.ko \
+ $(KERNEL_MODULES_OUT)/audio_swr.ko \
+ $(KERNEL_MODULES_OUT)/audio_wcd_core.ko \
+ $(KERNEL_MODULES_OUT)/audio_swr_ctrl.ko \
+ $(KERNEL_MODULES_OUT)/audio_wsa881x.ko \
+ $(KERNEL_MODULES_OUT)/audio_platform.ko \
+ $(KERNEL_MODULES_OUT)/audio_hdmi.ko \
+ $(KERNEL_MODULES_OUT)/audio_stub.ko \
+ $(KERNEL_MODULES_OUT)/audio_wcd9xxx.ko \
+ $(KERNEL_MODULES_OUT)/audio_mbhc.ko \
+ $(KERNEL_MODULES_OUT)/audio_wcd934x.ko \
+ $(KERNEL_MODULES_OUT)/audio_wcd937x.ko \
+ $(KERNEL_MODULES_OUT)/audio_wcd937x_slave.ko \
+ $(KERNEL_MODULES_OUT)/audio_bolero_cdc.ko \
+ $(KERNEL_MODULES_OUT)/audio_wsa_macro.ko \
+ $(KERNEL_MODULES_OUT)/audio_va_macro.ko \
+ $(KERNEL_MODULES_OUT)/audio_rx_macro.ko \
+ $(KERNEL_MODULES_OUT)/audio_tx_macro.ko \
+ $(KERNEL_MODULES_OUT)/audio_wcd_spi.ko \
+ $(KERNEL_MODULES_OUT)/audio_native.ko \
+ $(KERNEL_MODULES_OUT)/audio_machine_talos.ko
+endif
+
+BOARD_VENDOR_KERNEL_MODULES += $(shell ls $(KERNEL_MODULES_OUT)/*.ko)
+
+#Audio DLKM
+AUDIO_DLKM := audio_apr.ko
+AUDIO_DLKM += audio_snd_event.ko
+AUDIO_DLKM += audio_wglink.ko
+AUDIO_DLKM += audio_q6_pdr.ko
+AUDIO_DLKM += audio_q6_notifier.ko
+AUDIO_DLKM += audio_adsp_loader.ko
+AUDIO_DLKM += audio_q6.ko
+AUDIO_DLKM += audio_usf.ko
+AUDIO_DLKM += audio_pinctrl_wcd.ko
+AUDIO_DLKM += audio_swr.ko
+AUDIO_DLKM += audio_wcd_core.ko
+AUDIO_DLKM += audio_swr_ctrl.ko
+AUDIO_DLKM += audio_wsa881x.ko
+AUDIO_DLKM += audio_platform.ko
+AUDIO_DLKM += audio_hdmi.ko
+AUDIO_DLKM += audio_stub.ko
+AUDIO_DLKM += audio_wcd9xxx.ko
+AUDIO_DLKM += audio_mbhc.ko
+AUDIO_DLKM += audio_wcd_spi.ko
+AUDIO_DLKM += audio_native.ko
+AUDIO_DLKM += audio_machine_talos.ko
+AUDIO_DLKM += audio_wcd934x.ko
+AUDIO_DLKM += audio_pinctrl_lpi.ko
+AUDIO_DLKM += audio_wcd937x.ko
+AUDIO_DLKM += audio_wcd937x_slave.ko
+AUDIO_DLKM += audio_bolero_cdc.ko
+AUDIO_DLKM += audio_wsa_macro.ko
+AUDIO_DLKM += audio_va_macro.ko
+AUDIO_DLKM += audio_rx_macro.ko
+AUDIO_DLKM += audio_tx_macro.ko
+
+PRODUCT_PACKAGES += $(AUDIO_DLKM)
+
#Audio Specific device overlays
DEVICE_PACKAGE_OVERLAYS += vendor/qcom/opensource/audio-hal/primary-hal/configs/common/overlay
@@ -123,6 +209,19 @@
persist.vendor.audio.fluence.voicerec=false\
persist.vendor.audio.fluence.speaker=true
+#
+#snapdragon value add features
+#
+PRODUCT_PROPERTY_OVERRIDES += \
+ro.qc.sdk.audio.ssr=false
+
+##fluencetype can be "fluence" or "fluencepro" or "none"
+PRODUCT_PROPERTY_OVERRIDES += \
+ro.qc.sdk.audio.fluencetype=none\
+persist.audio.fluence.voicecall=true\
+persist.audio.fluence.voicerec=false\
+persist.audio.fluence.speaker=true
+
##speaker protection v3 switch and ADSP AFE API version
PRODUCT_PROPERTY_OVERRIDES += \
persist.vendor.audio.spv3.enable=true\
diff --git a/configs/sdm660/audio_configs.xml b/configs/sdm660/audio_configs.xml
index 853f7e7..3688697 100644
--- a/configs/sdm660/audio_configs.xml
+++ b/configs/sdm660/audio_configs.xml
@@ -92,6 +92,7 @@
<flag name="incall_music_enabled" value="false" />
<flag name="keep_alive_enabled" value="false" />
<flag name="kpi_optimize_enabled" value="true" />
+ <flag name="maxx_audio_enabled" value="false" />
<flag name="receiver_aided_stereo" value="true" />
<flag name="snd_monitor_enabled" value="true" />
<flag name="source_track_enabled" value="true" />
diff --git a/configs/sdm710/audio_configs.xml b/configs/sdm710/audio_configs.xml
index 0410f4b..6a6fb7d 100644
--- a/configs/sdm710/audio_configs.xml
+++ b/configs/sdm710/audio_configs.xml
@@ -92,6 +92,7 @@
<flag name="incall_music_enabled" value="false" />
<flag name="keep_alive_enabled" value="false" />
<flag name="kpi_optimize_enabled" value="true" />
+ <flag name="maxx_audio_enabled" value="false" />
<flag name="receiver_aided_stereo" value="true" />
<flag name="snd_monitor_enabled" value="true" />
<flag name="source_track_enabled" value="true" />
diff --git a/configs/sdm710/sdm710.mk b/configs/sdm710/sdm710.mk
index 74795c9..dc27ddc 100644
--- a/configs/sdm710/sdm710.mk
+++ b/configs/sdm710/sdm710.mk
@@ -4,7 +4,6 @@
BOARD_USES_ALSA_AUDIO := true
ifneq ($(TARGET_USES_AOSP_FOR_AUDIO), true)
-USE_CUSTOM_AUDIO_POLICY := 1
AUDIO_FEATURE_ENABLED_COMPRESS_CAPTURE := false
AUDIO_FEATURE_ENABLED_COMPRESS_INPUT := true
AUDIO_FEATURE_ENABLED_COMPRESS_VOIP := false
@@ -78,6 +77,59 @@
BOARD_SUPPORTS_FFV_EC_THREAD_RT_PRIORITY := false
##AUDIO_FEATURE_FLAGS
+AUDIO_HARDWARE := audio.a2dp.default
+AUDIO_HARDWARE += audio.usb.default
+AUDIO_HARDWARE += audio.r_submix.default
+AUDIO_HARDWARE += audio.primary.sdm710
+
+#HAL Wrapper
+AUDIO_WRAPPER := libqahw
+AUDIO_WRAPPER += libqahwwrapper
+
+#HAL Test app
+AUDIO_HAL_TEST_APPS := hal_play_test
+AUDIO_HAL_TEST_APPS += hal_rec_test
+
+PRODUCT_PACKAGES += $(AUDIO_HARDWARE)
+PRODUCT_PACKAGES += $(AUDIO_WRAPPER)
+PRODUCT_PACKAGES += $(AUDIO_HAL_TEST_APPS)
+
+ifeq ($(AUDIO_FEATURE_ENABLED_DLKM),true)
+BOARD_VENDOR_KERNEL_MODULES := \
+ $(KERNEL_MODULES_OUT)/qca_cld3_wlan.ko \
+ $(KERNEL_MODULES_OUT)/audio_apr.ko \
+ $(KERNEL_MODULES_OUT)/audio_wglink.ko \
+ $(KERNEL_MODULES_OUT)/audio_q6_pdr.ko \
+ $(KERNEL_MODULES_OUT)/audio_q6_notifier.ko \
+ $(KERNEL_MODULES_OUT)/audio_adsp_loader.ko \
+ $(KERNEL_MODULES_OUT)/audio_q6.ko \
+ $(KERNEL_MODULES_OUT)/audio_usf.ko \
+ $(KERNEL_MODULES_OUT)/audio_pinctrl_wcd.ko \
+ $(KERNEL_MODULES_OUT)/audio_pinctrl_lpi.ko \
+ $(KERNEL_MODULES_OUT)/audio_swr.ko \
+ $(KERNEL_MODULES_OUT)/audio_wcd_core.ko \
+ $(KERNEL_MODULES_OUT)/audio_swr_ctrl.ko \
+ $(KERNEL_MODULES_OUT)/audio_wsa881x.ko \
+ $(KERNEL_MODULES_OUT)/audio_platform.ko \
+ $(KERNEL_MODULES_OUT)/audio_cpe_lsm.ko \
+ $(KERNEL_MODULES_OUT)/audio_hdmi.ko \
+ $(KERNEL_MODULES_OUT)/audio_stub.ko \
+ $(KERNEL_MODULES_OUT)/audio_wcd9xxx.ko \
+ $(KERNEL_MODULES_OUT)/audio_mbhc.ko \
+ $(KERNEL_MODULES_OUT)/audio_wcd_spi.ko \
+ $(KERNEL_MODULES_OUT)/audio_wcd_cpe.ko \
+ $(KERNEL_MODULES_OUT)/audio_wcd9335.ko \
+ $(KERNEL_MODULES_OUT)/audio_wcd934x.ko \
+ $(KERNEL_MODULES_OUT)/audio_digital_cdc.ko \
+ $(KERNEL_MODULES_OUT)/audio_analog_cdc.ko \
+ $(KERNEL_MODULES_OUT)/audio_msm_sdw.ko \
+ $(KERNEL_MODULES_OUT)/audio_native.ko \
+ $(KERNEL_MODULES_OUT)/audio_machine_sdm710.ko
+endif
+
+BOARD_VENDOR_KERNEL_MODULES += \
+ $(KERNEL_MODULES_OUT)/llcc_perfmon.ko
+
ifneq ($(strip $(TARGET_USES_RRO)), true)
#Audio Specific device overlays
DEVICE_PACKAGE_OVERLAYS += vendor/qcom/opensource/audio-hal/primary-hal/configs/common/overlay
@@ -161,6 +213,19 @@
persist.vendor.audio.fluence.audiorec=false\
persist.vendor.audio.fluence.tmic.enabled=false
+#
+#snapdragon value add features
+#
+PRODUCT_PROPERTY_OVERRIDES += \
+ro.qc.sdk.audio.ssr=false
+
+##fluencetype can be "fluence" or "fluencepro" or "none"
+PRODUCT_PROPERTY_OVERRIDES += \
+ro.qc.sdk.audio.fluencetype=none\
+persist.audio.fluence.voicecall=true\
+persist.audio.fluence.voicerec=false\
+persist.audio.fluence.speaker=true
+
# Mutlirec Apptype
PRODUCT_PROPERTY_OVERRIDES += \
vendor.audio.apptype.multirec.enabled=false \
diff --git a/configs/sdm845/audio_configs.xml b/configs/sdm845/audio_configs.xml
index 95b7d97..4b0159d 100644
--- a/configs/sdm845/audio_configs.xml
+++ b/configs/sdm845/audio_configs.xml
@@ -92,6 +92,7 @@
<flag name="incall_music_enabled" value="false" />
<flag name="keep_alive_enabled" value="false" />
<flag name="kpi_optimize_enabled" value="true" />
+ <flag name="maxx_audio_enabled" value="false" />
<flag name="receiver_aided_stereo" value="true" />
<flag name="snd_monitor_enabled" value="true" />
<flag name="source_track_enabled" value="true" />
diff --git a/configs/sdm845/sdm845.mk b/configs/sdm845/sdm845.mk
index 98691f3..5710aaf 100644
--- a/configs/sdm845/sdm845.mk
+++ b/configs/sdm845/sdm845.mk
@@ -4,7 +4,6 @@
BOARD_USES_ALSA_AUDIO := true
ifneq ($(TARGET_USES_AOSP_FOR_AUDIO), true)
-USE_CUSTOM_AUDIO_POLICY := 1
AUDIO_FEATURE_ENABLED_COMPRESS_CAPTURE := false
AUDIO_FEATURE_ENABLED_COMPRESS_VOIP := false
AUDIO_FEATURE_ENABLED_DYNAMIC_ECNS := false
@@ -66,6 +65,37 @@
AUDIO_FEATURE_ENABLED_SVA_MULTI_STAGE := true
##AUDIO_FEATURE_FLAGS
+AUDIO_HARDWARE := audio.a2dp.default
+AUDIO_HARDWARE += audio.usb.default
+AUDIO_HARDWARE += audio.r_submix.default
+AUDIO_HARDWARE += audio.primary.sdm845
+
+#HAL Wrapper
+AUDIO_WRAPPER := libqahw
+AUDIO_WRAPPER += libqahwwrapper
+
+#HAL Test app
+AUDIO_HAL_TEST_APPS := hal_play_test
+AUDIO_HAL_TEST_APPS += hal_rec_test
+
+PRODUCT_PACKAGES += $(AUDIO_HARDWARE)
+PRODUCT_PACKAGES += $(AUDIO_WRAPPER)
+PRODUCT_PACKAGES += $(AUDIO_HAL_TEST_APPS)
+
+BOARD_VENDOR_KERNEL_MODULES := \
+ $(KERNEL_MODULES_OUT)/qca_cld3_wlan.ko \
+ $(KERNEL_MODULES_OUT)/wcd-core.ko \
+ $(KERNEL_MODULES_OUT)/pinctrl-wcd.ko \
+ $(KERNEL_MODULES_OUT)/swr-wcd-ctrl.ko \
+ $(KERNEL_MODULES_OUT)/snd-soc-wcd9xxx.ko \
+ $(KERNEL_MODULES_OUT)/wcd-dsp-glink.ko \
+ $(KERNEL_MODULES_OUT)/snd-soc-wcd934x.ko \
+ $(KERNEL_MODULES_OUT)/snd-soc-wcd-mbhc.ko \
+ $(KERNEL_MODULES_OUT)/snd-soc-wsa881x.ko \
+ $(KERNEL_MODULES_OUT)/snd-soc-sdm845.ko \
+ $(KERNEL_MODULES_OUT)/snd-soc-wcd-spi.ko \
+ $(KERNEL_MODULES_OUT)/llcc_perfmon.ko
+
ifneq ($(strip $(TARGET_USES_RRO)), true)
#Audio Specific device overlays
DEVICE_PACKAGE_OVERLAYS += vendor/qcom/opensource/audio-hal/primary-hal/configs/common/overlay
@@ -130,6 +160,19 @@
persist.vendor.audio.fluence.voicerec=false\
persist.vendor.audio.fluence.speaker=true
+#
+#snapdragon value add features
+#
+PRODUCT_PROPERTY_OVERRIDES += \
+ro.qc.sdk.audio.ssr=false
+
+##fluencetype can be "fluence" or "fluencepro" or "none"
+PRODUCT_PROPERTY_OVERRIDES += \
+ro.qc.sdk.audio.fluencetype=none\
+persist.audio.fluence.voicecall=true\
+persist.audio.fluence.voicerec=false\
+persist.audio.fluence.speaker=true
+
#disable tunnel encoding
PRODUCT_PROPERTY_OVERRIDES += \
vendor.audio.tunnel.encode=false
diff --git a/hal/Android.mk b/hal/Android.mk
index 1377660..2abed28 100644
--- a/hal/Android.mk
+++ b/hal/Android.mk
@@ -340,6 +340,12 @@
LOCAL_STATIC_LIBRARIES += libprofile_rt
endif
+ifeq ($(strip $(AUDIO_FEATURE_ENABLED_AUDIO_ZOOM)), true)
+ LOCAL_CFLAGS += -DAUDIOZOOM_QDSP_ENABLED
+ LOCAL_SRC_FILES += audio_extn/audiozoom.c
+endif
+
+
#ifeq ($(strip $(AUDIO_FEATURE_ENABLED_AUTO_HAL)),true)
# LOCAL_CFLAGS += -DAUDIO_EXTN_AUTO_HAL_ENABLED
# LOCAL_SRC_FILES += audio_extn/auto_hal.c
diff --git a/hal/ahal_config_helper.cpp b/hal/ahal_config_helper.cpp
index 753d8a8..e46b8f3 100644
--- a/hal/ahal_config_helper.cpp
+++ b/hal/ahal_config_helper.cpp
@@ -105,6 +105,7 @@
false, /* CONCURRENT_CAPTURE */
false, /* COMPRESS_IN */
false, /* BATTERY_LISTENER */
+ false, /* MAXX_AUDIO */
true, /* COMPRESS_METADATA_NEEDED */
false, /* INCALL_MUSIC */
false, /* COMPRESS_VOIP */
@@ -149,6 +150,7 @@
true, /* CONCURRENT_CAPTURE */
true, /* COMPRESS_IN */
true, /* BATTERY_LISTENER */
+ false, /* MAXX_AUDIO */
true, /* COMPRESS_METADATA_NEEDED */
true, /* INCALL_MUSIC */
false, /* COMPRESS_VOIP */
@@ -192,6 +194,7 @@
true, /* CONCURRENT_CAPTURE */
false, /* COMPRESS_IN */
false, /* BATTERY_LISTENER */
+ true, /* MAXX_AUDIO */
false, /* COMPRESS_METADATA_NEEDED */
true, /* INCALL_MUSIC */
false, /* COMPRESS_VOIP */
diff --git a/hal/ahal_config_helper.h b/hal/ahal_config_helper.h
index 3251961..39ed68e 100644
--- a/hal/ahal_config_helper.h
+++ b/hal/ahal_config_helper.h
@@ -71,6 +71,7 @@
bool concurrent_capture_enabled;
bool compress_in_enabled;
bool battery_listener_enabled;
+ bool maxx_audio_enabled;
bool compress_metadata_needed;
bool incall_music_enabled;
bool compress_voip_enabled;
diff --git a/hal/audio_extn/Android.mk b/hal/audio_extn/Android.mk
old mode 100755
new mode 100644
index fa682d8..117ee27
--- a/hal/audio_extn/Android.mk
+++ b/hal/audio_extn/Android.mk
@@ -398,17 +398,19 @@
include $(BUILD_SHARED_LIBRARY)
#-------------------------------------------
+
# Build EXT_HW_PLUGIN LIB
#-------------------------------------------
include $(CLEAR_VARS)
LOCAL_MODULE := libexthwplugin
+
LOCAL_VENDOR_MODULE := true
PRIMARY_HAL_PATH := vendor/qcom/opensource/audio-hal/primary-hal/hal
AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM)
-ifneq ($(filter sdm845 sdm710 msmnile kona sdm660 msm8937 $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter sdm845 sdm710 msmnile kona lito sdm660 msm8937 $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
# B-family platform uses msm8974 code base
AUDIO_PLATFORM := msm8974
MULTIPLE_HW_VARIANTS_ENABLED := true
@@ -467,7 +469,7 @@
PRIMARY_HAL_PATH := vendor/qcom/opensource/audio-hal/primary-hal/hal
AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM)
-ifneq ($(filter sdm845 sdm710 msmnile kona sdm660 msm8937 $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter sdm845 sdm710 msmnile kona lito sdm660 msm8937 $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
# B-family platform uses msm8974 code base
AUDIO_PLATFORM := msm8974
MULTIPLE_HW_VARIANTS_ENABLED := true
@@ -526,7 +528,7 @@
PRIMARY_HAL_PATH := vendor/qcom/opensource/audio-hal/primary-hal/hal
AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM)
-ifneq ($(filter sdm845 sdm710 msmnile kona sdm660 msm8937 $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter sdm845 sdm710 msmnile kona lito sdm660 msm8937 $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
# B-family platform uses msm8974 code base
AUDIO_PLATFORM := msm8974
MULTIPLE_HW_VARIANTS_ENABLED := true
@@ -588,7 +590,7 @@
PRIMARY_HAL_PATH := vendor/qcom/opensource/audio-hal/primary-hal/hal
AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM)
-ifneq ($(filter sdm845 sdm710 msmnile kona sdm660 msm8937 $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter sdm845 sdm710 msmnile kona lito sdm660 msm8937 $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
# B-family platform uses msm8974 code base
AUDIO_PLATFORM := msm8974
MULTIPLE_HW_VARIANTS_ENABLED := true
@@ -658,7 +660,7 @@
PRIMARY_HAL_PATH := vendor/qcom/opensource/audio-hal/primary-hal/hal
AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM)
-ifneq ($(filter sdm845 sdm710 msmnile kona sdm660 msm8937 $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter sdm845 sdm710 msmnile kona lito sdm660 msm8937 $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
# B-family platform uses msm8974 code base
AUDIO_PLATFORM := msm8974
MULTIPLE_HW_VARIANTS_ENABLED := true
@@ -705,3 +707,61 @@
LOCAL_HEADER_LIBRARIES += libhardware_headers
LOCAL_HEADER_LIBRARIES += libsystem_headers
#include $(BUILD_SHARED_LIBRARY)
+
+#-------------------------------------------
+# Build MAXX_AUDIO
+#-------------------------------------------
+include $(CLEAR_VARS)
+
+LOCAL_MODULE:= libmaxxaudio
+LOCAL_VENDOR_MODULE := true
+
+PRIMARY_HAL_PATH := vendor/qcom/opensource/audio-hal/primary-hal/hal
+AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM)
+
+ifneq ($(filter sdm845 sdm710 msmnile kona sdm660 msm8937 $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
+ # B-family platform uses msm8974 code base
+ AUDIO_PLATFORM = msm8974
+ MULTIPLE_HW_VARIANTS_ENABLED := true
+endif
+
+LOCAL_SRC_FILES:= \
+ maxxaudio.c
+
+LOCAL_CFLAGS += \
+ -Wall \
+ -Werror \
+ -Wno-unused-function \
+ -Wno-unused-variable
+
+LOCAL_SHARED_LIBRARIES := \
+ libaudioutils \
+ libcutils \
+ liblog \
+ libtinyalsa \
+ libtinycompress \
+ libaudioroute \
+ libdl \
+ libexpat
+
+LOCAL_C_INCLUDES := \
+ $(PRIMARY_HAL_PATH) \
+ $(PRIMARY_HAL_PATH)/$(AUDIO_PLATFORM) \
+ external/tinyalsa/include \
+ external/tinycompress/include \
+ external/expat/lib \
+ system/media/audio_utils/include \
+ $(call include-path-for, audio-route) \
+
+LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
+LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/techpack/audio/include
+LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
+
+ifeq ($(strip $(AUDIO_FEATURE_ENABLED_DLKM)),true)
+ LOCAL_HEADER_LIBRARIES += audio_kernel_headers
+ LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/vendor/qcom/opensource/audio-kernel/include
+endif
+
+LOCAL_HEADER_LIBRARIES += libhardware_headers
+LOCAL_HEADER_LIBRARIES += libsystem_headers
+include $(BUILD_SHARED_LIBRARY)
diff --git a/hal/audio_extn/a2dp.c b/hal/audio_extn/a2dp.c
index 400d7d0..19c839c 100644
--- a/hal/audio_extn/a2dp.c
+++ b/hal/audio_extn/a2dp.c
@@ -62,6 +62,7 @@
#define MEDIA_FMT_LDAC 0x00013224
#define MEDIA_FMT_MP3 0x00010BE9
#define MEDIA_FMT_APTX_ADAPTIVE 0x00013204
+#define MEDIA_FMT_APTX_AD_SPEECH 0x00013208
#define MEDIA_FMT_AAC_AOT_LC 2
#define MEDIA_FMT_AAC_AOT_SBR 5
#define MEDIA_FMT_AAC_AOT_PS 29
@@ -85,6 +86,7 @@
#define MIXER_SAMPLE_RATE_DEFAULT "BT SampleRate"
#define MIXER_AFE_IN_CHANNELS "AFE Input Channels"
#define MIXER_ABR_TX_FEEDBACK_PATH "A2DP_SLIM7_UL_HL Switch"
+#define MIXER_ABR_RX_FEEDBACK_PATH "SCO_SLIM7_DL_HL Switch"
#define MIXER_SET_FEEDBACK_CHANNEL "BT set feedback channel"
#define MIXER_SINK_SAMPLE_RATE "BT_TX SampleRate"
#define MIXER_AFE_SINK_CHANNELS "AFE Output Channels"
@@ -125,6 +127,9 @@
// Slimbus Tx sample rate for ABR feedback channel
#define ABR_TX_SAMPLE_RATE "KHZ_8"
+// Slimbus Tx sample rate for APTX AD SPEECH
+#define SPEECH_TX_SAMPLE_RATE "KHZ_96"
+
// Purpose ID for Inter Module Communication (IMC) in AFE
#define IMC_PURPOSE_ID_BT_INFO 0x000132E2
@@ -134,8 +139,13 @@
// Instance identifier for A2DP
#define MAX_INSTANCE_ID (UINT32_MAX / 2)
+// Instance identifier for SWB
+#define APTX_AD_SPEECH_INSTANCE_ID 37
+
+#define SAMPLING_RATE_96K 96000
#define SAMPLING_RATE_48K 48000
#define SAMPLING_RATE_441K 44100
+#define SAMPLING_RATE_32K 32000
#define CH_STEREO 2
#define CH_MONO 1
#define SOURCE 0
@@ -172,6 +182,7 @@
CODEC_TYPE_LDAC = AUDIO_FORMAT_LDAC, // 0x23000000UL
CODEC_TYPE_CELT = 603979776u, // 0x24000000UL
CODEC_TYPE_APTX_AD = 620756992u, // 0x25000000UL
+ CODEC_TYPE_APTX_AD_SPEECH = 637534208u, //0x26000000UL
CODEC_TYPE_PCM = AUDIO_FORMAT_PCM_16_BIT, // 0x1u
}codec_t;
@@ -237,6 +248,11 @@
} imc_status_t;
typedef enum {
+ SWAP_DISABLE,
+ SWAP_ENABLE,
+} swap_status_t;
+
+typedef enum {
MTU_SIZE,
PEAK_BIT_RATE,
} frame_control_type_t;
@@ -265,6 +281,8 @@
bool abr_started;
/* ABR Tx path pcm handle */
struct pcm *abr_tx_handle;
+ /* ABR Rx path pcm handle */
+ struct pcm *abr_rx_handle;
/* ABR Inter Module Communication (IMC) instance ID */
uint32_t imc_instance;
};
@@ -319,6 +337,7 @@
uint32_t dec_channels;
bool a2dp_sink_started;
int a2dp_sink_total_active_session_requests;
+ bool swb_configured;
};
struct a2dp_data a2dp;
@@ -400,6 +419,18 @@
struct imc_dec_enc_info imc_info;
} __attribute__ ((packed));
+struct aptx_ad_speech_mode_cfg_t
+{
+ uint32_t mode;
+ uint32_t swapping;
+} __attribute__ ((packed));
+
+/* Structure for SWB voice dec config */
+struct aptx_ad_speech_dec_cfg_t {
+ struct abr_dec_cfg_t abr_cfg;
+ struct aptx_ad_speech_mode_cfg_t speech_mode;
+} __attribute__ ((packed));
+
/* START of DSP configurable structures
* These values should match with DSP interface defintion
*/
@@ -546,6 +577,15 @@
struct abr_enc_cfg_t abr_cfg;
} __attribute__ ((packed));
+/* APTX AD SPEECH structure */
+struct aptx_ad_speech_enc_cfg_t
+{
+ struct custom_enc_cfg_t custom_cfg;
+ /* Information to set up IMC between decoder and encoder */
+ struct imc_dec_enc_info imc_info;
+ struct aptx_ad_speech_mode_cfg_t speech_mode;
+} __attribute__ ((packed));
+
struct ldac_specific_enc_cfg_t
{
uint32_t bit_rate;
@@ -715,7 +755,9 @@
static int stop_abr()
{
struct mixer_ctl *ctl_abr_tx_path = NULL;
+ struct mixer_ctl *ctl_abr_rx_path = NULL;
struct mixer_ctl *ctl_set_bt_feedback_channel = NULL;
+ int ret = 0;
/* This function can be used if !abr_started for clean up */
ALOGV("%s: enter", __func__);
@@ -725,6 +767,10 @@
pcm_close(a2dp.abr_config.abr_tx_handle);
a2dp.abr_config.abr_tx_handle = NULL;
}
+ if (a2dp.abr_config.abr_rx_handle != NULL) {
+ pcm_close(a2dp.abr_config.abr_rx_handle);
+ a2dp.abr_config.abr_rx_handle = NULL;
+ }
a2dp.abr_config.abr_started = false;
a2dp.abr_config.imc_instance = 0;
@@ -733,11 +779,10 @@
MIXER_SET_FEEDBACK_CHANNEL);
if (!ctl_set_bt_feedback_channel) {
ALOGE("%s: ERROR Set usecase mixer control not identifed", __func__);
- return -ENOSYS;
- }
- if (mixer_ctl_set_value(ctl_set_bt_feedback_channel, 0, 0) != 0) {
+ ret = -ENOSYS;
+ } else if (mixer_ctl_set_value(ctl_set_bt_feedback_channel, 0, 0) != 0) {
ALOGE("%s: Failed to set BT usecase", __func__);
- return -ENOSYS;
+ ret = -ENOSYS;
}
// Reset ABR Tx feedback path
@@ -746,19 +791,31 @@
MIXER_ABR_TX_FEEDBACK_PATH);
if (!ctl_abr_tx_path) {
ALOGE("%s: ERROR ABR Tx feedback path mixer control not identifed", __func__);
- return -ENOSYS;
- }
- if (mixer_ctl_set_value(ctl_abr_tx_path, 0, 0) != 0) {
+ ret = -ENOSYS;
+ } else if (mixer_ctl_set_value(ctl_abr_tx_path, 0, 0) != 0) {
ALOGE("%s: Failed to set ABR Tx feedback path", __func__);
- return -ENOSYS;
+ ret = -ENOSYS;
}
- return 0;
+ // Reset ABR Rx feedback path
+ ALOGV("%s: Disable ABR Rx feedback path", __func__);
+ ctl_abr_rx_path = mixer_get_ctl_by_name(a2dp.adev->mixer,
+ MIXER_ABR_RX_FEEDBACK_PATH);
+ if (!ctl_abr_rx_path) {
+ ALOGE("%s: ERROR ABR Rx feedback path mixer control not identifed", __func__);
+ ret = -ENOSYS;
+ } else if (mixer_ctl_set_value(ctl_abr_rx_path, 0, 0) != 0) {
+ ALOGE("%s: Failed to set ABR Rx feedback path", __func__);
+ ret = -ENOSYS;
+ }
+
+ return ret;
}
static int start_abr()
{
struct mixer_ctl *ctl_abr_tx_path = NULL;
+ struct mixer_ctl *ctl_abr_rx_path = NULL;
struct mixer_ctl *ctl_set_bt_feedback_channel = NULL;
int abr_device_id;
int ret = 0;
@@ -792,11 +849,11 @@
MIXER_SET_FEEDBACK_CHANNEL);
if (!ctl_set_bt_feedback_channel) {
ALOGE("%s: ERROR Set usecase mixer control not identifed", __func__);
- return -ENOSYS;
+ goto fail;
}
if (mixer_ctl_set_value(ctl_set_bt_feedback_channel, 0, 1) != 0) {
ALOGE("%s: Failed to set BT usecase", __func__);
- return -ENOSYS;
+ goto fail;
}
// Open hostless front end and prepare ABR Tx path
@@ -806,19 +863,60 @@
a2dp.abr_config.abr_tx_handle = pcm_open(a2dp.adev->snd_card,
abr_device_id, PCM_IN,
&pcm_config_abr);
- if (a2dp.abr_config.abr_tx_handle == NULL ||
- !pcm_is_ready(a2dp.abr_config.abr_tx_handle))
+ if (a2dp.abr_config.abr_tx_handle == NULL) {
+ ALOGE("%s: Can't open abr tx device", __func__);
goto fail;
+ }
+ if (!(pcm_is_ready(a2dp.abr_config.abr_tx_handle) &&
+ !pcm_start(a2dp.abr_config.abr_tx_handle))) {
+ ALOGE("%s: tx: %s", __func__, pcm_get_error(a2dp.abr_config.abr_tx_handle));
+ goto fail;
+ }
}
- ret = pcm_start(a2dp.abr_config.abr_tx_handle);
- if (ret < 0)
- goto fail;
+
+ // Enable Slimbus 7 Rx feedback path for HD Voice use case
+ if (a2dp.bt_encoder_format == CODEC_TYPE_APTX_AD_SPEECH) {
+ ALOGV("%s: Enable ABR Rx feedback path", __func__);
+ ctl_abr_rx_path = mixer_get_ctl_by_name(a2dp.adev->mixer,
+ MIXER_ABR_RX_FEEDBACK_PATH);
+ if (!ctl_abr_rx_path) {
+ ALOGE("%s: ERROR ABR Rx feedback path mixer control not identifed", __func__);
+ goto fail;
+ }
+ if (mixer_ctl_set_value(ctl_abr_rx_path, 0, 1) != 0) {
+ ALOGE("%s: Failed to set ABR Rx feedback path", __func__);
+ goto fail;
+ }
+
+ if (mixer_ctl_set_value(ctl_set_bt_feedback_channel, 0, 1) != 0) {
+ ALOGE("%s: Failed to set BT usecase", __func__);
+ goto fail;
+ }
+
+ // Open hostless front end and prepare ABR Rx path
+ abr_device_id = fp_platform_get_pcm_device_id(USECASE_AUDIO_A2DP_ABR_FEEDBACK,
+ PCM_PLAYBACK);
+ if (!a2dp.abr_config.abr_rx_handle) {
+ a2dp.abr_config.abr_rx_handle = pcm_open(a2dp.adev->snd_card,
+ abr_device_id, PCM_OUT,
+ &pcm_config_abr);
+ if (a2dp.abr_config.abr_rx_handle == NULL) {
+ ALOGE("%s: Can't open abr rx device", __func__);
+ goto fail;
+ }
+ if (!(pcm_is_ready(a2dp.abr_config.abr_rx_handle) &&
+ !pcm_start(a2dp.abr_config.abr_rx_handle))) {
+ ALOGE("%s: rx: %s", __func__, pcm_get_error(a2dp.abr_config.abr_rx_handle));
+ goto fail;
+ }
+ }
+ }
+
a2dp.abr_config.abr_started = true;
return ret;
fail:
- ALOGE("%s: %s", __func__, pcm_get_error(a2dp.abr_config.abr_tx_handle));
stop_abr();
return -ENOSYS;
}
@@ -965,6 +1063,7 @@
a2dp.abr_config.abr_started = false;
a2dp.abr_config.imc_instance = 0;
a2dp.abr_config.abr_tx_handle = NULL;
+ a2dp.abr_config.abr_rx_handle = NULL;
a2dp.bt_state_source = A2DP_STATE_DISCONNECTED;
return 0;
@@ -1079,9 +1178,12 @@
if (direction == SOURCE) {
/* Set Tx backend sample rate */
- if (a2dp.abr_config.is_abr_enabled)
- rate_str = ABR_TX_SAMPLE_RATE;
-
+ if (a2dp.abr_config.is_abr_enabled) {
+ if (a2dp.bt_encoder_format == CODEC_TYPE_APTX_AD_SPEECH)
+ rate_str = SPEECH_TX_SAMPLE_RATE;
+ else
+ rate_str = ABR_TX_SAMPLE_RATE;
+ }
ALOGD("%s: set backend tx sample rate = %s", __func__, rate_str);
ctl_sample_rate = mixer_get_ctl_by_name(a2dp.adev->mixer,
MIXER_SOURCE_SAMPLE_RATE_TX);
@@ -1282,17 +1384,18 @@
ALOGE("%s: Failed to reset backend sample rate = %s", __func__, rate_str);
return -ENOSYS;
}
-
- ctl_sample_rate_tx = mixer_get_ctl_by_name(a2dp.adev->mixer,
- MIXER_SOURCE_SAMPLE_RATE_TX);
- if (!ctl_sample_rate_tx) {
+ if (a2dp.abr_config.is_abr_enabled) {
+ ctl_sample_rate_tx = mixer_get_ctl_by_name(a2dp.adev->mixer,
+ MIXER_SOURCE_SAMPLE_RATE_TX);
+ if (!ctl_sample_rate_tx) {
ALOGE("%s: ERROR Tx backend sample rate mixer control not identifed", __func__);
return -ENOSYS;
- }
+ }
- if (mixer_ctl_set_enum_by_string(ctl_sample_rate_tx, rate_str) != 0) {
- ALOGE("%s: Failed to reset Tx backend sample rate = %s", __func__, rate_str);
- return -ENOSYS;
+ if (mixer_ctl_set_enum_by_string(ctl_sample_rate_tx, rate_str) != 0) {
+ ALOGE("%s: Failed to reset Tx backend sample rate = %s", __func__, rate_str);
+ return -ENOSYS;
+ }
}
} else {
@@ -1707,7 +1810,7 @@
bool configure_aptx_enc_format(audio_aptx_encoder_config *aptx_bt_cfg)
{
struct mixer_ctl *ctl_enc_data = NULL;
- int mixer_size;
+ int mixer_size = 0;
bool is_configured = false;
int ret = 0;
int sample_rate_backup;
@@ -2209,7 +2312,7 @@
return -ENOSYS;
}
- if (a2dp.a2dp_source_suspended == true) {
+ if (a2dp.a2dp_source_suspended || a2dp.swb_configured) {
//session will be restarted after suspend completion
ALOGD("a2dp start requested during suspend state");
return -ENOSYS;
@@ -2434,6 +2537,16 @@
}
}
+static void reset_codec_config()
+{
+ reset_a2dp_enc_config_params();
+ reset_a2dp_source_dec_config_params();
+ a2dp_reset_backend_cfg(SOURCE);
+ if (a2dp.abr_config.is_abr_enabled && a2dp.abr_config.abr_started)
+ stop_abr();
+ a2dp.abr_config.is_abr_enabled = false;
+}
+
int a2dp_stop_playback()
{
int ret =0;
@@ -2456,14 +2569,9 @@
ALOGE("stop stream to BT IPC lib failed");
else
ALOGV("stop steam to BT IPC lib successful");
- reset_a2dp_enc_config_params();
- reset_a2dp_source_dec_config_params();
- a2dp_reset_backend_cfg(SOURCE);
- if (a2dp.abr_config.is_abr_enabled && a2dp.abr_config.abr_started)
- stop_abr();
- a2dp.abr_config.is_abr_enabled = false;
+ if (!a2dp.a2dp_source_suspended && !a2dp.swb_configured)
+ reset_codec_config();
a2dp.a2dp_source_started = false;
- a2dp_reset_backend_cfg(SOURCE);
}
if (!a2dp.a2dp_source_total_active_session_requests)
a2dp.a2dp_source_started = false;
@@ -2578,8 +2686,8 @@
pthread_mutex_lock(&a2dp.adev->lock);
}
}
- reset_a2dp_enc_config_params();
- reset_a2dp_source_dec_config_params();
+ if (!a2dp.swb_configured)
+ reset_codec_config();
if (a2dp.audio_source_suspend)
a2dp.audio_source_suspend();
} else if (a2dp.a2dp_source_suspended == true) {
@@ -2699,8 +2807,11 @@
a2dp.abr_config.abr_started = false;
a2dp.abr_config.imc_instance = 0;
a2dp.abr_config.abr_tx_handle = NULL;
+ a2dp.abr_config.abr_rx_handle = NULL;
a2dp.is_tws_mono_mode_on = false;
a2dp_source_init();
+ a2dp.swb_configured = false;
+
// init function pointers
fp_platform_get_pcm_device_id =
init_config.fp_platform_get_pcm_device_id;
@@ -2802,3 +2913,112 @@
return 0;
}
+
+
+bool configure_aptx_ad_speech_enc_fmt() {
+ struct mixer_ctl *ctl_enc_data = NULL;
+ int mixer_size = 0;
+ int ret = 0;
+ struct aptx_ad_speech_enc_cfg_t aptx_dsp_cfg;
+
+ ctl_enc_data = mixer_get_ctl_by_name(a2dp.adev->mixer, MIXER_ENC_CONFIG_BLOCK);
+ if (!ctl_enc_data) {
+ ALOGE(" ERROR a2dp encoder CONFIG data mixer control not identifed");
+ return false;
+ }
+
+ /* Initialize dsp configuration params */
+ memset(&aptx_dsp_cfg, 0x0, sizeof(struct aptx_ad_speech_enc_cfg_t));
+ aptx_dsp_cfg.custom_cfg.enc_format = MEDIA_FMT_APTX_AD_SPEECH;
+ aptx_dsp_cfg.custom_cfg.sample_rate = SAMPLING_RATE_32K;
+ aptx_dsp_cfg.custom_cfg.num_channels = CH_MONO;
+ aptx_dsp_cfg.custom_cfg.channel_mapping[0] = PCM_CHANNEL_L;
+ aptx_dsp_cfg.imc_info.direction = IMC_RECEIVE;
+ aptx_dsp_cfg.imc_info.enable = IMC_ENABLE;
+ aptx_dsp_cfg.imc_info.purpose = IMC_PURPOSE_ID_BT_INFO;
+ aptx_dsp_cfg.imc_info.comm_instance = APTX_AD_SPEECH_INSTANCE_ID;
+ aptx_dsp_cfg.speech_mode.mode = a2dp.adev->swb_speech_mode;
+ aptx_dsp_cfg.speech_mode.swapping = SWAP_ENABLE;
+
+ /* Configure AFE DSP configuration */
+ mixer_size = sizeof(struct aptx_ad_speech_enc_cfg_t);
+ ret = mixer_ctl_set_array(ctl_enc_data, (void *)&aptx_dsp_cfg,
+ mixer_size);
+ if (ret != 0) {
+ ALOGE("%s: Failed to set SWB encoder config", __func__);
+ return false;
+ }
+
+ /* Configure AFE Input Bit Format as PCM_16 */
+ ret = a2dp_set_bit_format(DEFAULT_ENCODER_BIT_FORMAT);
+ if (ret != 0) {
+ ALOGE("%s: Failed to set SWB bit format", __func__);
+ return false;
+ }
+
+ return true;
+}
+
+bool configure_aptx_ad_speech_dec_fmt()
+{
+ struct mixer_ctl *ctl_dec_data = NULL;
+ struct aptx_ad_speech_dec_cfg_t dec_cfg;
+ int ret = 0;
+
+ ctl_dec_data = mixer_get_ctl_by_name(a2dp.adev->mixer, MIXER_SOURCE_DEC_CONFIG_BLOCK);
+ if (!ctl_dec_data) {
+ ALOGE("%s: ERROR codec config data mixer control not identifed", __func__);
+ return false;
+ }
+ memset(&dec_cfg, 0x0, sizeof(dec_cfg));
+ dec_cfg.abr_cfg.dec_format = MEDIA_FMT_APTX_AD_SPEECH;
+ dec_cfg.abr_cfg.imc_info.direction = IMC_TRANSMIT;
+ dec_cfg.abr_cfg.imc_info.enable = IMC_ENABLE;
+ dec_cfg.abr_cfg.imc_info.purpose = IMC_PURPOSE_ID_BT_INFO;
+ dec_cfg.abr_cfg.imc_info.comm_instance = APTX_AD_SPEECH_INSTANCE_ID;
+ dec_cfg.speech_mode.mode = a2dp.adev->swb_speech_mode;
+ dec_cfg.speech_mode.swapping = SWAP_ENABLE;
+
+ ret = mixer_ctl_set_array(ctl_dec_data, &dec_cfg,
+ sizeof(dec_cfg));
+ if (ret != 0) {
+ ALOGE("%s: Failed to set decoder config", __func__);
+ return false;
+ }
+ return true;
+}
+
+int sco_start_configuration()
+{
+ ALOGD("sco_start_configuration start");
+
+ if (!a2dp.swb_configured) {
+ a2dp.bt_encoder_format = CODEC_TYPE_APTX_AD_SPEECH;
+ /* Configure AFE codec*/
+ if (configure_aptx_ad_speech_enc_fmt() &&
+ configure_aptx_ad_speech_dec_fmt()) {
+ ALOGD("%s: SCO enc/dec configured successfully", __func__);
+ } else {
+ ALOGE("%s: failed to send SCO configuration", __func__);
+ return -ETIMEDOUT;
+ }
+ /* Configure backend*/
+ a2dp.enc_sampling_rate = SAMPLING_RATE_96K;
+ a2dp.enc_channels = CH_MONO;
+ a2dp.abr_config.is_abr_enabled = true;
+ a2dp_set_backend_cfg(SOURCE);
+ /* Start abr*/
+ start_abr();
+ a2dp.swb_configured = true;
+ }
+ return 0;
+}
+
+void sco_reset_configuration()
+{
+ ALOGD("sco_reset_configuration start");
+
+ reset_codec_config();
+ a2dp.bt_encoder_format = CODEC_TYPE_INVALID;
+ a2dp.swb_configured = false;
+}
diff --git a/hal/audio_extn/audio_extn.c b/hal/audio_extn/audio_extn.c
index 431c248..24ed4c5 100644
--- a/hal/audio_extn/audio_extn.c
+++ b/hal/audio_extn/audio_extn.c
@@ -189,6 +189,7 @@
static bool audio_extn_concurrent_capture_enabled = false;
static bool audio_extn_compress_in_enabled = false;
static bool audio_extn_battery_listener_enabled = false;
+static bool audio_extn_maxx_audio_enabled = false;
#define AUDIO_PARAMETER_KEY_AANC_NOISE_LEVEL "aanc_noise_level"
#define AUDIO_PARAMETER_KEY_ANC "anc_enabled"
@@ -3791,6 +3792,13 @@
typedef int (*a2dp_stop_capture_t)();
static a2dp_stop_capture_t a2dp_stop_capture;
+typedef int (*sco_start_configuration_t)();
+static sco_start_configuration_t sco_start_configuration;
+
+typedef void (*sco_reset_configuration_t)();
+static sco_reset_configuration_t sco_reset_configuration;
+
+
int a2dp_offload_feature_init(bool is_feature_enabled)
{
ALOGD("%s: Called with feature %s", __func__,
@@ -3842,6 +3850,15 @@
ALOGE("%s: dlsym failed", __func__);
goto feature_disabled;
}
+ // initialize APIs for SWB extension
+ if (!(sco_start_configuration =
+ (sco_start_configuration_t)dlsym(a2dp_lib_handle, "sco_start_configuration")) ||
+ !(sco_reset_configuration =
+ (sco_reset_configuration_t)dlsym(a2dp_lib_handle, "sco_reset_configuration"))) {
+ ALOGE("%s: dlsym failed for swb APIs", __func__);
+ sco_start_configuration = NULL;
+ sco_reset_configuration = NULL;
+ }
ALOGD("%s:: ---- Feature A2DP_OFFLOAD is Enabled ----", __func__);
return 0;
}
@@ -3965,6 +3982,16 @@
return (a2dp_stop_capture ? a2dp_stop_capture() : 0);
}
+int audio_extn_sco_start_configuration()
+{
+ return (sco_start_configuration? sco_start_configuration() : 0);
+}
+
+void audio_extn_sco_reset_configuration()
+{
+ return (sco_reset_configuration? sco_reset_configuration() : 0);
+}
+
// END: A2DP_OFFLOAD =====================================================================
// START: HFP ======================================================================
@@ -4722,6 +4749,134 @@
{
return (batt_prop_is_charging)? batt_prop_is_charging(): false;
}
+// END: BATTERY_LISTENER ================================================================
+
+// START: MAXX_AUDIO =====================================================================
+#ifdef __LP64__
+#define MAXX_AUDIO_LIB_PATH "/vendor/lib64/libmaxxaudio.so"
+#else
+#define MAXX_AUDIO_LIB_PATH "/vendor/lib/libmaxxaudio.so"
+#endif
+
+static void *maxxaudio_lib_handle = NULL;
+
+typedef void (*maxxaudio_init_t)(void *, maxx_audio_init_config_t);
+static maxxaudio_init_t maxxaudio_init;
+
+typedef void (*maxxaudio_deinit_t)();
+static maxxaudio_deinit_t maxxaudio_deinit;
+
+typedef bool (*maxxaudio_set_state_t)(struct audio_device*, int,
+ float, bool);
+static maxxaudio_set_state_t maxxaudio_set_state;
+
+typedef void (*maxxaudio_set_device_t)(struct audio_usecase *);
+static maxxaudio_set_device_t maxxaudio_set_device;
+
+typedef void (*maxxaudio_set_parameters_t)(struct audio_device *,
+ struct str_parms *);
+static maxxaudio_set_parameters_t maxxaudio_set_parameters;
+
+typedef bool (*maxxaudio_supported_usb_t)();
+static maxxaudio_supported_usb_t maxxaudio_supported_usb;
+
+int maxx_audio_feature_init(bool is_feature_enabled)
+{
+ audio_extn_maxx_audio_enabled = is_feature_enabled;
+ ALOGD("%s: Called with feature %s", __func__,
+ is_feature_enabled ? "Enabled" : "NOT Enabled");
+ if (is_feature_enabled) {
+ // dlopen lib
+ maxxaudio_lib_handle = dlopen(MAXX_AUDIO_LIB_PATH, RTLD_NOW);
+
+ if (!maxxaudio_lib_handle) {
+ ALOGE("%s: dlopen failed", __func__);
+ goto feature_disabled;
+ }
+
+ if (!(maxxaudio_init =
+ (maxxaudio_init_t)dlsym(maxxaudio_lib_handle, "ma_init")) ||
+ !(maxxaudio_deinit =
+ (maxxaudio_deinit_t)dlsym(maxxaudio_lib_handle, "ma_deinit")) ||
+ !(maxxaudio_set_state =
+ (maxxaudio_set_state_t)dlsym(maxxaudio_lib_handle, "ma_set_state")) ||
+ !(maxxaudio_set_device =
+ (maxxaudio_set_device_t)dlsym(maxxaudio_lib_handle, "ma_set_device")) ||
+ !(maxxaudio_set_parameters =
+ (maxxaudio_set_parameters_t)dlsym(maxxaudio_lib_handle, "ma_set_parameters")) ||
+ !(maxxaudio_supported_usb =
+ (maxxaudio_supported_usb_t)dlsym(
+ maxxaudio_lib_handle, "ma_supported_usb"))) {
+ ALOGE("%s: dlsym failed", __func__);
+ goto feature_disabled;
+ }
+ ALOGD("%s:: ---- Feature MAXX_AUDIO is Enabled ----", __func__);
+ return 0;
+ }
+
+feature_disabled:
+ if (maxxaudio_lib_handle) {
+ dlclose(maxxaudio_lib_handle);
+ maxxaudio_lib_handle = NULL;
+ }
+
+ maxxaudio_init = NULL;
+ maxxaudio_deinit = NULL;
+ maxxaudio_set_state = NULL;
+ maxxaudio_set_device = NULL;
+ maxxaudio_set_parameters = NULL;
+ maxxaudio_supported_usb = NULL;
+ ALOGW(":: %s: ---- Feature MAXX_AUDIO is disabled ----", __func__);
+ return -ENOSYS;
+}
+
+bool audio_extn_is_maxx_audio_enabled()
+{
+ return audio_extn_maxx_audio_enabled;
+}
+
+void audio_extn_ma_init(void *platform)
+{
+
+ if (maxxaudio_init) {
+ maxx_audio_init_config_t init_config;
+ init_config.fp_platform_set_parameters = platform_set_parameters;
+ init_config.fp_audio_extn_get_snd_card_split = audio_extn_get_snd_card_split;
+ maxxaudio_init(platform, init_config);
+ }
+}
+
+void audio_extn_ma_deinit()
+{
+ if (maxxaudio_deinit)
+ maxxaudio_deinit();
+}
+
+bool audio_extn_ma_set_state(struct audio_device *adev, int stream_type,
+ float vol, bool active)
+{
+ return (maxxaudio_set_state ?
+ maxxaudio_set_state(adev, stream_type, vol, active): false);
+}
+
+void audio_extn_ma_set_device(struct audio_usecase *usecase)
+{
+ if (maxxaudio_set_device)
+ maxxaudio_set_device(usecase);
+}
+
+void audio_extn_ma_set_parameters(struct audio_device *adev,
+ struct str_parms *parms)
+{
+ if (maxxaudio_set_parameters)
+ maxxaudio_set_parameters(adev, parms);
+}
+
+bool audio_extn_ma_supported_usb()
+{
+ return (maxxaudio_supported_usb ? maxxaudio_supported_usb(): false);
+}
+// END: MAXX_AUDIO =====================================================================
void audio_extn_feature_init(int is_running_with_enhanced_fwk)
{
@@ -4831,6 +4986,9 @@
case BATTERY_LISTENER:
battery_listener_feature_init(enable);
break;
+ case MAXX_AUDIO:
+ maxx_audio_feature_init(enable);
+ break;
default:
break;
}
diff --git a/hal/audio_extn/audio_extn.h b/hal/audio_extn/audio_extn.h
index 51e3ba2..e1e3ca0 100644
--- a/hal/audio_extn/audio_extn.h
+++ b/hal/audio_extn/audio_extn.h
@@ -313,6 +313,9 @@
bool audio_extn_a2dp_source_is_suspended();
int audio_extn_a2dp_start_capture();
int audio_extn_a2dp_stop_capture();
+int audio_extn_sco_start_configuration();
+void audio_extn_sco_reset_configuration();
+
// --- Function pointers from audio_extn needed by A2DP_OFFLOAD
typedef int (*fp_check_a2dp_restore_t)(struct audio_device *,
@@ -323,7 +326,24 @@
};
typedef struct a2dp_offload_init_config a2dp_offload_init_config_t;
// END: A2DP_OFFLOAD FEATURE ====================================================
-
+// START: MAXX_AUDIO FEATURE ==================================================
+void audio_extn_ma_init(void *platform);
+void audio_extn_ma_deinit();
+bool audio_extn_ma_set_state(struct audio_device *adev, int stream_type,
+ float vol, bool active);
+void audio_extn_ma_set_device(struct audio_usecase *usecase);
+void audio_extn_ma_set_parameters(struct audio_device *adev,
+ struct str_parms *parms);
+bool audio_extn_ma_supported_usb();
+bool audio_extn_is_maxx_audio_enabled();
+typedef int (*fp_platform_set_parameters_t)(void*, struct str_parms*);
+// --- Function pointers from audio_extn needed by MAXX_AUDIO
+struct maxx_audio_init_config {
+ fp_platform_set_parameters_t fp_platform_set_parameters;
+ fp_audio_extn_get_snd_card_split_t fp_audio_extn_get_snd_card_split;
+};
+typedef struct maxx_audio_init_config maxx_audio_init_config_t;
+// START: MAXX_AUDIO FEATURE ==================================================
//START: SSRRC_FEATURE ==========================================================
bool audio_extn_ssr_check_usecase(struct stream_in *in);
int audio_extn_ssr_set_usecase(struct stream_in *in,
diff --git a/hal/audio_extn/audio_feature_manager.c b/hal/audio_extn/audio_feature_manager.c
index a3120df..e121426 100644
--- a/hal/audio_extn/audio_feature_manager.c
+++ b/hal/audio_extn/audio_feature_manager.c
@@ -168,6 +168,8 @@
return confValues->compress_in_enabled;
case BATTERY_LISTENER:
return confValues->battery_listener_enabled;
+ case MAXX_AUDIO:
+ return confValues->maxx_audio_enabled;
case COMPRESS_METADATA_NEEDED:
return confValues->compress_metadata_needed;
case INCALL_MUSIC:
diff --git a/hal/audio_extn/audio_feature_manager.h b/hal/audio_extn/audio_feature_manager.h
index 9e3c541..8df076c 100644
--- a/hal/audio_extn/audio_feature_manager.h
+++ b/hal/audio_extn/audio_feature_manager.h
@@ -70,6 +70,7 @@
COMPRESS_IN_CAPTURE,
BATTERY_LISTENER,
COMPRESS_METADATA_NEEDED,
+ MAXX_AUDIO,
COMPRESS_VOIP,
VOICE_START = COMPRESS_VOIP,
DYNAMIC_ECNS,
diff --git a/hal/audio_extn/audiozoom.c b/hal/audio_extn/audiozoom.c
new file mode 100644
index 0000000..73e4862
--- /dev/null
+++ b/hal/audio_extn/audiozoom.c
@@ -0,0 +1,257 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "audio_hw_audiozoom"
+/*#define LOG_NDEBUG 0*/
+
+#include <errno.h>
+#include <log/log.h>
+#include <stdlib.h>
+#include <expat.h>
+#include <audio_hw.h>
+#include <system/audio.h>
+#include <platform_api.h>
+#include "audio_extn.h"
+
+#include "audiozoom.h"
+
+#include <resolv.h>
+
+#define AUDIOZOOM_PRESET_FILE "/vendor/etc/audiozoom.xml"
+
+typedef struct qdsp_audiozoom_cfg {
+ uint32_t topo_id;
+ uint32_t module_id;
+ uint32_t instance_id;
+ uint32_t zoom_param_id;
+ uint32_t wide_param_id;
+ uint32_t dir_param_id;
+ uint32_t app_type;
+} qdsp_audiozoom_cfg_t;
+
+static qdsp_audiozoom_cfg_t qdsp_audiozoom;
+
+static void start_tag(void *userdata __unused, const XML_Char *tag_name,
+ const XML_Char **attr)
+{
+ uint32_t index = 0;
+
+ if (!attr) {
+ ALOGE("%s: NULL platform/tag_name/attr", __func__);
+ return;
+ }
+
+ if (strcmp(tag_name, "topo") == 0) {
+ if (strcmp(attr[0], "id") == 0) {
+ if (attr[1])
+ qdsp_audiozoom.topo_id = atoi(attr[1]);
+ }
+ } else if (strcmp(tag_name, "module") == 0) {
+ if (strcmp(attr[0], "id") == 0) {
+ if (attr[1])
+ qdsp_audiozoom.module_id = atoi(attr[1]);
+ }
+ } else if (strcmp(tag_name, "param") == 0) {
+ while (attr[index] != NULL) {
+ if (strcmp(attr[index], "zoom_id") == 0) {
+ index++;
+ if (attr[index])
+ qdsp_audiozoom.zoom_param_id = atoi(attr[index]);
+ else
+ break;
+ } else if (strcmp(attr[index], "wide_id") == 0) {
+ index++;
+ if (attr[index])
+ qdsp_audiozoom.wide_param_id = atoi(attr[index]);
+ else
+ break;
+ } else if (strcmp(attr[index], "dir_id") == 0) {
+ index++;
+ if (attr[index])
+ qdsp_audiozoom.dir_param_id = atoi(attr[index]);
+ else
+ break;
+ }
+ index++;
+ }
+ } else if (strcmp(tag_name, "app_type") == 0) {
+ if (strcmp(attr[0], "id") == 0) {
+ if (attr[1])
+ qdsp_audiozoom.app_type = atoi(attr[1]);
+ }
+ } else if (strcmp(tag_name, "instance") == 0) {
+ if (strcmp(attr[0], "id") == 0) {
+ if (attr[1])
+ qdsp_audiozoom.instance_id = atoi(attr[1]);
+ }
+ } else {
+ ALOGE("%s: %s is not a supported tag", __func__, tag_name);
+ }
+
+ return;
+}
+
+static void end_tag(void *userdata __unused, const XML_Char *tag_name)
+{
+ if (strcmp(tag_name, "topo") == 0) {
+ } else if (strcmp(tag_name, "module") == 0) {
+ } else if (strcmp(tag_name, "param") == 0) {
+ } else if (strcmp(tag_name, "app_type") == 0) {
+ } else if (strcmp(tag_name, "instance") == 0) {
+ } else {
+ ALOGE("%s: %s is not a supported tag", __func__, tag_name);
+ }
+}
+
+static int audio_extn_audiozoom_parse_info(const char *filename)
+{
+ XML_Parser parser;
+ FILE *file;
+ int ret = 0;
+ int bytes_read;
+ void *buf;
+ static const uint32_t kBufSize = 1024;
+
+ file = fopen(filename, "r");
+ if (!file) {
+ ALOGE("%s: Failed to open %s", __func__, filename);
+ ret = -ENODEV;
+ goto done;
+ }
+
+ parser = XML_ParserCreate(NULL);
+ if (!parser) {
+ ALOGE("%s: Failed to create XML parser!", __func__);
+ ret = -ENODEV;
+ goto err_close_file;
+ }
+
+ XML_SetElementHandler(parser, start_tag, end_tag);
+
+ while (1) {
+ buf = XML_GetBuffer(parser, kBufSize);
+ if (buf == NULL) {
+ ALOGE("%s: XML_GetBuffer failed", __func__);
+ ret = -ENOMEM;
+ goto err_free_parser;
+ }
+
+ bytes_read = fread(buf, 1, kBufSize, file);
+ if (bytes_read < 0) {
+ ALOGE("%s: fread failed, bytes read = %d", __func__, bytes_read);
+ ret = bytes_read;
+ goto err_free_parser;
+ }
+
+ if (XML_ParseBuffer(parser, bytes_read,
+ bytes_read == 0) == XML_STATUS_ERROR) {
+ ALOGE("%s: XML_ParseBuffer failed, for %s",
+ __func__, filename);
+ ret = -EINVAL;
+ goto err_free_parser;
+ }
+
+ if (bytes_read == 0)
+ break;
+ }
+
+err_free_parser:
+ XML_ParserFree(parser);
+err_close_file:
+ fclose(file);
+done:
+ return ret;
+}
+
+int audio_extn_audiozoom_set_microphone_direction(
+ struct stream_in *in, audio_microphone_direction_t dir)
+{
+ (void)in;
+ (void)dir;
+ return 0;
+}
+
+static int audio_extn_audiozoom_set_microphone_field_dimension_zoom(
+ struct stream_in *in, float zoom)
+{
+ struct audio_device *adev = in->dev;
+ struct str_parms *parms = str_parms_create();
+ /* The encoding process in b64_ntop represents 24-bit groups of input bits
+ as output strings of 4 encoded characters. */
+ char data[((sizeof(zoom) + 2) / 3) * 4 + 1] = {0};
+ int32_t ret;
+
+ if (zoom > 1.0 || zoom < 0)
+ return -EINVAL;
+
+ if (qdsp_audiozoom.topo_id == 0 || qdsp_audiozoom.module_id == 0 ||
+ qdsp_audiozoom.zoom_param_id == 0)
+ return -ENOSYS;
+
+ str_parms_add_int(parms, "cal_devid", in->device);
+ str_parms_add_int(parms, "cal_apptype", in->app_type_cfg.app_type);
+ str_parms_add_int(parms, "cal_topoid", qdsp_audiozoom.topo_id);
+ str_parms_add_int(parms, "cal_moduleid", qdsp_audiozoom.module_id);
+ str_parms_add_int(parms, "cal_instanceid", qdsp_audiozoom.instance_id);
+ str_parms_add_int(parms, "cal_paramid", qdsp_audiozoom.zoom_param_id);
+
+ ret = b64_ntop((uint8_t*)&zoom, sizeof(zoom), data, sizeof(data));
+ if (ret > 0) {
+ str_parms_add_str(parms, "cal_data", data);
+
+ platform_set_parameters(adev->platform, parms);
+ } else {
+ ALOGE("%s: failed to convert data to string, ret %d", __func__, ret);
+ }
+
+ str_parms_destroy(parms);
+
+ return 0;
+}
+
+static int audio_extn_audiozoom_set_microphone_field_dimension_wide_angle(
+ struct stream_in *in, float zoom)
+{
+ (void)in;
+ (void)zoom;
+ return 0;
+}
+
+int audio_extn_audiozoom_set_microphone_field_dimension(
+ struct stream_in *in, float zoom)
+{
+ if (zoom > 1.0 || zoom < -1.0)
+ return -EINVAL;
+
+ if (zoom >= 0 && zoom <= 1.0)
+ return audio_extn_audiozoom_set_microphone_field_dimension_zoom(in, zoom);
+
+ if (zoom >= -1.0 && zoom <= 0)
+ return audio_extn_audiozoom_set_microphone_field_dimension_wide_angle(in, zoom);
+
+ return 0;
+}
+
+int audio_extn_audiozoom_init()
+{
+ audio_extn_audiozoom_parse_info(AUDIOZOOM_PRESET_FILE);
+
+ ALOGV("%s: topo_id=%d, module_id=%d, instance_id=%d, zoom__id=%d, dir_id=%d, app_type=%d",
+ __func__, qdsp_audiozoom.topo_id, qdsp_audiozoom.module_id, qdsp_audiozoom.instance_id,
+ qdsp_audiozoom.zoom_param_id, qdsp_audiozoom.dir_param_id,qdsp_audiozoom.app_type);
+
+ return 0;
+}
diff --git a/hal/audio_extn/audiozoom.h b/hal/audio_extn/audiozoom.h
new file mode 100644
index 0000000..2c0ad71
--- /dev/null
+++ b/hal/audio_extn/audiozoom.h
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef AUDIOZOOM_H_
+#define AUDIOZOOM_H_
+
+#ifndef AUDIOZOOM_QDSP_ENABLED
+#define audio_extn_audiozoom_init() (0)
+#define audio_extn_audiozoom_set_microphone_direction(stream, dir) (-ENOSYS)
+#define audio_extn_audiozoom_set_microphone_field_dimension(stream, zoom) (-ENOSYS)
+#else
+int audio_extn_audiozoom_init();
+int audio_extn_audiozoom_set_microphone_direction(struct stream_in *stream,
+ audio_microphone_direction_t dir);
+int audio_extn_audiozoom_set_microphone_field_dimension(struct stream_in *stream, float zoom);
+#endif
+
+#endif /* AUDIOZOOM_H_ */
diff --git a/hal/audio_extn/maxxaudio.c b/hal/audio_extn/maxxaudio.c
index 5f2a7f0..8830486 100644
--- a/hal/audio_extn/maxxaudio.c
+++ b/hal/audio_extn/maxxaudio.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2018-2019 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -156,12 +156,15 @@
static uint16_t g_supported_dev = 0;
static struct ma_state ma_cur_state_table[STREAM_MAX_TYPES];
static struct ma_platform_data *my_data = NULL;
+// --- external function dependency ---
+fp_platform_set_parameters_t fp_platform_set_parameters;
+fp_audio_extn_get_snd_card_split_t fp_audio_extn_get_snd_card_split;
static int set_audio_cal(const char *audio_cal)
{
ALOGV("set_audio_cal: %s", audio_cal);
- return platform_set_parameters(my_data->platform,
+ return fp_platform_set_parameters(my_data->platform,
str_parms_create_str(audio_cal));
}
@@ -200,7 +203,7 @@
((usecase->devices & AUDIO_DEVICE_OUT_SPEAKER) ||
(usecase->devices & AUDIO_DEVICE_OUT_SPEAKER_SAFE) ||
(audio_is_usb_out_device(usecase->devices) &&
- audio_extn_ma_supported_usb())))
+ ma_supported_usb())))
/* TODO: enable A2DP when it is ready */
return true;
@@ -390,7 +393,7 @@
}
// adev_init lock held
-void audio_extn_ma_init(void *platform)
+void ma_init(void *platform, maxx_audio_init_config_t init_config)
{
ma_stream_type_t i = 0;
int ret = 0;
@@ -398,7 +401,11 @@
char mps_path[128] = {0};
char cnf_path[128] = {0};
struct snd_card_split *snd_split_handle = NULL;
- snd_split_handle = audio_extn_get_snd_card_split();
+
+ fp_platform_set_parameters = init_config.fp_platform_set_parameters;
+ fp_audio_extn_get_snd_card_split = init_config.fp_audio_extn_get_snd_card_split;
+
+ snd_split_handle = fp_audio_extn_get_snd_card_split();
if (platform == NULL) {
ALOGE("%s: platform is NULL", __func__);
@@ -549,7 +556,7 @@
}
//adev_init lock held
-void audio_extn_ma_deinit()
+void ma_deinit()
{
if (my_data) {
/* deinit ma parameter */
@@ -566,7 +573,7 @@
}
// adev_init and adev lock held
-bool audio_extn_ma_set_state(struct audio_device *adev, int stream_type,
+bool ma_set_state(struct audio_device *adev, int stream_type,
float vol, bool active)
{
bool ret = false;
@@ -613,7 +620,7 @@
return ret;
}
-void audio_extn_ma_set_device(struct audio_usecase *usecase)
+void ma_set_device(struct audio_usecase *usecase)
{
int i = 0;
struct ma_audio_cal_settings ma_cal;
@@ -663,7 +670,7 @@
pthread_mutex_unlock(&my_data->lock);
}
-void audio_extn_ma_set_parameters(struct audio_device *adev,
+void ma_set_parameters(struct audio_device *adev,
struct str_parms *parms)
{
int ret;
@@ -720,7 +727,7 @@
}
}
-bool audio_extn_ma_supported_usb()
+bool ma_supported_usb()
{
ALOGV("%s: current support 0x%x", __func__, g_supported_dev);
return (g_supported_dev & SUPPORTED_USB) ? true : false;
diff --git a/hal/audio_extn/maxxaudio.h b/hal/audio_extn/maxxaudio.h
index 4c91107..1ab7f80 100644
--- a/hal/audio_extn/maxxaudio.h
+++ b/hal/audio_extn/maxxaudio.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2018-2019 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -17,23 +17,12 @@
#ifndef MAXXAUDIO_H_
#define MAXXAUDIO_H_
-#ifndef MAXXAUDIO_QDSP_ENABLED
-#define audio_extn_ma_init(platform) (0)
-#define audio_extn_ma_deinit() (0)
-#define audio_extn_ma_set_state(adev, type, vol, active) (false)
-#define audio_extn_ma_set_device(usecase) (0)
-#define audio_extn_ma_set_parameters(adev, param) (0)
-#define audio_extn_ma_supported_usb() (false)
-#else
-void audio_extn_ma_init(void *platform);
-void audio_extn_ma_deinit();
-bool audio_extn_ma_set_state(struct audio_device *adev, int stream_type,
+void ma_init(void *platform, maxx_audio_init_config_t init_config);
+void ma_deinit();
+bool ma_set_state(struct audio_device *adev, int stream_type,
float vol, bool active);
-void audio_extn_ma_set_device(struct audio_usecase *usecase);
-void audio_extn_ma_set_parameters(struct audio_device *adev,
+void ma_set_device(struct audio_usecase *usecase);
+void ma_set_parameters(struct audio_device *adev,
struct str_parms *parms);
-bool audio_extn_ma_supported_usb();
-#endif /* MAXXAUDIO_QDSP_ENABLED */
-
-#endif /* MAXXAUDIO_H_ */
-
+bool ma_supported_usb();
+#endif /* MAXXAUDIO_H_ */
\ No newline at end of file
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index c98d82c..4319174 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -75,6 +75,7 @@
#include "voice_extn.h"
#include "ip_hdlr_intf.h"
#include "audio_feature_manager.h"
+#include "audio_extn/audiozoom.h"
#include "sound/compress_params.h"
#include "sound/asound.h"
@@ -506,6 +507,11 @@
}
#endif
+static int in_set_microphone_direction(const struct audio_stream_in *stream,
+ audio_microphone_direction_t dir);
+static int in_set_microphone_field_dimension(const struct audio_stream_in *stream, float zoom);
+
+
static bool may_use_noirq_mode(struct audio_device *adev, audio_usecase_t uc_id,
int flags __unused)
{
@@ -1183,6 +1189,14 @@
goto err;
}
+ if (((SND_DEVICE_OUT_BT_SCO_SWB == snd_device) ||
+ (SND_DEVICE_IN_BT_SCO_MIC_SWB_NREC == snd_device) ||
+ (SND_DEVICE_IN_BT_SCO_MIC_SWB == snd_device)) &&
+ (audio_extn_sco_start_configuration() < 0)) {
+ ALOGE(" fail to configure sco control path ");
+ goto err;
+ }
+
/* due to the possibility of calibration overwrite between listen
and audio, notify listen hal before audio calibration is sent */
audio_extn_sound_trigger_update_device_status(snd_device,
@@ -1275,7 +1289,14 @@
audio_extn_a2dp_stop_playback();
else if (snd_device == SND_DEVICE_IN_BT_A2DP)
audio_extn_a2dp_stop_capture();
- else if ((snd_device == SND_DEVICE_OUT_HDMI) ||
+ else if ((snd_device == SND_DEVICE_OUT_BT_SCO_SWB) ||
+ (snd_device == SND_DEVICE_IN_BT_SCO_MIC_SWB_NREC) ||
+ (snd_device == SND_DEVICE_IN_BT_SCO_MIC_SWB)) {
+ if ((adev->snd_dev_ref_cnt[SND_DEVICE_OUT_BT_SCO_SWB] == 0) &&
+ (adev->snd_dev_ref_cnt[SND_DEVICE_IN_BT_SCO_MIC_SWB_NREC] == 0) &&
+ (adev->snd_dev_ref_cnt[SND_DEVICE_IN_BT_SCO_MIC_SWB] == 0))
+ audio_extn_sco_reset_configuration();
+ } else if ((snd_device == SND_DEVICE_OUT_HDMI) ||
(snd_device == SND_DEVICE_OUT_DISPLAY_PORT))
adev->is_channel_status_set = false;
else if ((snd_device == SND_DEVICE_OUT_HEADPHONES) &&
@@ -2761,6 +2782,8 @@
}
check_and_enable_effect(adev);
+ audio_extn_audiozoom_set_microphone_direction(in, in->zoom);
+ audio_extn_audiozoom_set_microphone_field_dimension(in, in->direction);
done_open:
audio_extn_perf_lock_release(&adev->perf_lock_handle);
@@ -4373,6 +4396,37 @@
return ret;
}
+static int in_set_microphone_direction(const struct audio_stream_in *stream,
+ audio_microphone_direction_t dir) {
+ struct stream_in *in = (struct stream_in *)stream;
+
+ ALOGVV("%s: standby %d source %d dir %d", __func__, in->standby, in->source, dir);
+
+ in->direction = dir;
+
+ if (in->standby)
+ return 0;
+
+ return audio_extn_audiozoom_set_microphone_direction(in, dir);
+}
+
+static int in_set_microphone_field_dimension(const struct audio_stream_in *stream, float zoom) {
+ struct stream_in *in = (struct stream_in *)stream;
+
+ ALOGVV("%s: standby %d source %d zoom %f", __func__, in->standby, in->source, zoom);
+
+ if (zoom > 1.0 || zoom < -1.0)
+ return -EINVAL;
+
+ in->zoom = zoom;
+
+ if (in->standby)
+ return 0;
+
+ return audio_extn_audiozoom_set_microphone_field_dimension(in, zoom);
+}
+
+
static bool stream_get_parameter_channels(struct str_parms *query,
struct str_parms *reply,
audio_channel_mask_t *supported_channel_masks) {
@@ -6602,6 +6656,53 @@
return ret;
}
+
+static void in_update_sink_metadata(struct audio_stream_in *stream,
+ const struct sink_metadata *sink_metadata) {
+
+ if (stream == NULL
+ || sink_metadata == NULL
+ || sink_metadata->tracks == NULL) {
+ return;
+ }
+
+ int error = 0;
+ struct stream_in *in = (struct stream_in *)stream;
+ struct audio_device *adev = in->dev;
+ audio_devices_t device = AUDIO_DEVICE_NONE;
+
+ if (sink_metadata->track_count != 0)
+ device = sink_metadata->tracks->dest_device;
+
+ lock_input_stream(in);
+ pthread_mutex_lock(&adev->lock);
+ ALOGV("%s: in->usecase: %d, device: %x", __func__, in->usecase, device);
+
+ if (in->usecase == USECASE_AUDIO_RECORD_AFE_PROXY
+ && device != AUDIO_DEVICE_NONE
+ && adev->voice_tx_output != NULL) {
+ /* Use the rx device from afe-proxy record to route voice call because
+ there is no routing if tx device is on primary hal and rx device
+ is on other hal during voice call. */
+ adev->voice_tx_output->devices = device;
+
+ if (!voice_is_call_state_active(adev)) {
+ if (adev->mode == AUDIO_MODE_IN_CALL) {
+ adev->current_call_output = adev->voice_tx_output;
+ error = voice_start_call(adev);
+ if (error != 0)
+ ALOGE("%s: start voice call failed %d", __func__, error);
+ }
+ } else {
+ adev->current_call_output = adev->voice_tx_output;
+ voice_update_devices_for_all_voice_usecases(adev);
+ }
+ }
+
+ pthread_mutex_unlock(&adev->lock);
+ pthread_mutex_unlock(&in->lock);
+}
+
int adev_open_output_stream(struct audio_hw_device *dev,
audio_io_handle_t handle,
audio_devices_t devices,
@@ -7541,33 +7642,34 @@
adev->screen_off = true;
}
-#ifndef MAXXAUDIO_QDSP_ENABLED
- ret = str_parms_get_int(parms, "rotation", &val);
- if (ret >= 0) {
- bool reverse_speakers = false;
- switch(val) {
- // FIXME: note that the code below assumes that the speakers are in the correct placement
- // relative to the user when the device is rotated 90deg from its default rotation. This
- // assumption is device-specific, not platform-specific like this code.
- case 270:
- reverse_speakers = true;
- break;
- case 0:
- case 90:
- case 180:
- break;
- default:
- ALOGE("%s: unexpected rotation of %d", __func__, val);
- status = -EINVAL;
+ if(!audio_extn_is_maxx_audio_enabled()) {
+ ret = str_parms_get_int(parms, "rotation", &val);
+ if (ret >= 0) {
+ bool reverse_speakers = false;
+ switch(val) {
+ // FIXME: note that the code below assumes that the speakers are
+ // in the correct placement relative to the user when the device
+ // is rotated 90deg from its default rotation. This assumption
+ // is device-specific, not platform-specific like this code.
+ case 270:
+ reverse_speakers = true;
+ break;
+ case 0:
+ case 90:
+ case 180:
+ break;
+ default:
+ ALOGE("%s: unexpected rotation of %d", __func__, val);
+ status = -EINVAL;
+ }
+ if (status == 0) {
+ // check and set swap
+ // - check if orientation changed and speaker active
+ // - set rotation and cache the rotation value
+ platform_check_and_set_swap_lr_channels(adev, reverse_speakers);
+ }
}
- if (status == 0) {
- // check and set swap
- // - check if orientation changed and speaker active
- // - set rotation and cache the rotation value
- platform_check_and_set_swap_lr_channels(adev, reverse_speakers);
- }
- }
-#endif
+ }
ret = str_parms_get_str(parms, AUDIO_PARAMETER_KEY_BT_SCO_WB, value, sizeof(value));
if (ret >= 0) {
@@ -7577,6 +7679,12 @@
adev->bt_wb_speech_enabled = false;
}
+ ret = str_parms_get_str(parms, "bt_swb", value, sizeof(value));
+ if (ret >= 0) {
+ val = atoi(value);
+ adev->swb_speech_mode = val;
+ }
+
ret = str_parms_get_str(parms, AUDIO_PARAMETER_DEVICE_CONNECT, value, sizeof(value));
if (ret >= 0) {
val = atoi(value);
@@ -8024,6 +8132,9 @@
in->stream.get_input_frames_lost = in_get_input_frames_lost;
in->stream.get_capture_position = in_get_capture_position;
in->stream.get_active_microphones = in_get_active_microphones;
+ in->stream.set_microphone_direction = in_set_microphone_direction;
+ in->stream.set_microphone_field_dimension = in_set_microphone_field_dimension;
+ in->stream.update_sink_metadata = in_update_sink_metadata;
in->device = devices;
in->source = source;
@@ -8033,6 +8144,8 @@
in->flags = flags;
in->bit_width = 16;
in->af_period_multiplier = 1;
+ in->direction = MIC_DIRECTION_UNSPECIFIED;
+ in->zoom = 0;
ALOGV("%s: source = %d, config->channel_mask = %d", __func__, source, config->channel_mask);
if (source == AUDIO_SOURCE_VOICE_UPLINK ||
@@ -9017,6 +9130,7 @@
adev->enable_voicerx = false;
adev->bt_wb_speech_enabled = false;
+ adev->swb_speech_mode = SPEECH_MODE_INVALID;
//initialize this to false for now,
//this will be set to true through set param
adev->vr_audio_mode_enabled = false;
@@ -9093,6 +9207,7 @@
adev->is_charging = audio_extn_battery_properties_is_charging();
audio_extn_sound_trigger_init(adev); /* dependent on snd_mon_init() */
audio_extn_sound_trigger_update_battery_status(adev->is_charging);
+ audio_extn_audiozoom_init();
pthread_mutex_unlock(&adev->lock);
/* Allocate memory for Device config params */
adev->device_cfg_params = (struct audio_device_config_param*)
diff --git a/hal/audio_hw.h b/hal/audio_hw.h
index 69c13e9..1a04cff 100644
--- a/hal/audio_hw.h
+++ b/hal/audio_hw.h
@@ -85,6 +85,9 @@
#define ACDB_DEV_TYPE_OUT 1
#define ACDB_DEV_TYPE_IN 2
+/* SCO SWB codec mode */
+#define SPEECH_MODE_INVALID 0xFFFF
+
/* support positional and index masks to 8ch */
#define MAX_SUPPORTED_CHANNEL_MASKS (2 * FCC_8)
#define MAX_SUPPORTED_FORMATS 15
@@ -409,6 +412,8 @@
struct audio_device *dev;
card_status_t card_status;
int capture_started;
+ float zoom;
+ audio_microphone_direction_t direction;
/* Array of supported channel mask configurations. +1 so that the last entry is always 0 */
audio_channel_mask_t supported_channel_masks[MAX_SUPPORTED_CHANNEL_MASKS + 1];
@@ -525,6 +530,7 @@
unsigned int cur_hdmi_bit_width;
unsigned int cur_wfd_channels;
bool bt_wb_speech_enabled;
+ unsigned int swb_speech_mode;
bool allow_afe_proxy_usage;
bool is_charging; // from battery listener
bool mic_break_enabled;
diff --git a/hal/msm8916/platform.c b/hal/msm8916/platform.c
index 45fadf5..7b15f53 100644
--- a/hal/msm8916/platform.c
+++ b/hal/msm8916/platform.c
@@ -6159,7 +6159,6 @@
ALOGV("%s: Format doesnt have to be set", __func__);
}
- format = format & AUDIO_FORMAT_MAIN_MASK;
/* Set data format only if there is a change from PCM to compressed
and vice versa */
if (set_mi2s_tx_data_format && (format ^ my_data->current_backend_cfg[backend_idx].format)) {
@@ -6169,7 +6168,7 @@
__func__, ext_disp_format);
return -EINVAL;
}
- if (format == AUDIO_FORMAT_PCM) {
+ if ((format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_PCM) {
ALOGE("%s:MI2S data format LPCM", __func__);
mixer_ctl_set_enum_by_string(ctl, "LPCM");
} else {
@@ -6724,18 +6723,25 @@
__func__, bit_width, sample_rate, channels);
}
- ALOGI("%s:txbecf: afe: Codec selected backend: %d updated bit width: %d and "
- "sample rate: %d", __func__, backend_idx, bit_width, sample_rate);
+ ALOGI("%s:txbecf: afe: current backend bit_width %d sample_rate %d channels %d, format %x",
+ __func__,
+ my_data->current_backend_cfg[backend_idx].bit_width,
+ my_data->current_backend_cfg[backend_idx].sample_rate,
+ my_data->current_backend_cfg[backend_idx].channels,
+ my_data->current_backend_cfg[backend_idx].format);
// Force routing if the expected bitwdith or samplerate
// is not same as current backend comfiguration
+ // Note that below if block would be entered even if main format is same
+ // but subformat is different for e.g. current backend is configured for 16 bit PCM
+ // as compared to 24 bit PCM backend requested
if ((bit_width != my_data->current_backend_cfg[backend_idx].bit_width) ||
(sample_rate != my_data->current_backend_cfg[backend_idx].sample_rate) ||
(channels != my_data->current_backend_cfg[backend_idx].channels) ||
- ((format & AUDIO_FORMAT_MAIN_MASK) != my_data->current_backend_cfg[backend_idx].format)) {
+ (format != my_data->current_backend_cfg[backend_idx].format)) {
backend_cfg->bit_width = bit_width;
backend_cfg->sample_rate= sample_rate;
backend_cfg->channels = channels;
- backend_cfg->format = format & AUDIO_FORMAT_MAIN_MASK;
+ backend_cfg->format = format;
backend_change = true;
ALOGI("%s:txbecf: afe: Codec backend needs to be updated. new bit width: %d "
"new sample rate: %d new channel: %d new format: %d",
diff --git a/hal/msm8974/hw_info.c b/hal/msm8974/hw_info.c
index 01df5bf..1c46ed7 100755
--- a/hal/msm8974/hw_info.c
+++ b/hal/msm8974/hw_info.c
@@ -684,6 +684,10 @@
sizeof("sm6150-qrd-snd-card"))) {
hw_info->is_stereo_spkr = false;
strlcpy(hw_info->name, "sm6150", sizeof(hw_info->name));
+ } else if (!strncmp(snd_card_name, "sm6150-wcd9375qrd-snd-card",
+ sizeof("sm6150-wcd9375qrd-snd-card"))) {
+ strlcpy(hw_info->name, "sm6150", sizeof(hw_info->name));
+ hw_info->is_stereo_spkr = false;
} else if (!strncmp(snd_card_name, "sm6150-tavil-snd-card",
sizeof("sm6150-tavil-snd-card"))) {
strlcpy(hw_info->name, "sm6150", sizeof(hw_info->name));
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index aa9d16e..acd237e 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -498,6 +498,7 @@
[SND_DEVICE_OUT_SPEAKER_AND_DISPLAY_PORT] = "speaker-and-display-port",
[SND_DEVICE_OUT_BT_SCO] = "bt-sco-headset",
[SND_DEVICE_OUT_BT_SCO_WB] = "bt-sco-headset-wb",
+ [SND_DEVICE_OUT_BT_SCO_SWB] = "bt-sco-headset-swb",
[SND_DEVICE_OUT_BT_A2DP] = "bt-a2dp",
[SND_DEVICE_OUT_SPEAKER_AND_BT_A2DP] = "speaker-and-bt-a2dp",
[SND_DEVICE_OUT_SPEAKER_SAFE_AND_BT_A2DP] = "speaker-safe-and-bt-a2dp",
@@ -544,9 +545,12 @@
[SND_DEVICE_OUT_SPEAKER_AND_BT_SCO] = "speaker-and-bt-sco",
[SND_DEVICE_OUT_SPEAKER_SAFE_AND_BT_SCO] = "speaker-safe-and-bt-sco",
[SND_DEVICE_OUT_SPEAKER_AND_BT_SCO_WB] = "speaker-and-bt-sco-wb",
+ [SND_DEVICE_OUT_SPEAKER_AND_BT_SCO_SWB] = "speaker-and-bt-sco-swb",
[SND_DEVICE_OUT_SPEAKER_SAFE_AND_BT_SCO_WB] = "speaker-safe-and-bt-sco-wb",
+ [SND_DEVICE_OUT_SPEAKER_SAFE_AND_BT_SCO_SWB] = "speaker-safe-and-bt-sco-swb",
[SND_DEVICE_OUT_SPEAKER_WSA_AND_BT_SCO] = "wsa-speaker-and-bt-sco",
[SND_DEVICE_OUT_SPEAKER_WSA_AND_BT_SCO_WB] = "wsa-speaker-and-bt-sco-wb",
+ [SND_DEVICE_OUT_SPEAKER_WSA_AND_BT_SCO_SWB] = "wsa-speaker-and-bt-sco-wb",
/* Capture sound devices */
[SND_DEVICE_IN_HANDSET_MIC] = "handset-mic",
@@ -593,6 +597,8 @@
[SND_DEVICE_IN_BT_SCO_MIC_NREC] = "bt-sco-mic",
[SND_DEVICE_IN_BT_SCO_MIC_WB] = "bt-sco-mic-wb",
[SND_DEVICE_IN_BT_SCO_MIC_WB_NREC] = "bt-sco-mic-wb",
+ [SND_DEVICE_IN_BT_SCO_MIC_SWB] = "bt-sco-mic-swb",
+ [SND_DEVICE_IN_BT_SCO_MIC_SWB_NREC] = "bt-sco-mic-swb",
[SND_DEVICE_IN_BT_A2DP] = "bt-a2dp-cap",
[SND_DEVICE_IN_CAMCORDER_MIC] = "camcorder-mic",
[SND_DEVICE_IN_VOICE_DMIC] = "voice-dmic-ef",
@@ -751,7 +757,9 @@
[SND_DEVICE_OUT_BT_SCO] = 22,
[SND_DEVICE_OUT_SPEAKER_SAFE_AND_BT_SCO] = 14,
[SND_DEVICE_OUT_BT_SCO_WB] = 39,
+ [SND_DEVICE_OUT_BT_SCO_SWB] = 39,
[SND_DEVICE_OUT_SPEAKER_SAFE_AND_BT_SCO_WB] = 14,
+ [SND_DEVICE_OUT_SPEAKER_SAFE_AND_BT_SCO_SWB] = 14,
[SND_DEVICE_OUT_BT_A2DP] = 20,
[SND_DEVICE_OUT_SPEAKER_AND_BT_A2DP] = 14,
[SND_DEVICE_OUT_SPEAKER_SAFE_AND_BT_A2DP] = 14,
@@ -834,6 +842,8 @@
[SND_DEVICE_IN_BT_SCO_MIC_NREC] = 122,
[SND_DEVICE_IN_BT_SCO_MIC_WB] = 38,
[SND_DEVICE_IN_BT_SCO_MIC_WB_NREC] = 123,
+ [SND_DEVICE_IN_BT_SCO_MIC_SWB] = 38,
+ [SND_DEVICE_IN_BT_SCO_MIC_SWB_NREC] = 123,
[SND_DEVICE_IN_BT_A2DP] = 21,
[SND_DEVICE_IN_CAMCORDER_MIC] = 4,
[SND_DEVICE_IN_VOICE_DMIC] = 41,
@@ -954,7 +964,9 @@
{TO_NAME_INDEX(SND_DEVICE_OUT_BT_SCO)},
{TO_NAME_INDEX(SND_DEVICE_OUT_SPEAKER_SAFE_AND_BT_SCO)},
{TO_NAME_INDEX(SND_DEVICE_OUT_BT_SCO_WB)},
+ {TO_NAME_INDEX(SND_DEVICE_OUT_BT_SCO_SWB)},
{TO_NAME_INDEX(SND_DEVICE_OUT_SPEAKER_SAFE_AND_BT_SCO_WB)},
+ {TO_NAME_INDEX(SND_DEVICE_OUT_SPEAKER_SAFE_AND_BT_SCO_SWB)},
{TO_NAME_INDEX(SND_DEVICE_OUT_BT_A2DP)},
{TO_NAME_INDEX(SND_DEVICE_OUT_SPEAKER_AND_BT_A2DP)},
{TO_NAME_INDEX(SND_DEVICE_OUT_SPEAKER_SAFE_AND_BT_A2DP)},
@@ -965,8 +977,10 @@
{TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_TTY_HCO_HANDSET)},
{TO_NAME_INDEX(SND_DEVICE_OUT_SPEAKER_AND_BT_SCO)},
{TO_NAME_INDEX(SND_DEVICE_OUT_SPEAKER_AND_BT_SCO_WB)},
+ {TO_NAME_INDEX(SND_DEVICE_OUT_SPEAKER_AND_BT_SCO_SWB)},
{TO_NAME_INDEX(SND_DEVICE_OUT_SPEAKER_WSA_AND_BT_SCO)},
{TO_NAME_INDEX(SND_DEVICE_OUT_SPEAKER_WSA_AND_BT_SCO_WB)},
+ {TO_NAME_INDEX(SND_DEVICE_OUT_SPEAKER_WSA_AND_BT_SCO_SWB)},
{TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_TTY_FULL_USB)},
{TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_TTY_VCO_USB)},
{TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_TX)},
@@ -1044,6 +1058,8 @@
{TO_NAME_INDEX(SND_DEVICE_IN_BT_SCO_MIC_NREC)},
{TO_NAME_INDEX(SND_DEVICE_IN_BT_SCO_MIC_WB)},
{TO_NAME_INDEX(SND_DEVICE_IN_BT_SCO_MIC_WB_NREC)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_BT_SCO_MIC_SWB)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_BT_SCO_MIC_SWB_NREC)},
{TO_NAME_INDEX(SND_DEVICE_IN_BT_A2DP)},
{TO_NAME_INDEX(SND_DEVICE_IN_CAMCORDER_MIC)},
{TO_NAME_INDEX(SND_DEVICE_IN_VOICE_DMIC)},
@@ -1515,7 +1531,9 @@
!strncmp(snd_card_name, "sdm439-sku1-snd-card",
sizeof("sdm439-sku1-snd-card")) ||
!strncmp(snd_card_name, "sdm439-snd-card-mtp",
- sizeof("sdm439-snd-card-mtp"))) {
+ sizeof("sdm439-snd-card-mtp")) ||
+ !strncmp(snd_card_name, "sm6150-wcd9375qrd-snd-card",
+ sizeof("sm6150-wcd9375qrd-snd-card"))) {
ALOGI("%s: snd_card_name: %s", __func__, snd_card_name);
my_data->is_internal_codec = true;
my_data->is_slimbus_interface = false;
@@ -1894,11 +1912,14 @@
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_BT_SCO_MIC_SWB] = strdup("bt-sco-swb");
+ backend_tag_table[SND_DEVICE_IN_BT_SCO_MIC_SWB_NREC] = strdup("bt-sco-swb");
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_BT_SCO_SWB] = strdup("bt-sco-swb");
backend_tag_table[SND_DEVICE_OUT_HDMI] = strdup("hdmi");
backend_tag_table[SND_DEVICE_OUT_SPEAKER_AND_HDMI] = strdup("speaker-and-hdmi");
backend_tag_table[SND_DEVICE_OUT_DISPLAY_PORT] = strdup("display-port");
@@ -1920,6 +1941,8 @@
strdup("speaker-safe-and-bt-sco");
backend_tag_table[SND_DEVICE_OUT_SPEAKER_SAFE_AND_BT_SCO_WB] =
strdup("speaker-safe-and-bt-sco-wb");
+ backend_tag_table[SND_DEVICE_OUT_SPEAKER_SAFE_AND_BT_SCO_SWB] =
+ strdup("speaker-safe-and-bt-sco-swb");
backend_tag_table[SND_DEVICE_IN_VOICE_TTY_FULL_USB_MIC] = strdup("usb-headset-mic");
backend_tag_table[SND_DEVICE_IN_VOICE_TTY_HCO_USB_MIC] = strdup("usb-headset-mic");
backend_tag_table[SND_DEVICE_IN_USB_HEADSET_MIC] = strdup("usb-headset-mic");
@@ -1987,6 +2010,7 @@
hw_interface_table[SND_DEVICE_OUT_SPEAKER_AND_DISPLAY_PORT] = strdup("SLIMBUS_0_RX-and-DISPLAY_PORT");
hw_interface_table[SND_DEVICE_OUT_BT_SCO] = strdup("SLIMBUS_7_RX");
hw_interface_table[SND_DEVICE_OUT_BT_SCO_WB] = strdup("SLIMBUS_7_RX");
+ hw_interface_table[SND_DEVICE_OUT_BT_SCO_SWB] = strdup("SLIMBUS_7_RX");
hw_interface_table[SND_DEVICE_OUT_BT_A2DP] = strdup("SLIMBUS_7_RX");
hw_interface_table[SND_DEVICE_OUT_SPEAKER_AND_BT_A2DP] = strdup("SLIMBUS_0_RX-and-SLIMBUS_7_RX");
hw_interface_table[SND_DEVICE_OUT_SPEAKER_SAFE_AND_BT_A2DP] =
@@ -2020,8 +2044,10 @@
hw_interface_table[SND_DEVICE_OUT_VOICE_SPEAKER_HFP] = strdup("SLIMBUS_0_RX");
hw_interface_table[SND_DEVICE_OUT_SPEAKER_AND_BT_SCO] = strdup("SLIMBUS_0_RX-and-SEC_AUX_PCM_RX");
hw_interface_table[SND_DEVICE_OUT_SPEAKER_AND_BT_SCO_WB] = strdup("SLIMBUS_0_RX-and-SEC_AUX_PCM_RX");
+ hw_interface_table[SND_DEVICE_OUT_SPEAKER_AND_BT_SCO_SWB] = strdup("SLIMBUS_0_RX-and-SEC_AUX_PCM_RX");
hw_interface_table[SND_DEVICE_OUT_SPEAKER_SAFE_AND_BT_SCO] = strdup("QUAT_TDM_RX_0-and-SLIMBUS_7_RX");
hw_interface_table[SND_DEVICE_OUT_SPEAKER_SAFE_AND_BT_SCO_WB] = strdup("QUAT_TDM_RX_0-and-SLIMBUS_7_RX");
+ hw_interface_table[SND_DEVICE_OUT_SPEAKER_SAFE_AND_BT_SCO_SWB] = strdup("QUAT_TDM_RX_0-and-SLIMBUS_7_RX");
hw_interface_table[SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED] = strdup("SLIMBUS_0_RX");
hw_interface_table[SND_DEVICE_OUT_VOICE_SPEAKER_STEREO_PROTECTED] = strdup("SLIMBUS_0_RX");
hw_interface_table[SND_DEVICE_OUT_SPEAKER_PROTECTED_VBAT] = strdup("SLIMBUS_0_RX");
@@ -2076,6 +2102,8 @@
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");
hw_interface_table[SND_DEVICE_IN_BT_SCO_MIC_WB_NREC] = strdup("SLIMBUS_7_TX");
+ hw_interface_table[SND_DEVICE_IN_BT_SCO_MIC_SWB] = strdup("SLIMBUS_7_TX");
+ hw_interface_table[SND_DEVICE_IN_BT_SCO_MIC_SWB_NREC] = strdup("SLIMBUS_7_TX");
hw_interface_table[SND_DEVICE_IN_BT_A2DP] = strdup("SLIMBUS_7_TX");
hw_interface_table[SND_DEVICE_IN_CAMCORDER_MIC] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_VOICE_DMIC] = strdup("SLIMBUS_0_TX");
@@ -2987,6 +3015,9 @@
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, "sm6150-wcd9375qrd-snd-card",
+ sizeof("sm6150-wcd9375qrd-snd-card")))
+ platform_info_init(PLATFORM_INFO_XML_PATH_QRD, my_data, PLATFORM);
else if (!strncmp(snd_card_name, "kona-qrd-snd-card",
sizeof("kona-qrd-snd-card")))
platform_info_init(PLATFORM_INFO_XML_PATH_QRD, my_data, PLATFORM);
@@ -4940,6 +4971,19 @@
new_snd_devices[0] = SND_DEVICE_OUT_SPEAKER_SAFE;
new_snd_devices[1] = SND_DEVICE_OUT_BT_SCO_WB;
ret = 0;
+ } else if (snd_device == SND_DEVICE_OUT_SPEAKER_AND_BT_SCO_SWB &&
+ !platform_check_backends_match(SND_DEVICE_OUT_SPEAKER, SND_DEVICE_OUT_BT_SCO_SWB)) {
+ *num_devices = 2;
+ new_snd_devices[0] = SND_DEVICE_OUT_SPEAKER;
+ new_snd_devices[1] = SND_DEVICE_OUT_BT_SCO_SWB;
+ ret = 0;
+ } else if (snd_device == SND_DEVICE_OUT_SPEAKER_SAFE_AND_BT_SCO_SWB &&
+ !platform_check_backends_match(SND_DEVICE_OUT_SPEAKER_SAFE,
+ SND_DEVICE_OUT_BT_SCO_SWB)) {
+ *num_devices = 2;
+ new_snd_devices[0] = SND_DEVICE_OUT_SPEAKER_SAFE;
+ new_snd_devices[1] = SND_DEVICE_OUT_BT_SCO_SWB;
+ ret = 0;
} else if (snd_device == SND_DEVICE_OUT_SPEAKER_SAFE_AND_USB_HEADSET &&
!platform_check_backends_match(SND_DEVICE_OUT_SPEAKER_SAFE, SND_DEVICE_OUT_USB_HEADSET)) {
*num_devices = 2;
@@ -5131,19 +5175,29 @@
snd_device = SND_DEVICE_OUT_SPEAKER_SAFE_AND_BT_A2DP;
} else if ((devices & AUDIO_DEVICE_OUT_ALL_SCO) &&
((devices & ~AUDIO_DEVICE_OUT_ALL_SCO) == AUDIO_DEVICE_OUT_SPEAKER)) {
- if (my_data->is_wsa_speaker)
- snd_device = adev->bt_wb_speech_enabled ?
- SND_DEVICE_OUT_SPEAKER_WSA_AND_BT_SCO_WB :
- SND_DEVICE_OUT_SPEAKER_WSA_AND_BT_SCO;
- else
- snd_device = adev->bt_wb_speech_enabled ?
- SND_DEVICE_OUT_SPEAKER_AND_BT_SCO_WB :
- SND_DEVICE_OUT_SPEAKER_AND_BT_SCO;
+ if (my_data->is_wsa_speaker) {
+ if (adev->swb_speech_mode != SPEECH_MODE_INVALID)
+ snd_device = SND_DEVICE_OUT_SPEAKER_WSA_AND_BT_SCO_SWB;
+ else
+ snd_device = adev->bt_wb_speech_enabled ?
+ SND_DEVICE_OUT_SPEAKER_WSA_AND_BT_SCO_WB :
+ SND_DEVICE_OUT_SPEAKER_WSA_AND_BT_SCO;
+ } else {
+ if (adev->swb_speech_mode != SPEECH_MODE_INVALID)
+ snd_device = SND_DEVICE_OUT_SPEAKER_AND_BT_SCO_SWB;
+ else
+ snd_device = adev->bt_wb_speech_enabled ?
+ SND_DEVICE_OUT_SPEAKER_AND_BT_SCO_WB :
+ SND_DEVICE_OUT_SPEAKER_AND_BT_SCO;
+ }
} else if ((devices & AUDIO_DEVICE_OUT_ALL_SCO) &&
((devices & ~AUDIO_DEVICE_OUT_ALL_SCO) == AUDIO_DEVICE_OUT_SPEAKER_SAFE)) {
- snd_device = adev->bt_wb_speech_enabled ?
- SND_DEVICE_OUT_SPEAKER_SAFE_AND_BT_SCO_WB :
- SND_DEVICE_OUT_SPEAKER_SAFE_AND_BT_SCO;
+ if (adev->swb_speech_mode != SPEECH_MODE_INVALID)
+ snd_device = SND_DEVICE_OUT_SPEAKER_SAFE_AND_BT_SCO_SWB;
+ else
+ snd_device = adev->bt_wb_speech_enabled ?
+ SND_DEVICE_OUT_SPEAKER_SAFE_AND_BT_SCO_WB :
+ SND_DEVICE_OUT_SPEAKER_SAFE_AND_BT_SCO;
} else if ((devices == (AUDIO_DEVICE_OUT_USB_DEVICE |
AUDIO_DEVICE_OUT_SPEAKER_SAFE)) ||
(devices == (AUDIO_DEVICE_OUT_USB_HEADSET |
@@ -5225,7 +5279,9 @@
SND_DEVICE_OUT_VOICE_USB_HEADPHONES;
}
} else if (devices & AUDIO_DEVICE_OUT_ALL_SCO) {
- if (adev->bt_wb_speech_enabled)
+ if (adev->swb_speech_mode != SPEECH_MODE_INVALID)
+ snd_device = SND_DEVICE_OUT_BT_SCO_SWB;
+ else if (adev->bt_wb_speech_enabled)
snd_device = SND_DEVICE_OUT_BT_SCO_WB;
else
snd_device = SND_DEVICE_OUT_BT_SCO;
@@ -5351,7 +5407,9 @@
else
snd_device = SND_DEVICE_OUT_SPEAKER;
} else if (devices & AUDIO_DEVICE_OUT_ALL_SCO) {
- if (adev->bt_wb_speech_enabled)
+ if (adev->swb_speech_mode != SPEECH_MODE_INVALID)
+ snd_device = SND_DEVICE_OUT_BT_SCO_SWB;
+ else if (adev->bt_wb_speech_enabled)
snd_device = SND_DEVICE_OUT_BT_SCO_WB;
else
snd_device = SND_DEVICE_OUT_BT_SCO;
@@ -5740,7 +5798,12 @@
if (audio_extn_hfp_is_active(adev))
platform_set_echo_reference(adev, true, out_device);
} else if (out_device & AUDIO_DEVICE_OUT_ALL_SCO) {
- if (adev->bt_wb_speech_enabled) {
+ if (adev->swb_speech_mode != SPEECH_MODE_INVALID) {
+ if (adev->bluetooth_nrec)
+ snd_device = SND_DEVICE_IN_BT_SCO_MIC_SWB_NREC;
+ else
+ snd_device = SND_DEVICE_IN_BT_SCO_MIC_SWB;
+ } else if (adev->bt_wb_speech_enabled) {
if (adev->bluetooth_nrec)
snd_device = SND_DEVICE_IN_BT_SCO_MIC_WB_NREC;
else
@@ -6050,7 +6113,12 @@
} 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) {
- if (adev->bt_wb_speech_enabled) {
+ if (adev->swb_speech_mode != SPEECH_MODE_INVALID) {
+ if (adev->bluetooth_nrec)
+ snd_device = SND_DEVICE_IN_BT_SCO_MIC_SWB_NREC;
+ else
+ snd_device = SND_DEVICE_IN_BT_SCO_MIC_SWB;
+ } else if (adev->bt_wb_speech_enabled) {
if (adev->bluetooth_nrec)
snd_device = SND_DEVICE_IN_BT_SCO_MIC_WB_NREC;
else
@@ -6113,7 +6181,12 @@
snd_device = my_data->fluence_sb_enabled ? SND_DEVICE_IN_HANDSET_MIC_SB
: SND_DEVICE_IN_HANDSET_MIC;
} else if (out_device & AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET) {
- if (adev->bt_wb_speech_enabled) {
+ if (adev->swb_speech_mode != SPEECH_MODE_INVALID) {
+ if (adev->bluetooth_nrec)
+ snd_device = SND_DEVICE_IN_BT_SCO_MIC_SWB_NREC;
+ else
+ snd_device = SND_DEVICE_IN_BT_SCO_MIC_SWB;
+ } else if (adev->bt_wb_speech_enabled) {
if (adev->bluetooth_nrec)
snd_device = SND_DEVICE_IN_BT_SCO_MIC_WB_NREC;
else
@@ -7389,7 +7462,6 @@
int ret = -EINVAL;
int backend_idx = platform_get_backend_index(snd_device);
struct platform_data *my_data = (struct platform_data *)adev->platform;
- backend_idx = platform_get_backend_index(snd_device);
unsigned int bit_width = backend_cfg.bit_width;
unsigned int sample_rate = backend_cfg.sample_rate;
unsigned int channels = backend_cfg.channels;
@@ -7611,7 +7683,6 @@
ALOGV("%s: Format doesnt have to be set", __func__);
}
- format = format & AUDIO_FORMAT_MAIN_MASK;
/* Set data format only if there is a change from PCM to compressed
and vice versa */
if (set_mi2s_tx_data_format && (format ^ my_data->current_backend_cfg[backend_idx].format)) {
@@ -7621,7 +7692,7 @@
__func__, ext_disp_format);
return -EINVAL;
}
- if (format == AUDIO_FORMAT_PCM) {
+ if ((format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_PCM) {
ALOGE("%s:Set %s to LPCM", __func__, ext_disp_format);
mixer_ctl_set_enum_by_string(ctl, "LPCM");
} else {
@@ -7790,6 +7861,7 @@
if (snd_device == SND_DEVICE_OUT_BT_A2DP ||
snd_device == SND_DEVICE_OUT_BT_SCO ||
snd_device == SND_DEVICE_OUT_BT_SCO_WB ||
+ snd_device == SND_DEVICE_OUT_BT_SCO_SWB ||
snd_device == SND_DEVICE_IN_BT_A2DP ||
snd_device == SND_DEVICE_OUT_AFE_PROXY) {
backend_change = false;
@@ -8193,18 +8265,25 @@
__func__, bit_width, sample_rate, channels);
}
- ALOGI("%s:txbecf: afe: Codec selected backend: %d updated bit width: %d and "
- "sample rate: %d", __func__, backend_idx, bit_width, sample_rate);
+ ALOGI("%s:txbecf: afe: current backend bit_width %d sample_rate %d channels %d, format %x",
+ __func__,
+ my_data->current_backend_cfg[backend_idx].bit_width,
+ my_data->current_backend_cfg[backend_idx].sample_rate,
+ my_data->current_backend_cfg[backend_idx].channels,
+ my_data->current_backend_cfg[backend_idx].format);
// Force routing if the expected bitwdith or samplerate
// is not same as current backend comfiguration
+ // Note that below if block would be entered even if main format is same
+ // but subformat is different for e.g. current backend is configured for 16 bit PCM
+ // as compared to 24 bit PCM backend requested
if ((bit_width != my_data->current_backend_cfg[backend_idx].bit_width) ||
(sample_rate != my_data->current_backend_cfg[backend_idx].sample_rate) ||
(channels != my_data->current_backend_cfg[backend_idx].channels) ||
- ((format & AUDIO_FORMAT_MAIN_MASK) != my_data->current_backend_cfg[backend_idx].format)) {
+ (format != my_data->current_backend_cfg[backend_idx].format)) {
backend_cfg->bit_width = bit_width;
backend_cfg->sample_rate= sample_rate;
backend_cfg->channels = channels;
- backend_cfg->format = format & AUDIO_FORMAT_MAIN_MASK;
+ backend_cfg->format = format;
backend_change = true;
ALOGI("%s:txbecf: afe: Codec backend needs to be updated. new bit width: %d "
"new sample rate: %d new channel: %d new format: %d",
diff --git a/hal/msm8974/platform.h b/hal/msm8974/platform.h
index ba7b01a..6203cf8 100644
--- a/hal/msm8974/platform.h
+++ b/hal/msm8974/platform.h
@@ -113,6 +113,7 @@
SND_DEVICE_OUT_SPEAKER_AND_DISPLAY_PORT,
SND_DEVICE_OUT_BT_SCO,
SND_DEVICE_OUT_BT_SCO_WB,
+ SND_DEVICE_OUT_BT_SCO_SWB,
SND_DEVICE_OUT_BT_A2DP,
SND_DEVICE_OUT_SPEAKER_AND_BT_A2DP,
SND_DEVICE_OUT_SPEAKER_SAFE_AND_BT_A2DP,
@@ -121,8 +122,11 @@
SND_DEVICE_OUT_SPEAKER_SAFE_AND_BT_SCO,
SND_DEVICE_OUT_SPEAKER_AND_BT_SCO_WB,
SND_DEVICE_OUT_SPEAKER_SAFE_AND_BT_SCO_WB,
+ SND_DEVICE_OUT_SPEAKER_AND_BT_SCO_SWB,
+ SND_DEVICE_OUT_SPEAKER_SAFE_AND_BT_SCO_SWB,
SND_DEVICE_OUT_SPEAKER_WSA_AND_BT_SCO,
SND_DEVICE_OUT_SPEAKER_WSA_AND_BT_SCO_WB,
+ SND_DEVICE_OUT_SPEAKER_WSA_AND_BT_SCO_SWB,
SND_DEVICE_OUT_VOICE_TTY_FULL_HEADPHONES,
SND_DEVICE_OUT_VOICE_TTY_VCO_HEADPHONES,
SND_DEVICE_OUT_VOICE_TTY_HCO_HANDSET,
@@ -222,6 +226,8 @@
SND_DEVICE_IN_BT_SCO_MIC_NREC,
SND_DEVICE_IN_BT_SCO_MIC_WB,
SND_DEVICE_IN_BT_SCO_MIC_WB_NREC,
+ SND_DEVICE_IN_BT_SCO_MIC_SWB,
+ SND_DEVICE_IN_BT_SCO_MIC_SWB_NREC,
SND_DEVICE_IN_BT_A2DP,
SND_DEVICE_IN_CAMCORDER_MIC,
SND_DEVICE_IN_VOICE_DMIC,