Merge "configs: sm6150:HAL compatibility for P upgrade"
diff --git a/configs/msm8909/msm8909.mk b/configs/msm8909/msm8909.mk
index d7249c1..bc475c6 100644
--- a/configs/msm8909/msm8909.mk
+++ b/configs/msm8909/msm8909.mk
@@ -44,6 +44,7 @@
BOARD_SUPPORTS_QSTHW_API := true
AUDIO_FEATURE_DISABLED_SOUND_TRIGGER_LEGACY_HAL := true
AUDIO_FEATURE_ENABLED_COMPRESS_INPUT := true
+AUDIO_FEATURE_ENABLED_CUSTOMSTEREO := true
##AUDIO_FEATURE_FLAGS
@@ -167,4 +168,10 @@
android.hardware.audio@2.0-service \
android.hardware.audio@2.0-impl \
android.hardware.audio.effect@2.0-impl \
- android.hardware.soundtrigger@2.0-impl
+ android.hardware.soundtrigger@2.0-impl \
+ android.hardware.audio@4.0 \
+ android.hardware.audio.common@4.0 \
+ android.hardware.audio.common@4.0-util \
+ android.hardware.audio@4.0-impl \
+ android.hardware.audio.effect@4.0 \
+ android.hardware.audio.effect@4.0-impl
diff --git a/configs/msm8937/sound_trigger_platform_info.xml b/configs/msm8937/sound_trigger_platform_info.xml
index 1f4b4ab..547fd22 100644
--- a/configs/msm8937/sound_trigger_platform_info.xml
+++ b/configs/msm8937/sound_trigger_platform_info.xml
@@ -102,7 +102,7 @@
<!-- transfer_mode: "FTRT" or "RT" -->
<!-- kw_duration is in milli seconds. It is valid only for FTRT transfer mode -->
<param capture_keyword="PCM_packet, RT, 2000" />
- <param client_capture_read_delay="2000" />
+ <param client_capture_read_delay="2500" />
<arm_ss_usecase>
<!-- Options are "KEYWORD_DETECTION", "USER_VERIFICATION", "CUSTOM_DETECTION" -->
<param sm_detection_type= "KEYWORD_DETECTION" />
diff --git a/configs/msm8953/sound_trigger_platform_info.xml b/configs/msm8953/sound_trigger_platform_info.xml
index ddaa2e5..b68a2b1 100644
--- a/configs/msm8953/sound_trigger_platform_info.xml
+++ b/configs/msm8953/sound_trigger_platform_info.xml
@@ -102,7 +102,7 @@
<!-- transfer_mode: "FTRT" or "RT" -->
<!-- kw_duration is in milli seconds. It is valid only for FTRT transfer mode -->
<param capture_keyword="PCM_packet, RT, 2000" />
- <param client_capture_read_delay="2000" />
+ <param client_capture_read_delay="2500" />
<arm_ss_usecase>
<!-- Options are "KEYWORD_DETECTION", "USER_VERIFICATION", "CUSTOM_DETECTION" -->
<param sm_detection_type= "KEYWORD_DETECTION" />
diff --git a/configs/msmnile/audio_output_policy.conf b/configs/msmnile/audio_io_policy.conf
similarity index 90%
rename from configs/msmnile/audio_output_policy.conf
rename to configs/msmnile/audio_io_policy.conf
index 877b6a5..bac3ec1 100644
--- a/configs/msmnile/audio_output_policy.conf
+++ b/configs/msmnile/audio_io_policy.conf
@@ -82,3 +82,18 @@
app_type 69940
}
}
+
+inputs {
+ record_24bit {
+ formats AUDIO_FORMAT_PCM_24_BIT_PACKED|AUDIO_FORMAT_PCM_24_BIT
+ sampling_rates 44100|48000|88200|96000|176400|192000
+ bit_width 24
+ app_type 69938
+ }
+ record_32bit {
+ formats AUDIO_FORMAT_PCM_32_BIT|AUDIO_FORMAT_PCM_FLOAT
+ sampling_rates 44100|48000|88200|96000|176400|192000
+ bit_width 32
+ app_type 69938
+ }
+}
diff --git a/configs/msmnile/audio_platform_info.xml b/configs/msmnile/audio_platform_info.xml
index c86cf96..52b1b09 100644
--- a/configs/msmnile/audio_platform_info.xml
+++ b/configs/msmnile/audio_platform_info.xml
@@ -42,6 +42,10 @@
<device name="SND_DEVICE_IN_UNPROCESSED_THREE_MIC" acdb_id="145"/>
<device name="SND_DEVICE_IN_UNPROCESSED_QUAD_MIC" acdb_id="146"/>
<device name="SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC" acdb_id="147"/>
+ <device name="SND_DEVICE_IN_USB_HEADSET_HEX_MIC" acdb_id="162"/>
+ <device name="SND_DEVICE_IN_USB_HEADSET_HEX_MIC_AEC" acdb_id="162"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_USB_HEADSET_HEX_MIC" acdb_id="162"/>
+ <device name="SND_DEVICE_IN_VOCE_RECOG_USB_HEADSET_HEX_MIC" acdb_id="162"/>
</acdb_ids>
<module_ids>
diff --git a/configs/msmnile/audio_policy_configuration.xml b/configs/msmnile/audio_policy_configuration.xml
index cf48dd7..a8ae093 100644
--- a/configs/msmnile/audio_policy_configuration.xml
+++ b/configs/msmnile/audio_policy_configuration.xml
@@ -184,8 +184,14 @@
</mixPort>
<mixPort name="surround_sound" role="sink">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
- samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_INDEX_MASK_3,AUDIO_CHANNEL_INDEX_MASK_4,AUDIO_CHANNEL_IN_5POINT1,AUDIO_CHANNEL_INDEX_MASK_6"/>
+ samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,88200,96000,176400,192000"
+ channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_INDEX_MASK_3,AUDIO_CHANNEL_INDEX_MASK_4,AUDIO_CHANNEL_IN_5POINT1,AUDIO_CHANNEL_INDEX_MASK_6,AUDIO_CHANNEL_IN_7POINT1,AUDIO_CHANNEL_INDEX_MASK_8"/>
+ <profile name="" format="AUDIO_FORMAT_PCM_32_BIT"
+ samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,88200,96000,176400,192000"
+ channelMasks="AUDIO_CHANNEL_IN_5POINT1,AUDIO_CHANNEL_INDEX_MASK_6,AUDIO_CHANNEL_IN_7POINT1,AUDIO_CHANNEL_INDEX_MASK_8"/>
+ <profile name="" format="AUDIO_FORMAT_PCM_FLOAT"
+ samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,88200,96000,176400,192000"
+ channelMasks="AUDIO_CHANNEL_IN_5POINT1,AUDIO_CHANNEL_INDEX_MASK_6,AUDIO_CHANNEL_IN_7POINT1,AUDIO_CHANNEL_INDEX_MASK_8"/>
</mixPort>
<mixPort name="record_24" role="sink">
<profile name="" format="AUDIO_FORMAT_PCM_24_BIT_PACKED"
@@ -312,15 +318,26 @@
</devicePort>
<devicePort tagName="USB Device In" type="AUDIO_DEVICE_IN_USB_DEVICE" role="source">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
- samplingRates="44100,48000,64000,88200,96000,128000,176400,192000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
+ samplingRates="44100,48000,64000,88200,96000,128000,176400,192000" channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_INDEX_MASK_6,AUDIO_CHANNEL_IN_7POINT1,AUDIO_CHANNEL_INDEX_MASK_8"/>
<profile name="" format="AUDIO_FORMAT_PCM_8_24_BIT"
- samplingRates="44100,48000,64000,88200,96000,128000,176400,192000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
+ samplingRates="44100,48000,64000,88200,96000,128000,176400,192000"
+ channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_INDEX_MASK_6,AUDIO_CHANNEL_IN_7POINT1,AUDIO_CHANNEL_INDEX_MASK_8"/>
+ <!-- edit as needed -->
+ <profile name="" format="AUDIO_FORMAT_PCM_32_BIT"
+ samplingRates="44100,48000,64000,88200,96000,128000,176400,192000"
+ channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_INDEX_MASK_6,AUDIO_CHANNEL_IN_7POINT1,AUDIO_CHANNEL_INDEX_MASK_8"/>
</devicePort>
<devicePort tagName="USB Headset In" type="AUDIO_DEVICE_IN_USB_HEADSET" role="source">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
- samplingRates="44100,48000,64000,88200,96000,128000,176400,192000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
+ samplingRates="44100,48000,64000,88200,96000,128000,176400,192000"
+ channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_INDEX_MASK_6,AUDIO_CHANNEL_IN_7POINT1,AUDIO_CHANNEL_INDEX_MASK_8"/>
<profile name="" format="AUDIO_FORMAT_PCM_8_24_BIT"
- samplingRates="44100,48000,64000,88200,96000,128000,176400,192000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
+ samplingRates="44100,48000,64000,88200,96000,128000,176400,192000"
+ channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_INDEX_MASK_6,AUDIO_CHANNEL_IN_7POINT1,AUDIO_CHANNEL_INDEX_MASK_8"/>
+ <!-- edit as needed -->
+ <profile name="" format="AUDIO_FORMAT_PCM_32_BIT"
+ samplingRates="44100,48000,64000,88200,96000,128000,176400,192000"
+ channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_INDEX_MASK_6,AUDIO_CHANNEL_IN_7POINT1,AUDIO_CHANNEL_INDEX_MASK_8"/>
</devicePort>
</devicePorts>
@@ -353,13 +370,13 @@
<route type="mix" sink="USB Headset Out"
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out,hifi_playback"/>
<route type="mix" sink="Telephony Tx"
- sources="voice_tx"/>
+ sources="voice_tx,incall_music_uplink"/>
<route type="mix" sink="voice_rx"
sources="Telephony Rx"/>
<route type="mix" sink="primary input"
sources="Wired Headset Mic,BT SCO Headset Mic,FM Tuner,USB Device In,USB Headset In,Telephony Rx"/>
<route type="mix" sink="surround_sound"
- sources="Built-In Mic,Built-In Back Mic"/>
+ sources="Built-In Mic,Built-In Back Mic,USB Device In,USB Headset In"/>
<route type="mix" sink="record_24"
sources="Built-In Mic,Built-In Back Mic,Wired Headset Mic"/>
<route type="mix" sink="mmap_no_irq_in"
diff --git a/configs/msmnile/mixer_paths_tavil.xml b/configs/msmnile/mixer_paths_tavil.xml
index 8ae9bfc..b2c8be2 100644
--- a/configs/msmnile/mixer_paths_tavil.xml
+++ b/configs/msmnile/mixer_paths_tavil.xml
@@ -2146,6 +2146,7 @@
<path name="headset-mic">
<path name="amic2" />
+ <ctl name="DEC0 Volume" value="84" />
</path>
<path name="headset-mic-liquid">
@@ -2217,7 +2218,7 @@
</path>
<path name="voice-headset-mic">
- <path name="headset-mic" />
+ <path name="amic2" />
</path>
<path name="speaker-and-headphones">
@@ -2739,7 +2740,7 @@
</path>
<path name="unprocessed-headset-mic">
- <path name="headset-mic" />
+ <path name="amic2" />
</path>
<!-- USB TTY start -->
@@ -2991,76 +2992,79 @@
<ctl name="MultiMedia2 Mixer USB_AUDIO_TX" value="1" />
</path>
- <path name="incall-music-uplink">
+ <path name="incall_music_uplink">
<ctl name="Incall_Music Audio Mixer MultiMedia9" value="1" />
</path>
- <path name="incall-music-uplink speaker">
- <path name="incall-music-uplink" />
+ <path name="incall_music_uplink speaker">
+ <path name="incall_music_uplink" />
</path>
- <path name="incall-music-uplink handset">
- <path name="incall-music-uplink" />
+ <path name="incall_music_uplink handset">
+ <path name="incall_music_uplink" />
</path>
- <path name="incall-music-uplink handset-hac">
- <path name="incall-music-uplink" />
+ <path name="incall_music_uplink handset-hac">
+ <path name="incall_music_uplink" />
</path>
- <path name="incall-music-uplink display-port">
- <path name="incall-music-uplink" />
+ <path name="incall_music_uplink display-port">
+ <path name="incall_music_uplink" />
</path>
- <path name="incall-music-uplink bt-sco">
- <path name="incall-music-uplink" />
+ <path name="incall_music_uplink bt-sco">
+ <path name="incall_music_uplink" />
</path>
- <path name="incall-music-uplink bt-sco-wb">
- <path name="incall-music-uplink" />
+ <path name="incall_music_uplink bt-sco-wb">
+ <path name="incall_music_uplink" />
</path>
- <path name="incall-music-uplink speaker-and-display-port">
- <path name="incall-music-uplink" />
+ <path name="incall_music_uplink speaker-and-display-port">
+ <path name="incall_music_uplink" />
</path>
- <path name="incall-music-uplink afe-proxy">
- <path name="incall-music-uplink" />
+ <path name="incall_music_uplink afe-proxy">
+ <path name="incall_music_uplink" />
</path>
- <path name="incall-music-uplink usb-headphones">
- <path name="incall-music-uplink" />
+ <path name="incall_music_uplink usb-headphones">
+ <path name="incall_music_uplink" />
</path>
- <path name="incall-music-uplink usb-headset">
- <path name="incall-music-uplink" />
+ <path name="incall_music_uplink usb-headset">
+ <path name="incall_music_uplink" />
</path>
- <path name="incall-music-uplink speaker-and-usb-headphones">
- <path name="incall-music-uplink" />
+ <path name="incall_music_uplink speaker-and-usb-headphones">
+ <path name="incall_music_uplink" />
</path>
- <path name="incall-music-uplink headphones">
- <path name="incall-music-uplink" />
+ <path name="incall_music_uplink headphones">
+ <path name="incall_music_uplink" />
</path>
- <path name="incall-music-uplink speaker-and-headphones">
- <path name="incall-music-uplink" />
+ <path name="incall_music_uplink speaker-and-headphones">
+ <path name="incall_music_uplink" />
</path>
- <path name="incall-music-uplink speaker-and-bt-sco">
- <path name="incall-music-uplink" />
+ <path name="incall_music_uplink speaker-and-bt-sco">
+ <path name="incall_music_uplink" />
</path>
- <path name="incall-music-uplink voice-tty-hco-handset">
- <path name="incall-music-uplink" />
+ <path name="incall_music_uplink voice-tty-hco-handset">
+ <path name="incall_music_uplink" />
</path>
- <path name="incall-music-uplink speaker-and-bt-a2dp">
- <path name="incall-music-uplink" />
+ <path name="incall_music_uplink speaker-and-bt-a2dp">
+ <path name="incall_music_uplink" />
</path>
- <path name="incall-music-uplink bt-a2dp">
- <path name="incall-music-uplink" />
+ <path name="incall_music_uplink bt-a2dp">
+ <path name="incall_music_uplink" />
</path>
+ <path name="incall_music_uplink afe-proxy">
+ <path name="incall_music_uplink" />
+ </path>
</mixer>
diff --git a/configs/msmnile/msmnile.mk b/configs/msmnile/msmnile.mk
index 6b99b3a..6005bff 100644
--- a/configs/msmnile/msmnile.mk
+++ b/configs/msmnile/msmnile.mk
@@ -76,13 +76,14 @@
endif
PRODUCT_COPY_FILES += \
- hardware/qcom/audio/configs/msmnile/audio_output_policy.conf:$(TARGET_COPY_OUT_VENDOR)/etc/audio_output_policy.conf \
+ hardware/qcom/audio/configs/msmnile/audio_io_policy.conf:$(TARGET_COPY_OUT_VENDOR)/etc/audio_io_policy.conf \
hardware/qcom/audio/configs/msmnile/audio_effects.conf:$(TARGET_COPY_OUT_VENDOR)/etc/audio_effects.conf \
hardware/qcom/audio/configs/msmnile/audio_effects.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_effects.xml \
hardware/qcom/audio/configs/msmnile/mixer_paths_tavil.xml:$(TARGET_COPY_OUT_VENDOR)/etc/mixer_paths_tavil.xml \
hardware/qcom/audio/configs/msmnile/audio_tuning_mixer_tavil.txt:$(TARGET_COPY_OUT_VENDOR)/etc/audio_tuning_mixer_tavil.txt \
hardware/qcom/audio/configs/msmnile/audio_tuning_mixer.txt:$(TARGET_COPY_OUT_VENDOR)/etc/audio_tuning_mixer.txt \
hardware/qcom/audio/configs/msmnile/sound_trigger_mixer_paths_wcd9340.xml:$(TARGET_COPY_OUT_VENDOR)/etc/sound_trigger_mixer_paths_wcd9340.xml \
+ hardware/qcom/audio/configs/msmnile/sound_trigger_mixer_paths_wcd9340_qrd.xml:$(TARGET_COPY_OUT_VENDOR)/etc/sound_trigger_mixer_paths_wcd9340_qrd.xml \
hardware/qcom/audio/configs/msmnile/sound_trigger_platform_info.xml:$(TARGET_COPY_OUT_VENDOR)/etc/sound_trigger_platform_info.xml \
hardware/qcom/audio/configs/msmnile/graphite_ipc_platform_info.xml:$(TARGET_COPY_OUT_VENDOR)/etc/graphite_ipc_platform_info.xml \
hardware/qcom/audio/configs/msmnile/audio_platform_info.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_platform_info.xml \
diff --git a/configs/msmnile/sound_trigger_mixer_paths_wcd9340.xml b/configs/msmnile/sound_trigger_mixer_paths_wcd9340.xml
index 1e3d4e7..b385769 100644
--- a/configs/msmnile/sound_trigger_mixer_paths_wcd9340.xml
+++ b/configs/msmnile/sound_trigger_mixer_paths_wcd9340.xml
@@ -36,6 +36,14 @@
<ctl name="LSM6 Mixer SLIMBUS_5_TX" value="0" />
<ctl name="LSM7 Mixer SLIMBUS_5_TX" value="0" />
<ctl name="LSM8 Mixer SLIMBUS_5_TX" value="0" />
+ <ctl name="LSM1 Mixer SLIMBUS_1_TX" value="0" />
+ <ctl name="LSM2 Mixer SLIMBUS_1_TX" value="0" />
+ <ctl name="LSM3 Mixer SLIMBUS_1_TX" value="0" />
+ <ctl name="LSM4 Mixer SLIMBUS_1_TX" value="0" />
+ <ctl name="LSM5 Mixer SLIMBUS_1_TX" value="0" />
+ <ctl name="LSM6 Mixer SLIMBUS_1_TX" value="0" />
+ <ctl name="LSM7 Mixer SLIMBUS_1_TX" value="0" />
+ <ctl name="LSM8 Mixer SLIMBUS_1_TX" value="0" />
<ctl name="LSM1 Port" value="None" />
<ctl name="LSM2 Port" value="None" />
<ctl name="LSM3 Port" value="None" />
@@ -45,6 +53,7 @@
<ctl name="LSM7 Port" value="None" />
<ctl name="LSM8 Port" value="None" />
<ctl name="SLIMBUS_5_TX LSM Function" value="None" />
+ <ctl name="SLIMBUS_1_TX LSM Function" value="None" />
<ctl name="MADONOFF Switch" value="0" />
<ctl name="MAD Input" value="DMIC1" />
<ctl name="MAD_SEL MUX" value="SPE" />
@@ -60,22 +69,22 @@
<ctl name="EC BUF MUX INP" value="ZERO" />
<ctl name="ADC MUX1" value="DMIC" />
<ctl name="DMIC MUX1" value="ZERO" />
- <ctl name="AIF1_CAP Mixer SLIM TX8" value="0"/>
- <ctl name="AIF1_CAP Mixer SLIM TX7" value="0" />
- <ctl name="AIF1_CAP Mixer SLIM TX6" value="0" />
- <ctl name="AIF1_CAP Mixer SLIM TX5" value="0"/>
- <ctl name="CDC_IF TX5 MUX" value="ZERO" />
- <ctl name="CDC_IF TX6 MUX" value="ZERO" />
- <ctl name="CDC_IF TX7 MUX" value="ZERO" />
- <ctl name="CDC_IF TX8 MUX" value="ZERO" />
- <ctl name="ADC MUX5" value="AMIC" />
- <ctl name="ADC MUX6" value="AMIC" />
- <ctl name="ADC MUX7" value="AMIC" />
- <ctl name="ADC MUX8" value="AMIC" />
- <ctl name="DMIC MUX5" value="ZERO" />
- <ctl name="DMIC MUX6" value="ZERO" />
- <ctl name="DMIC MUX7" value="ZERO" />
- <ctl name="DMIC MUX8" value="ZERO" />
+ <ctl name="AIF3_CAP Mixer SLIM TX3" value="0"/>
+ <ctl name="AIF3_CAP Mixer SLIM TX2" value="0" />
+ <ctl name="AIF3_CAP Mixer SLIM TX1" value="0" />
+ <ctl name="AIF3_CAP Mixer SLIM TX0" value="0"/>
+ <ctl name="CDC_IF TX0 MUX" value="ZERO" />
+ <ctl name="CDC_IF TX1 MUX" value="ZERO" />
+ <ctl name="CDC_IF TX2 MUX" value="ZERO" />
+ <ctl name="CDC_IF TX3 MUX" value="ZERO" />
+ <ctl name="ADC MUX0" value="AMIC" />
+ <ctl name="ADC MUX1" value="AMIC" />
+ <ctl name="ADC MUX2" value="AMIC" />
+ <ctl name="ADC MUX3" value="AMIC" />
+ <ctl name="DMIC MUX0" value="ZERO" />
+ <ctl name="DMIC MUX1" value="ZERO" />
+ <ctl name="DMIC MUX2" value="ZERO" />
+ <ctl name="DMIC MUX3" value="ZERO" />
<ctl name="IIR0 INP0 MUX" value="ZERO" />
<ctl name= "ADC MUX0" value="AMIC" />
<ctl name= "ADC MUX1" value="AMIC" />
@@ -89,6 +98,11 @@
<ctl name= "WDMA3 CH1 MUX" value="PORT_0" />
<ctl name= "WDMA3 CH2 MUX" value="PORT_0" />
<ctl name= "WDMA3_ON_OFF Switch" value="0" />
+ <ctl name="SLIM_1_TX Channels" value="One" />
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="None"/>
+ <ctl name="EC Reference Channels" value="Zero"/>
+ <ctl name="EC Reference Bit Format" value="0"/>
+ <ctl name="EC Reference SampleRate" value="0"/>
<path name="listen-voice-wakeup-1">
<ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
@@ -139,51 +153,51 @@
</path>
<path name="listen-voice-wakeup-1 preproc">
- <ctl name="SLIMBUS_0_TX LSM Function" value="SWAUDIO" />
+ <ctl name="SLIMBUS_1_TX LSM Function" value="SWAUDIO" />
<ctl name="LSM1 Port" value="ADM_LSM_TX" />
- <ctl name="LSM1 Mixer SLIMBUS_0_TX" value="1" />
+ <ctl name="LSM1 Mixer SLIMBUS_1_TX" value="1" />
</path>
<path name="listen-voice-wakeup-2 preproc">
- <ctl name="SLIMBUS_0_TX LSM Function" value="SWAUDIO" />
+ <ctl name="SLIMBUS_1_TX LSM Function" value="SWAUDIO" />
<ctl name="LSM2 Port" value="ADM_LSM_TX" />
- <ctl name="LSM2 Mixer SLIMBUS_0_TX" value="1" />
+ <ctl name="LSM2 Mixer SLIMBUS_1_TX" value="1" />
</path>
<path name="listen-voice-wakeup-3 preproc">
- <ctl name="SLIMBUS_0_TX LSM Function" value="SWAUDIO" />
+ <ctl name="SLIMBUS_1_TX LSM Function" value="SWAUDIO" />
<ctl name="LSM3 Port" value="ADM_LSM_TX" />
- <ctl name="LSM3 Mixer SLIMBUS_0_TX" value="1" />
+ <ctl name="LSM3 Mixer SLIMBUS_1_TX" value="1" />
</path>
<path name="listen-voice-wakeup-4 preproc">
- <ctl name="SLIMBUS_0_TX LSM Function" value="SWAUDIO" />
+ <ctl name="SLIMBUS_1_TX LSM Function" value="SWAUDIO" />
<ctl name="LSM4 Port" value="ADM_LSM_TX" />
- <ctl name="LSM4 Mixer SLIMBUS_0_TX" value="1" />
+ <ctl name="LSM4 Mixer SLIMBUS_1_TX" value="1" />
</path>
<path name="listen-voice-wakeup-5 preproc">
- <ctl name="SLIMBUS_0_TX LSM Function" value="SWAUDIO" />
+ <ctl name="SLIMBUS_1_TX LSM Function" value="SWAUDIO" />
<ctl name="LSM5 Port" value="ADM_LSM_TX" />
- <ctl name="LSM5 Mixer SLIMBUS_0_TX" value="1" />
+ <ctl name="LSM5 Mixer SLIMBUS_1_TX" value="1" />
</path>
<path name="listen-voice-wakeup-6 preproc">
- <ctl name="SLIMBUS_0_TX LSM Function" value="SWAUDIO" />
+ <ctl name="SLIMBUS_1_TX LSM Function" value="SWAUDIO" />
<ctl name="LSM6 Port" value="ADM_LSM_TX" />
- <ctl name="LSM6 Mixer SLIMBUS_0_TX" value="1" />
+ <ctl name="LSM6 Mixer SLIMBUS_1_TX" value="1" />
</path>
<path name="listen-voice-wakeup-7 preproc">
- <ctl name="SLIMBUS_0_TX LSM Function" value="SWAUDIO" />
+ <ctl name="SLIMBUS_1_TX LSM Function" value="SWAUDIO" />
<ctl name="LSM7 Port" value="ADM_LSM_TX" />
- <ctl name="LSM7 Mixer SLIMBUS_0_TX" value="1" />
+ <ctl name="LSM7 Mixer SLIMBUS_1_TX" value="1" />
</path>
<path name="listen-voice-wakeup-8 preproc">
- <ctl name="SLIMBUS_0_TX LSM Function" value="SWAUDIO" />
+ <ctl name="SLIMBUS_1_TX LSM Function" value="SWAUDIO" />
<ctl name="LSM8 Port" value="ADM_LSM_TX" />
- <ctl name="LSM8 Mixer SLIMBUS_0_TX" value="1" />
+ <ctl name="LSM8 Mixer SLIMBUS_1_TX" value="1" />
</path>
<path name="listen-cpe-handset-mic">
@@ -285,60 +299,60 @@
</path>
<path name="listen-ape-handset-mic-preproc">
- <ctl name="AIF1_CAP Mixer SLIM TX7" value="1" />
- <ctl name="SLIM_0_TX Channels" value="One" />
- <ctl name="CDC_IF TX7 MUX" value="DEC7" />
- <ctl name="ADC MUX7" value="DMIC" />
- <ctl name="DMIC MUX7" value="DMIC2" />
- <ctl name="IIR0 INP0 MUX" value="DEC7" />
+ <ctl name="AIF3_CAP Mixer SLIM TX2" value="1" />
+ <ctl name="SLIM_1_TX Channels" value="One" />
+ <ctl name="CDC_IF TX2 MUX" value="DEC2" />
+ <ctl name="ADC MUX2" value="DMIC" />
+ <ctl name="DMIC MUX2" value="DMIC2" />
+ <ctl name="IIR0 INP0 MUX" value="DEC2" />
</path>
<path name="listen-ape-handset-dmic">
- <ctl name="AIF1_CAP Mixer SLIM TX7" value="1" />
- <ctl name="AIF1_CAP Mixer SLIM TX8" value="1" />
- <ctl name="CDC_IF TX7 MUX" value="DEC7" />
- <ctl name="ADC MUX7" value="DMIC" />
- <ctl name="DMIC MUX7" value="DMIC1" />
- <ctl name="CDC_IF TX8 MUX" value="DEC8" />
- <ctl name="ADC MUX8" value="DMIC" />
- <ctl name="DMIC MUX8" value="DMIC5" />
- <ctl name="SLIM_0_TX Channels" value="Two" />
+ <ctl name="AIF3_CAP Mixer SLIM TX2" value="1" />
+ <ctl name="AIF3_CAP Mixer SLIM TX3" value="1" />
+ <ctl name="CDC_IF TX2 MUX" value="DEC2" />
+ <ctl name="ADC MUX2" value="DMIC" />
+ <ctl name="DMIC MUX2" value="DMIC1" />
+ <ctl name="CDC_IF TX3 MUX" value="DEC3" />
+ <ctl name="ADC MUX3" value="DMIC" />
+ <ctl name="DMIC MUX3" value="DMIC5" />
+ <ctl name="SLIM_1_TX Channels" value="Two" />
</path>
<path name="listen-ape-handset-tmic">
- <ctl name="AIF1_CAP Mixer SLIM TX5" value="1" />
- <ctl name="AIF1_CAP Mixer SLIM TX6" value="1" />
- <ctl name="AIF1_CAP Mixer SLIM TX7" value="1" />
- <ctl name="SLIM_0_TX Channels" value="Three" />
- <ctl name="CDC_IF TX5 MUX" value="DEC5" />
- <ctl name="ADC MUX5" value="DMIC" />
- <ctl name="DMIC MUX5" value="DMIC1" />
- <ctl name="CDC_IF TX6 MUX" value="DEC6" />
- <ctl name="ADC MUX6" value="DMIC" />
- <ctl name="DMIC MUX6" value="DMIC5" />
- <ctl name="CDC_IF TX7 MUX" value="DEC7" />
- <ctl name="ADC MUX7" value="DMIC" />
- <ctl name="DMIC MUX7" value="DMIC2" />
+ <ctl name="AIF3_CAP Mixer SLIM TX0" value="1" />
+ <ctl name="AIF3_CAP Mixer SLIM TX1" value="1" />
+ <ctl name="AIF3_CAP Mixer SLIM TX2" value="1" />
+ <ctl name="SLIM_1_TX Channels" value="Three" />
+ <ctl name="CDC_IF TX0 MUX" value="DEC0" />
+ <ctl name="ADC MUX0" value="DMIC" />
+ <ctl name="DMIC MUX0" value="DMIC1" />
+ <ctl name="CDC_IF TX1 MUX" value="DEC1" />
+ <ctl name="ADC MUX1" value="DMIC" />
+ <ctl name="DMIC MUX1" value="DMIC5" />
+ <ctl name="CDC_IF TX2 MUX" value="DEC2" />
+ <ctl name="ADC MUX2" value="DMIC" />
+ <ctl name="DMIC MUX2" value="DMIC2" />
</path>
<path name="listen-ape-handset-qmic">
- <ctl name="AIF1_CAP Mixer SLIM TX5" value="1" />
- <ctl name="AIF1_CAP Mixer SLIM TX6" value="1" />
- <ctl name="AIF1_CAP Mixer SLIM TX7" value="1" />
- <ctl name="AIF1_CAP Mixer SLIM TX8" value="1" />
- <ctl name="SLIM_0_TX Channels" value="Four" />
- <ctl name="CDC_IF TX5 MUX" value="DEC5" />
- <ctl name="ADC MUX5" value="DMIC" />
- <ctl name="DMIC MUX5" value="DMIC1" />
- <ctl name="CDC_IF TX6 MUX" value="DEC6" />
- <ctl name="ADC MUX6" value="DMIC" />
- <ctl name="DMIC MUX6" value="DMIC5" />
- <ctl name="CDC_IF TX7 MUX" value="DEC7" />
- <ctl name="ADC MUX7" value="DMIC" />
- <ctl name="DMIC MUX7" value="DMIC2" />
- <ctl name="CDC_IF TX8 MUX" value="DEC8" />
- <ctl name="ADC MUX8" value="DMIC" />
- <ctl name="DMIC MUX8" value="DMIC0" />
+ <ctl name="AIF3_CAP Mixer SLIM TX0" value="1" />
+ <ctl name="AIF3_CAP Mixer SLIM TX1" value="1" />
+ <ctl name="AIF3_CAP Mixer SLIM TX2" value="1" />
+ <ctl name="AIF3_CAP Mixer SLIM TX3" value="1" />
+ <ctl name="SLIM_1_TX Channels" value="Four" />
+ <ctl name="CDC_IF TX0 MUX" value="DEC0" />
+ <ctl name="ADC MUX0" value="DMIC" />
+ <ctl name="DMIC MUX0" value="DMIC1" />
+ <ctl name="CDC_IF TX1 MUX" value="DEC1" />
+ <ctl name="ADC MUX1" value="DMIC" />
+ <ctl name="DMIC MUX1" value="DMIC5" />
+ <ctl name="CDC_IF TX2 MUX" value="DEC2" />
+ <ctl name="ADC MUX2" value="DMIC" />
+ <ctl name="DMIC MUX2" value="DMIC2" />
+ <ctl name="CDC_IF TX3 MUX" value="DEC3" />
+ <ctl name="ADC MUX3" value="DMIC" />
+ <ctl name="DMIC MUX3" value="DMIC0" />
</path>
<path name="echo-reference">
diff --git a/configs/msmnile/sound_trigger_mixer_paths_wcd9340_qrd.xml b/configs/msmnile/sound_trigger_mixer_paths_wcd9340_qrd.xml
new file mode 100644
index 0000000..11e601d
--- /dev/null
+++ b/configs/msmnile/sound_trigger_mixer_paths_wcd9340_qrd.xml
@@ -0,0 +1,372 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--- Copyright (c) 2014-2018, The Linux Foundation. All rights reserved. -->
+<!--- -->
+<!--- Redistribution and use in source and binary forms, with or without -->
+<!--- modification, are permitted provided that the following conditions are -->
+<!--- met: -->
+<!--- * Redistributions of source code must retain the above copyright -->
+<!--- notice, this list of conditions and the following disclaimer. -->
+<!--- * Redistributions in binary form must reproduce the above -->
+<!--- copyright notice, this list of conditions and the following -->
+<!--- disclaimer in the documentation and/or other materials provided -->
+<!--- with the distribution. -->
+<!--- * Neither the name of The Linux Foundation nor the names of its -->
+<!--- contributors may be used to endorse or promote products derived -->
+<!--- from this software without specific prior written permission. -->
+<!--- -->
+<!--- THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED -->
+<!--- WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -->
+<!--- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT -->
+<!--- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS -->
+<!--- BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -->
+<!--- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -->
+<!--- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -->
+<!--- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -->
+<!--- WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -->
+<!--- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -->
+<!--- IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -->
+
+<mixer>
+ <!-- These are the initial mixer settings -->
+ <ctl name="LSM1 Mixer SLIMBUS_5_TX" value="0" />
+ <ctl name="LSM2 Mixer SLIMBUS_5_TX" value="0" />
+ <ctl name="LSM3 Mixer SLIMBUS_5_TX" value="0" />
+ <ctl name="LSM4 Mixer SLIMBUS_5_TX" value="0" />
+ <ctl name="LSM5 Mixer SLIMBUS_5_TX" value="0" />
+ <ctl name="LSM6 Mixer SLIMBUS_5_TX" value="0" />
+ <ctl name="LSM7 Mixer SLIMBUS_5_TX" value="0" />
+ <ctl name="LSM8 Mixer SLIMBUS_5_TX" value="0" />
+ <ctl name="LSM1 Mixer SLIMBUS_1_TX" value="0" />
+ <ctl name="LSM2 Mixer SLIMBUS_1_TX" value="0" />
+ <ctl name="LSM3 Mixer SLIMBUS_1_TX" value="0" />
+ <ctl name="LSM4 Mixer SLIMBUS_1_TX" value="0" />
+ <ctl name="LSM5 Mixer SLIMBUS_1_TX" value="0" />
+ <ctl name="LSM6 Mixer SLIMBUS_1_TX" value="0" />
+ <ctl name="LSM7 Mixer SLIMBUS_1_TX" value="0" />
+ <ctl name="LSM8 Mixer SLIMBUS_1_TX" value="0" />
+ <ctl name="LSM1 Port" value="None" />
+ <ctl name="LSM2 Port" value="None" />
+ <ctl name="LSM3 Port" value="None" />
+ <ctl name="LSM4 Port" value="None" />
+ <ctl name="LSM5 Port" value="None" />
+ <ctl name="LSM6 Port" value="None" />
+ <ctl name="LSM7 Port" value="None" />
+ <ctl name="LSM8 Port" value="None" />
+ <ctl name="SLIMBUS_5_TX LSM Function" value="None" />
+ <ctl name="SLIMBUS_1_TX LSM Function" value="None" />
+ <ctl name="MADONOFF Switch" value="0" />
+ <ctl name="MAD Input" value="DMIC0" />
+ <ctl name="MAD_SEL MUX" value="SPE" />
+ <ctl name="MAD_INP MUX" value="DEC1" />
+ <ctl name="MAD_CPE1 Switch" value="0" />
+ <ctl name="CDC_IF TX13 MUX" value="ZERO" />
+ <ctl name="MAD_BROADCAST Switch" value="0" />
+ <ctl name="TX13 INP MUX" value="CDC_DEC_5" />
+ <ctl name="AIF4_MAD Mixer SLIM TX12" value="0" />
+ <ctl name="AIF4_MAD Mixer SLIM TX13" value="0" />
+ <ctl name="CPE AFE MAD Enable" value="0"/>
+ <ctl name="CLK MODE" value="EXTERNAL" />
+ <ctl name="EC BUF MUX INP" value="ZERO" />
+ <ctl name="ADC MUX1" value="DMIC" />
+ <ctl name="DMIC MUX1" value="ZERO" />
+ <ctl name="AIF3_CAP Mixer SLIM TX3" value="0"/>
+ <ctl name="AIF3_CAP Mixer SLIM TX2" value="0" />
+ <ctl name="AIF3_CAP Mixer SLIM TX1" value="0" />
+ <ctl name="AIF3_CAP Mixer SLIM TX0" value="0"/>
+ <ctl name="CDC_IF TX0 MUX" value="ZERO" />
+ <ctl name="CDC_IF TX1 MUX" value="ZERO" />
+ <ctl name="CDC_IF TX2 MUX" value="ZERO" />
+ <ctl name="CDC_IF TX3 MUX" value="ZERO" />
+ <ctl name="ADC MUX0" value="AMIC" />
+ <ctl name="ADC MUX1" value="AMIC" />
+ <ctl name="ADC MUX2" value="AMIC" />
+ <ctl name="ADC MUX3" value="AMIC" />
+ <ctl name="DMIC MUX0" value="ZERO" />
+ <ctl name="DMIC MUX1" value="ZERO" />
+ <ctl name="DMIC MUX2" value="ZERO" />
+ <ctl name="DMIC MUX3" value="ZERO" />
+ <ctl name="IIR0 INP0 MUX" value="ZERO" />
+ <ctl name= "ADC MUX0" value="AMIC" />
+ <ctl name= "ADC MUX1" value="AMIC" />
+ <ctl name= "ADC MUX2" value="AMIC" />
+ <ctl name= "DMIC MUX0" value="ZERO" />
+ <ctl name= "DMIC MUX2" value="ZERO" />
+ <ctl name= "WDMA3 PORT0 MUX" value="RX_MIX_TX0" />
+ <ctl name= "WDMA3 PORT1 MUX" value="RX_MIX_TX1" />
+ <ctl name= "WDMA3 PORT2 MUX" value="RX_MIX_TX2" />
+ <ctl name= "WDMA3 CH0 MUX" value="PORT_0" />
+ <ctl name= "WDMA3 CH1 MUX" value="PORT_0" />
+ <ctl name= "WDMA3 CH2 MUX" value="PORT_0" />
+ <ctl name= "WDMA3_ON_OFF Switch" value="0" />
+ <ctl name="SLIM_1_TX Channels" value="One" />
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="None"/>
+ <ctl name="EC Reference Channels" value="Zero"/>
+ <ctl name="EC Reference Bit Format" value="0"/>
+ <ctl name="EC Reference SampleRate" value="0"/>
+
+ <path name="listen-voice-wakeup-1">
+ <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
+ <ctl name="LSM1 Port" value="SLIMBUS_5_TX" />
+ <ctl name="LSM1 Mixer SLIMBUS_5_TX" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-2">
+ <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
+ <ctl name="LSM2 Port" value="SLIMBUS_5_TX" />
+ <ctl name="LSM2 Mixer SLIMBUS_5_TX" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-3">
+ <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
+ <ctl name="LSM3 Port" value="SLIMBUS_5_TX" />
+ <ctl name="LSM3 Mixer SLIMBUS_5_TX" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-4">
+ <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
+ <ctl name="LSM4 Port" value="SLIMBUS_5_TX" />
+ <ctl name="LSM4 Mixer SLIMBUS_5_TX" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-5">
+ <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
+ <ctl name="LSM5 Port" value="SLIMBUS_5_TX" />
+ <ctl name="LSM5 Mixer SLIMBUS_5_TX" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-6">
+ <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
+ <ctl name="LSM6 Port" value="SLIMBUS_5_TX" />
+ <ctl name="LSM6 Mixer SLIMBUS_5_TX" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-7">
+ <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
+ <ctl name="LSM7 Port" value="SLIMBUS_5_TX" />
+ <ctl name="LSM7 Mixer SLIMBUS_5_TX" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-8">
+ <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
+ <ctl name="LSM8 Port" value="SLIMBUS_5_TX" />
+ <ctl name="LSM8 Mixer SLIMBUS_5_TX" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-1 preproc">
+ <ctl name="SLIMBUS_1_TX LSM Function" value="SWAUDIO" />
+ <ctl name="LSM1 Port" value="ADM_LSM_TX" />
+ <ctl name="LSM1 Mixer SLIMBUS_1_TX" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-2 preproc">
+ <ctl name="SLIMBUS_1_TX LSM Function" value="SWAUDIO" />
+ <ctl name="LSM2 Port" value="ADM_LSM_TX" />
+ <ctl name="LSM2 Mixer SLIMBUS_1_TX" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-3 preproc">
+ <ctl name="SLIMBUS_1_TX LSM Function" value="SWAUDIO" />
+ <ctl name="LSM3 Port" value="ADM_LSM_TX" />
+ <ctl name="LSM3 Mixer SLIMBUS_1_TX" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-4 preproc">
+ <ctl name="SLIMBUS_1_TX LSM Function" value="SWAUDIO" />
+ <ctl name="LSM4 Port" value="ADM_LSM_TX" />
+ <ctl name="LSM4 Mixer SLIMBUS_1_TX" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-5 preproc">
+ <ctl name="SLIMBUS_1_TX LSM Function" value="SWAUDIO" />
+ <ctl name="LSM5 Port" value="ADM_LSM_TX" />
+ <ctl name="LSM5 Mixer SLIMBUS_1_TX" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-6 preproc">
+ <ctl name="SLIMBUS_1_TX LSM Function" value="SWAUDIO" />
+ <ctl name="LSM6 Port" value="ADM_LSM_TX" />
+ <ctl name="LSM6 Mixer SLIMBUS_1_TX" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-7 preproc">
+ <ctl name="SLIMBUS_1_TX LSM Function" value="SWAUDIO" />
+ <ctl name="LSM7 Port" value="ADM_LSM_TX" />
+ <ctl name="LSM7 Mixer SLIMBUS_1_TX" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-8 preproc">
+ <ctl name="SLIMBUS_1_TX LSM Function" value="SWAUDIO" />
+ <ctl name="LSM8 Port" value="ADM_LSM_TX" />
+ <ctl name="LSM8 Mixer SLIMBUS_1_TX" value="1" />
+ </path>
+
+ <path name="listen-cpe-handset-mic">
+ <ctl name="MAD Input" value="DMIC5" />
+ <ctl name="MAD_SEL MUX" value="SPE" />
+ <ctl name="MAD_INP MUX" value="MAD" />
+ <ctl name="MAD_CPE1 Switch" value="1" />
+ </path>
+
+ <path name="listen-cpe-handset-dmic">
+ <ctl name="CLK MODE" value="INTERNAL" />
+ <ctl name= "ADC MUX0" value="DMIC" />
+ <ctl name= "DMIC MUX0" value="DMIC5" />
+ <ctl name= "DEC0 Volume" value="84" />
+ <ctl name= "ADC MUX1" value="DMIC" />
+ <ctl name= "DMIC MUX1" value="DMIC0" />
+ <ctl name= "DEC1 Volume" value="84" />
+ <ctl name= "WDMA3 PORT0 MUX" value="DEC0" />
+ <ctl name= "WDMA3 PORT1 MUX" value="DEC1" />
+ <ctl name= "WDMA3 CH0 MUX" value="PORT_0" />
+ <ctl name= "WDMA3 CH1 MUX" value="PORT_1" />
+ <ctl name= "WDMA3_ON_OFF Switch" value="1" />
+ </path>
+
+ <path name="listen-cpe-handset-tmic">
+ <ctl name="CLK MODE" value="INTERNAL" />
+ <ctl name= "ADC MUX0" value="DMIC" />
+ <ctl name= "DMIC MUX0" value="DMIC5" />
+ <ctl name= "DEC0 Volume" value="84" />
+ <ctl name= "ADC MUX1" value="DMIC" />
+ <ctl name= "DMIC MUX1" value="DMIC0" />
+ <ctl name= "DEC1 Volume" value="84" />
+ <ctl name= "ADC MUX2" value="DMIC" />
+ <ctl name= "DMIC MUX2" value="DMIC0" />
+ <ctl name= "DEC2 Volume" value="84" />
+ <ctl name= "WDMA3 PORT0 MUX" value="DEC0" />
+ <ctl name= "WDMA3 PORT1 MUX" value="DEC1" />
+ <ctl name= "WDMA3 PORT2 MUX" value="DEC2" />
+ <ctl name= "WDMA3 CH0 MUX" value="PORT_0" />
+ <ctl name= "WDMA3 CH1 MUX" value="PORT_1" />
+ <ctl name= "WDMA3 CH2 MUX" value="PORT_2" />
+ <ctl name= "WDMA3_ON_OFF Switch" value="1" />
+ </path>
+
+ <path name="listen-cpe-handset-qmic">
+ <ctl name="CLK MODE" value="INTERNAL" />
+ <ctl name= "ADC MUX0" value="DMIC" />
+ <ctl name= "DMIC MUX0" value="DMIC5" />
+ <ctl name= "DEC0 Volume" value="84" />
+ <ctl name= "ADC MUX1" value="DMIC" />
+ <ctl name= "DMIC MUX1" value="DMIC0" />
+ <ctl name= "DEC1 Volume" value="84" />
+ <ctl name= "ADC MUX2" value="DMIC" />
+ <ctl name= "DMIC MUX2" value="DMIC0" />
+ <ctl name= "DEC2 Volume" value="84" />
+ <ctl name= "ADC MUX3" value="DMIC" />
+ <ctl name= "DMIC MUX3" value="DMIC3" />
+ <ctl name= "DEC3 Volume" value="84" />
+ <ctl name= "WDMA3 PORT0 MUX" value="DEC0" />
+ <ctl name= "WDMA3 PORT1 MUX" value="DEC1" />
+ <ctl name= "WDMA3 PORT2 MUX" value="DEC2" />
+ <ctl name= "WDMA3 PORT3 MUX" value="DEC3" />
+ <ctl name= "WDMA3 CH0 MUX" value="PORT_0" />
+ <ctl name= "WDMA3 CH1 MUX" value="PORT_1" />
+ <ctl name= "WDMA3 CH2 MUX" value="PORT_2" />
+ <ctl name= "WDMA3 CH3 MUX" value="PORT_3" />
+ <ctl name= "WDMA3_ON_OFF Switch" value="1" />
+ </path>
+
+ <path name="listen-cpe-headset-mic">
+ <ctl name="MAD Input" value="ADC2" />
+ <ctl name="MAD_SEL MUX" value="SPE" />
+ <ctl name="MAD_INP MUX" value="MAD" />
+ <ctl name="MAD_CPE1 Switch" value="1" />
+ </path>
+
+ <path name="listen-cpe-handset-mic-ecpp">
+ <ctl name="CLK MODE" value="INTERNAL" />
+ <ctl name="EC BUF MUX INP" value="DEC1" />
+ <ctl name="ADC MUX1" value="DMIC" />
+ <ctl name="DMIC MUX1" value="DMIC5" />
+ </path>
+
+ <!-- path name used for low bandwidth FTRT codec interface -->
+ <path name="listen-cpe-handset-mic low-speed-intf">
+ <ctl name="MADONOFF Switch" value="1" />
+ <ctl name="AIF4_MAD Mixer SLIM TX12" value="1" />
+ <ctl name="MAD Input" value="DMIC5" />
+ <ctl name="CPE AFE MAD Enable" value="1"/>
+ </path>
+
+ <path name="listen-ape-handset-mic">
+ <ctl name="MAD Input" value="DMIC5" />
+ <ctl name="MAD_SEL MUX" value="MSM" />
+ <ctl name="MAD_INP MUX" value="MAD" />
+ <ctl name="MAD_BROADCAST Switch" value="1" />
+ <ctl name="CDC_IF TX13 MUX" value="MAD_BRDCST" />
+ <ctl name="AIF4_MAD Mixer SLIM TX13" value="1" />
+ </path>
+
+ <path name="listen-ape-handset-mic-preproc">
+ <ctl name="AIF3_CAP Mixer SLIM TX2" value="1" />
+ <ctl name="SLIM_1_TX Channels" value="One" />
+ <ctl name="CDC_IF TX2 MUX" value="DEC2" />
+ <ctl name="ADC MUX2" value="DMIC" />
+ <ctl name="DMIC MUX2" value="DMIC5" />
+ <ctl name="IIR0 INP0 MUX" value="DEC2" />
+ </path>
+
+ <path name="listen-ape-handset-dmic">
+ <ctl name="AIF3_CAP Mixer SLIM TX2" value="1" />
+ <ctl name="AIF3_CAP Mixer SLIM TX3" value="1" />
+ <ctl name="CDC_IF TX2 MUX" value="DEC2" />
+ <ctl name="ADC MUX2" value="DMIC" />
+ <ctl name="DMIC MUX2" value="DMIC0" />
+ <ctl name="CDC_IF TX3 MUX" value="DEC3" />
+ <ctl name="ADC MUX3" value="DMIC" />
+ <ctl name="DMIC MUX3" value="DMIC3" />
+ <ctl name="SLIM_1_TX Channels" value="Two" />
+ </path>
+
+ <path name="listen-ape-handset-tmic">
+ <ctl name="AIF3_CAP Mixer SLIM TX0" value="1" />
+ <ctl name="AIF3_CAP Mixer SLIM TX1" value="1" />
+ <ctl name="AIF3_CAP Mixer SLIM TX2" value="1" />
+ <ctl name="SLIM_1_TX Channels" value="Three" />
+ <ctl name="CDC_IF TX0 MUX" value="DEC0" />
+ <ctl name="ADC MUX0" value="DMIC" />
+ <ctl name="DMIC MUX0" value="DMIC0" />
+ <ctl name="CDC_IF TX1 MUX" value="DEC1" />
+ <ctl name="ADC MUX1" value="DMIC" />
+ <ctl name="DMIC MUX1" value="DMIC3" />
+ <ctl name="CDC_IF TX2 MUX" value="DEC2" />
+ <ctl name="ADC MUX2" value="DMIC" />
+ <ctl name="DMIC MUX2" value="DMIC5" />
+ </path>
+
+ <path name="listen-ape-handset-qmic">
+ <ctl name="AIF3_CAP Mixer SLIM TX0" value="1" />
+ <ctl name="AIF3_CAP Mixer SLIM TX1" value="1" />
+ <ctl name="AIF3_CAP Mixer SLIM TX2" value="1" />
+ <ctl name="AIF3_CAP Mixer SLIM TX3" value="1" />
+ <ctl name="SLIM_1_TX Channels" value="Four" />
+ <ctl name="CDC_IF TX0 MUX" value="DEC0" />
+ <ctl name="ADC MUX0" value="DMIC" />
+ <ctl name="DMIC MUX0" value="DMIC0" />
+ <ctl name="CDC_IF TX1 MUX" value="DEC1" />
+ <ctl name="ADC MUX1" value="DMIC" />
+ <ctl name="DMIC MUX1" value="DMIC3" />
+ <ctl name="CDC_IF TX2 MUX" value="DEC2" />
+ <ctl name="ADC MUX2" value="DMIC" />
+ <ctl name="DMIC MUX2" value="DMIC5" />
+ <ctl name="CDC_IF TX3 MUX" value="DEC3" />
+ <ctl name="ADC MUX3" value="DMIC" />
+ <ctl name="DMIC MUX3" value="DMIC0" />
+ </path>
+
+ <path name="echo-reference">
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="SLIM_RX"/>
+ <ctl name="EC Reference Channels" value="Two"/>
+ <ctl name="EC Reference Bit Format" value="S16_LE"/>
+ <ctl name="EC Reference SampleRate" value="48000"/>
+ </path>
+
+ <path name="echo-reference a2dp">
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="SLIM_7_RX"/>
+ <ctl name="EC Reference Channels" value="Two"/>
+ <ctl name="EC Reference Bit Format" value="S16_LE"/>
+ <ctl name="EC Reference SampleRate" value="48000"/>
+ </path>
+
+</mixer>
diff --git a/configs/msmnile/sound_trigger_platform_info.xml b/configs/msmnile/sound_trigger_platform_info.xml
index 234fcd1..91fcb35 100644
--- a/configs/msmnile/sound_trigger_platform_info.xml
+++ b/configs/msmnile/sound_trigger_platform_info.xml
@@ -45,9 +45,11 @@
<param transit_to_adsp_on_battery_charging="false" />
<!-- Below backend params must match with port used in mixer path file -->
<!-- param used to configure backend sample rate, format and channels -->
- <param backend_port_name="SLIM_0_TX" />
+ <param backend_port_name="SLIM_1_TX" />
<!-- Param used to match and obtain device backend index -->
- <param backend_dai_name="SLIMBUS_0_TX" />
+ <param backend_dai_name="SLIMBUS_1_TX" />
+ <!-- Param used to indicate if SVA has dedicated SLIM ports -->
+ <param dedicated_sva_path="true" />
</common_config>
<acdb_ids>
<param DEVICE_HANDSET_MIC_APE="100" />
diff --git a/configs/msmnile_au/audio_effects.conf b/configs/msmnile_au/audio_effects.conf
index ddf578f..8b9189a 100644
--- a/configs/msmnile_au/audio_effects.conf
+++ b/configs/msmnile_au/audio_effects.conf
@@ -33,6 +33,9 @@
loudness_enhancer {
path /vendor/lib/soundfx/libldnhncr.so
}
+ dynamics_processing {
+ path /vendor/lib/soundfx/libdynproc.so
+ }
proxy {
path /vendor/lib/soundfx/libeffectproxy.so
}
@@ -226,6 +229,10 @@
library loudness_enhancer
uuid fa415329-2034-4bea-b5dc-5b381c8d1e2c
}
+ dynamics_processing {
+ library dynamics_processing
+ uuid e0e6539b-1781-7261-676f-6d7573696340
+ }
aec {
library audio_pre_processing
uuid 0f8d0d2a-59e5-45fe-b6e4-248c8a799109
diff --git a/configs/msmnile_au/audio_effects.xml b/configs/msmnile_au/audio_effects.xml
new file mode 100644
index 0000000..7c0cd22
--- /dev/null
+++ b/configs/msmnile_au/audio_effects.xml
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--- Copyright (c) 2018, The Linux Foundation. All rights reserved. -->
+<!--- -->
+<!--- Redistribution and use in source and binary forms, with or without -->
+<!--- modification, are permitted provided that the following conditions are -->
+<!--- met: -->
+<!--- * Redistributions of source code must retain the above copyright -->
+<!--- notice, this list of conditions and the following disclaimer. -->
+<!--- * Redistributions in binary form must reproduce the above -->
+<!--- copyright notice, this list of conditions and the following -->
+<!--- disclaimer in the documentation and/or other materials provided -->
+<!--- with the distribution. -->
+<!--- * Neither the name of The Linux Foundation nor the names of its -->
+<!--- contributors may be used to endorse or promote products derived -->
+<!--- from this software without specific prior written permission. -->
+<!--- -->
+<!--- THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED -->
+<!--- WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -->
+<!--- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT -->
+<!--- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS -->
+<!--- BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -->
+<!--- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -->
+<!--- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -->
+<!--- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -->
+<!--- WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -->
+<!--- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -->
+<!--- IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -->
+
+<audio_effects_conf version="2.0" xmlns="http://schemas.android.com/audio/audio_effects_conf/v2_0">
+ <libraries>
+ <library name="bundle" path="libbundlewrapper.so"/>
+ <library name="reverb" path="libreverbwrapper.so"/>
+ <library name="qcbassboost" path="libqcbassboost.so"/>
+ <library name="qcvirt" path="libqcvirt.so"/>
+ <library name="qcreverb" path="libqcreverb.so"/>
+ <library name="visualizer_sw" path="libvisualizer.so"/>
+ <library name="visualizer_hw" path="libqcomvisualizer.so"/>
+ <library name="downmix" path="libdownmix.so"/>
+ <library name="loudness_enhancer" path="libldnhncr.so"/>
+ <library name="dynamics_processing" path="libdynproc.so"/>
+ <library name="proxy" path="libeffectproxy.so"/>
+ <library name="offload_bundle" path="libqcompostprocbundle.so"/>
+ <library name="audio_pre_processing" path="libqcomvoiceprocessing.so"/>
+ <library name="volume_listener" path="libvolumelistener.so"/>
+ <library name="audiosphere" path="libasphere.so"/>
+ <library name="shoebox" path="libshoebox.so"/>
+ </libraries>
+ <effects>
+ <effectProxy name="bassboost" library="proxy" uuid="14804144-a5ee-4d24-aa88-0002a5d5c51b">
+ <libsw library="qcbassboost" uuid="23aca180-44bd-11e2-bcfd-0800200c9a66"/>
+ <libhw library="offload_bundle" uuid="2c4a8c24-1581-487f-94f6-0002a5d5c51b"/>
+ </effectProxy>
+ <effectProxy name="virtualizer" library="proxy" uuid="d3467faa-acc7-4d34-acaf-0002a5d5c51b">
+ <libsw library="qcvirt" uuid="e6c98a16-22a3-11e2-b87b-f23c91aec05e"/>
+ <libhw library="offload_bundle" uuid="509a4498-561a-4bea-b3b1-0002a5d5c51b"/>
+ </effectProxy>
+ <effectProxy name="equalizer" library="proxy" uuid="c8e70ecd-48ca-456e-8a4f-0002a5d5c51b">
+ <libsw library="bundle" uuid="ce772f20-847d-11df-bb17-0002a5d5c51b"/>
+ <libhw library="offload_bundle" uuid="a0dac280-401c-11e3-9379-0002a5d5c51b"/>
+ </effectProxy>
+ <effect name="volume" library="bundle" uuid="119341a0-8469-11df-81f9-0002a5d5c51b"/>
+ <effectProxy name="reverb_env_aux" library="proxy" uuid="48404ac9-d202-4ccc-bf84-0002a5d5c51b">
+ <libsw library="qcreverb" uuid="a8c1e5f3-293d-43cd-95ec-d5e26c02e217"/>
+ <libhw library="offload_bundle" uuid="79a18026-18fd-4185-8233-0002a5d5c51b"/>
+ </effectProxy>
+ <effectProxy name="reverb_env_ins" library="proxy" uuid="b707403a-a1c1-4291-9573-0002a5d5c51b">
+ <libsw library="qcreverb" uuid="791fff8b-8129-4655-83a4-59bc61034c3a"/>
+ <libhw library="offload_bundle" uuid="eb64ea04-973b-43d2-8f5e-0002a5d5c51b"/>
+ </effectProxy>
+ <effectProxy name="reverb_pre_aux" library="proxy" uuid="1b78f587-6d1c-422e-8b84-0002a5d5c51b">
+ <libsw library="qcreverb" uuid="53ef1db5-c0c0-445b-b060-e34d20ebb70a"/>
+ <libhw library="offload_bundle" uuid="6987be09-b142-4b41-9056-0002a5d5c51b"/>
+ </effectProxy>
+ <effectProxy name="reverb_pre_ins" library="proxy" uuid="f3e178d2-ebcb-408e-8357-0002a5d5c51b">
+ <libsw library="qcreverb" uuid="b08a0e38-22a5-11e2-b87b-f23c91aec05e"/>
+ <libhw library="offload_bundle" uuid="aa2bebf6-47cf-4613-9bca-0002a5d5c51b"/>
+ </effectProxy>
+ <effectProxy name="visualizer" library="proxy" uuid="1d0a1a53-7d5d-48f2-8e71-27fbd10d842c">
+ <libsw library="visualizer_sw" uuid="d069d9e0-8329-11df-9168-0002a5d5c51b"/>
+ <libhw library="visualizer_hw" uuid="7a8044a0-1a71-11e3-a184-0002a5d5c51b"/>
+ </effectProxy>
+ <effect name="downmix" library="downmix" uuid="93f04452-e4fe-41cc-91f9-e475b6d1d69f"/>
+ <effect name="hw_acc" library="offload_bundle" uuid="7d1580bd-297f-4683-9239-e475b6d1d69f"/>
+ <effect name="loudness_enhancer" library="loudness_enhancer" uuid="fa415329-2034-4bea-b5dc-5b381c8d1e2c"/>
+ <effect name="dynamics_processing" library="dynamics_processing" uuid="e0e6539b-1781-7261-676f-6d7573696340"/>
+ <effect name="aec" library="audio_pre_processing" uuid="0f8d0d2a-59e5-45fe-b6e4-248c8a799109"/>
+ <effect name="ns" library="audio_pre_processing" uuid="1d97bb0b-9e2f-4403-9ae3-58c2554306f8"/>
+ <effect name="music_helper" library="volume_listener" uuid="08b8b058-0590-11e5-ac71-0025b32654a0"/>
+ <effect name="ring_helper" library="volume_listener" uuid="0956df94-0590-11e5-bdbe-0025b32654a0"/>
+ <effect name="alarm_helper" library="volume_listener" uuid="09f303e2-0590-11e5-8fdb-0025b32654a0"/>
+ <effect name="voice_helper" library="volume_listener" uuid="0ace5c08-0590-11e5-ae9e-0025b32654a0"/>
+ <effect name="notification_helper" library="volume_listener" uuid="0b776dde-0590-11e5-81ba-0025b32654a0"/>
+ <effect name="audiosphere" library="audiosphere" uuid="184e62ab-2d19-4364-9d1b-c0a40733866c"/>
+ <effect name="shoebox" library="shoebox" uuid="1eab784c-1a36-4b2a-b7fc-e34c44cab89e"/>
+ </effects>
+ <postprocess>
+ <stream type="music">
+ <apply effect="music_helper"/>
+ </stream>
+ <stream type="ring">
+ <apply effect="ring_helper"/>
+ </stream>
+ <stream type="alarm">
+ <apply effect="alarm_helper"/>
+ </stream>
+ <stream type="voice_call">
+ <apply effect="voice_helper"/>
+ </stream>
+ <stream type="notification">
+ <apply effect="notification_helper"/>
+ </stream>
+ </postprocess>
+ <preprocess>
+ <stream type="voice_communication">
+ <apply effect="aec"/>
+ <apply effect="ns"/>
+ </stream>
+ </preprocess>
+</audio_effects_conf>
diff --git a/configs/msmnile_au/audio_policy_configuration.xml b/configs/msmnile_au/audio_policy_configuration.xml
index d71904e..1daf1dd 100644
--- a/configs/msmnile_au/audio_policy_configuration.xml
+++ b/configs/msmnile_au/audio_policy_configuration.xml
@@ -272,11 +272,11 @@
</devicePort>
<devicePort tagName="USB Device Out" type="AUDIO_DEVICE_OUT_USB_DEVICE" role="sink">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
- samplingRates="44100,48000,64000,88200,96000,128000,176400,192000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
+ samplingRates="44100,48000,64000,88200,96000,128000,176400,192000" channelMasks="dynamic"/>
</devicePort>
<devicePort tagName="USB Headset Out" type="AUDIO_DEVICE_OUT_USB_HEADSET" role="sink">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
- samplingRates="44100,48000,64000,88200,96000,128000,176400,192000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
+ samplingRates="44100,48000,64000,88200,96000,128000,176400,192000" channelMasks="dynamic"/>
</devicePort>
<!-- Input devices declaration, i.e. Source DEVICE PORT -->
@@ -359,11 +359,11 @@
<route type="mix" sink="mmap_no_irq_in"
sources="Built-In Mic,Built-In Back Mic,Wired Headset Mic,USB Device In,USB Headset In"/>
<route type="mix" sink="BT A2DP Out"
- sources="primary output,deep_buffer,direct_pcm,compressed_offload"/>
+ sources="primary output,deep_buffer,direct_pcm,compressed_offload,voip_rx"/>
<route type="mix" sink="BT A2DP Headphones"
- sources="primary output,deep_buffer,direct_pcm,compressed_offload"/>
+ sources="primary output,deep_buffer,direct_pcm,compressed_offload,voip_rx"/>
<route type="mix" sink="BT A2DP Speaker"
- sources="primary output,deep_buffer,direct_pcm,compressed_offload"/>
+ sources="primary output,deep_buffer,direct_pcm,compressed_offload,voip_rx"/>
<route type="mix" sink="hifi_input" sources="USB Device In,USB Headset In" />
</routes>
diff --git a/configs/msmnile_au/msmnile_au.mk b/configs/msmnile_au/msmnile_au.mk
index 0f64fbb..9b0952b 100644
--- a/configs/msmnile_au/msmnile_au.mk
+++ b/configs/msmnile_au/msmnile_au.mk
@@ -8,7 +8,7 @@
USE_CUSTOM_AUDIO_POLICY := 1
AUDIO_FEATURE_ENABLED_COMPRESS_CAPTURE := false
AUDIO_FEATURE_ENABLED_COMPRESS_VOIP := false
-AUDIO_FEATURE_ENABLED_DYNAMIC_ECNS := false
+AUDIO_FEATURE_ENABLED_DYNAMIC_ECNS := true
AUDIO_FEATURE_ENABLED_EXTN_FORMATS := true
AUDIO_FEATURE_ENABLED_EXTN_FLAC_DECODER := true
AUDIO_FEATURE_ENABLED_EXTN_RESAMPLER := true
@@ -23,7 +23,7 @@
AUDIO_FEATURE_ENABLED_APE_OFFLOAD := true
AUDIO_FEATURE_ENABLED_AAC_ADTS_OFFLOAD := true
AUDIO_FEATURE_ENABLED_PROXY_DEVICE := true
-AUDIO_FEATURE_ENABLED_SSR := false
+AUDIO_FEATURE_ENABLED_SSR := true
AUDIO_FEATURE_ENABLED_DTS_EAGLE := false
BOARD_USES_SRS_TRUEMEDIA := false
DTS_CODEC_M_ := false
@@ -65,14 +65,20 @@
AUDIO_FEATURE_ENABLED_RAS := true
AUDIO_FEATURE_ENABLED_SND_MONITOR := true
AUDIO_FEATURE_ENABLED_DLKM := true
+AUDIO_FEATURE_ENABLED_USB_BURST_MODE := false
+AUDIO_FEATURE_ENABLED_SVA_MULTI_STAGE := false
+AUDIO_FEATURE_ENABLED_BATTERY_LISTENER := false
##AUDIO_FEATURE_FLAGS
+ifneq ($(strip $(TARGET_USES_RRO)), true)
#Audio Specific device overlays
DEVICE_PACKAGE_OVERLAYS += hardware/qcom/audio/configs/common/overlay
+endif
PRODUCT_COPY_FILES += \
hardware/qcom/audio/configs/msmnile_au/audio_output_policy.conf:$(TARGET_COPY_OUT_VENDOR)/etc/audio_output_policy.conf \
hardware/qcom/audio/configs/msmnile_au/audio_effects.conf:$(TARGET_COPY_OUT_VENDOR)/etc/audio_effects.conf \
+ hardware/qcom/audio/configs/msmnile_au/audio_effects.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_effects.xml \
hardware/qcom/audio/configs/msmnile_au/mixer_paths_adp.xml:$(TARGET_COPY_OUT_VENDOR)/etc/mixer_paths_adp.xml \
hardware/qcom/audio/configs/msmnile_au/audio_tuning_mixer_tavil.txt:$(TARGET_COPY_OUT_VENDOR)/etc/audio_tuning_mixer_tavil.txt \
hardware/qcom/audio/configs/msmnile_au/audio_tuning_mixer.txt:$(TARGET_COPY_OUT_VENDOR)/etc/audio_tuning_mixer.txt \
@@ -113,7 +119,8 @@
ro.vendor.audio.sdk.fluencetype=none\
persist.vendor.audio.fluence.voicecall=true\
persist.vendor.audio.fluence.voicerec=false\
-persist.vendor.audio.fluence.speaker=true
+persist.vendor.audio.fluence.speaker=true\
+persist.vendor.audio.fluence.tmic.enabled=false
#disable tunnel encoding
PRODUCT_PROPERTY_OVERRIDES += \
@@ -182,7 +189,7 @@
#split a2dp DSP supported encoder list
PRODUCT_PROPERTY_OVERRIDES += \
-persist.vendor.bt.a2dp_offload_cap=sbc-aptx-aptxtws-aptxhd-aac
+persist.vendor.bt.a2dp_offload_cap=sbc-aptx-aptxtws-aptxhd-aac-ldac
#enable software decoders for ALAC and APE
PRODUCT_PROPERTY_OVERRIDES += \
@@ -218,16 +225,30 @@
PRODUCT_PROPERTY_OVERRIDES += \
vendor.audio.adm.buffering.ms=2
+#enable keytone FR
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio.hal.output.suspend.supported=false
+
#enable mirror-link feature
PRODUCT_PROPERTY_OVERRIDES += \
vendor.audio.enable.mirrorlink=false
+#enable voicecall speaker stereo
+PRODUCT_PROPERTY_OVERRIDES += \
+persist.vendor.audio.voicecall.speaker.stereo=true
+
# for HIDL related packages
PRODUCT_PACKAGES += \
android.hardware.audio@2.0-service \
android.hardware.audio@2.0-impl \
android.hardware.audio.effect@2.0-impl \
- android.hardware.soundtrigger@2.0-impl
+ android.hardware.soundtrigger@2.1-impl \
+ android.hardware.audio@4.0 \
+ android.hardware.audio.common@4.0 \
+ android.hardware.audio.common@4.0-util \
+ android.hardware.audio@4.0-impl \
+ android.hardware.audio.effect@4.0 \
+ android.hardware.audio.effect@4.0-impl
PRODUCT_PROPERTY_OVERRIDES += \
persist.audio.calfile0=/vendor/etc/acdbdata/adsp_avs_config.acdb\
diff --git a/configs/msmnile_au/sound_trigger_mixer_paths_wcd9340.xml b/configs/msmnile_au/sound_trigger_mixer_paths_wcd9340.xml
index 55dd42f..1e3d4e7 100644
--- a/configs/msmnile_au/sound_trigger_mixer_paths_wcd9340.xml
+++ b/configs/msmnile_au/sound_trigger_mixer_paths_wcd9340.xml
@@ -348,4 +348,11 @@
<ctl name="EC Reference SampleRate" value="48000"/>
</path>
+ <path name="echo-reference a2dp">
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="SLIM_7_RX"/>
+ <ctl name="EC Reference Channels" value="Two"/>
+ <ctl name="EC Reference Bit Format" value="S16_LE"/>
+ <ctl name="EC Reference SampleRate" value="48000"/>
+ </path>
+
</mixer>
diff --git a/configs/msmnile_au/sound_trigger_platform_info.xml b/configs/msmnile_au/sound_trigger_platform_info.xml
index b017cc4..234fcd1 100644
--- a/configs/msmnile_au/sound_trigger_platform_info.xml
+++ b/configs/msmnile_au/sound_trigger_platform_info.xml
@@ -26,11 +26,14 @@
<!--- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -->
<!--- IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -->
<sound_trigger_platform_info>
- <param version="0x0102" /> <!-- this must be the first param -->
+ <param version="0x0103" /> <!-- this must be the first param -->
<!--- Version History: -->
<!--- 0x0101: Legacy version. -->
<!--- 0x0102: Includes acdb_ids param with the gcs_usecase tag. This matches -->
<!--- the gcs_usecase with the acdb device that uses it. -->
+<!--- 0x0103: app_type and in_channels added to <lsm usecase> and out_channels -->
+<!--- added to <adm_config> -->
+
<common_config>
<param max_cpe_sessions="1" />
<param max_wdsp_sessions="2" />
@@ -39,6 +42,7 @@
<param support_device_switch="false" />
<!-- Transition will only occur if execution_type="DYNAMIC" -->
<param transit_to_adsp_on_playback="false" />
+ <param transit_to_adsp_on_battery_charging="false" />
<!-- Below backend params must match with port used in mixer path file -->
<!-- param used to configure backend sample rate, format and channels -->
<param backend_port_name="SLIM_0_TX" />
@@ -50,19 +54,22 @@
<param DEVICE_HANDSET_MIC_CPE="128" />
<param DEVICE_HANDSET_MIC_ECPP_CPE="128" />
<param DEVICE_HANDSET_TMIC_CPE="130" />
+ <param DEVICE_HANDSET_TMIC_APE="157" />
<param DEVICE_HANDSET_MIC_PP_APE="135" />
<param DEVICE_HANDSET_QMIC_APE="137" />
<param DEVICE_HEADSET_MIC_CPE="139" />
<param DEVICE_HANDSET_DMIC_APE="149" />
- <param DEVICE_HANDSET_DMIC_CPE="153" />
+ <param DEVICE_HANDSET_DMIC_CPE="148" />
</acdb_ids>
+
<!-- Multiple sound_model_config tags can be listed, each with unique -->
<!-- vendor_uuid. The below tag represents QTI SVA engine sound model -->
<!-- configuration. ISV must use their own unique vendor_uuid. -->
+
+ <!-- QTI SVA -->
<sound_model_config>
<param vendor_uuid="68ab2d40-e860-11e3-95ef-0002a5d5c51b" />
- <param execution_type="WDSP" /> <!-- value: "WDSP" "ADSP" "DYNAMIC" -->
- <param app_type="2" /> <!-- app type used in ACDB -->
+ <param execution_type="DYNAMIC" /> <!-- value: "WDSP" "ADSP" "DYNAMIC" -->
<param library="libsmwrapper.so" />
<param max_cpe_phrases="6" />
<param max_cpe_users="3" />
@@ -71,36 +78,79 @@
<!-- Profile specific data which the algorithm can support -->
<param sample_rate="16000" />
<param bit_width="16" />
- <param channel_count="1"/>
+ <param out_channels="1"/> <!-- Module output channels -->
+
<!-- adm_cfg_profile should match with the one defined under adm_config -->
<!-- Set it to NONE if LSM directly connects to AFE -->
- <param adm_cfg_profile="NONE" />
- <!-- fluence_type: "FLUENCE", "FLUENCE_DMIC", "FLUENCE_TMIC", -->
- <!-- "FLUENCE_QMIC". param value is valid when adm_cfg_profile="FLUENCE"-->
- <param fluence_type="FLUENCE_DMIC" />
+ <param adm_cfg_profile="FFECNS" />
+ <!-- fluence_type: "FLUENCE", "FLUENCE_DMIC", "FLUENCE_TMIC" -->
+ <!-- "FLUENCE_QMIC". Param value is valid when adm_cfg_profile -->
+ <!-- is one of FLUENCE, FLUENCE_STEREO, FFECNS values -->
+ <param fluence_type="FLUENCE_TMIC" />
<!-- wdsp_fluence_type: fluence disabled: "NONE" -->
<!-- fluence enabled: "FLUENCE_DMIC", "FLUENCE_TMIC", "FLUENCE_QMIC" -->
<param wdsp_fluence_type="NONE" />
+ <arm_ss_usecase>
+ <!-- Options are "KEYWORD_DETECTION", "USER_VERIFICATION", "CUSTOM_DETECTION" -->
+ <param sm_detection_type= "KEYWORD_DETECTION" />
+ <param sm_id="0x2" />
+ <param module_lib="libcapiv2svacnn.so"/>
+ <param sample_rate="16000"/>
+ <param bit_wdith="16"/>
+ <param channel_count="1"/>
+ </arm_ss_usecase>
+ <arm_ss_usecase>
+ <param sm_detection_type= "USER_VERIFICATION" />
+ <param sm_id="0x4" />
+ <param module_lib="libcapiv2vop.so"/>
+ <param sample_rate="16000"/>
+ <param bit_wdith="16"/>
+ <param channel_count="1"/>
+ </arm_ss_usecase>
<gcs_usecase>
<param uid="0x1" />
<param acdb_devices="DEVICE_HANDSET_MIC_CPE, DEVICE_HANDSET_TMIC_CPE, DEVICE_HEADSET_MIC_CPE" />
<!-- module_id, instance_id, param_id -->
<param load_sound_model_ids="0x00012C0D, 0x2, 0x00012C14" />
<param confidence_levels_ids="0x00012C0D, 0x2, 0x00012C28" />
- <param detection_event_ids="0x00012C0D, 0x2, 0x00012C29" />
+ <param detection_event_ids="0x00012C0D, 0x2, 0x00012B05" />
<param read_cmd_ids="0x00020013, 0x2, 0x00020015" />
<param read_rsp_ids="0x00020013, 0x2, 0x00020016" />
<param custom_config_ids="0x00012C0D, 0x2, 0x00012C20" />
+ <param det_event_type_ids="0x00012C0D, 0x2, 0x00012C2A" />
</gcs_usecase>
<gcs_usecase>
<param uid="0x2" />
<param acdb_devices="DEVICE_HANDSET_MIC_CPE, DEVICE_HANDSET_TMIC_CPE, DEVICE_HEADSET_MIC_CPE" />
<param load_sound_model_ids="0x00012C0D, 0x3, 0x00012C14" />
<param confidence_levels_ids="0x00012C0D, 0x3, 0x00012C28" />
- <param detection_event_ids="0x00012C0D, 0x3, 0x00012C29" />
+ <param detection_event_ids="0x00012C0D, 0x3, 0x00012B05" />
<param read_cmd_ids="0x00020013, 0x3, 0x00020015" />
<param read_rsp_ids="0x00020013, 0x3, 0x00020016" />
<param custom_config_ids="0x00012C0D, 0x3, 0x00012C20" />
+ <param det_event_type_ids="0x00012C0D, 0x3, 0x00012C2A" />
+ </gcs_usecase>
+ <gcs_usecase>
+ <param uid="0x7" />
+ <param acdb_devices="DEVICE_HANDSET_DMIC_CPE" />
+ <param load_sound_model_ids="0x00012C0D, 0x7, 0x00012C14" />
+ <param confidence_levels_ids="0x00012C0D, 0x7, 0x00012C28" />
+ <param detection_event_ids="0x00012C0D, 0x7, 0x00012B05" />
+ <param read_cmd_ids="0x00020013, 0x7, 0x00020015" />
+ <param read_rsp_ids="0x00020013, 0x7, 0x00020016" />
+ <param custom_config_ids="0x00012C0D, 0x7, 0x00012C20" />
+ <param det_event_type_ids="0x00012C0D, 0x7, 0x00012C2A" />
+ </gcs_usecase>
+ <gcs_usecase>
+ <param uid="0x8" />
+ <param acdb_devices="DEVICE_HANDSET_DMIC_CPE" />
+ <param load_sound_model_ids="0x00012C0D, 0x8, 0x00012C14" />
+ <param confidence_levels_ids="0x00012C0D, 0x8, 0x00012C28" />
+ <param detection_event_ids="0x00012C0D, 0x8, 0x00012B05" />
+ <param read_cmd_ids="0x00020013, 0x8, 0x00020015" />
+ <param read_rsp_ids="0x00020013, 0x8, 0x00020016" />
+ <param custom_config_ids="0x00012C0D, 0x8, 0x00012C20" />
+ <param det_event_type_ids="0x00012C0D, 0x8, 0x00012C2A" />
</gcs_usecase>
<!-- Module and param ids with which the algorithm is integrated
in non-graphite firmware (note these must come after gcs params)
@@ -108,21 +158,15 @@
valid execution_type values: "WDSP" "ADSP" -->
<lsm_usecase>
<param execution_mode="ADSP" />
- <param load_sound_model_ids="0x00012C0D, 0x00012C14" />
- <param unload_sound_model_ids="0x00012C0D, 0x00012C15" />
- <param confidence_levels_ids="0x00012C0D, 0x00012C07" />
- <param operation_mode_ids="0x00012C0D, 0x00012C02" />
- <param polling_enable_ids="0x00012C0D, 0x00012C1B" />
- <param custom_config_ids="0x00012C0D, 0x00012C20" />
- </lsm_usecase>
-
- <lsm_usecase>
- <param execution_mode="WDSP" />
- <param load_sound_model_ids="0x00012C0D, 0x00012C14" />
- <param unload_sound_model_ids="0x00012C0D, 0x00012C15" />
- <param confidence_levels_ids="0x00012C0D, 0x00012C07" />
- <param operation_mode_ids="0x00012C0D, 0x00012C02" />
- <param custom_config_ids="0x00012C0D, 0x00012C20" />
+ <param app_type="2" /> <!-- app type used in ACDB -->
+ <param in_channels="5"/> <!-- Module input channels -->
+ <param load_sound_model_ids="0x00012C1C, 0x00012C14" />
+ <param unload_sound_model_ids="0x00012C1C, 0x00012C15" />
+ <param confidence_levels_ids="0x00012C1C, 0x00012C07" />
+ <param operation_mode_ids="0x00012C1C, 0x00012C02" />
+ <param polling_enable_ids="0x00012C1C, 0x00012C1B" />
+ <param custom_config_ids="0x00012C1C, 0x00012C20" />
+ <param det_event_type_ids="0x00012C1C, 0x00012C2C" />
</lsm_usecase>
<!-- format: "ADPCM_packet" or "PCM_packet" !-->
@@ -133,11 +177,68 @@
<param client_capture_read_delay="2000" />
</sound_model_config>
-<!-- Sound model config for Hotword !-->
+ <!-- QTI Music Detection !-->
+ <sound_model_config>
+ <param vendor_uuid="876c1b46-9d4d-40cc-a4fd-4d5ec7a80e47" />
+ <param execution_type="WDSP" /> <!-- value: "WDSP" "ADSP" "DYNAMIC" -->
+ <param library="libsmwrapper.so" />
+ <param max_cpe_phrases="1" />
+ <param max_cpe_users="1" />
+ <param max_ape_phrases="1" />
+ <param max_ape_users="1" />
+ <!-- Profile specific data which the algorithm can support -->
+ <param sample_rate="16000" />
+ <param bit_width="16" />
+ <param out_channels="1"/> <!-- Module output channels -->
+ <!-- adm_cfg_profile should match with the one defined under adm_config -->
+ <!-- Set it to NONE if LSM directly connects to AFE -->
+ <param adm_cfg_profile="NONE" />
+ <!-- fluence_type: "FLUENCE", "FLUENCE_DMIC", "FLUENCE_TMIC" -->
+ <!-- "FLUENCE_QMIC". Param value is valid when adm_cfg_profile -->
+ <!-- is one of FLUENCE, FLUENCE_STEREO, FFECNS values -->
+ <param fluence_type="FLUENCE_DMIC" />
+ <!-- wdsp_fluence_type: fluence disabled: "NONE" -->
+ <!-- fluence enabled: "FLUENCE_DMIC", "FLUENCE_TMIC", "FLUENCE_QMIC" -->
+ <param wdsp_fluence_type="NONE" />
+ <gcs_usecase>
+ <param uid="0x5" />
+ <param acdb_devices="DEVICE_HANDSET_MIC_CPE, DEVICE_HANDSET_TMIC_CPE, DEVICE_HEADSET_MIC_CPE" />
+ <!-- module_id, instance_id, param_id -->
+ <param load_sound_model_ids="0x00012C2E, 0x6, 0x00012C14" />
+ <param confidence_levels_ids="0x00012C2E, 0x6, 0x00012C28" />
+ <param detection_event_ids="0x00012C2E, 0x6, 0x00012B05" />
+ <param read_cmd_ids="0x00020013, 0x6, 0x00020015" />
+ <param read_rsp_ids="0x00020013, 0x6, 0x00020016" />
+ <param custom_config_ids="0x00012C2E, 0x6, 0x00012C2D" />
+ <param det_event_type_ids="0x00012C2E, 0x6, 0x00012C2C" />
+ </gcs_usecase>
+ <!-- Module and param ids with which the algorithm is integrated
+ in non-graphite firmware (note these must come after gcs params)
+ Extends flexibility to have different ids based on execution type.
+ valid execution_type values: only "ADSP" -->
+ <lsm_usecase>
+ <param execution_mode="ADSP" />
+ <param app_type="4" /> <!-- app type for MD used in ACDB -->
+ <param in_channels="1"/> <!-- Module input channels -->
+ <param load_sound_model_ids="0x00012C22, 0x00012C14" />
+ <param unload_sound_model_ids="0x00012C22, 0x00012C15" />
+ <param confidence_levels_ids="0x00012C22, 0x00012C07" />
+ <param det_event_type_ids="0x00012C22, 0x00012C2C" />
+ <param custom_config_ids="0x00012C22, 0x00012C30" />
+ </lsm_usecase>
+
+ <!-- format: "ADPCM_packet" or "PCM_packet" !-->
+ <!-- transfer_mode: "FTRT" or "RT" -->
+ <!-- kw_duration is in milli seconds. It is valid only for FTRT
+ transfer mode -->
+ <param capture_keyword="PCM_packet, FTRT, 1500" />
+ <param client_capture_read_delay="2000" />
+ </sound_model_config>
+
+ <!-- Google Hotword -->
<sound_model_config>
<param vendor_uuid="7038ddc8-30f2-11e6-b0ac-40a8f03d3f15" />
<param execution_type="WDSP" /> <!-- value: "WDSP" "ADSP" "DYNAMIC" -->
- <param app_type="3" /> <!-- app type used in ACDB -->
<param library="none" />
<param max_cpe_phrases="1" />
<param max_cpe_users="1" />
@@ -146,42 +247,44 @@
<!-- Profile specific data which the algorithm can support -->
<param sample_rate="16000" />
<param bit_width="16" />
- <param channel_count="1"/>
+ <param out_channels="1"/> <!-- Module output channels -->
<!-- adm_cfg_profile should match with the one defined under adm_config -->
<!-- Set it to NONE if LSM directly connects to AFE -->
<param adm_cfg_profile="NONE" />
- <!-- fluence_type: "FLUENCE", "FLUENCE_DMIC", "FLUENCE_TMIC", -->
- <!-- "FLUENCE_QMIC". param value is valid when adm_cfg_profile="FLUENCE"-->
+ <!-- fluence_type: "FLUENCE", "FLUENCE_DMIC", "FLUENCE_TMIC" -->
+ <!-- "FLUENCE_QMIC". Param value is valid when adm_cfg_profile -->
+ <!-- is one of FLUENCE, FLUENCE_STEREO, FFECNS values -->
<param fluence_type="FLUENCE_DMIC" />
<!-- wdsp_fluence_type: fluence disabled: "NONE" -->
- <!-- fluence enabled: "FLUENCE_DMIC", "FLUENCE_TMIC", "FLUENCE_QMIC" -->
+ <!-- fluence enabled: "FLUENCE_DMIC", "FLUENCE_QMIC" -->
<param wdsp_fluence_type="NONE" />
<gcs_usecase>
<param uid="0x3" />
- <param acdb_devices="DEVICE_HANDSET_MIC_CPE, DEVICE_HANDSET_TMIC_CPE" />
- <param load_sound_model_ids="0x18000001, 0x4, 0x00012C14" />
+ <param acdb_devices="DEVICE_HANDSET_MIC_CPE" />
+ <param load_sound_model_ids="0x18000001, 0x4, 0x18000100" />
+ <param start_engine_ids="0x18000001, 0x4, 0x18000101" />
<param confidence_levels_ids="0x18000001, 0x4, 0x00012C28" />
<param detection_event_ids="0x18000001, 0x4, 0x00012C29" />
+ <param custom_config_ids="0x18000001, 0x4, 0x00012C20" />
<param read_cmd_ids="0x00020013, 0x4, 0x00020015" />
<param read_rsp_ids="0x00020013, 0x4, 0x00020016" />
- <param custom_config_ids="0x18000001, 0x4, 0x00012C20" />
</gcs_usecase>
<gcs_usecase>
<param uid="0x4" />
<param acdb_devices="DEVICE_HANDSET_DMIC_CPE" />
- <param load_sound_model_ids="0x18000001, 0x5, 0x00012C14" />
+ <param load_sound_model_ids="0x18000001, 0x5, 0x18000100" />
+ <param start_engine_ids="0x18000001, 0x5, 0x18000101" />
<param confidence_levels_ids="0x18000001, 0x5, 0x00012C28" />
<param detection_event_ids="0x18000001, 0x5, 0x00012C29" />
+ <param custom_config_ids="0x18000001, 0x5, 0x00012C20" />
<param read_cmd_ids="0x00020013, 0x5, 0x00020015" />
<param read_rsp_ids="0x00020013, 0x5, 0x00020016" />
- <param custom_config_ids="0x18000001, 0x5, 0x00012C20" />
</gcs_usecase>
- <!-- Module and param ids with which the algorithm is integrated
- in non-graphite firmware (note these must come after gcs params)
- Extends flexibility to have different ids based on execution type.
- valid execution_type values: "WDSP" "ADSP" -->
+
<lsm_usecase>
<param execution_mode="ADSP" />
+ <param app_type="3" /> <!-- app type used in ACDB -->
+ <param in_channels="1"/> <!-- Module input channels -->
<param load_sound_model_ids="0x18000001, 0x00012C14" />
<param unload_sound_model_ids="0x18000001, 0x00012C15" />
<param confidence_levels_ids="0x18000001, 0x00012C07" />
@@ -190,20 +293,35 @@
<param custom_config_ids="0x18000001, 0x00012C20" />
</lsm_usecase>
- <lsm_usecase>
- <param execution_mode="WDSP" />
- <param load_sound_model_ids="0x18000001, 0x00012C14" />
- <param unload_sound_model_ids="0x18000001, 0x00012C15" />
- <param confidence_levels_ids="0x18000001, 0x00012C07" />
- <param operation_mode_ids="0x18000001, 0x00012C02" />
- <param custom_config_ids="0x18000001, 0x00012C20" />
- </lsm_usecase>
-
<!-- format: "ADPCM_packet" or "PCM_packet" !-->
<!-- transfer_mode: "FTRT" or "RT" -->
<!-- kw_duration is in milli seconds. It is valid only for FTRT
transfer mode -->
- <param capture_keyword="PCM_packet, RT, 2000" />
+ <param capture_keyword="PCM_raw, FTRT, 2000" />
+ <param client_capture_read_delay="2000" />
+ </sound_model_config>
+
+ <!-- Google Music Detection -->
+ <sound_model_config>
+ <param vendor_uuid="9f6ad62a-1f0b-11e7-87c5-40a8f03d3f15" />
+ <param execution_type="WDSP" /> <!-- value: "WDSP" "ADSP" "DYNAMIC" -->
+ <param library="none" />
+ <!-- fluence enabled: "FLUENCE_DMIC", "FLUENCE_QMIC" -->
+ <param wdsp_fluence_type="NONE" />
+ <gcs_usecase>
+ <param uid="0x6" />
+ <param acdb_devices="DEVICE_HANDSET_MIC_CPE" />
+ <param load_sound_model_ids="0x18000001, 0x4, 0x18000102" />
+ <param start_engine_ids="0x18000001, 0x4, 0x18000103" />
+ <param confidence_levels_ids="0x18000001, 0x4, 0x00012C28" />
+ <param detection_event_ids="0x18000001, 0x4, 0x00012C29" />
+ <param custom_config_ids="0x18000001, 0x4, 0x00012C20" />
+ <param read_cmd_ids="0x00020013, 0x7, 0x00020015" />
+ <param read_rsp_ids="0x00020013, 0x7, 0x00020016" />
+ </gcs_usecase>
+ <!-- kw_duration is in milli seconds. It is valid only for FTRT
+ transfer mode -->
+ <param capture_keyword="MULAW_raw, FTRT, 5000" />
<param client_capture_read_delay="2000" />
</sound_model_config>
@@ -230,6 +348,14 @@
<param bit_width="16" />
</adm_config>
+ <adm_config>
+ <param adm_cfg_profile="FFECNS" />
+ <param app_type="69947" />
+ <param sample_rate="16000" />
+ <param bit_width="16" />
+ <param out_channels="5"/>
+ </adm_config>
+
<!-- backend_type tag defines backend type for each device -->
<!-- Default value is assumed for devices that are not listed here -->
<backend_type>
diff --git a/configs/msmsteppe/audio_platform_info_intcodec.xml b/configs/msmsteppe/audio_platform_info_intcodec.xml
index 27964f4..f838af8 100644
--- a/configs/msmsteppe/audio_platform_info_intcodec.xml
+++ b/configs/msmsteppe/audio_platform_info_intcodec.xml
@@ -102,6 +102,7 @@
</acdb_ids>
<backend_names>
<device name="SND_DEVICE_OUT_HEADPHONES" backend="headphones" interface="RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_HEADPHONES_44_1" backend="headphones-44.1" interface="RX_CDC_DMA_RX_0"/>
<device name="SND_DEVICE_OUT_BT_SCO_WB" backend="bt-sco-wb" interface="SLIMBUS_7_RX"/>
<device name="SND_DEVICE_OUT_BT_SCO" backend="bt-sco" interface="SLIMBUS_7_RX"/>
<device name="SND_DEVICE_OUT_BT_A2DP" backend="bt-a2dp" interface="SLIMBUS_7_RX"/>
diff --git a/configs/msmsteppe/audio_platform_info_qrd.xml b/configs/msmsteppe/audio_platform_info_qrd.xml
index 99759a7..1aac2c5 100644
--- a/configs/msmsteppe/audio_platform_info_qrd.xml
+++ b/configs/msmsteppe/audio_platform_info_qrd.xml
@@ -102,6 +102,7 @@
</acdb_ids>
<backend_names>
<device name="SND_DEVICE_OUT_HEADPHONES" backend="headphones" interface="RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_HEADPHONES_44_1" backend="headphones-44.1" interface="RX_CDC_DMA_RX_0"/>
<device name="SND_DEVICE_OUT_BT_SCO_WB" backend="bt-sco-wb" interface="SLIMBUS_7_RX"/>
<device name="SND_DEVICE_OUT_BT_SCO" backend="bt-sco" interface="SLIMBUS_7_RX"/>
<device name="SND_DEVICE_OUT_BT_A2DP" backend="bt-a2dp" interface="SLIMBUS_7_RX"/>
diff --git a/configs/msmsteppe/audio_policy_configuration.xml b/configs/msmsteppe/audio_policy_configuration.xml
index d71904e..8fa938e 100644
--- a/configs/msmsteppe/audio_policy_configuration.xml
+++ b/configs/msmsteppe/audio_policy_configuration.xml
@@ -238,10 +238,6 @@
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="8000,16000" channelMasks="AUDIO_CHANNEL_OUT_MONO"/>
</devicePort>
- <devicePort tagName="BT SCO All" type="AUDIO_DEVICE_OUT_ALL_SCO" role="sink">
- <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
- samplingRates="8000,16000" channelMasks="AUDIO_CHANNEL_OUT_MONO"/>
- </devicePort>
<devicePort tagName="Telephony Tx" type="AUDIO_DEVICE_OUT_TELEPHONY_TX" role="sink">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="8000,16000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
@@ -340,7 +336,11 @@
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload"/>
<route type="mix" sink="FM"
sources="primary output"/>
- <route type="mix" sink="BT SCO All"
+ <route type="mix" sink="BT SCO"
+ sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx"/>
+ <route type="mix" sink="BT SCO Headset"
+ sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx"/>
+ <route type="mix" sink="BT SCO Car Kit"
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx"/>
<route type="mix" sink="USB Device Out"
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out,hifi_playback"/>
diff --git a/configs/msmsteppe/msmsteppe.mk b/configs/msmsteppe/msmsteppe.mk
index 4a8b020..ebe7702 100644
--- a/configs/msmsteppe/msmsteppe.mk
+++ b/configs/msmsteppe/msmsteppe.mk
@@ -66,6 +66,7 @@
AUDIO_FEATURE_ENABLED_RAS := true
AUDIO_FEATURE_ENABLED_SND_MONITOR := true
AUDIO_FEATURE_ENABLED_SVA_MULTI_STAGE := true
+AUDIO_FEATURE_ENABLED_BATTERY_LISTENER := true
##AUDIO_FEATURE_FLAGS
#Audio Specific device overlays
diff --git a/configs/msmsteppe/sound_trigger_platform_info.xml b/configs/msmsteppe/sound_trigger_platform_info.xml
index 5f14bb8..ed9c08d 100644
--- a/configs/msmsteppe/sound_trigger_platform_info.xml
+++ b/configs/msmsteppe/sound_trigger_platform_info.xml
@@ -41,6 +41,7 @@
<param support_device_switch="false" />
<!-- Transition will only occur if execution_type="DYNAMIC" -->
<param transit_to_adsp_on_playback="false" />
+ <param transit_to_adsp_on_battery_charging="false" />
<!-- Below backend params must match with port used in mixer path file -->
<!-- param used to configure backend sample rate, format and channels -->
<param backend_port_name="SLIM_0_TX" />
@@ -153,6 +154,64 @@
<param client_capture_read_delay="2000" />
</sound_model_config>
+ <!-- QTI Music Detection !-->
+ <sound_model_config>
+ <param vendor_uuid="876c1b46-9d4d-40cc-a4fd-4d5ec7a80e47" />
+ <param execution_type="ADSP" /> <!-- value: "WDSP" "ADSP" "DYNAMIC" -->
+ <param library="libsmwrapper.so" />
+ <param max_cpe_phrases="1" />
+ <param max_cpe_users="1" />
+ <param max_ape_phrases="1" />
+ <param max_ape_users="1" />
+ <!-- Profile specific data which the algorithm can support -->
+ <param sample_rate="16000" />
+ <param bit_width="16" />
+ <param out_channels="1"/> <!-- Module output channels -->
+ <!-- adm_cfg_profile should match with the one defined under adm_config -->
+ <!-- Set it to NONE if LSM directly connects to AFE -->
+ <param adm_cfg_profile="NONE" />
+ <!-- fluence_type: "FLUENCE", "FLUENCE_DMIC", "FLUENCE_TMIC" -->
+ <!-- "FLUENCE_QMIC". Param value is valid when adm_cfg_profile -->
+ <!-- is one of FLUENCE, FLUENCE_STEREO, FFECNS values -->
+ <param fluence_type="FLUENCE_DMIC" />
+ <!-- wdsp_fluence_type: fluence disabled: "NONE" -->
+ <!-- fluence enabled: "FLUENCE_DMIC", "FLUENCE_TMIC", "FLUENCE_QMIC" -->
+ <param wdsp_fluence_type="NONE" />
+ <gcs_usecase>
+ <param uid="0x5" />
+ <param acdb_devices="DEVICE_HANDSET_MIC_CPE, DEVICE_HANDSET_TMIC_CPE, DEVICE_HEADSET_MIC_CPE" />
+ <!-- module_id, instance_id, param_id -->
+ <param load_sound_model_ids="0x00012C2E, 0x6, 0x00012C14" />
+ <param confidence_levels_ids="0x00012C2E, 0x6, 0x00012C28" />
+ <param detection_event_ids="0x00012C2E, 0x6, 0x00012B05" />
+ <param read_cmd_ids="0x00020013, 0x6, 0x00020015" />
+ <param read_rsp_ids="0x00020013, 0x6, 0x00020016" />
+ <param custom_config_ids="0x00012C2E, 0x6, 0x00012C2D" />
+ <param det_event_type_ids="0x00012C2E, 0x6, 0x00012C2C" />
+ </gcs_usecase>
+ <!-- Module and param ids with which the algorithm is integrated
+ in non-graphite firmware (note these must come after gcs params)
+ Extends flexibility to have different ids based on execution type.
+ valid execution_type values: only "ADSP" -->
+ <lsm_usecase>
+ <param execution_mode="ADSP" />
+ <param app_type="4" /> <!-- app type for MD used in ACDB -->
+ <param in_channels="1"/> <!-- Module input channels -->
+ <param load_sound_model_ids="0x00012C22, 0x00012C14" />
+ <param unload_sound_model_ids="0x00012C22, 0x00012C15" />
+ <param confidence_levels_ids="0x00012C22, 0x00012C07" />
+ <param det_event_type_ids="0x00012C22, 0x00012C2C" />
+ <param custom_config_ids="0x00012C22, 0x00012C30" />
+ </lsm_usecase>
+
+ <!-- format: "ADPCM_packet" or "PCM_packet" !-->
+ <!-- transfer_mode: "FTRT" or "RT" -->
+ <!-- kw_duration is in milli seconds. It is valid only for FTRT
+ transfer mode -->
+ <param capture_keyword="PCM_packet, FTRT, 1500" />
+ <param client_capture_read_delay="2000" />
+ </sound_model_config>
+
<!-- Sound model config for Hotword !-->
<sound_model_config>
<param vendor_uuid="7038ddc8-30f2-11e6-b0ac-40a8f03d3f15" />
diff --git a/configs/sdm710/audio_platform_info_intcodec.xml b/configs/sdm710/audio_platform_info_intcodec.xml
index 8495686..d106ec0 100644
--- a/configs/sdm710/audio_platform_info_intcodec.xml
+++ b/configs/sdm710/audio_platform_info_intcodec.xml
@@ -107,6 +107,7 @@
</acdb_ids>
<backend_names>
<device name="SND_DEVICE_OUT_HEADPHONES" backend="headphones" interface="INT0_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_HEADPHONES_44_1" backend="headphones-44.1" interface="INT0_MI2S_RX"/>
<device name="SND_DEVICE_OUT_BT_SCO_WB" backend="bt-sco-wb" interface="SLIMBUS_7_RX"/>
<device name="SND_DEVICE_OUT_BT_SCO" backend="bt-sco" interface="SLIMBUS_7_RX"/>
<device name="SND_DEVICE_OUT_BT_A2DP" backend="bt-a2dp" interface="SLIMBUS_7_RX"/>
diff --git a/configs/sdm710/audio_platform_info_skuw.xml b/configs/sdm710/audio_platform_info_skuw.xml
index fccc18d..b7839d5 100644
--- a/configs/sdm710/audio_platform_info_skuw.xml
+++ b/configs/sdm710/audio_platform_info_skuw.xml
@@ -100,6 +100,7 @@
</acdb_ids>
<backend_names>
<device name="SND_DEVICE_OUT_HEADPHONES" backend="headphones" interface="INT0_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_HEADPHONES_44_1" backend="headphones-44.1" interface="INT0_MI2S_RX"/>
<device name="SND_DEVICE_OUT_BT_SCO_WB" backend="bt-sco-wb" interface="SLIMBUS_7_RX"/>
<device name="SND_DEVICE_OUT_BT_SCO" backend="bt-sco" interface="SLIMBUS_7_RX"/>
<device name="SND_DEVICE_OUT_BT_A2DP" backend="bt-a2dp" interface="SLIMBUS_7_RX"/>
diff --git a/hal/audio_extn/audio_extn.h b/hal/audio_extn/audio_extn.h
index 7231955..365b03e 100644
--- a/hal/audio_extn/audio_extn.h
+++ b/hal/audio_extn/audio_extn.h
@@ -217,7 +217,8 @@
#define audio_extn_usb_deinit() (0)
#define audio_extn_usb_add_device(device, card) (0)
#define audio_extn_usb_remove_device(device, card) (0)
-#define audio_extn_usb_is_config_supported(bit_width, sample_rate, ch, pb) (0)
+#define audio_extn_usb_is_config_supported(bit_width, sample_rate, ch, pb) \
+ (*bit_width=0, *sample_rate=0, *ch=0, 0)
#define audio_extn_usb_enable_sidetone(device, enable) (0)
#define audio_extn_usb_set_sidetone_gain(parms, value, len) (0)
#define audio_extn_usb_is_capture_supported() (0)
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 482ffd6..225a03e 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -2912,6 +2912,9 @@
adev->offload_effects_stop_output(out->handle, out->pcm_device_id);
}
+ if (out->usecase == USECASE_INCALL_MUSIC_UPLINK)
+ voice_set_device_mute_flag(adev, false);
+
/* 1. Get and set stream specific mixer controls */
disable_audio_route(adev, uc_info);
@@ -3071,6 +3074,9 @@
select_devices(adev, out->usecase);
}
+ if (out->usecase == USECASE_INCALL_MUSIC_UPLINK)
+ voice_set_device_mute_flag(adev, true);
+
ALOGV("%s: Opening PCM device card_id(%d) device_id(%d) format(%#x)",
__func__, adev->snd_card, out->pcm_device_id, out->config.format);
@@ -3275,6 +3281,7 @@
case 3:
case 4:
case 6:
+ case 8:
break;
default:
ret = -EINVAL;
@@ -4357,6 +4364,8 @@
struct audio_device *adev = out->dev;
ssize_t ret = 0;
int channels = 0;
+ const size_t frame_size = audio_stream_out_frame_size(stream);
+ const size_t frames = (frame_size != 0) ? bytes / frame_size : bytes;
ATRACE_BEGIN("out_write");
lock_output_stream(out);
@@ -4562,8 +4571,35 @@
return ret;
} else {
if (out->pcm) {
+ size_t bytes_to_write = bytes;
if (out->muted)
memset((void *)buffer, 0, bytes);
+ ALOGV("%s: frames=%zu, frame_size=%zu, bytes_to_write=%zu",
+ __func__, frames, frame_size, bytes_to_write);
+
+ if (out->usecase == USECASE_INCALL_MUSIC_UPLINK) {
+ size_t channel_count = audio_channel_count_from_out_mask(out->channel_mask);
+ int16_t *src = (int16_t *)buffer;
+ int16_t *dst = (int16_t *)buffer;
+
+ LOG_ALWAYS_FATAL_IF(out->config.channels != 1 || channel_count != 2 ||
+ out->format != AUDIO_FORMAT_PCM_16_BIT,
+ "out_write called for incall music use case with wrong properties");
+
+ /*
+ * FIXME: this can be removed once audio flinger mixer supports
+ * mono output
+ */
+
+ /*
+ * Code below goes over each frame in the buffer and adds both
+ * L and R samples and then divides by 2 to convert to mono
+ */
+ for (size_t i = 0; i < frames ; i++, dst++, src += 2) {
+ *dst = (int16_t)(((int32_t)src[0] + (int32_t)src[1]) >> 1);
+ }
+ bytes_to_write /= 2;
+ }
ALOGVV("%s: writing buffer (%zu bytes) to pcm device", __func__, bytes);
@@ -4573,12 +4609,11 @@
ns = pcm_bytes_to_frames(out->pcm, bytes)*1000000000LL/
out->config.rate;
+ request_out_focus(out, ns);
bool use_mmap = is_mmap_usecase(out->usecase) || out->realtime;
- request_out_focus(out, ns);
-
if (use_mmap)
- ret = pcm_mmap_write(out->pcm, (void *)buffer, bytes);
+ ret = pcm_mmap_write(out->pcm, (void *)buffer, bytes_to_write);
else if (out->hal_op_format != out->hal_ip_format &&
out->convert_buffer != NULL) {
@@ -4612,7 +4647,7 @@
out_get_sample_rate(&out->stream.common));
ret = 0;
} else
- ret = pcm_write(out->pcm, (void *)buffer, bytes);
+ ret = pcm_write(out->pcm, (void *)buffer, bytes_to_write);
}
release_out_focus(out);
@@ -6118,13 +6153,55 @@
create_offload_callback_thread(out);
} else if (out->flags & AUDIO_OUTPUT_FLAG_INCALL_MUSIC) {
+ switch (config->sample_rate) {
+ case 0:
+ out->sample_rate = DEFAULT_OUTPUT_SAMPLING_RATE;
+ break;
+ case 8000:
+ case 16000:
+ case 48000:
+ out->sample_rate = config->sample_rate;
+ break;
+ default:
+ ALOGE("%s: Unsupported sampling rate %d for Incall Music", __func__,
+ config->sample_rate);
+ config->sample_rate = DEFAULT_OUTPUT_SAMPLING_RATE;
+ ret = -EINVAL;
+ goto error_open;
+ }
+ //FIXME: add support for MONO stream configuration when audioflinger mixer supports it
+ switch (config->channel_mask) {
+ case AUDIO_CHANNEL_NONE:
+ case AUDIO_CHANNEL_OUT_STEREO:
+ out->channel_mask = AUDIO_CHANNEL_OUT_STEREO;
+ break;
+ default:
+ ALOGE("%s: Unsupported channel mask %#x for Incall Music", __func__,
+ config->channel_mask);
+ config->channel_mask = AUDIO_CHANNEL_OUT_STEREO;
+ ret = -EINVAL;
+ goto error_open;
+ }
+ switch (config->format) {
+ case AUDIO_FORMAT_DEFAULT:
+ case AUDIO_FORMAT_PCM_16_BIT:
+ out->format = AUDIO_FORMAT_PCM_16_BIT;
+ break;
+ default:
+ ALOGE("%s: Unsupported format %#x for Incall Music", __func__,
+ config->format);
+ config->format = AUDIO_FORMAT_PCM_16_BIT;
+ ret = -EINVAL;
+ goto error_open;
+ }
+
ret = voice_extn_check_and_set_incall_music_usecase(adev, out);
if (ret != 0) {
ALOGE("%s: Incall music delivery usecase cannot be set error:%d",
- __func__, ret);
+ __func__, ret);
goto error_open;
}
- } else if (out->devices == AUDIO_DEVICE_OUT_TELEPHONY_TX) {
+ } else if (out->devices == AUDIO_DEVICE_OUT_TELEPHONY_TX) {
if (config->sample_rate == 0)
config->sample_rate = AFE_PROXY_SAMPLING_RATE;
if (config->sample_rate != 48000 && config->sample_rate != 16000 &&
@@ -7039,6 +7116,17 @@
in->config.period_size = buffer_size / frame_size;
in->config.rate = config->sample_rate;
in->config.format = pcm_format_from_audio_format(config->format);
+ switch (config->format) {
+ case AUDIO_FORMAT_PCM_32_BIT:
+ in->bit_width = 32;
+ break;
+ case AUDIO_FORMAT_PCM_24_BIT_PACKED:
+ case AUDIO_FORMAT_PCM_8_24_BIT:
+ in->bit_width = 24;
+ break;
+ default:
+ in->bit_width = 16;
+ }
in->config.channels = channel_count;
in->sample_rate = in->config.rate;
} else if ((in->device == AUDIO_DEVICE_IN_TELEPHONY_RX) ||
@@ -7638,6 +7726,8 @@
}
}
+ adev->mic_break_enabled = property_get_bool("vendor.audio.mic_break", false);
+
if (property_get("vendor.audio_hal.period_multiplier", value, NULL) > 0) {
af_period_multiplier = atoi(value);
if (af_period_multiplier < 0)
diff --git a/hal/audio_hw.h b/hal/audio_hw.h
index c29f7b8..202e09a 100755
--- a/hal/audio_hw.h
+++ b/hal/audio_hw.h
@@ -487,6 +487,7 @@
bool bt_wb_speech_enabled;
bool allow_afe_proxy_usage;
bool is_charging; // from battery listener
+ bool mic_break_enabled;
int snd_card;
card_status_t card_status;
diff --git a/hal/msm8916/platform.c b/hal/msm8916/platform.c
index e5cb9b4..c6d1a74 100644
--- a/hal/msm8916/platform.c
+++ b/hal/msm8916/platform.c
@@ -3647,6 +3647,11 @@
return ret;
}
+int platform_set_mic_break_det(void *platform __unused, bool enable __unused)
+{
+ return 0;
+}
+
int platform_stop_voice_call(void *platform, uint32_t vsid)
{
struct platform_data *my_data = (struct platform_data *)platform;
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index 454ae5b..e8da091 100755
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -514,6 +514,10 @@
[SND_DEVICE_IN_USB_HEADSET_MIC_AEC] = "usb-headset-mic",
[SND_DEVICE_IN_UNPROCESSED_USB_HEADSET_MIC] = "usb-headset-mic",
[SND_DEVICE_IN_VOICE_RECOG_USB_HEADSET_MIC] = "usb-headset-mic",
+ [SND_DEVICE_IN_USB_HEADSET_MULTI_CHANNEL_MIC] = "usb-headset-mic",
+ [SND_DEVICE_IN_VOICE_RECOG_USB_HEADSET_MULTI_CHANNEL_MIC] = "usb-headset-mic",
+ [SND_DEVICE_IN_USB_HEADSET_MULTI_CHANNEL_MIC_AEC] = "usb-headset-mic",
+ [SND_DEVICE_IN_UNPROCESSED_USB_HEADSET_MULTI_CHANNEL_MIC] = "usb-headset-mic",
[SND_DEVICE_IN_CAPTURE_FM] = "capture-fm",
[SND_DEVICE_IN_AANC_HANDSET_MIC] = "aanc-handset-mic",
[SND_DEVICE_IN_VOICE_FLUENCE_DMIC_AANC] = "aanc-handset-mic",
@@ -690,6 +694,10 @@
[SND_DEVICE_IN_UNPROCESSED_USB_HEADSET_MIC] = 44,
[SND_DEVICE_IN_VOICE_RECOG_USB_HEADSET_MIC] = 44,
[SND_DEVICE_IN_USB_HEADSET_MIC_AEC] = 44,
+ [SND_DEVICE_IN_USB_HEADSET_MULTI_CHANNEL_MIC] = 162,
+ [SND_DEVICE_IN_VOICE_RECOG_USB_HEADSET_MULTI_CHANNEL_MIC] = 162,
+ [SND_DEVICE_IN_USB_HEADSET_MULTI_CHANNEL_MIC_AEC] = 162,
+ [SND_DEVICE_IN_UNPROCESSED_USB_HEADSET_MULTI_CHANNEL_MIC] = 162,
[SND_DEVICE_IN_CAPTURE_FM] = 0,
[SND_DEVICE_IN_AANC_HANDSET_MIC] = 104,
[SND_DEVICE_IN_VOICE_FLUENCE_DMIC_AANC] = 105,
@@ -842,6 +850,10 @@
{TO_NAME_INDEX(SND_DEVICE_IN_UNPROCESSED_USB_HEADSET_MIC)},
{TO_NAME_INDEX(SND_DEVICE_IN_VOICE_RECOG_USB_HEADSET_MIC)},
{TO_NAME_INDEX(SND_DEVICE_IN_USB_HEADSET_MIC_AEC)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_USB_HEADSET_MULTI_CHANNEL_MIC)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_UNPROCESSED_USB_HEADSET_MULTI_CHANNEL_MIC)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_VOICE_RECOG_USB_HEADSET_MULTI_CHANNEL_MIC)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_USB_HEADSET_MULTI_CHANNEL_MIC_AEC)},
{TO_NAME_INDEX(SND_DEVICE_IN_CAPTURE_FM)},
{TO_NAME_INDEX(SND_DEVICE_IN_AANC_HANDSET_MIC)},
{TO_NAME_INDEX(SND_DEVICE_IN_VOICE_FLUENCE_DMIC_AANC)},
@@ -1093,6 +1105,26 @@
return ret;
}
+static snd_device_t fixup_usb_headset_mic_snd_device(void *platform,
+ snd_device_t base,
+ snd_device_t other)
+{
+ struct platform_data *my_data = (struct platform_data *)platform;
+ struct audio_device *adev = my_data->adev;
+ if (adev->active_input == NULL) {
+ return base;
+ }
+ unsigned int sr = adev->active_input->sample_rate;
+ unsigned int ch = popcount(adev->active_input->channel_mask);
+ unsigned int bit_width = adev->active_input->bit_width;
+ if (audio_extn_usb_is_config_supported(&bit_width, &sr, &ch, false)
+ && ((ch == 6) || (ch == 8))) {
+ return other;
+ } else {
+ return base;
+ }
+}
+
static const char *platform_get_mixer_control(struct mixer_ctl *);
bool platform_send_gain_dep_cal(void *platform, int level) {
@@ -1432,6 +1464,10 @@
backend_tag_table[SND_DEVICE_IN_UNPROCESSED_USB_HEADSET_MIC] = strdup("usb-headset-mic");
backend_tag_table[SND_DEVICE_IN_VOICE_RECOG_USB_HEADSET_MIC] = strdup("usb-headset-mic");
backend_tag_table[SND_DEVICE_IN_USB_HEADSET_MIC_AEC] = strdup("usb-headset-mic");
+ backend_tag_table[SND_DEVICE_IN_USB_HEADSET_MULTI_CHANNEL_MIC] = strdup("usb-headset-mic");
+ backend_tag_table[SND_DEVICE_IN_UNPROCESSED_USB_HEADSET_MULTI_CHANNEL_MIC] = strdup("usb-headset-mic");
+ backend_tag_table[SND_DEVICE_IN_VOICE_RECOG_USB_HEADSET_MULTI_CHANNEL_MIC] = strdup("usb-headset-mic");
+ backend_tag_table[SND_DEVICE_IN_USB_HEADSET_MULTI_CHANNEL_MIC_AEC] = strdup("usb-headset-mic");
backend_tag_table[SND_DEVICE_IN_CAPTURE_FM] = strdup("capture-fm");
backend_tag_table[SND_DEVICE_OUT_TRANSMISSION_FM] = strdup("transmission-fm");
backend_tag_table[SND_DEVICE_OUT_HEADPHONES_DSD] = strdup("headphones-dsd");
@@ -1554,6 +1590,7 @@
hw_interface_table[SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_VOICE_RX] = strdup("RT_PROXY_DAI_002_TX");
hw_interface_table[SND_DEVICE_IN_USB_HEADSET_MIC] = strdup("USB_AUDIO_TX");
+ hw_interface_table[SND_DEVICE_IN_USB_HEADSET_MULTI_CHANNEL_MIC] = strdup("USB_AUDIO_TX");
hw_interface_table[SND_DEVICE_IN_CAPTURE_FM] = strdup("SLIMBUS_8_TX");
hw_interface_table[SND_DEVICE_IN_AANC_HANDSET_MIC] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_QUAD_MIC] = strdup("SLIMBUS_0_TX");
@@ -3481,6 +3518,26 @@
return ret;
}
+int platform_set_mic_break_det(void *platform, bool enable)
+{
+ int ret = 0;
+ struct platform_data *my_data = (struct platform_data *)platform;
+ struct audio_device *adev = my_data->adev;
+ const char *mixer_ctl_name = "Voice Mic Break Enable";
+ struct mixer_ctl *ctl = mixer_get_ctl_by_name(adev->mixer, mixer_ctl_name);
+ if (!ctl) {
+ ALOGE("%s: Could not get ctl for mixer cmd - %s",
+ __func__, mixer_ctl_name);
+ return -EINVAL;
+ }
+
+ ret = mixer_ctl_set_value(ctl, 0, enable);
+ if(ret)
+ ALOGE("%s: Failed to set mixer ctl: %s", __func__, mixer_ctl_name);
+
+ return ret;
+}
+
int platform_get_sample_rate(void *platform, uint32_t *rate)
{
struct platform_data *my_data = (struct platform_data *)platform;
@@ -4402,7 +4459,7 @@
(AUDIO_DEVICE_OUT_USB_DEVICE |
AUDIO_DEVICE_OUT_USB_HEADSET)) {
if (audio_extn_usb_is_capture_supported()) {
- snd_device = SND_DEVICE_IN_VOICE_USB_HEADSET_MIC;
+ snd_device = SND_DEVICE_IN_VOICE_USB_HEADSET_MIC;
}
}
} else if (my_data->use_generic_handset == true && // system prop is enabled
@@ -4480,7 +4537,9 @@
snd_device = SND_DEVICE_IN_VOICE_REC_MIC;
}
} else if (audio_is_usb_in_device(in_device | AUDIO_DEVICE_BIT_IN)) {
- snd_device = SND_DEVICE_IN_VOICE_RECOG_USB_HEADSET_MIC;
+ snd_device = fixup_usb_headset_mic_snd_device(platform,
+ SND_DEVICE_IN_VOICE_RECOG_USB_HEADSET_MIC,
+ SND_DEVICE_IN_VOICE_RECOG_USB_HEADSET_MULTI_CHANNEL_MIC);
}
} else if (source == AUDIO_SOURCE_UNPROCESSED) {
if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) {
@@ -4500,7 +4559,9 @@
} else if (in_device & AUDIO_DEVICE_IN_WIRED_HEADSET) {
snd_device = SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC;
} else if (audio_is_usb_in_device(in_device | AUDIO_DEVICE_BIT_IN)) {
- snd_device = SND_DEVICE_IN_UNPROCESSED_USB_HEADSET_MIC;
+ snd_device = fixup_usb_headset_mic_snd_device(platform,
+ SND_DEVICE_IN_UNPROCESSED_USB_HEADSET_MIC,
+ SND_DEVICE_IN_UNPROCESSED_USB_HEADSET_MULTI_CHANNEL_MIC);
}
} else if ((source == AUDIO_SOURCE_VOICE_COMMUNICATION) ||
(mode == AUDIO_MODE_IN_COMMUNICATION)) {
@@ -4588,7 +4649,9 @@
} else if (in_device & AUDIO_DEVICE_IN_FM_TUNER) {
snd_device = SND_DEVICE_IN_CAPTURE_FM;
} else if (audio_extn_usb_connected(NULL) && audio_is_usb_in_device(in_device | AUDIO_DEVICE_BIT_IN)) {
- snd_device = SND_DEVICE_IN_USB_HEADSET_MIC;
+ snd_device = fixup_usb_headset_mic_snd_device(platform,
+ SND_DEVICE_IN_USB_HEADSET_MIC,
+ SND_DEVICE_IN_USB_HEADSET_MULTI_CHANNEL_MIC);
} else {
ALOGE("%s: Unknown input device(s) %#x", __func__, in_device);
ALOGW("%s: Using default handset-mic", __func__);
@@ -4636,9 +4699,9 @@
(AUDIO_DEVICE_OUT_USB_DEVICE |
AUDIO_DEVICE_OUT_USB_HEADSET)) {
if (audio_extn_usb_is_capture_supported() && audio_extn_usb_connected(NULL))
- snd_device = SND_DEVICE_IN_USB_HEADSET_MIC;
- else
- snd_device = SND_DEVICE_IN_HANDSET_MIC;
+ snd_device = fixup_usb_headset_mic_snd_device(platform,
+ SND_DEVICE_IN_USB_HEADSET_MIC,
+ SND_DEVICE_IN_USB_HEADSET_MULTI_CHANNEL_MIC);
} else {
ALOGE("%s: Unknown output device(s) %#x", __func__, out_device);
ALOGW("%s: Using default handset-mic", __func__);
diff --git a/hal/msm8974/platform.h b/hal/msm8974/platform.h
index e4b925e..6fdb499 100644
--- a/hal/msm8974/platform.h
+++ b/hal/msm8974/platform.h
@@ -204,6 +204,10 @@
SND_DEVICE_IN_VOICE_USB_HEADSET_MIC,
SND_DEVICE_IN_UNPROCESSED_USB_HEADSET_MIC,
SND_DEVICE_IN_VOICE_RECOG_USB_HEADSET_MIC,
+ SND_DEVICE_IN_USB_HEADSET_MULTI_CHANNEL_MIC,
+ SND_DEVICE_IN_USB_HEADSET_MULTI_CHANNEL_MIC_AEC,
+ SND_DEVICE_IN_UNPROCESSED_USB_HEADSET_MULTI_CHANNEL_MIC,
+ SND_DEVICE_IN_VOICE_RECOG_USB_HEADSET_MULTI_CHANNEL_MIC,
SND_DEVICE_IN_CAPTURE_FM,
SND_DEVICE_IN_AANC_HANDSET_MIC,
SND_DEVICE_IN_QUAD_MIC,
diff --git a/hal/platform_api.h b/hal/platform_api.h
index 226275e..6ba962d 100644
--- a/hal/platform_api.h
+++ b/hal/platform_api.h
@@ -150,6 +150,7 @@
snd_device_t in_snd_device);
int platform_start_voice_call(void *platform, uint32_t vsid);
int platform_stop_voice_call(void *platform, uint32_t vsid);
+int platform_set_mic_break_det(void *platform, bool enable);
int platform_set_voice_volume(void *platform, int volume);
int platform_set_mic_mute(void *platform, bool state);
int platform_get_sample_rate(void *platform, uint32_t *rate);
diff --git a/hal/platform_info.c b/hal/platform_info.c
index e35b7c4..3341f20 100644
--- a/hal/platform_info.c
+++ b/hal/platform_info.c
@@ -639,7 +639,7 @@
goto done;
}
microphone.num_frequency_responses = atoi(attr[curIdx++]);
- if (microphone.num_frequency_responses >= AUDIO_MICROPHONE_MAX_FREQUENCY_RESPONSES) {
+ if (microphone.num_frequency_responses > AUDIO_MICROPHONE_MAX_FREQUENCY_RESPONSES) {
ALOGE("%s: num_frequency_responses is too large", __func__);
goto done;
}
@@ -654,8 +654,7 @@
while (token) {
microphone.frequency_responses[0][num_frequencies++] = atof(token);
if (num_frequencies >= AUDIO_MICROPHONE_MAX_FREQUENCY_RESPONSES) {
- ALOGE("%s: num %u of frequency is too large", __func__, num_frequencies);
- goto done;
+ break;
}
token = strtok_r(NULL, " ", &context);
}
@@ -669,8 +668,7 @@
while (token) {
microphone.frequency_responses[1][num_responses++] = atof(token);
if (num_responses >= AUDIO_MICROPHONE_MAX_FREQUENCY_RESPONSES) {
- ALOGE("%s: num %u of response is too large", __func__, num_responses);
- goto done;
+ break;
}
token = strtok_r(NULL, " ", &context);
}
@@ -725,12 +723,11 @@
while (token) {
orientation[idx++] = atof(token);
if (idx >= 3) {
- ALOGE("%s: orientation invalid", __func__);
- goto done;
+ break;
}
token = strtok_r(NULL, " ", &context);
}
- if (idx != 2) {
+ if (idx != 3) {
ALOGE("%s: orientation invalid", __func__);
goto done;
}
@@ -755,12 +752,11 @@
while (token) {
geometric_location[idx++] = atof(token);
if (idx >= 3) {
- ALOGE("%s: geometric_location invalid", __func__);
- goto done;
+ break;
}
token = strtok_r(NULL, " ", &context);
}
- if (idx != 2) {
+ if (idx != 3) {
ALOGE("%s: geometric_location invalid", __func__);
goto done;
}
diff --git a/hal/voice.c b/hal/voice.c
index f9e3562..425bb54 100644
--- a/hal/voice.c
+++ b/hal/voice.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2018, The Linux Foundation. All rights reserved.
* Not a contribution.
*
* Copyright (C) 2013 The Android Open Source Project
@@ -228,6 +228,7 @@
uc_info->in_snd_device = SND_DEVICE_NONE;
uc_info->out_snd_device = SND_DEVICE_NONE;
+ adev->voice.use_device_mute = false;
if (audio_is_bluetooth_sco_device(uc_info->devices) && !adev->bt_sco_on) {
ALOGE("start_call: couldn't find BT SCO, SCO is not ready");
@@ -281,6 +282,9 @@
goto error_start_voice;
}
+ if(adev->mic_break_enabled)
+ platform_set_mic_break_det(adev->platform, true);
+
pcm_start(session->pcm_tx);
pcm_start(session->pcm_rx);
@@ -338,10 +342,10 @@
return in_call_rec;
}
- if(in->source == AUDIO_SOURCE_VOICE_DOWNLINK ||
- in->source == AUDIO_SOURCE_VOICE_UPLINK ||
- in->source == AUDIO_SOURCE_VOICE_CALL) {
- in_call_rec = true;
+ if (in->source == AUDIO_SOURCE_VOICE_DOWNLINK ||
+ in->source == AUDIO_SOURCE_VOICE_UPLINK ||
+ in->source == AUDIO_SOURCE_VOICE_CALL) {
+ in_call_rec = true;
}
return in_call_rec;
@@ -476,13 +480,21 @@
int err = 0;
adev->voice.mic_mute = state;
+
if (audio_extn_hfp_is_active(adev)) {
err = hfp_set_mic_mute(adev, state);
} else if (adev->mode == AUDIO_MODE_IN_CALL) {
- err = platform_set_mic_mute(adev->platform, state);
+ /* Use device mute if incall music delivery usecase is in progress */
+ if (adev->voice.use_device_mute)
+ err = platform_set_device_mute(adev->platform, state, "tx");
+ else
+ err = platform_set_mic_mute(adev->platform, state);
+ ALOGV("%s: voice mute status=%d, use_device_mute flag=%d",
+ __func__, state, adev->voice.use_device_mute);
} else if (adev->mode == AUDIO_MODE_IN_COMMUNICATION) {
err = voice_extn_compress_voip_set_mic_mute(adev, state);
}
+
return err;
}
@@ -491,6 +503,27 @@
return adev->voice.mic_mute;
}
+/*
+ * Following function is called when incall music uplink usecase is
+ * created or destroyed while mic is muted. If incall music uplink
+ * usecase is active, apply voice device mute to mute only voice Tx
+ * path and not the mixed voice Tx + inncall-music path. Revert to
+ * voice stream mute once incall music uplink usecase is inactive
+ */
+void voice_set_device_mute_flag(struct audio_device *adev, bool state)
+{
+ if (adev->voice.mic_mute) {
+ if (state) {
+ platform_set_device_mute(adev->platform, true, "tx");
+ platform_set_mic_mute(adev->platform, false);
+ } else {
+ platform_set_mic_mute(adev->platform, true);
+ platform_set_device_mute(adev->platform, false, "tx");
+ }
+ }
+ adev->voice.use_device_mute = state;
+}
+
int voice_set_volume(struct audio_device *adev, float volume)
{
int vol, err = 0;
diff --git a/hal/voice.h b/hal/voice.h
index 3ae42a8..2ef790a 100644
--- a/hal/voice.h
+++ b/hal/voice.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2016, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2018, The Linux Foundation. All rights reserved.
* Not a contribution.
*
* Copyright (C) 2013 The Android Open Source Project
@@ -61,6 +61,7 @@
struct voice_session session[MAX_VOICE_SESSIONS];
int tty_mode;
bool mic_mute;
+ bool use_device_mute;
float volume;
bool in_call;
};
@@ -101,4 +102,6 @@
snd_device_t out_snd_device,
bool enable);
bool voice_is_call_state_active(struct audio_device *adev);
+void voice_set_device_mute_flag (struct audio_device *adev, bool state);
+
#endif //VOICE_H
diff --git a/hal/voice_extn/voice_extn.c b/hal/voice_extn/voice_extn.c
index 93653ca..ec85259 100644
--- a/hal/voice_extn/voice_extn.c
+++ b/hal/voice_extn/voice_extn.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2018, The Linux Foundation. All rights reserved.
* Not a contribution.
*
* Copyright (C) 2013 The Android Open Source Project
@@ -594,27 +594,16 @@
voice_extn_compress_voip_in_get_parameters(in, query, reply);
}
-#ifdef INCALL_MUSIC_ENABLED
int voice_extn_check_and_set_incall_music_usecase(struct audio_device *adev,
struct stream_out *out)
{
- uint32_t session_id = 0;
-
- session_id = get_session_id_with_state(adev, CALL_LOCAL_HOLD);
- if (session_id == VOICE_VSID) {
- out->usecase = USECASE_INCALL_MUSIC_UPLINK;
- } else if (session_id == VOICE2_VSID) {
- out->usecase = USECASE_INCALL_MUSIC_UPLINK2;
- } else {
- ALOGE("%s: Invalid session id %x", __func__, session_id);
- return -EINVAL;
- }
-
+ out->usecase = USECASE_INCALL_MUSIC_UPLINK;
out->config = pcm_config_incall_music;
- out->supported_channel_masks[0] = AUDIO_CHANNEL_OUT_MONO;
- out->channel_mask = AUDIO_CHANNEL_OUT_MONO;
+ //FIXME: add support for MONO stream configuration when audioflinger mixer supports it
+ out->supported_channel_masks[0] = AUDIO_CHANNEL_OUT_STEREO;
+ out->channel_mask = AUDIO_CHANNEL_OUT_STEREO;
+ out->config.rate = out->sample_rate;
+ ALOGV("%s: mode=%d, usecase id=%d", __func__, adev->mode, out->usecase);
return 0;
}
-#endif
-
diff --git a/hal/voice_extn/voice_extn.h b/hal/voice_extn/voice_extn.h
index f35344f..5d1cac3 100644
--- a/hal/voice_extn/voice_extn.h
+++ b/hal/voice_extn/voice_extn.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2014, 2016-2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2014, 2016-2018, The Linux Foundation. All rights reserved.
* Not a contribution.
*
* Copyright (C) 2013 The Android Open Source Project
@@ -101,13 +101,8 @@
}
#endif
-#ifdef INCALL_MUSIC_ENABLED
int voice_extn_check_and_set_incall_music_usecase(struct audio_device *adev,
struct stream_out *out);
-#else
-#define voice_extn_check_and_set_incall_music_usecase(adev, out) -ENOSYS
-#endif
-
#ifdef COMPRESS_VOIP_ENABLED
int voice_extn_compress_voip_close_output_stream(struct audio_stream *stream);
int voice_extn_compress_voip_open_output_stream(struct stream_out *out);