Merge "hal: Add changes to send pspd coefficients during out_write"
diff --git a/configs/apq8098_latv/audio_policy.conf b/configs/apq8098_latv/audio_policy.conf
index 845048f..76fffce 100644
--- a/configs/apq8098_latv/audio_policy.conf
+++ b/configs/apq8098_latv/audio_policy.conf
@@ -60,7 +60,7 @@
compress_offload {
sampling_rates 8000|11025|12000|16000|22050|24000|32000|44100|48000|64000|88200|96000|176400|192000
channel_masks AUDIO_CHANNEL_OUT_MONO|AUDIO_CHANNEL_OUT_STEREO|AUDIO_CHANNEL_OUT_2POINT1|AUDIO_CHANNEL_OUT_QUAD|AUDIO_CHANNEL_OUT_PENTA|AUDIO_CHANNEL_OUT_5POINT1|AUDIO_CHANNEL_OUT_6POINT1|AUDIO_CHANNEL_OUT_7POINT1
- formats AUDIO_FORMAT_MP3|AUDIO_FORMAT_FLAC|AUDIO_FORMAT_ALAC|AUDIO_FORMAT_APE|AUDIO_FORMAT_AAC_LC|AUDIO_FORMAT_AAC_HE_V1|AUDIO_FORMAT_AAC_HE_V2|AUDIO_FORMAT_WMA|AUDIO_FORMAT_WMA_PRO|AUDIO_FORMAT_VORBIS|AUDIO_FORMAT_AAC_ADTS_LC|AUDIO_FORMAT_AAC_ADTS_HE_V1|AUDIO_FORMAT_AAC_ADTS_HE_V2|AUDIO_FORMAT_MP2|AUDIO_FORMAT_AC3|AUDIO_FORMAT_E_AC3
+ formats AUDIO_FORMAT_MP3|AUDIO_FORMAT_FLAC|AUDIO_FORMAT_ALAC|AUDIO_FORMAT_APE|AUDIO_FORMAT_AAC_LC|AUDIO_FORMAT_AAC_HE_V1|AUDIO_FORMAT_AAC_HE_V2|AUDIO_FORMAT_WMA|AUDIO_FORMAT_WMA_PRO|AUDIO_FORMAT_VORBIS|AUDIO_FORMAT_AAC_ADTS_LC|AUDIO_FORMAT_AAC_ADTS_HE_V1|AUDIO_FORMAT_AAC_ADTS_HE_V2|AUDIO_FORMAT_MP2
devices AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
flags AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING
}
diff --git a/configs/apq8098_latv/audio_policy_configuration.xml b/configs/apq8098_latv/audio_policy_configuration.xml
index daaebdb..abda940 100755
--- a/configs/apq8098_latv/audio_policy_configuration.xml
+++ b/configs/apq8098_latv/audio_policy_configuration.xml
@@ -87,15 +87,6 @@
<profile name="" format="AUDIO_FORMAT_AAC_HE_V2"
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000"
channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/>
- <profile name="" format="AUDIO_FORMAT_AC3"
- samplingRates="32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1"/>
- <profile name="" format="AUDIO_FORMAT_E_AC3"
- samplingRates="32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
- <profile name="" format="AUDIO_FORMAT_E_AC3_JOC"
- samplingRates="32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
<profile name="" format="AUDIO_FORMAT_AAC_ADTS_LC"
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000"
channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/>
diff --git a/configs/kona/audio_io_policy.conf b/configs/kona/audio_io_policy.conf
index bac3ec1..7e00464 100644
--- a/configs/kona/audio_io_policy.conf
+++ b/configs/kona/audio_io_policy.conf
@@ -62,7 +62,7 @@
}
compress_passthrough {
flags AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING|AUDIO_OUTPUT_FLAG_COMPRESS_PASSTHROUGH
- formats AUDIO_FORMAT_AC3|AUDIO_FORMAT_E_AC3|AUDIO_FORMAT_E_AC3_JOC|AUDIO_FORMAT_DTS|AUDIO_FORMAT_DTS_HD|AUDIO_FORMAT_DSD
+ formats AUDIO_FORMAT_DTS|AUDIO_FORMAT_DTS_HD|AUDIO_FORMAT_DSD
sampling_rates 32000|44100|48000|88200|96000|176400|192000|352800
bit_width 16
app_type 69941
@@ -84,16 +84,22 @@
}
inputs {
+ record_16bit {
+ formats AUDIO_FORMAT_PCM_16_BIT
+ sampling_rates 8000|16000|32000|44100|48000|88200|96000|176400|192000
+ bit_width 16
+ app_type 69938
+ }
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
+ app_type 69948
}
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
+ app_type 69949
}
}
diff --git a/configs/kona/audio_policy_configuration.xml b/configs/kona/audio_policy_configuration.xml
index a06a899..50920b3 100644
--- a/configs/kona/audio_policy_configuration.xml
+++ b/configs/kona/audio_policy_configuration.xml
@@ -121,15 +121,6 @@
<profile name="" format="AUDIO_FORMAT_AAC_HE_V2"
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000"
channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/>
- <profile name="" format="AUDIO_FORMAT_AC3"
- samplingRates="32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1"/>
- <profile name="" format="AUDIO_FORMAT_E_AC3"
- samplingRates="32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
- <profile name="" format="AUDIO_FORMAT_E_AC3_JOC"
- samplingRates="32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
<profile name="" format="AUDIO_FORMAT_DTS"
samplingRates="32000,44100,48000"
channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1"/>
diff --git a/configs/kona/kona.mk b/configs/kona/kona.mk
index d4298f9..dbf53f5 100644
--- a/configs/kona/kona.mk
+++ b/configs/kona/kona.mk
@@ -98,7 +98,8 @@
vendor/qcom/opensource/audio-hal/primary-hal/configs/kona/sound_trigger_mixer_paths_qrd.xml:$(TARGET_COPY_OUT_VENDOR)/etc/sound_trigger_mixer_paths_qrd.xml \
vendor/qcom/opensource/audio-hal/primary-hal/configs/kona/mixer_paths.xml:$(TARGET_COPY_OUT_VENDOR)/etc/mixer_paths.xml \
vendor/qcom/opensource/audio-hal/primary-hal/configs/kona/mixer_paths_qrd.xml:$(TARGET_COPY_OUT_VENDOR)/etc/mixer_paths_qrd.xml \
- vendor/qcom/opensource/audio-hal/primary-hal/configs/kona/audio_configs.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_configs.xml
+ vendor/qcom/opensource/audio-hal/primary-hal/configs/kona/audio_configs.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_configs.xml \
+ frameworks/native/data/etc/android.hardware.audio.pro.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.audio.pro.xml
#XML Audio configuration files
ifneq ($(TARGET_USES_AOSP_FOR_AUDIO), true)
@@ -129,6 +130,11 @@
persist.vendor.audio.fluence.speaker=true\
persist.vendor.audio.fluence.tmic.enabled=false
+##speaker protection v3 switch and ADSP AFE API version
+PRODUCT_PROPERTY_OVERRIDES += \
+persist.vendor.audio.spv3.enable=true\
+persist.vendor.audio.avs.afe_api_version=2
+
#disable tunnel encoding
PRODUCT_PROPERTY_OVERRIDES += \
vendor.audio.tunnel.encode=false
diff --git a/configs/kona/sound_trigger_mixer_paths.xml b/configs/kona/sound_trigger_mixer_paths.xml
index 796bd12..2b407bb 100644
--- a/configs/kona/sound_trigger_mixer_paths.xml
+++ b/configs/kona/sound_trigger_mixer_paths.xml
@@ -234,13 +234,13 @@
<ctl name="VA_CDC_DMA_TX_0 Channels" value="Three" />
<ctl name="VA_AIF1_CAP Mixer DEC0" value="1" />
<ctl name="VA_AIF1_CAP Mixer DEC1" value="1" />
- <ctl name="VA_AIF1_CAP Mixer DEC5" value="1" />
+ <ctl name="VA_AIF1_CAP Mixer DEC2" value="1" />
<ctl name="VA DEC0 MUX" value="MSM_DMIC" />
<ctl name="VA DEC1 MUX" value="MSM_DMIC" />
- <ctl name="VA DEC5 MUX" value="MSM_DMIC" />
+ <ctl name="VA DEC2 MUX" value="MSM_DMIC" />
<ctl name="VA DMIC MUX0" value="DMIC0" />
<ctl name="VA DMIC MUX1" value="DMIC1" />
- <ctl name="VA DMIC MUX5" value="DMIC5" />
+ <ctl name="VA DMIC MUX2" value="DMIC4" />
</path>
<path name="listen-ape-handset-qmic">
@@ -248,15 +248,15 @@
<ctl name="VA_AIF1_CAP Mixer DEC0" value="1" />
<ctl name="VA_AIF1_CAP Mixer DEC1" value="1" />
<ctl name="VA_AIF1_CAP Mixer DEC2" value="1" />
- <ctl name="VA_AIF1_CAP Mixer DEC5" value="1" />
+ <ctl name="VA_AIF1_CAP Mixer DEC3" value="1" />
<ctl name="VA DEC0 MUX" value="MSM_DMIC" />
<ctl name="VA DEC1 MUX" value="MSM_DMIC" />
<ctl name="VA DEC2 MUX" value="MSM_DMIC" />
- <ctl name="VA DEC5 MUX" value="MSM_DMIC" />
+ <ctl name="VA DEC3 MUX" value="MSM_DMIC" />
<ctl name="VA DMIC MUX0" value="DMIC0" />
<ctl name="VA DMIC MUX1" value="DMIC1" />
<ctl name="VA DMIC MUX2" value="DMIC2" />
- <ctl name="VA DMIC MUX5" value="DMIC5" />
+ <ctl name="VA DMIC MUX3" value="DMIC4" />
</path>
<path name="listen-ape-headset-mic">
diff --git a/configs/kona/sound_trigger_platform_info.xml b/configs/kona/sound_trigger_platform_info.xml
index a2a2d20..4f1aa6f 100644
--- a/configs/kona/sound_trigger_platform_info.xml
+++ b/configs/kona/sound_trigger_platform_info.xml
@@ -112,6 +112,7 @@
<param execution_mode="ADSP" />
<param app_type="2" /> <!-- app type used in ACDB -->
<param in_channels="5"/> <!-- Module input channels -->
+ <param in_channels_lpi="3"/>
<param load_sound_model_ids="0x00012C1C, 0x0, 0x00012C14" />
<param unload_sound_model_ids="0x00012C1C, 0x0, 0x00012C15" />
<param confidence_levels_ids="0x00012C1C, 0x0, 0x00012C07" />
diff --git a/configs/lito/audio_io_policy.conf b/configs/lito/audio_io_policy.conf
index bac3ec1..350fe11 100644
--- a/configs/lito/audio_io_policy.conf
+++ b/configs/lito/audio_io_policy.conf
@@ -62,7 +62,7 @@
}
compress_passthrough {
flags AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING|AUDIO_OUTPUT_FLAG_COMPRESS_PASSTHROUGH
- formats AUDIO_FORMAT_AC3|AUDIO_FORMAT_E_AC3|AUDIO_FORMAT_E_AC3_JOC|AUDIO_FORMAT_DTS|AUDIO_FORMAT_DTS_HD|AUDIO_FORMAT_DSD
+ formats AUDIO_FORMAT_DTS|AUDIO_FORMAT_DTS_HD|AUDIO_FORMAT_DSD
sampling_rates 32000|44100|48000|88200|96000|176400|192000|352800
bit_width 16
app_type 69941
diff --git a/configs/lito/audio_policy_configuration.xml b/configs/lito/audio_policy_configuration.xml
index 9ec1bc1..f98f9d2 100644
--- a/configs/lito/audio_policy_configuration.xml
+++ b/configs/lito/audio_policy_configuration.xml
@@ -121,15 +121,6 @@
<profile name="" format="AUDIO_FORMAT_AAC_HE_V2"
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000"
channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/>
- <profile name="" format="AUDIO_FORMAT_AC3"
- samplingRates="32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1"/>
- <profile name="" format="AUDIO_FORMAT_E_AC3"
- samplingRates="32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
- <profile name="" format="AUDIO_FORMAT_E_AC3_JOC"
- samplingRates="32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
<profile name="" format="AUDIO_FORMAT_DTS"
samplingRates="32000,44100,48000"
channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1"/>
diff --git a/configs/msm8909/audio_io_policy.conf b/configs/msm8909/audio_io_policy.conf
index 46cd8cf..d3c1afe 100644
--- a/configs/msm8909/audio_io_policy.conf
+++ b/configs/msm8909/audio_io_policy.conf
@@ -41,7 +41,7 @@
}
compress_offload_16 {
flags AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING
- formats AUDIO_FORMAT_MP3|AUDIO_FORMAT_AC3|AUDIO_FORMAT_E_AC3|AUDIO_FORMAT_PCM_16_BIT_OFFLOAD|AUDIO_FORMAT_PCM_24_BIT_OFFLOAD|AUDIO_FORMAT_FLAC|AUDIO_FORMAT_ALAC|AUDIO_FORMAT_APE|AUDIO_FORMAT_AAC_LC|AUDIO_FORMAT_AAC_HE_V1|AUDIO_FORMAT_AAC_HE_V2|AUDIO_FORMAT_WMA|AUDIO_FORMAT_WMA_PRO|AUDIO_FORMAT_VORBIS|AUDIO_FORMAT_AAC_ADTS_LC|AUDIO_FORMAT_AAC_ADTS_HE_V1|AUDIO_FORMAT_AAC_ADTS_HE_V2
+ formats AUDIO_FORMAT_MP3|AUDIO_FORMAT_PCM_16_BIT_OFFLOAD|AUDIO_FORMAT_PCM_24_BIT_OFFLOAD|AUDIO_FORMAT_FLAC|AUDIO_FORMAT_ALAC|AUDIO_FORMAT_APE|AUDIO_FORMAT_AAC_LC|AUDIO_FORMAT_AAC_HE_V1|AUDIO_FORMAT_AAC_HE_V2|AUDIO_FORMAT_WMA|AUDIO_FORMAT_WMA_PRO|AUDIO_FORMAT_VORBIS|AUDIO_FORMAT_AAC_ADTS_LC|AUDIO_FORMAT_AAC_ADTS_HE_V1|AUDIO_FORMAT_AAC_ADTS_HE_V2
sampling_rates 44100|48000|96000|192000
bit_width 16
app_type 69936
diff --git a/configs/msm8937/audio_output_policy.conf b/configs/msm8937/audio_output_policy.conf
index 6686015..d983d9a 100644
--- a/configs/msm8937/audio_output_policy.conf
+++ b/configs/msm8937/audio_output_policy.conf
@@ -41,7 +41,7 @@
}
compress_offload_16 {
flags AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING
- formats AUDIO_FORMAT_MP3|AUDIO_FORMAT_AC3|AUDIO_FORMAT_E_AC3|AUDIO_FORMAT_FLAC|AUDIO_FORMAT_ALAC|AUDIO_FORMAT_APE|AUDIO_FORMAT_AAC_LC|AUDIO_FORMAT_AAC_HE_V1|AUDIO_FORMAT_AAC_HE_V2|AUDIO_FORMAT_WMA|AUDIO_FORMAT_WMA_PRO|AUDIO_FORMAT_VORBIS|AUDIO_FORMAT_AAC_ADTS_LC|AUDIO_FORMAT_AAC_ADTS_HE_V1|AUDIO_FORMAT_AAC_ADTS_HE_V2
+ formats AUDIO_FORMAT_MP3|AUDIO_FORMAT_FLAC|AUDIO_FORMAT_ALAC|AUDIO_FORMAT_APE|AUDIO_FORMAT_AAC_LC|AUDIO_FORMAT_AAC_HE_V1|AUDIO_FORMAT_AAC_HE_V2|AUDIO_FORMAT_WMA|AUDIO_FORMAT_WMA_PRO|AUDIO_FORMAT_VORBIS|AUDIO_FORMAT_AAC_ADTS_LC|AUDIO_FORMAT_AAC_ADTS_HE_V1|AUDIO_FORMAT_AAC_ADTS_HE_V2
sampling_rates 44100|48000|96000|192000
bit_width 16
app_type 69936
diff --git a/configs/msm8937/audio_policy.conf b/configs/msm8937/audio_policy.conf
index 6a1cd54..bc3791b 100644
--- a/configs/msm8937/audio_policy.conf
+++ b/configs/msm8937/audio_policy.conf
@@ -57,7 +57,7 @@
compress_offload {
sampling_rates 8000|11025|12000|16000|22050|24000|32000|44100|48000|64000|88200|96000|176400|192000
channel_masks AUDIO_CHANNEL_OUT_MONO|AUDIO_CHANNEL_OUT_STEREO|AUDIO_CHANNEL_OUT_2POINT1|AUDIO_CHANNEL_OUT_QUAD|AUDIO_CHANNEL_OUT_PENTA|AUDIO_CHANNEL_OUT_5POINT1|AUDIO_CHANNEL_OUT_6POINT1|AUDIO_CHANNEL_OUT_7POINT1
- formats AUDIO_FORMAT_MP3|AUDIO_FORMAT_AC3|AUDIO_FORMAT_E_AC3|AUDIO_FORMAT_FLAC|AUDIO_FORMAT_ALAC|AUDIO_FORMAT_APE|AUDIO_FORMAT_AAC_LC|AUDIO_FORMAT_AAC_HE_V1|AUDIO_FORMAT_AAC_HE_V2|AUDIO_FORMAT_WMA|AUDIO_FORMAT_WMA_PRO|AUDIO_FORMAT_VORBIS|AUDIO_FORMAT_AAC_ADTS_LC|AUDIO_FORMAT_AAC_ADTS_HE_V1|AUDIO_FORMAT_AAC_ADTS_HE_V2
+ formats AUDIO_FORMAT_MP3|AUDIO_FORMAT_FLAC|AUDIO_FORMAT_ALAC|AUDIO_FORMAT_APE|AUDIO_FORMAT_AAC_LC|AUDIO_FORMAT_AAC_HE_V1|AUDIO_FORMAT_AAC_HE_V2|AUDIO_FORMAT_WMA|AUDIO_FORMAT_WMA_PRO|AUDIO_FORMAT_VORBIS|AUDIO_FORMAT_AAC_ADTS_LC|AUDIO_FORMAT_AAC_ADTS_HE_V1|AUDIO_FORMAT_AAC_ADTS_HE_V2
devices AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL|AUDIO_DEVICE_OUT_PROXY
flags AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING
}
diff --git a/configs/msm8953/audio_output_policy.conf b/configs/msm8953/audio_output_policy.conf
index 6686015..d983d9a 100644
--- a/configs/msm8953/audio_output_policy.conf
+++ b/configs/msm8953/audio_output_policy.conf
@@ -41,7 +41,7 @@
}
compress_offload_16 {
flags AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING
- formats AUDIO_FORMAT_MP3|AUDIO_FORMAT_AC3|AUDIO_FORMAT_E_AC3|AUDIO_FORMAT_FLAC|AUDIO_FORMAT_ALAC|AUDIO_FORMAT_APE|AUDIO_FORMAT_AAC_LC|AUDIO_FORMAT_AAC_HE_V1|AUDIO_FORMAT_AAC_HE_V2|AUDIO_FORMAT_WMA|AUDIO_FORMAT_WMA_PRO|AUDIO_FORMAT_VORBIS|AUDIO_FORMAT_AAC_ADTS_LC|AUDIO_FORMAT_AAC_ADTS_HE_V1|AUDIO_FORMAT_AAC_ADTS_HE_V2
+ formats AUDIO_FORMAT_MP3|AUDIO_FORMAT_FLAC|AUDIO_FORMAT_ALAC|AUDIO_FORMAT_APE|AUDIO_FORMAT_AAC_LC|AUDIO_FORMAT_AAC_HE_V1|AUDIO_FORMAT_AAC_HE_V2|AUDIO_FORMAT_WMA|AUDIO_FORMAT_WMA_PRO|AUDIO_FORMAT_VORBIS|AUDIO_FORMAT_AAC_ADTS_LC|AUDIO_FORMAT_AAC_ADTS_HE_V1|AUDIO_FORMAT_AAC_ADTS_HE_V2
sampling_rates 44100|48000|96000|192000
bit_width 16
app_type 69936
diff --git a/configs/msm8953/audio_policy.conf b/configs/msm8953/audio_policy.conf
index 95c20ad..663a275 100644
--- a/configs/msm8953/audio_policy.conf
+++ b/configs/msm8953/audio_policy.conf
@@ -57,7 +57,7 @@
compress_offload {
sampling_rates 8000|11025|12000|16000|22050|24000|32000|44100|48000|64000|88200|96000|176400|192000
channel_masks AUDIO_CHANNEL_OUT_MONO|AUDIO_CHANNEL_OUT_STEREO|AUDIO_CHANNEL_OUT_2POINT1|AUDIO_CHANNEL_OUT_QUAD|AUDIO_CHANNEL_OUT_PENTA|AUDIO_CHANNEL_OUT_5POINT1|AUDIO_CHANNEL_OUT_6POINT1|AUDIO_CHANNEL_OUT_7POINT1
- formats AUDIO_FORMAT_MP3|AUDIO_FORMAT_AC3|AUDIO_FORMAT_E_AC3|AUDIO_FORMAT_FLAC|AUDIO_FORMAT_ALAC|AUDIO_FORMAT_APE|AUDIO_FORMAT_AAC_LC|AUDIO_FORMAT_AAC_HE_V1|AUDIO_FORMAT_AAC_HE_V2|AUDIO_FORMAT_WMA|AUDIO_FORMAT_WMA_PRO|AUDIO_FORMAT_VORBIS|AUDIO_FORMAT_AAC_ADTS_LC|AUDIO_FORMAT_AAC_ADTS_HE_V1|AUDIO_FORMAT_AAC_ADTS_HE_V2
+ formats AUDIO_FORMAT_MP3|AUDIO_FORMAT_FLAC|AUDIO_FORMAT_ALAC|AUDIO_FORMAT_APE|AUDIO_FORMAT_AAC_LC|AUDIO_FORMAT_AAC_HE_V1|AUDIO_FORMAT_AAC_HE_V2|AUDIO_FORMAT_WMA|AUDIO_FORMAT_WMA_PRO|AUDIO_FORMAT_VORBIS|AUDIO_FORMAT_AAC_ADTS_LC|AUDIO_FORMAT_AAC_ADTS_HE_V1|AUDIO_FORMAT_AAC_ADTS_HE_V2
devices AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL|AUDIO_DEVICE_OUT_PROXY
flags AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING
}
diff --git a/configs/msm8996/audio_output_policy.conf b/configs/msm8996/audio_output_policy.conf
index 7945768..39ed48c 100644
--- a/configs/msm8996/audio_output_policy.conf
+++ b/configs/msm8996/audio_output_policy.conf
@@ -41,7 +41,7 @@
}
compress_passthrough {
flags AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING|AUDIO_OUTPUT_FLAG_COMPRESS_PASSTHROUGH
- formats AUDIO_FORMAT_AC3|AUDIO_FORMAT_E_AC3|AUDIO_FORMAT_E_AC3_JOC|AUDIO_FORMAT_DTS|AUDIO_FORMAT_DTS_HD
+ formats AUDIO_FORMAT_DTS|AUDIO_FORMAT_DTS_HD
sampling_rates 32000|44100|48000|88200|96000|176400|192000
bit_width 16
app_type 69941
diff --git a/configs/msm8998/audio_output_policy.conf b/configs/msm8998/audio_output_policy.conf
index 76039c7..4719b66 100644
--- a/configs/msm8998/audio_output_policy.conf
+++ b/configs/msm8998/audio_output_policy.conf
@@ -55,7 +55,7 @@
}
compress_passthrough {
flags AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING|AUDIO_OUTPUT_FLAG_COMPRESS_PASSTHROUGH
- formats AUDIO_FORMAT_AC3|AUDIO_FORMAT_E_AC3|AUDIO_FORMAT_E_AC3_JOC|AUDIO_FORMAT_DTS|AUDIO_FORMAT_DTS_HD|AUDIO_FORMAT_DSD
+ formats AUDIO_FORMAT_DTS|AUDIO_FORMAT_DTS_HD|AUDIO_FORMAT_DSD
sampling_rates 32000|44100|48000|88200|96000|176400|192000|352800
bit_width 16
app_type 69941
diff --git a/configs/msm8998/audio_policy_configuration.xml b/configs/msm8998/audio_policy_configuration.xml
index 801f585..c2d30a1 100644
--- a/configs/msm8998/audio_policy_configuration.xml
+++ b/configs/msm8998/audio_policy_configuration.xml
@@ -121,15 +121,6 @@
<profile name="" format="AUDIO_FORMAT_AAC_HE_V2"
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000"
channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/>
- <profile name="" format="AUDIO_FORMAT_AC3"
- samplingRates="32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1"/>
- <profile name="" format="AUDIO_FORMAT_E_AC3"
- samplingRates="32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
- <profile name="" format="AUDIO_FORMAT_E_AC3_JOC"
- samplingRates="32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
<profile name="" format="AUDIO_FORMAT_DTS"
samplingRates="32000,44100,48000"
channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1"/>
diff --git a/configs/msmnile/audio_io_policy.conf b/configs/msmnile/audio_io_policy.conf
index f0ec913..79540df 100644
--- a/configs/msmnile/audio_io_policy.conf
+++ b/configs/msmnile/audio_io_policy.conf
@@ -62,7 +62,7 @@
}
compress_passthrough {
flags AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING|AUDIO_OUTPUT_FLAG_COMPRESS_PASSTHROUGH
- formats AUDIO_FORMAT_AC3|AUDIO_FORMAT_E_AC3|AUDIO_FORMAT_E_AC3_JOC|AUDIO_FORMAT_DTS|AUDIO_FORMAT_DTS_HD|AUDIO_FORMAT_DSD
+ formats AUDIO_FORMAT_DTS|AUDIO_FORMAT_DTS_HD|AUDIO_FORMAT_DSD
sampling_rates 32000|44100|48000|88200|96000|176400|192000|352800
bit_width 16
app_type 69941
@@ -109,4 +109,4 @@
bit_width 24
app_type 69942
}
-}
\ No newline at end of file
+}
diff --git a/configs/msmnile/audio_platform_info.xml b/configs/msmnile/audio_platform_info.xml
index df2f46d..4e7c344 100644
--- a/configs/msmnile/audio_platform_info.xml
+++ b/configs/msmnile/audio_platform_info.xml
@@ -151,6 +151,9 @@
<device name="SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC" backend="headset-mic" interface="SLIMBUS_1_TX"/>
<device name="SND_DEVICE_IN_VOICE_TTY_HCO_HEADSET_MIC" backend="headset-mic" interface="SLIMBUS_1_TX"/>
<device name="SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC" backend="headset-mic" interface="SLIMBUS_1_TX"/>
+ <device name="SND_DEVICE_IN_VOICE_REC_HEADSET_MIC" backend="headset-mic" interface="SLIMBUS_1_TX"/>
+ <device name="SND_DEVICE_IN_HEADSET_MIC_AEC" backend="headset-mic" interface="SLIMBUS_1_TX"/>
+ <device name="SND_DEVICE_IN_HEADSET_MIC_FLUENCE" backend="headset-mic" interface="SLIMBUS_1_TX"/>
</backend_names>
<!-- below values are for ref purpose to OEM, doesn't contain actual hardware info on MTP -->
<microphone_characteristics>
diff --git a/configs/msmnile/audio_policy_configuration.xml b/configs/msmnile/audio_policy_configuration.xml
index a06a899..50920b3 100644
--- a/configs/msmnile/audio_policy_configuration.xml
+++ b/configs/msmnile/audio_policy_configuration.xml
@@ -121,15 +121,6 @@
<profile name="" format="AUDIO_FORMAT_AAC_HE_V2"
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000"
channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/>
- <profile name="" format="AUDIO_FORMAT_AC3"
- samplingRates="32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1"/>
- <profile name="" format="AUDIO_FORMAT_E_AC3"
- samplingRates="32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
- <profile name="" format="AUDIO_FORMAT_E_AC3_JOC"
- samplingRates="32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
<profile name="" format="AUDIO_FORMAT_DTS"
samplingRates="32000,44100,48000"
channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1"/>
diff --git a/configs/msmnile/msmnile.mk b/configs/msmnile/msmnile.mk
index 2099509..a58f89d 100644
--- a/configs/msmnile/msmnile.mk
+++ b/configs/msmnile/msmnile.mk
@@ -100,7 +100,8 @@
vendor/qcom/opensource/audio-hal/primary-hal/configs/msmnile/audio_platform_info.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_platform_info.xml \
vendor/qcom/opensource/audio-hal/primary-hal/configs/msmnile/mixer_paths_pahu.xml:$(TARGET_COPY_OUT_VENDOR)/etc/mixer_paths_pahu.xml \
vendor/qcom/opensource/audio-hal/primary-hal/configs/msmnile/sound_trigger_mixer_paths.xml:$(TARGET_COPY_OUT_VENDOR)/etc/sound_trigger_mixer_paths.xml \
- vendor/qcom/opensource/audio-hal/primary-hal/configs/msmnile/audio_configs.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_configs.xml
+ vendor/qcom/opensource/audio-hal/primary-hal/configs/msmnile/audio_configs.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_configs.xml \
+ frameworks/native/data/etc/android.hardware.audio.pro.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.audio.pro.xml
#XML Audio configuration files
ifneq ($(TARGET_USES_AOSP_FOR_AUDIO), true)
diff --git a/configs/msmnile_au/audio_output_policy.conf b/configs/msmnile_au/audio_output_policy.conf
index 877b6a5..67febfa 100644
--- a/configs/msmnile_au/audio_output_policy.conf
+++ b/configs/msmnile_au/audio_output_policy.conf
@@ -62,7 +62,7 @@
}
compress_passthrough {
flags AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING|AUDIO_OUTPUT_FLAG_COMPRESS_PASSTHROUGH
- formats AUDIO_FORMAT_AC3|AUDIO_FORMAT_E_AC3|AUDIO_FORMAT_E_AC3_JOC|AUDIO_FORMAT_DTS|AUDIO_FORMAT_DTS_HD|AUDIO_FORMAT_DSD
+ formats AUDIO_FORMAT_DTS|AUDIO_FORMAT_DTS_HD|AUDIO_FORMAT_DSD
sampling_rates 32000|44100|48000|88200|96000|176400|192000|352800
bit_width 16
app_type 69941
diff --git a/configs/msmnile_au/audio_policy_configuration.xml b/configs/msmnile_au/audio_policy_configuration.xml
index 52e998c..e4aec16 100644
--- a/configs/msmnile_au/audio_policy_configuration.xml
+++ b/configs/msmnile_au/audio_policy_configuration.xml
@@ -121,15 +121,6 @@
<profile name="" format="AUDIO_FORMAT_AAC_HE_V2"
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000"
channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/>
- <profile name="" format="AUDIO_FORMAT_AC3"
- samplingRates="32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1"/>
- <profile name="" format="AUDIO_FORMAT_E_AC3"
- samplingRates="32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
- <profile name="" format="AUDIO_FORMAT_E_AC3_JOC"
- samplingRates="32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
<profile name="" format="AUDIO_FORMAT_DTS"
samplingRates="32000,44100,48000"
channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1"/>
diff --git a/configs/msmsteppe/audio_io_policy.conf b/configs/msmsteppe/audio_io_policy.conf
index 3fc62eb..7e00464 100644
--- a/configs/msmsteppe/audio_io_policy.conf
+++ b/configs/msmsteppe/audio_io_policy.conf
@@ -62,7 +62,7 @@
}
compress_passthrough {
flags AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING|AUDIO_OUTPUT_FLAG_COMPRESS_PASSTHROUGH
- formats AUDIO_FORMAT_AC3|AUDIO_FORMAT_E_AC3|AUDIO_FORMAT_E_AC3_JOC|AUDIO_FORMAT_DTS|AUDIO_FORMAT_DTS_HD|AUDIO_FORMAT_DSD
+ formats AUDIO_FORMAT_DTS|AUDIO_FORMAT_DTS_HD|AUDIO_FORMAT_DSD
sampling_rates 32000|44100|48000|88200|96000|176400|192000|352800
bit_width 16
app_type 69941
diff --git a/configs/msmsteppe/audio_policy_configuration.xml b/configs/msmsteppe/audio_policy_configuration.xml
index 5a251c2..5435fad 100644
--- a/configs/msmsteppe/audio_policy_configuration.xml
+++ b/configs/msmsteppe/audio_policy_configuration.xml
@@ -121,15 +121,6 @@
<profile name="" format="AUDIO_FORMAT_AAC_HE_V2"
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000"
channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/>
- <profile name="" format="AUDIO_FORMAT_AC3"
- samplingRates="32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1"/>
- <profile name="" format="AUDIO_FORMAT_E_AC3"
- samplingRates="32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
- <profile name="" format="AUDIO_FORMAT_E_AC3_JOC"
- samplingRates="32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
<profile name="" format="AUDIO_FORMAT_DTS"
samplingRates="32000,44100,48000"
channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1"/>
diff --git a/configs/msmsteppe_au/audio_output_policy.conf b/configs/msmsteppe_au/audio_output_policy.conf
index 877b6a5..67febfa 100644
--- a/configs/msmsteppe_au/audio_output_policy.conf
+++ b/configs/msmsteppe_au/audio_output_policy.conf
@@ -62,7 +62,7 @@
}
compress_passthrough {
flags AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING|AUDIO_OUTPUT_FLAG_COMPRESS_PASSTHROUGH
- formats AUDIO_FORMAT_AC3|AUDIO_FORMAT_E_AC3|AUDIO_FORMAT_E_AC3_JOC|AUDIO_FORMAT_DTS|AUDIO_FORMAT_DTS_HD|AUDIO_FORMAT_DSD
+ formats AUDIO_FORMAT_DTS|AUDIO_FORMAT_DTS_HD|AUDIO_FORMAT_DSD
sampling_rates 32000|44100|48000|88200|96000|176400|192000|352800
bit_width 16
app_type 69941
diff --git a/configs/msmsteppe_au/audio_policy_configuration.xml b/configs/msmsteppe_au/audio_policy_configuration.xml
index 52e998c..e4aec16 100644
--- a/configs/msmsteppe_au/audio_policy_configuration.xml
+++ b/configs/msmsteppe_au/audio_policy_configuration.xml
@@ -121,15 +121,6 @@
<profile name="" format="AUDIO_FORMAT_AAC_HE_V2"
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000"
channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/>
- <profile name="" format="AUDIO_FORMAT_AC3"
- samplingRates="32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1"/>
- <profile name="" format="AUDIO_FORMAT_E_AC3"
- samplingRates="32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
- <profile name="" format="AUDIO_FORMAT_E_AC3_JOC"
- samplingRates="32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
<profile name="" format="AUDIO_FORMAT_DTS"
samplingRates="32000,44100,48000"
channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1"/>
diff --git a/configs/sdm660/audio_output_policy.conf b/configs/sdm660/audio_output_policy.conf
index a74791b..c6338e5 100644
--- a/configs/sdm660/audio_output_policy.conf
+++ b/configs/sdm660/audio_output_policy.conf
@@ -48,7 +48,7 @@
}
compress_passthrough {
flags AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING|AUDIO_OUTPUT_FLAG_COMPRESS_PASSTHROUGH
- formats AUDIO_FORMAT_AC3|AUDIO_FORMAT_E_AC3|AUDIO_FORMAT_E_AC3_JOC|AUDIO_FORMAT_DTS|AUDIO_FORMAT_DTS_HD|AUDIO_FORMAT_DSD
+ formats AUDIO_FORMAT_DTS|AUDIO_FORMAT_DTS_HD|AUDIO_FORMAT_DSD
sampling_rates 32000|44100|48000|88200|96000|176400|192000|352800
bit_width 16
app_type 69941
diff --git a/configs/sdm710/audio_output_policy.conf b/configs/sdm710/audio_output_policy.conf
index acbf81c..35a47a0 100644
--- a/configs/sdm710/audio_output_policy.conf
+++ b/configs/sdm710/audio_output_policy.conf
@@ -62,7 +62,7 @@
}
compress_passthrough {
flags AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING|AUDIO_OUTPUT_FLAG_COMPRESS_PASSTHROUGH
- formats AUDIO_FORMAT_AC3|AUDIO_FORMAT_E_AC3|AUDIO_FORMAT_E_AC3_JOC|AUDIO_FORMAT_DTS|AUDIO_FORMAT_DTS_HD|AUDIO_FORMAT_DSD
+ formats AUDIO_FORMAT_DTS|AUDIO_FORMAT_DTS_HD|AUDIO_FORMAT_DSD
sampling_rates 32000|44100|48000|88200|96000|176400|192000|352800
bit_width 16
app_type 69941
diff --git a/configs/sdm710/audio_policy_configuration.xml b/configs/sdm710/audio_policy_configuration.xml
index 7c2b243..3a4fa84 100644
--- a/configs/sdm710/audio_policy_configuration.xml
+++ b/configs/sdm710/audio_policy_configuration.xml
@@ -121,15 +121,6 @@
<profile name="" format="AUDIO_FORMAT_AAC_HE_V2"
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000"
channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/>
- <profile name="" format="AUDIO_FORMAT_AC3"
- samplingRates="32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1"/>
- <profile name="" format="AUDIO_FORMAT_E_AC3"
- samplingRates="32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
- <profile name="" format="AUDIO_FORMAT_E_AC3_JOC"
- samplingRates="32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
<profile name="" format="AUDIO_FORMAT_DTS"
samplingRates="32000,44100,48000"
channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1"/>
diff --git a/configs/sdm845/audio_output_policy.conf b/configs/sdm845/audio_output_policy.conf
index 877b6a5..67febfa 100644
--- a/configs/sdm845/audio_output_policy.conf
+++ b/configs/sdm845/audio_output_policy.conf
@@ -62,7 +62,7 @@
}
compress_passthrough {
flags AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING|AUDIO_OUTPUT_FLAG_COMPRESS_PASSTHROUGH
- formats AUDIO_FORMAT_AC3|AUDIO_FORMAT_E_AC3|AUDIO_FORMAT_E_AC3_JOC|AUDIO_FORMAT_DTS|AUDIO_FORMAT_DTS_HD|AUDIO_FORMAT_DSD
+ formats AUDIO_FORMAT_DTS|AUDIO_FORMAT_DTS_HD|AUDIO_FORMAT_DSD
sampling_rates 32000|44100|48000|88200|96000|176400|192000|352800
bit_width 16
app_type 69941
diff --git a/configs/sdm845/audio_policy_configuration.xml b/configs/sdm845/audio_policy_configuration.xml
index f7cc33c..8318d1e 100644
--- a/configs/sdm845/audio_policy_configuration.xml
+++ b/configs/sdm845/audio_policy_configuration.xml
@@ -121,15 +121,6 @@
<profile name="" format="AUDIO_FORMAT_AAC_HE_V2"
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000"
channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/>
- <profile name="" format="AUDIO_FORMAT_AC3"
- samplingRates="32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1"/>
- <profile name="" format="AUDIO_FORMAT_E_AC3"
- samplingRates="32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
- <profile name="" format="AUDIO_FORMAT_E_AC3_JOC"
- samplingRates="32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
<profile name="" format="AUDIO_FORMAT_DTS"
samplingRates="32000,44100,48000"
channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1"/>
diff --git a/configs/trinket/audio_io_policy.conf b/configs/trinket/audio_io_policy.conf
index 3fc62eb..7e00464 100644
--- a/configs/trinket/audio_io_policy.conf
+++ b/configs/trinket/audio_io_policy.conf
@@ -62,7 +62,7 @@
}
compress_passthrough {
flags AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING|AUDIO_OUTPUT_FLAG_COMPRESS_PASSTHROUGH
- formats AUDIO_FORMAT_AC3|AUDIO_FORMAT_E_AC3|AUDIO_FORMAT_E_AC3_JOC|AUDIO_FORMAT_DTS|AUDIO_FORMAT_DTS_HD|AUDIO_FORMAT_DSD
+ formats AUDIO_FORMAT_DTS|AUDIO_FORMAT_DTS_HD|AUDIO_FORMAT_DSD
sampling_rates 32000|44100|48000|88200|96000|176400|192000|352800
bit_width 16
app_type 69941
diff --git a/configs/trinket/audio_policy_configuration.xml b/configs/trinket/audio_policy_configuration.xml
index f4184bc..0939e3b 100644
--- a/configs/trinket/audio_policy_configuration.xml
+++ b/configs/trinket/audio_policy_configuration.xml
@@ -121,15 +121,6 @@
<profile name="" format="AUDIO_FORMAT_AAC_HE_V2"
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000"
channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/>
- <profile name="" format="AUDIO_FORMAT_AC3"
- samplingRates="32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1"/>
- <profile name="" format="AUDIO_FORMAT_E_AC3"
- samplingRates="32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
- <profile name="" format="AUDIO_FORMAT_E_AC3_JOC"
- samplingRates="32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
<profile name="" format="AUDIO_FORMAT_DTS"
samplingRates="32000,44100,48000"
channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1"/>
diff --git a/hal/audio_extn/audio_extn.c b/hal/audio_extn/audio_extn.c
index e7b044f..8edf1f3 100644
--- a/hal/audio_extn/audio_extn.c
+++ b/hal/audio_extn/audio_extn.c
@@ -844,12 +844,17 @@
// END: ANC_HEADSET -------------------------------------------------------
static int32_t afe_proxy_set_channel_mapping(struct audio_device *adev,
- int channel_count)
+ int channel_count,
+ snd_device_t snd_device)
{
- struct mixer_ctl *ctl;
+ struct mixer_ctl *ctl = NULL, *be_ctl = NULL;
const char *mixer_ctl_name = "Playback Device Channel Map";
- long set_values[8] = {0};
- int ret;
+ const char *be_mixer_ctl_name = "Backend Device Channel Map";
+ long set_values[FCC_8] = {0};
+ long be_set_values[FCC_8 + 1] = {0};
+ int ret = -1;
+ int be_idx = -1;
+
ALOGV("%s channel_count:%d",__func__, channel_count);
switch (channel_count) {
@@ -881,21 +886,42 @@
return -EINVAL;
}
- ctl = mixer_get_ctl_by_name(adev->mixer, mixer_ctl_name);
+ be_idx = platform_get_snd_device_backend_index(snd_device);
+
+ if (be_idx >= 0) {
+ be_ctl = mixer_get_ctl_by_name(adev->mixer, be_mixer_ctl_name);
+ if (!be_ctl) {
+ ALOGD("%s: Could not get ctl for mixer cmd - %s, using default control",
+ __func__, be_mixer_ctl_name);
+ ctl = mixer_get_ctl_by_name(adev->mixer, mixer_ctl_name);
+ } else
+ ctl = be_ctl;
+ } else
+ 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;
}
+
ALOGV("AFE: set mapping(%ld %ld %ld %ld %ld %ld %ld %ld) for channel:%d",
set_values[0], set_values[1], set_values[2], set_values[3], set_values[4],
set_values[5], set_values[6], set_values[7], channel_count);
- ret = mixer_ctl_set_array(ctl, set_values, channel_count);
+
+ if (!be_ctl)
+ ret = mixer_ctl_set_array(ctl, set_values, channel_count);
+ else {
+ be_set_values[0] = be_idx;
+ memcpy(&be_set_values[1], set_values, sizeof(long) * channel_count);
+ ret = mixer_ctl_set_array(ctl, be_set_values, ARRAY_SIZE(be_set_values));
+ }
+
return ret;
}
int32_t audio_extn_set_afe_proxy_channel_mixer(struct audio_device *adev,
- int channel_count)
+ int channel_count, snd_device_t snd_device)
{
int32_t ret = 0;
const char *channel_cnt_str = NULL;
@@ -933,7 +959,7 @@
mixer_ctl_set_enum_by_string(ctl, channel_cnt_str);
if (channel_count == 6 || channel_count == 8 || channel_count == 2) {
- ret = afe_proxy_set_channel_mapping(adev, channel_count);
+ ret = afe_proxy_set_channel_mapping(adev, channel_count, snd_device);
} else {
ALOGE("%s: set unsupported channel count(%d)", __func__, channel_count);
ret = -EINVAL;
diff --git a/hal/audio_extn/audio_extn.h b/hal/audio_extn/audio_extn.h
index 8e1a0e8..d1ec7c6 100644
--- a/hal/audio_extn/audio_extn.h
+++ b/hal/audio_extn/audio_extn.h
@@ -252,7 +252,8 @@
//START: AFE_PROXY_FEATURE
int32_t audio_extn_set_afe_proxy_channel_mixer(struct audio_device *adev,
- int channel_count);
+ int channel_count,
+ snd_device_t snd_device);
int32_t audio_extn_read_afe_proxy_channel_masks(struct stream_out *out);
int32_t audio_extn_get_afe_proxy_channel_count();
//END: AFE_PROXY_FEATURE
diff --git a/hal/msm8916/platform.c b/hal/msm8916/platform.c
index d79f5a5..a3e09ed 100644
--- a/hal/msm8916/platform.c
+++ b/hal/msm8916/platform.c
@@ -3611,11 +3611,15 @@
int snd_device = SND_DEVICE_OUT_SPEAKER;
int new_snd_device[SND_DEVICE_OUT_END] = {0};
int i, num_devices = 1;
+ bool is_incall_rec_usecase = false;
+ snd_device_t incall_rec_device;
+
+ if (voice_is_in_call(my_data->adev))
+ is_incall_rec_usecase = voice_is_in_call_rec_stream(usecase->stream.in);
if (usecase->type == PCM_PLAYBACK)
snd_device = usecase->out_snd_device;
- else if ((usecase->type == PCM_CAPTURE) &&
- voice_is_in_call_rec_stream(usecase->stream.in))
+ else if ((usecase->type == PCM_CAPTURE) && is_incall_rec_usecase)
snd_device = voice_get_incall_rec_snd_device(usecase->in_snd_device);
else if ((usecase->type == PCM_HFP_CALL) || (usecase->type == PCM_CAPTURE))
snd_device = usecase->in_snd_device;
@@ -3624,13 +3628,25 @@
acdb_dev_id = acdb_device_table[platform_get_spkr_prot_snd_device(snd_device)];
- if (platform_split_snd_device(platform, snd_device, &num_devices,
- new_snd_device) < 0) {
- new_snd_device[0] = snd_device;
+ if (!is_incall_rec_usecase) {
+ if (platform_split_snd_device(my_data, snd_device,
+ &num_devices, new_snd_device) < 0) {
+ new_snd_device[0] = snd_device;
+ }
+ } else {
+ incall_rec_device = voice_get_incall_rec_backend_device(usecase->stream.in);
+ if (platform_split_snd_device(my_data, incall_rec_device,
+ &num_devices, new_snd_device) < 0) {
+ new_snd_device[0] = snd_device;
+ }
}
for (i = 0; i < num_devices; i++) {
- acdb_dev_id = acdb_device_table[platform_get_spkr_prot_snd_device(new_snd_device[i])];
+ if (!is_incall_rec_usecase)
+ acdb_dev_id = acdb_device_table[platform_get_spkr_prot_snd_device(new_snd_device[i])];
+ else
+ // Use in_call_rec snd_device to extract the ACDB device ID instead of split snd devices
+ acdb_dev_id = acdb_device_table[platform_get_spkr_prot_snd_device(snd_device)];
// Do not use Rx path default app type for TX path
if ((usecase->type == PCM_CAPTURE) && (app_type == DEFAULT_APP_TYPE_RX_PATH)) {
@@ -4397,8 +4413,8 @@
} else if (devices & AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET ||
devices & AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET) {
ALOGD("%s: setting USB hadset channel capability(2) for Proxy", __func__);
- audio_extn_set_afe_proxy_channel_mixer(adev, 2);
snd_device = SND_DEVICE_OUT_USB_HEADSET;
+ audio_extn_set_afe_proxy_channel_mixer(adev, 2, snd_device);
} else if (devices &
(AUDIO_DEVICE_OUT_USB_DEVICE |
AUDIO_DEVICE_OUT_USB_HEADSET)) {
@@ -4416,8 +4432,8 @@
} else if (devices & AUDIO_DEVICE_OUT_PROXY) {
channel_count = audio_extn_get_afe_proxy_channel_count();
ALOGD("%s: setting sink capability(%d) for Proxy", __func__, channel_count);
- audio_extn_set_afe_proxy_channel_mixer(adev, channel_count);
snd_device = SND_DEVICE_OUT_AFE_PROXY;
+ audio_extn_set_afe_proxy_channel_mixer(adev, channel_count, snd_device);
} else {
ALOGE("%s: Unknown device(s) %#x", __func__, devices);
}
@@ -6119,7 +6135,7 @@
my_data->current_backend_cfg[backend_idx].channels = channels;
if (backend_idx == HDMI_RX_BACKEND)
- platform_set_edid_channels_configuration(adev->platform, channels, HDMI_RX_BACKEND);
+ platform_set_edid_channels_configuration(adev->platform, channels, HDMI_RX_BACKEND, snd_device);
ALOGD("%s:becf: afe: %s set to %s", __func__,
my_data->current_backend_cfg[backend_idx].channels_mixer_ctl, channel_cnt_str);
@@ -6497,6 +6513,8 @@
if (channels != my_data->current_backend_cfg[backend_idx].channels)
channels_updated = true;
+
+ platform_set_edid_channels_configuration(adev->platform, channels, backend_idx, snd_device);
}
//check if mulitchannel clip needs to be down sampled to 48k
@@ -6614,7 +6632,7 @@
if ((my_data->spkr_ch_map != NULL) &&
(platform_get_backend_index(snd_device) == DEFAULT_CODEC_BACKEND))
platform_set_channel_map(my_data, my_data->spkr_ch_map->num_ch,
- my_data->spkr_ch_map->chmap, -1);
+ my_data->spkr_ch_map->chmap, -1, -1);
if (platform_split_snd_device(adev->platform, snd_device,
&num_devices, new_snd_devices) < 0)
@@ -7164,7 +7182,7 @@
return -1;
}
}
- ret = platform_set_channel_map(platform, channels, channel_map, snd_id);
+ ret = platform_set_channel_map(platform, channels, channel_map, snd_id, -1);
return ret;
}
@@ -7304,7 +7322,7 @@
return ret;
}
-int platform_set_channel_map(void *platform, int ch_count, char *ch_map, int snd_id)
+int platform_set_channel_map(void *platform, int ch_count, char *ch_map, int snd_id, int be_idx __unused)
{
struct mixer_ctl *ctl;
char mixer_ctl_name[44] = {0}; // max length of name is 44 as defined
@@ -7466,7 +7484,7 @@
return false;
}
-int platform_set_edid_channels_configuration(void *platform, int channels, int backend_idx __unused) {
+int platform_set_edid_channels_configuration(void *platform, int channels, int backend_idx __unused, snd_device_t snd_device __unused) {
struct platform_data *my_data = (struct platform_data *)platform;
struct audio_device *adev = my_data->adev;
@@ -7499,9 +7517,9 @@
*/
if (adev_device_cfg_ptr->use_client_dev_cfg) {
platform_set_channel_map(platform, adev_device_cfg_ptr->dev_cfg_params.channels,
- (char *)adev_device_cfg_ptr->dev_cfg_params.channel_map, -1);
+ (char *)adev_device_cfg_ptr->dev_cfg_params.channel_map, -1, -1);
} else {
- platform_set_channel_map(platform, channel_count, info->channel_map, -1);
+ platform_set_channel_map(platform, channel_count, info->channel_map, -1, -1);
}
if (adev_device_cfg_ptr->use_client_dev_cfg) {
@@ -7520,7 +7538,7 @@
default_channelMap[0] = PCM_CHANNEL_FL;
default_channelMap[1] = PCM_CHANNEL_FR;
}
- platform_set_channel_map(platform,2,default_channelMap,-1);
+ platform_set_channel_map(platform, 2, default_channelMap, -1, -1);
platform_set_channel_allocation(platform,0);
}
}
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index 279a2c2..d7384c8 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -273,6 +273,7 @@
bool external_spk_2;
bool external_mic;
bool speaker_lr_swap;
+ bool fluence_sb_enabled;
int fluence_type;
int fluence_mode;
char fluence_cap[PROPERTY_VALUE_MAX];
@@ -549,26 +550,41 @@
/* Capture sound devices */
[SND_DEVICE_IN_HANDSET_MIC] = "handset-mic",
+ [SND_DEVICE_IN_HANDSET_MIC_SB] = "handset-mic",
[SND_DEVICE_IN_HANDSET_MIC_EXTERNAL] = "handset-mic-ext",
[SND_DEVICE_IN_HANDSET_MIC_AEC] = "handset-mic",
+ [SND_DEVICE_IN_HANDSET_MIC_AEC_SB] = "handset-mic",
[SND_DEVICE_IN_HANDSET_MIC_NS] = "handset-mic",
+ [SND_DEVICE_IN_HANDSET_MIC_NS_SB] = "handset-mic",
[SND_DEVICE_IN_HANDSET_MIC_AEC_NS] = "handset-mic",
+ [SND_DEVICE_IN_HANDSET_MIC_AEC_NS_SB] = "handset-mic",
[SND_DEVICE_IN_HANDSET_DMIC] = "dmic-endfire",
[SND_DEVICE_IN_HANDSET_DMIC_AEC] = "dmic-endfire",
+ [SND_DEVICE_IN_HANDSET_DMIC_AEC_SB] = "dmic-endfire",
[SND_DEVICE_IN_HANDSET_DMIC_NS] = "dmic-endfire",
+ [SND_DEVICE_IN_HANDSET_DMIC_NS_SB] = "dmic-endfire",
[SND_DEVICE_IN_HANDSET_DMIC_AEC_NS] = "dmic-endfire",
+ [SND_DEVICE_IN_HANDSET_DMIC_AEC_NS_SB] = "dmic-endfire",
[SND_DEVICE_IN_SPEAKER_MIC] = "speaker-mic",
+ [SND_DEVICE_IN_SPEAKER_MIC_SB] = "speaker-mic",
[SND_DEVICE_IN_SPEAKER_MIC_AEC] = "speaker-mic",
+ [SND_DEVICE_IN_SPEAKER_MIC_AEC_SB] = "speaker-mic",
[SND_DEVICE_IN_SPEAKER_MIC_NS] = "speaker-mic",
+ [SND_DEVICE_IN_SPEAKER_MIC_NS_SB] = "speaker-mic",
[SND_DEVICE_IN_SPEAKER_MIC_AEC_NS] = "speaker-mic",
+ [SND_DEVICE_IN_SPEAKER_MIC_AEC_NS_SB] = "speaker-mic",
[SND_DEVICE_IN_SPEAKER_DMIC] = "speaker-dmic-endfire",
[SND_DEVICE_IN_SPEAKER_DMIC_AEC] = "speaker-dmic-endfire",
+ [SND_DEVICE_IN_SPEAKER_DMIC_AEC_SB] = "speaker-dmic-endfire",
[SND_DEVICE_IN_SPEAKER_DMIC_NS] = "speaker-dmic-endfire",
+ [SND_DEVICE_IN_SPEAKER_DMIC_NS_SB] = "speaker-dmic-endfire",
[SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS] = "speaker-dmic-endfire",
+ [SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_SB] = "speaker-dmic-endfire",
[SND_DEVICE_IN_HEADSET_MIC] = "headset-mic",
[SND_DEVICE_IN_HEADSET_MIC_AEC] = "headset-mic",
[SND_DEVICE_IN_HEADSET_MIC_FLUENCE] = "headset-mic",
[SND_DEVICE_IN_VOICE_SPEAKER_MIC] = "voice-speaker-mic",
+ [SND_DEVICE_IN_VOICE_SPEAKER_MIC_SB] = "voice-speaker-mic",
[SND_DEVICE_IN_VOICE_HEADSET_MIC] = "voice-headset-mic",
[SND_DEVICE_IN_SPDIF] = "spdif-in",
[SND_DEVICE_IN_HDMI_MIC] = "hdmi-in",
@@ -580,8 +596,10 @@
[SND_DEVICE_IN_BT_A2DP] = "bt-a2dp-cap",
[SND_DEVICE_IN_CAMCORDER_MIC] = "camcorder-mic",
[SND_DEVICE_IN_VOICE_DMIC] = "voice-dmic-ef",
+ [SND_DEVICE_IN_VOICE_DMIC_SB] = "voice-dmic-ef",
[SND_DEVICE_IN_VOICE_DMIC_TMUS] = "voice-dmic-ef-tmus",
[SND_DEVICE_IN_VOICE_SPEAKER_DMIC] = "voice-speaker-dmic-ef",
+ [SND_DEVICE_IN_VOICE_SPEAKER_DMIC_SB] = "voice-speaker-dmic-ef",
[SND_DEVICE_IN_VOICE_SPEAKER_TMIC] = "voice-speaker-tmic",
[SND_DEVICE_IN_VOICE_SPEAKER_QMIC] = "voice-speaker-qmic",
[SND_DEVICE_IN_VOICE_SPEAKER_MIC_HFP] = "voice-speaker-mic-hfp",
@@ -677,6 +695,15 @@
[GET_IN_DEVICE_INDEX(SND_DEVICE_IN_HANDSET_DMIC_AEC_NS)][EFFECT_NS] = {TX_VOICE_FV5ECNS_DM, 0x0, 0x10EAF, 0x02},
[GET_IN_DEVICE_INDEX(SND_DEVICE_IN_HANDSET_MIC)][EFFECT_AEC] = {TX_VOICE_SMECNS_V2, 0x0, 0x10EAF, 0x01},
[GET_IN_DEVICE_INDEX(SND_DEVICE_IN_HANDSET_MIC)][EFFECT_NS] = {TX_VOICE_SMECNS_V2, 0x0, 0x10EAF, 0x02},
+
+ [GET_IN_DEVICE_INDEX(SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_SB)][EFFECT_AEC] = {TX_VOICE_FV5ECNS_DM, 0x0, 0x10EAF, 0x01},
+ [GET_IN_DEVICE_INDEX(SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_SB)][EFFECT_NS] = {TX_VOICE_FV5ECNS_DM, 0x0, 0x10EAF, 0x02},
+ [GET_IN_DEVICE_INDEX(SND_DEVICE_IN_SPEAKER_MIC_SB)][EFFECT_AEC] = {TX_VOICE_SMECNS_V2, 0x0, 0x10EAF, 0x01},
+ [GET_IN_DEVICE_INDEX(SND_DEVICE_IN_SPEAKER_MIC_SB)][EFFECT_NS] = {TX_VOICE_SMECNS_V2, 0x0, 0x10EAF, 0x02},
+ [GET_IN_DEVICE_INDEX(SND_DEVICE_IN_HANDSET_DMIC_AEC_NS_SB)][EFFECT_AEC] = {TX_VOICE_FV5ECNS_DM, 0x0, 0x10EAF, 0x01},
+ [GET_IN_DEVICE_INDEX(SND_DEVICE_IN_HANDSET_DMIC_AEC_NS_SB)][EFFECT_NS] = {TX_VOICE_FV5ECNS_DM, 0x0, 0x10EAF, 0x02},
+ [GET_IN_DEVICE_INDEX(SND_DEVICE_IN_HANDSET_MIC_SB)][EFFECT_AEC] = {TX_VOICE_SMECNS_V2, 0x0, 0x10EAF, 0x01},
+ [GET_IN_DEVICE_INDEX(SND_DEVICE_IN_HANDSET_MIC_SB)][EFFECT_NS] = {TX_VOICE_SMECNS_V2, 0x0, 0x10EAF, 0x02},
};
/* ACDB IDs (audio DSP path configuration IDs) for each sound device */
@@ -763,26 +790,41 @@
[SND_DEVICE_OUT_SPEAKER_PROTECTED_RAS] = 134,
[SND_DEVICE_OUT_SPEAKER_PROTECTED_VBAT_RAS] = 134,
[SND_DEVICE_IN_HANDSET_MIC] = 4,
+ [SND_DEVICE_IN_HANDSET_MIC_SB] = 163,
[SND_DEVICE_IN_HANDSET_MIC_EXTERNAL] = 4,
[SND_DEVICE_IN_HANDSET_MIC_AEC] = 106,
+ [SND_DEVICE_IN_HANDSET_MIC_AEC_SB] = 164,
[SND_DEVICE_IN_HANDSET_MIC_NS] = 107,
+ [SND_DEVICE_IN_HANDSET_MIC_NS_SB] = 165,
[SND_DEVICE_IN_HANDSET_MIC_AEC_NS] = 108,
+ [SND_DEVICE_IN_HANDSET_MIC_AEC_NS_SB] = 166,
[SND_DEVICE_IN_HANDSET_DMIC] = 41,
[SND_DEVICE_IN_HANDSET_DMIC_AEC] = 109,
+ [SND_DEVICE_IN_HANDSET_DMIC_AEC_SB] = 168,
[SND_DEVICE_IN_HANDSET_DMIC_NS] = 110,
+ [SND_DEVICE_IN_HANDSET_DMIC_NS_SB] = 169,
[SND_DEVICE_IN_HANDSET_DMIC_AEC_NS] = 111,
+ [SND_DEVICE_IN_HANDSET_DMIC_AEC_NS_SB] = 170,
[SND_DEVICE_IN_SPEAKER_MIC] = 11,
+ [SND_DEVICE_IN_SPEAKER_MIC_SB] = 171,
[SND_DEVICE_IN_SPEAKER_MIC_AEC] = 112,
+ [SND_DEVICE_IN_SPEAKER_MIC_AEC_SB] = 172,
[SND_DEVICE_IN_SPEAKER_MIC_NS] = 113,
+ [SND_DEVICE_IN_SPEAKER_MIC_NS_SB] = 173,
[SND_DEVICE_IN_SPEAKER_MIC_AEC_NS] = 114,
+ [SND_DEVICE_IN_SPEAKER_MIC_AEC_NS_SB] = 174,
[SND_DEVICE_IN_SPEAKER_DMIC] = 43,
[SND_DEVICE_IN_SPEAKER_DMIC_AEC] = 115,
+ [SND_DEVICE_IN_SPEAKER_DMIC_AEC_SB] = 176,
[SND_DEVICE_IN_SPEAKER_DMIC_NS] = 116,
+ [SND_DEVICE_IN_SPEAKER_DMIC_NS_SB] = 177,
[SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS] = 117,
+ [SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_SB] = 178,
[SND_DEVICE_IN_HEADSET_MIC] = 8,
[SND_DEVICE_IN_HEADSET_MIC_AEC] = 8,
[SND_DEVICE_IN_HEADSET_MIC_FLUENCE] = 47,
[SND_DEVICE_IN_VOICE_SPEAKER_MIC] = 11,
+ [SND_DEVICE_IN_VOICE_SPEAKER_MIC_SB] = 171,
[SND_DEVICE_IN_VOICE_SPEAKER_MIC_HFP] = 11,
[SND_DEVICE_IN_VOICE_HEADSET_MIC] = 8,
[SND_DEVICE_IN_SPDIF] = 143,
@@ -795,8 +837,10 @@
[SND_DEVICE_IN_BT_A2DP] = 21,
[SND_DEVICE_IN_CAMCORDER_MIC] = 4,
[SND_DEVICE_IN_VOICE_DMIC] = 41,
+ [SND_DEVICE_IN_VOICE_DMIC_SB] = 167,
[SND_DEVICE_IN_VOICE_DMIC_TMUS] = 89,
[SND_DEVICE_IN_VOICE_SPEAKER_DMIC] = 43,
+ [SND_DEVICE_IN_VOICE_SPEAKER_DMIC_SB] = 175,
[SND_DEVICE_IN_VOICE_SPEAKER_TMIC] = 161,
[SND_DEVICE_IN_VOICE_SPEAKER_QMIC] = 19,
[SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC] = 16,
@@ -955,27 +999,42 @@
{TO_NAME_INDEX(SND_DEVICE_OUT_VOIP_SPEAKER)},
{TO_NAME_INDEX(SND_DEVICE_OUT_VOIP_HEADPHONES)},
{TO_NAME_INDEX(SND_DEVICE_IN_HANDSET_MIC)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_HANDSET_MIC_SB)},
{TO_NAME_INDEX(SND_DEVICE_IN_HANDSET_MIC_EXTERNAL)},
{TO_NAME_INDEX(SND_DEVICE_IN_HANDSET_MIC_AEC)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_HANDSET_MIC_AEC_SB)},
{TO_NAME_INDEX(SND_DEVICE_IN_HANDSET_MIC_NS)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_HANDSET_MIC_NS_SB)},
{TO_NAME_INDEX(SND_DEVICE_IN_HANDSET_MIC_AEC_NS)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_HANDSET_MIC_AEC_NS_SB)},
{TO_NAME_INDEX(SND_DEVICE_IN_HANDSET_DMIC)},
{TO_NAME_INDEX(SND_DEVICE_IN_HANDSET_DMIC_AEC)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_HANDSET_DMIC_AEC_SB)},
{TO_NAME_INDEX(SND_DEVICE_IN_HANDSET_DMIC_NS)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_HANDSET_DMIC_NS_SB)},
{TO_NAME_INDEX(SND_DEVICE_IN_HANDSET_DMIC_AEC_NS)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_HANDSET_DMIC_AEC_NS_SB)},
{TO_NAME_INDEX(SND_DEVICE_IN_SPEAKER_MIC)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_SPEAKER_MIC_SB)},
{TO_NAME_INDEX(SND_DEVICE_IN_SPEAKER_MIC_AEC)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_SPEAKER_MIC_AEC_SB)},
{TO_NAME_INDEX(SND_DEVICE_IN_SPEAKER_MIC_NS)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_SPEAKER_MIC_NS_SB)},
{TO_NAME_INDEX(SND_DEVICE_IN_SPEAKER_MIC_AEC_NS)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_SPEAKER_MIC_AEC_NS_SB)},
{TO_NAME_INDEX(SND_DEVICE_IN_SPEAKER_DMIC)},
{TO_NAME_INDEX(SND_DEVICE_IN_SPEAKER_DMIC_AEC)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_SPEAKER_DMIC_AEC_SB)},
{TO_NAME_INDEX(SND_DEVICE_IN_SPEAKER_DMIC_NS)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_SPEAKER_DMIC_NS_SB)},
{TO_NAME_INDEX(SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_SB)},
{TO_NAME_INDEX(SND_DEVICE_IN_SPEAKER_DMIC_STEREO)},
{TO_NAME_INDEX(SND_DEVICE_IN_HEADSET_MIC)},
{TO_NAME_INDEX(SND_DEVICE_IN_HEADSET_MIC_AEC)},
{TO_NAME_INDEX(SND_DEVICE_IN_HEADSET_MIC_FLUENCE)},
{TO_NAME_INDEX(SND_DEVICE_IN_VOICE_SPEAKER_MIC)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_VOICE_SPEAKER_MIC_SB)},
{TO_NAME_INDEX(SND_DEVICE_IN_VOICE_SPEAKER_MIC_HFP)},
{TO_NAME_INDEX(SND_DEVICE_IN_VOICE_HEADSET_MIC)},
{TO_NAME_INDEX(SND_DEVICE_IN_SPDIF)},
@@ -988,8 +1047,10 @@
{TO_NAME_INDEX(SND_DEVICE_IN_BT_A2DP)},
{TO_NAME_INDEX(SND_DEVICE_IN_CAMCORDER_MIC)},
{TO_NAME_INDEX(SND_DEVICE_IN_VOICE_DMIC)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_VOICE_DMIC_SB)},
{TO_NAME_INDEX(SND_DEVICE_IN_VOICE_DMIC_TMUS)},
{TO_NAME_INDEX(SND_DEVICE_IN_VOICE_SPEAKER_DMIC)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_VOICE_SPEAKER_DMIC_SB)},
{TO_NAME_INDEX(SND_DEVICE_IN_VOICE_SPEAKER_TMIC)},
{TO_NAME_INDEX(SND_DEVICE_IN_VOICE_SPEAKER_QMIC)},
{TO_NAME_INDEX(SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC)},
@@ -1969,28 +2030,43 @@
hw_interface_table[SND_DEVICE_OUT_VOICE_SPEAKER_WSA] = strdup("SLIMBUS_0_RX");
hw_interface_table[SND_DEVICE_OUT_VOICE_SPEAKER_2_WSA] = strdup("SLIMBUS_0_RX");
hw_interface_table[SND_DEVICE_IN_HANDSET_MIC] = strdup("SLIMBUS_0_TX");
+ hw_interface_table[SND_DEVICE_IN_HANDSET_MIC_SB] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_HANDSET_MIC_EXTERNAL] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_HANDSET_MIC_AEC] = strdup("SLIMBUS_0_TX");
+ hw_interface_table[SND_DEVICE_IN_HANDSET_MIC_AEC_SB] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_HANDSET_MIC_NS] = strdup("SLIMBUS_0_TX");
+ hw_interface_table[SND_DEVICE_IN_HANDSET_MIC_NS_SB] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_HANDSET_MIC_AEC_NS] = strdup("SLIMBUS_0_TX");
+ hw_interface_table[SND_DEVICE_IN_HANDSET_MIC_AEC_NS_SB] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_HANDSET_DMIC] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_HANDSET_DMIC_AEC] = strdup("SLIMBUS_0_TX");
+ hw_interface_table[SND_DEVICE_IN_HANDSET_DMIC_AEC_SB] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_HANDSET_DMIC_NS] = strdup("SLIMBUS_0_TX");
+ hw_interface_table[SND_DEVICE_IN_HANDSET_DMIC_NS_SB] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_HANDSET_DMIC_AEC_NS] = strdup("SLIMBUS_0_TX");
+ hw_interface_table[SND_DEVICE_IN_HANDSET_DMIC_AEC_NS_SB] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_HANDSET_DMIC_STEREO] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_HEADSET_MIC_AEC] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_SPEAKER_MIC] = strdup("SLIMBUS_0_TX");
+ hw_interface_table[SND_DEVICE_IN_SPEAKER_MIC_SB] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_SPEAKER_MIC_AEC] = strdup("SLIMBUS_0_TX");
+ hw_interface_table[SND_DEVICE_IN_SPEAKER_MIC_AEC_SB] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_SPEAKER_MIC_NS] = strdup("SLIMBUS_0_TX");
+ hw_interface_table[SND_DEVICE_IN_SPEAKER_MIC_NS_SB] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_SPEAKER_MIC_AEC_NS] = strdup("SLIMBUS_0_TX");
+ hw_interface_table[SND_DEVICE_IN_SPEAKER_MIC_AEC_NS_SB] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_SPEAKER_DMIC] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_SPEAKER_DMIC_AEC] = strdup("SLIMBUS_0_TX");
+ hw_interface_table[SND_DEVICE_IN_SPEAKER_DMIC_AEC_SB] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_SPEAKER_DMIC_NS] = strdup("SLIMBUS_0_TX");
+ hw_interface_table[SND_DEVICE_IN_SPEAKER_DMIC_NS_SB] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS] = strdup("SLIMBUS_0_TX");
+ hw_interface_table[SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_SB] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_SPEAKER_DMIC_STEREO] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_HEADSET_MIC] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_HEADSET_MIC_FLUENCE] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_VOICE_SPEAKER_MIC] = strdup("SLIMBUS_0_TX");
+ hw_interface_table[SND_DEVICE_IN_VOICE_SPEAKER_MIC_SB] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_VOICE_HEADSET_MIC] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_SPDIF] = strdup("PRI_SPDIF_TX");
hw_interface_table[SND_DEVICE_IN_HDMI_MIC] = strdup("SEC_MI2S_TX");
@@ -2002,8 +2078,10 @@
hw_interface_table[SND_DEVICE_IN_BT_A2DP] = strdup("SLIMBUS_7_TX");
hw_interface_table[SND_DEVICE_IN_CAMCORDER_MIC] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_VOICE_DMIC] = strdup("SLIMBUS_0_TX");
+ hw_interface_table[SND_DEVICE_IN_VOICE_DMIC_SB] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_VOICE_DMIC_TMUS] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_VOICE_SPEAKER_DMIC] = strdup("SLIMBUS_0_TX");
+ hw_interface_table[SND_DEVICE_IN_VOICE_SPEAKER_DMIC_SB] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_VOICE_SPEAKER_MIC_HFP] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_VOICE_SPEAKER_TMIC] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_VOICE_SPEAKER_QMIC] = strdup("SLIMBUS_0_TX");
@@ -2744,6 +2822,7 @@
my_data->external_spk_1 = false;
my_data->external_spk_2 = false;
my_data->external_mic = false;
+ my_data->fluence_sb_enabled = false;
my_data->fluence_type = FLUENCE_NONE;
my_data->fluence_mode = FLUENCE_ENDFIRE;
my_data->ambisonic_capture = false;
@@ -2773,6 +2852,10 @@
dual_mic_config = true;
}
+ /* Check for Fluence Sub Band Enablement */
+ if (property_get_bool("ro.vendor.audio.sdk.fluence.subband.enabled",false))
+ my_data->fluence_sb_enabled = true;
+
my_data->fluence_type = FLUENCE_NONE;
if ((property_get("ro.vendor.audio.sdk.fluencetype",
my_data->fluence_cap, NULL) > 0) ||
@@ -3097,10 +3180,11 @@
/* obtain source mic type from max mic count*/
get_source_mic_type(my_data);
ALOGD("%s: Fluence_Type(%d) max_mic_count(%d) mic_type(0x%x) fluence_in_voice_call(%d)"
- " fluence_in_voice_rec(%d) fluence_in_spkr_mode(%d) fluence_in_hfp_call(%d) ",
- __func__, my_data->fluence_type, my_data->max_mic_count, my_data->source_mic_type,
- my_data->fluence_in_voice_call, my_data->fluence_in_voice_rec,
- my_data->fluence_in_spkr_mode, my_data->fluence_in_hfp_call);
+ " fluence_in_voice_rec(%d) fluence_in_spkr_mode(%d) fluence_in_hfp_call(%d)"
+ "fluence_sb_enabled(%d)", __func__, my_data->fluence_type, my_data->max_mic_count,
+ my_data->source_mic_type, my_data->fluence_in_voice_call,
+ my_data->fluence_in_voice_rec, my_data->fluence_in_spkr_mode,
+ my_data->fluence_in_hfp_call, my_data->fluence_sb_enabled);
/* init usb */
audio_extn_usb_init(adev);
@@ -4266,11 +4350,15 @@
int snd_device = SND_DEVICE_OUT_SPEAKER;
int new_snd_device[SND_DEVICE_OUT_END] = {0};
int i, num_devices = 1;
+ bool is_incall_rec_usecase = false;
+ snd_device_t incall_rec_device;
+
+ if (voice_is_in_call(my_data->adev))
+ is_incall_rec_usecase = voice_is_in_call_rec_stream(usecase->stream.in);
if (usecase->type == PCM_PLAYBACK)
snd_device = usecase->out_snd_device;
- else if ((usecase->type == PCM_CAPTURE) &&
- voice_is_in_call_rec_stream(usecase->stream.in))
+ else if ((usecase->type == PCM_CAPTURE) && is_incall_rec_usecase)
snd_device = voice_get_incall_rec_snd_device(usecase->in_snd_device);
else if ((usecase->type == PCM_HFP_CALL) || (usecase->type == PCM_CAPTURE))
snd_device = usecase->in_snd_device;
@@ -4284,13 +4372,25 @@
return -EINVAL;
}
- if (platform_split_snd_device(my_data, snd_device,
- &num_devices, new_snd_device) < 0) {
- new_snd_device[0] = snd_device;
+ if (!is_incall_rec_usecase) {
+ if (platform_split_snd_device(my_data, snd_device,
+ &num_devices, new_snd_device) < 0) {
+ new_snd_device[0] = snd_device;
+ }
+ } else {
+ incall_rec_device = voice_get_incall_rec_backend_device(usecase->stream.in);
+ if (platform_split_snd_device(my_data, incall_rec_device,
+ &num_devices, new_snd_device) < 0) {
+ new_snd_device[0] = snd_device;
+ }
}
for (i = 0; i < num_devices; i++) {
- acdb_dev_id = acdb_device_table[platform_get_spkr_prot_snd_device(new_snd_device[i])];
+ if (!is_incall_rec_usecase)
+ acdb_dev_id = acdb_device_table[platform_get_spkr_prot_snd_device(new_snd_device[i])];
+ else
+ // Use in_call_rec snd_device to extract the ACDB device ID instead of split snd devices
+ acdb_dev_id = acdb_device_table[platform_get_spkr_prot_snd_device(snd_device)];
// Do not use Rx path default app type for TX path
if ((usecase->type == PCM_CAPTURE) && (app_type == DEFAULT_APP_TYPE_RX_PATH)) {
@@ -5266,8 +5366,8 @@
} else if (devices & AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET ||
devices & AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET) {
ALOGD("%s: setting USB hadset channel capability(2) for Proxy", __func__);
- audio_extn_set_afe_proxy_channel_mixer(adev, 2);
snd_device = SND_DEVICE_OUT_USB_HEADSET;
+ audio_extn_set_afe_proxy_channel_mixer(adev, 2, snd_device);
} else if (devices &
(AUDIO_DEVICE_OUT_USB_DEVICE |
AUDIO_DEVICE_OUT_USB_HEADSET)) {
@@ -5288,8 +5388,8 @@
} else if (devices & AUDIO_DEVICE_OUT_PROXY) {
channel_count = audio_extn_get_afe_proxy_channel_count();
ALOGD("%s: setting sink capability(%d) for Proxy", __func__, channel_count);
- audio_extn_set_afe_proxy_channel_mixer(adev, channel_count);
snd_device = SND_DEVICE_OUT_AFE_PROXY;
+ audio_extn_set_afe_proxy_channel_mixer(adev, channel_count, snd_device);
} else {
ALOGE("%s: Unknown device(s) %#x", __func__, devices);
}
@@ -5318,11 +5418,15 @@
if (my_data->fluence_mode == FLUENCE_BROADSIDE)
snd_device = SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_BROADSIDE;
else
- snd_device = SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS;
+ snd_device = my_data->fluence_sb_enabled ?
+ SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_SB
+ : SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS;
}
adev->acdb_settings |= DMIC_FLAG;
} else
- snd_device = SND_DEVICE_IN_SPEAKER_MIC;
+ snd_device = my_data->fluence_sb_enabled ?
+ SND_DEVICE_IN_SPEAKER_MIC_SB
+ : SND_DEVICE_IN_SPEAKER_MIC;
} else if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) {
if ((my_data->fluence_type & FLUENCE_TRI_MIC) &&
(my_data->source_mic_type & SOURCE_THREE_MIC)) {
@@ -5330,10 +5434,14 @@
adev->acdb_settings |= TMIC_FLAG;
} else if ((my_data->fluence_type & FLUENCE_DUAL_MIC) &&
(my_data->source_mic_type & SOURCE_DUAL_MIC)) {
- snd_device = SND_DEVICE_IN_HANDSET_DMIC_AEC_NS;
+ snd_device = my_data->fluence_sb_enabled ?
+ SND_DEVICE_IN_HANDSET_DMIC_AEC_NS_SB
+ : SND_DEVICE_IN_HANDSET_DMIC_AEC_NS;
adev->acdb_settings |= DMIC_FLAG;
} else
- snd_device = SND_DEVICE_IN_HANDSET_MIC;
+ snd_device = my_data->fluence_sb_enabled ?
+ SND_DEVICE_IN_HANDSET_MIC_SB
+ : SND_DEVICE_IN_HANDSET_MIC;
} else if (in_device & AUDIO_DEVICE_IN_WIRED_HEADSET) {
snd_device = SND_DEVICE_IN_HEADSET_MIC;
}
@@ -5365,11 +5473,15 @@
if (my_data->fluence_mode == FLUENCE_BROADSIDE)
snd_device = SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_BROADSIDE;
else
- snd_device = SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS;
+ snd_device = my_data->fluence_sb_enabled ?
+ SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_SB
+ : SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS;
}
adev->acdb_settings |= DMIC_FLAG;
} else
- snd_device = SND_DEVICE_IN_SPEAKER_MIC_AEC_NS;
+ snd_device = my_data->fluence_sb_enabled ?
+ SND_DEVICE_IN_SPEAKER_MIC_AEC_NS_SB
+ : SND_DEVICE_IN_SPEAKER_MIC_AEC_NS;
} else if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) {
if ((my_data->fluence_type & FLUENCE_TRI_MIC) &&
(my_data->source_mic_type & SOURCE_THREE_MIC)) {
@@ -5378,10 +5490,14 @@
} else if ((my_data->fluence_type & FLUENCE_DUAL_MIC) &&
(my_data->source_mic_type & SOURCE_DUAL_MIC) &&
my_data->fluence_in_voice_comm) {
- snd_device = SND_DEVICE_IN_HANDSET_DMIC_AEC_NS;
+ snd_device = my_data->fluence_sb_enabled ?
+ SND_DEVICE_IN_HANDSET_DMIC_AEC_NS_SB
+ : SND_DEVICE_IN_HANDSET_DMIC_AEC_NS;
adev->acdb_settings |= DMIC_FLAG;
} else
- snd_device = SND_DEVICE_IN_HANDSET_MIC_AEC_NS;
+ snd_device = my_data->fluence_sb_enabled ?
+ SND_DEVICE_IN_HANDSET_MIC_AEC_NS_SB
+ : SND_DEVICE_IN_HANDSET_MIC_AEC_NS;
} else if (in_device & AUDIO_DEVICE_IN_WIRED_HEADSET) {
snd_device = SND_DEVICE_IN_HEADSET_MIC_FLUENCE;
} else if (audio_extn_usb_connected(NULL) && audio_is_usb_in_device(in_device | AUDIO_DEVICE_BIT_IN)) {
@@ -5403,11 +5519,15 @@
if (my_data->fluence_mode == FLUENCE_BROADSIDE)
snd_device = SND_DEVICE_IN_SPEAKER_DMIC_AEC_BROADSIDE;
else
- snd_device = SND_DEVICE_IN_SPEAKER_DMIC_AEC;
+ snd_device = my_data->fluence_sb_enabled ?
+ SND_DEVICE_IN_SPEAKER_DMIC_AEC_SB
+ : SND_DEVICE_IN_SPEAKER_DMIC_AEC;
}
adev->acdb_settings |= DMIC_FLAG;
} else
- snd_device = SND_DEVICE_IN_SPEAKER_MIC_AEC;
+ snd_device = my_data->fluence_sb_enabled ?
+ SND_DEVICE_IN_SPEAKER_MIC_AEC_SB
+ : SND_DEVICE_IN_SPEAKER_MIC_AEC;
} else if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) {
if ((my_data->fluence_type & FLUENCE_TRI_MIC) &&
(my_data->source_mic_type & SOURCE_THREE_MIC)) {
@@ -5416,7 +5536,9 @@
} else if ((my_data->fluence_type & FLUENCE_DUAL_MIC) &&
(my_data->source_mic_type & SOURCE_DUAL_MIC) &&
my_data->fluence_in_voice_comm) {
- snd_device = SND_DEVICE_IN_HANDSET_DMIC_AEC;
+ snd_device = my_data->fluence_sb_enabled ?
+ SND_DEVICE_IN_HANDSET_DMIC_AEC_SB
+ : SND_DEVICE_IN_HANDSET_DMIC_AEC;
adev->acdb_settings |= DMIC_FLAG;
} else
snd_device = SND_DEVICE_IN_HANDSET_MIC_AEC;
@@ -5441,11 +5563,15 @@
if (my_data->fluence_mode == FLUENCE_BROADSIDE)
snd_device = SND_DEVICE_IN_SPEAKER_DMIC_NS_BROADSIDE;
else
- snd_device = SND_DEVICE_IN_SPEAKER_DMIC_NS;
+ snd_device = my_data->fluence_sb_enabled ?
+ SND_DEVICE_IN_SPEAKER_DMIC_NS_SB
+ : SND_DEVICE_IN_SPEAKER_DMIC_NS;
}
adev->acdb_settings |= DMIC_FLAG;
} else
- snd_device = SND_DEVICE_IN_SPEAKER_MIC_NS;
+ snd_device = my_data->fluence_sb_enabled ?
+ SND_DEVICE_IN_SPEAKER_MIC_NS_SB
+ : SND_DEVICE_IN_SPEAKER_MIC_NS;
} else if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) {
if ((my_data->fluence_type & FLUENCE_TRI_MIC) &&
(my_data->source_mic_type & SOURCE_THREE_MIC)) {
@@ -5454,7 +5580,9 @@
} else if ((my_data->fluence_type & FLUENCE_DUAL_MIC) &&
(my_data->source_mic_type & SOURCE_DUAL_MIC) &&
my_data->fluence_in_voice_comm) {
- snd_device = SND_DEVICE_IN_HANDSET_DMIC_NS;
+ snd_device = my_data->fluence_sb_enabled ?
+ SND_DEVICE_IN_HANDSET_DMIC_NS_SB
+ : SND_DEVICE_IN_HANDSET_DMIC_NS;
adev->acdb_settings |= DMIC_FLAG;
} else
snd_device = SND_DEVICE_IN_HANDSET_MIC_NS;
@@ -5577,9 +5705,13 @@
my_data->fluence_in_hfp_call == false)) {
if (out_device & AUDIO_DEVICE_OUT_LINE &&
audio_extn_hfp_is_active(adev)) {
- snd_device = SND_DEVICE_IN_VOICE_SPEAKER_MIC;
+ snd_device = my_data->fluence_sb_enabled ?
+ SND_DEVICE_IN_VOICE_SPEAKER_MIC_SB
+ : SND_DEVICE_IN_VOICE_SPEAKER_MIC;
} else {
- snd_device = SND_DEVICE_IN_HANDSET_MIC;
+ snd_device = my_data->fluence_sb_enabled ?
+ SND_DEVICE_IN_HANDSET_MIC_SB
+ : SND_DEVICE_IN_HANDSET_MIC;
}
if (audio_extn_hfp_is_active(adev))
platform_set_echo_reference(adev, true, out_device);
@@ -5591,7 +5723,9 @@
} else if (is_operator_tmus())
snd_device = SND_DEVICE_IN_VOICE_DMIC_TMUS;
else { /* for FLUENCE_DUAL_MIC and SOURCE_DUAL_MIC */
- snd_device = SND_DEVICE_IN_VOICE_DMIC;
+ snd_device = my_data->fluence_sb_enabled ?
+ SND_DEVICE_IN_VOICE_DMIC_SB
+ : SND_DEVICE_IN_VOICE_DMIC;
adev->acdb_settings |= DMIC_FLAG;
}
}
@@ -5616,7 +5750,9 @@
if (audio_extn_usb_is_capture_supported())
snd_device = SND_DEVICE_IN_VOICE_USB_HEADSET_MIC;
else
- snd_device = SND_DEVICE_IN_HANDSET_MIC;
+ snd_device = my_data->fluence_sb_enabled ?
+ SND_DEVICE_IN_HANDSET_MIC_SB
+ : SND_DEVICE_IN_HANDSET_MIC;
if (voice_is_in_call(adev))
platform_set_echo_reference(adev, true, out_device);
@@ -5641,7 +5777,9 @@
if (my_data->fluence_mode == FLUENCE_BROADSIDE)
snd_device = SND_DEVICE_IN_VOICE_SPEAKER_DMIC_BROADSIDE;
else
- snd_device = SND_DEVICE_IN_VOICE_SPEAKER_DMIC;
+ snd_device = my_data->fluence_sb_enabled ?
+ SND_DEVICE_IN_VOICE_SPEAKER_DMIC_SB
+ : SND_DEVICE_IN_VOICE_SPEAKER_DMIC;
}
if (audio_extn_hfp_is_active(adev))
platform_set_echo_reference(adev, true, out_device);
@@ -5650,7 +5788,9 @@
snd_device = SND_DEVICE_IN_VOICE_SPEAKER_MIC_HFP;
platform_set_echo_reference(adev, true, out_device);
} else {
- snd_device = SND_DEVICE_IN_VOICE_SPEAKER_MIC;
+ snd_device = my_data->fluence_sb_enabled ?
+ SND_DEVICE_IN_VOICE_SPEAKER_MIC_SB
+ : SND_DEVICE_IN_VOICE_SPEAKER_MIC;
if (audio_extn_hfp_is_active(adev))
platform_set_echo_reference(adev, true, out_device);
}
@@ -5668,6 +5808,8 @@
} else {
snd_device = SND_DEVICE_IN_VOICE_SPEAKER_MIC;
}
+ } else {
+ snd_device = SND_DEVICE_IN_HANDSET_MIC;
}
}
} else if (my_data->use_generic_handset == true && // system prop is enabled
@@ -5887,13 +6029,16 @@
(channel_count == 2) && (my_data->source_mic_type & SOURCE_DUAL_MIC))
snd_device = SND_DEVICE_IN_HANDSET_DMIC_STEREO;
else
- snd_device = SND_DEVICE_IN_HANDSET_MIC;
+ snd_device = my_data->fluence_sb_enabled ? SND_DEVICE_IN_HANDSET_MIC_SB
+ : SND_DEVICE_IN_HANDSET_MIC;
} else if (in_device & AUDIO_DEVICE_IN_BACK_MIC) {
if ((my_data->source_mic_type & SOURCE_DUAL_MIC) &&
channel_count == 2)
snd_device = SND_DEVICE_IN_SPEAKER_DMIC_STEREO;
else
- snd_device = SND_DEVICE_IN_SPEAKER_MIC;
+ snd_device = my_data->fluence_sb_enabled ?
+ SND_DEVICE_IN_SPEAKER_MIC_SB
+ : SND_DEVICE_IN_SPEAKER_MIC;
} else if (in_device & AUDIO_DEVICE_IN_LINE) {
snd_device = SND_DEVICE_IN_LINE;
} else if (in_device & AUDIO_DEVICE_IN_WIRED_HEADSET) {
@@ -5930,11 +6075,13 @@
} else {
ALOGE("%s: Unknown input device(s) %#x", __func__, in_device);
ALOGW("%s: Using default handset-mic", __func__);
- snd_device = SND_DEVICE_IN_HANDSET_MIC;
+ snd_device = my_data->fluence_sb_enabled ? SND_DEVICE_IN_HANDSET_MIC_SB
+ : SND_DEVICE_IN_HANDSET_MIC;
}
} else {
if (out_device & AUDIO_DEVICE_OUT_EARPIECE) {
- snd_device = SND_DEVICE_IN_HANDSET_MIC;
+ snd_device = my_data->fluence_sb_enabled ? SND_DEVICE_IN_HANDSET_MIC_SB
+ : SND_DEVICE_IN_HANDSET_MIC;
} else if (out_device & AUDIO_DEVICE_OUT_WIRED_HEADSET) {
snd_device = SND_DEVICE_IN_HEADSET_MIC;
} else if (out_device & AUDIO_DEVICE_OUT_SPEAKER ||
@@ -5944,16 +6091,21 @@
snd_device = SND_DEVICE_IN_SPEAKER_DMIC_STEREO;
} else if ((my_data->source_mic_type & SOURCE_MONO_MIC) &&
(channel_count == 1)) {
- snd_device = SND_DEVICE_IN_SPEAKER_MIC;
+ snd_device = my_data->fluence_sb_enabled ?
+ SND_DEVICE_IN_SPEAKER_MIC_SB
+ : SND_DEVICE_IN_SPEAKER_MIC;
} else {
ALOGE("%s: something wrong: source type (%d) channel_count (%d) .."
" no combination found .. setting to mono", __func__,
my_data->source_mic_type, channel_count);
- snd_device = SND_DEVICE_IN_SPEAKER_MIC;
+ snd_device = my_data->fluence_sb_enabled ?
+ SND_DEVICE_IN_SPEAKER_MIC_SB
+ : SND_DEVICE_IN_SPEAKER_MIC;
}
} else if (out_device & AUDIO_DEVICE_OUT_WIRED_HEADPHONE ||
out_device & AUDIO_DEVICE_OUT_LINE) {
- snd_device = SND_DEVICE_IN_HANDSET_MIC;
+ snd_device = my_data->fluence_sb_enabled ? SND_DEVICE_IN_HANDSET_MIC_SB
+ : SND_DEVICE_IN_HANDSET_MIC;
} else if (out_device & AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET) {
if (adev->bt_wb_speech_enabled) {
if (adev->bluetooth_nrec)
@@ -5984,7 +6136,8 @@
} else {
ALOGE("%s: Unknown output device(s) %#x", __func__, out_device);
ALOGW("%s: Using default handset-mic", __func__);
- snd_device = SND_DEVICE_IN_HANDSET_MIC;
+ snd_device = my_data->fluence_sb_enabled ? SND_DEVICE_IN_HANDSET_MIC_SB
+ : SND_DEVICE_IN_HANDSET_MIC;
}
}
exit:
@@ -7412,7 +7565,7 @@
if ((backend_idx == HDMI_RX_BACKEND) ||
(backend_idx == DISP_PORT_RX_BACKEND))
- platform_set_edid_channels_configuration(adev->platform, channels, backend_idx);
+ platform_set_edid_channels_configuration(adev->platform, channels, backend_idx, snd_device);
ALOGD("%s:becf: afe: %s set to %s ", __func__,
my_data->current_backend_cfg[backend_idx].channels_mixer_ctl,
@@ -7836,6 +7989,8 @@
if (channels != my_data->current_backend_cfg[backend_idx].channels)
channels_updated = true;
+
+ platform_set_edid_channels_configuration(adev->platform, channels, backend_idx, snd_device);
}
ALOGI("%s:becf: afe: Codec selected backend: %d updated bit width: %d and sample rate: %d",
@@ -7885,11 +8040,13 @@
int backend_idx = DEFAULT_CODEC_BACKEND;
int new_snd_devices[SND_DEVICE_OUT_END] = {0};
int i, num_devices = 1;
+ int device_be_idx = -1;
bool ret = false;
struct platform_data *my_data = (struct platform_data *)adev->platform;
struct audio_backend_cfg backend_cfg;
backend_idx = platform_get_backend_index(snd_device);
+ device_be_idx = platform_get_snd_device_backend_index(snd_device);
if (usecase->type == TRANSCODE_LOOPBACK_RX) {
backend_cfg.bit_width = usecase->stream.inout->out_config.bit_width;
@@ -7929,7 +8086,7 @@
if ((my_data->spkr_ch_map != NULL) &&
(platform_get_backend_index(snd_device) == DEFAULT_CODEC_BACKEND))
platform_set_channel_map(my_data, my_data->spkr_ch_map->num_ch,
- my_data->spkr_ch_map->chmap, -1);
+ my_data->spkr_ch_map->chmap, -1, device_be_idx);
if (platform_split_snd_device(my_data, snd_device, &num_devices,
new_snd_devices) < 0)
@@ -8520,7 +8677,7 @@
return -1;
}
}
- ret = platform_set_channel_map(platform, channels, channel_map, snd_id);
+ ret = platform_set_channel_map(platform, channels, channel_map, snd_id, -1);
return ret;
}
@@ -8634,13 +8791,16 @@
return ret;
}
-int platform_set_channel_map(void *platform, int ch_count, char *ch_map, int snd_id)
+int platform_set_channel_map(void *platform, int ch_count, char *ch_map, int snd_id, int be_idx)
{
- struct mixer_ctl *ctl;
+ struct mixer_ctl *ctl, *be_ctl = NULL;
char mixer_ctl_name[44] = {0}; // max length of name is 44 as defined
+ char be_mixer_ctl_name[] = "Backend Device Channel Map";
int ret;
int i=0, n=0;
+ int be_id_count = 0;
long set_values[AUDIO_MAX_DSP_CHANNELS];
+ long be_set_values[AUDIO_MAX_DSP_CHANNELS + 1] = {0};
struct platform_data *my_data = (struct platform_data *)platform;
struct audio_device *adev = my_data->adev;
ALOGV("%s channel_count:%d",__func__, ch_count);
@@ -8665,7 +8825,20 @@
if (snd_id >= 0) {
snprintf(mixer_ctl_name, sizeof(mixer_ctl_name), "Playback Channel Map%d", snd_id);
} else {
- strlcpy(mixer_ctl_name, "Playback Device Channel Map", sizeof(mixer_ctl_name));
+ if (be_idx >= 0) {
+ be_ctl = mixer_get_ctl_by_name(adev->mixer, be_mixer_ctl_name);
+ if (!be_ctl) {
+ ALOGD("%s: Could not get ctl for mixer cmd - %s, using default control",
+ __func__, be_mixer_ctl_name);
+ strlcpy(mixer_ctl_name, "Playback Device Channel Map", sizeof(mixer_ctl_name));
+ be_idx = -1;
+ } else {
+ strlcpy(mixer_ctl_name, "Backend Device Channel Map", sizeof(mixer_ctl_name));
+ be_id_count = 1;
+ }
+ } else {
+ strlcpy(mixer_ctl_name, "Playback Device Channel Map", sizeof(mixer_ctl_name));
+ }
}
ALOGD("%s mixer_ctl_name:%s", __func__, mixer_ctl_name);
@@ -8689,7 +8862,7 @@
return -EINVAL;
}
- if (n > AUDIO_MAX_DSP_CHANNELS) {
+ if (n > (AUDIO_MAX_DSP_CHANNELS + be_id_count)) {
ALOGE("%s mixerctl elem size %d > AUDIO_MAX_DSP_CHANNELS %d",__func__, n, AUDIO_MAX_DSP_CHANNELS);
return -EINVAL;
}
@@ -8706,7 +8879,13 @@
set_values[0], set_values[1], set_values[2], set_values[3], set_values[4],
set_values[5], set_values[6], set_values[7], ch_count);
- ret = mixer_ctl_set_array(ctl, set_values, n);
+ if (be_idx >= 0) {
+ be_set_values[0] = be_idx;
+ memcpy(&be_set_values[1], set_values, sizeof(long) * ch_count);
+ ret = mixer_ctl_set_array(ctl, be_set_values, ARRAY_SIZE(be_set_values));
+ } else {
+ ret = mixer_ctl_set_array(ctl, set_values, ARRAY_SIZE(set_values));
+ }
if (ret < 0) {
ALOGE("%s: Could not set ctl, error:%d ch_count:%d",
@@ -8912,7 +9091,7 @@
return my_data->use_sprk_default_sample_rate;
}
-int platform_set_edid_channels_configuration(void *platform, int channels, int backend_idx) {
+int platform_set_edid_channels_configuration(void *platform, int channels, int backend_idx, snd_device_t snd_device) {
struct platform_data *my_data = (struct platform_data *)platform;
struct audio_device *adev = my_data->adev;
@@ -8921,6 +9100,7 @@
int i, ret;
char default_channelMap[MAX_CHANNELS_SUPPORTED] = {0};
struct audio_device_config_param *adev_device_cfg_ptr = adev->device_cfg_params;
+ int be_idx = -1;
if ((backend_idx != HDMI_RX_BACKEND) &&
(backend_idx != DISP_PORT_RX_BACKEND)) {
@@ -8928,6 +9108,7 @@
return -EINVAL;
}
+ be_idx = platform_get_snd_device_backend_index(snd_device);
ret = platform_get_edid_info(platform);
info = (edid_audio_info *)my_data->edid_info;
adev_device_cfg_ptr += backend_idx;
@@ -8950,9 +9131,9 @@
*/
if (adev_device_cfg_ptr->use_client_dev_cfg) {
platform_set_channel_map(platform, adev_device_cfg_ptr->dev_cfg_params.channels,
- (char *)adev_device_cfg_ptr->dev_cfg_params.channel_map, -1);
+ (char *)adev_device_cfg_ptr->dev_cfg_params.channel_map, -1, be_idx);
} else {
- platform_set_channel_map(platform, channel_count, info->channel_map, -1);
+ platform_set_channel_map(platform, channel_count, info->channel_map, -1, be_idx);
}
if (adev_device_cfg_ptr->use_client_dev_cfg) {
@@ -8971,7 +9152,7 @@
default_channelMap[0] = PCM_CHANNEL_FL;
default_channelMap[1] = PCM_CHANNEL_FR;
}
- platform_set_channel_map(platform,2,default_channelMap,-1);
+ platform_set_channel_map(platform, 2, default_channelMap, -1, be_idx);
platform_set_channel_allocation(platform,0);
}
}
diff --git a/hal/msm8974/platform.h b/hal/msm8974/platform.h
index dcedb45..2cb1741 100644
--- a/hal/msm8974/platform.h
+++ b/hal/msm8974/platform.h
@@ -175,26 +175,41 @@
/* Capture devices */
SND_DEVICE_IN_BEGIN = SND_DEVICE_OUT_END,
SND_DEVICE_IN_HANDSET_MIC = SND_DEVICE_IN_BEGIN,
+ SND_DEVICE_IN_HANDSET_MIC_SB,
SND_DEVICE_IN_HANDSET_MIC_EXTERNAL,
SND_DEVICE_IN_HANDSET_MIC_AEC,
+ SND_DEVICE_IN_HANDSET_MIC_AEC_SB,
SND_DEVICE_IN_HANDSET_MIC_NS,
+ SND_DEVICE_IN_HANDSET_MIC_NS_SB,
SND_DEVICE_IN_HANDSET_MIC_AEC_NS,
+ SND_DEVICE_IN_HANDSET_MIC_AEC_NS_SB,
SND_DEVICE_IN_HANDSET_DMIC,
SND_DEVICE_IN_HANDSET_DMIC_AEC,
+ SND_DEVICE_IN_HANDSET_DMIC_AEC_SB,
SND_DEVICE_IN_HANDSET_DMIC_NS,
+ SND_DEVICE_IN_HANDSET_DMIC_NS_SB,
SND_DEVICE_IN_HANDSET_DMIC_AEC_NS,
+ SND_DEVICE_IN_HANDSET_DMIC_AEC_NS_SB,
SND_DEVICE_IN_SPEAKER_MIC,
+ SND_DEVICE_IN_SPEAKER_MIC_SB,
SND_DEVICE_IN_SPEAKER_MIC_AEC,
+ SND_DEVICE_IN_SPEAKER_MIC_AEC_SB,
SND_DEVICE_IN_SPEAKER_MIC_NS,
+ SND_DEVICE_IN_SPEAKER_MIC_NS_SB,
SND_DEVICE_IN_SPEAKER_MIC_AEC_NS,
+ SND_DEVICE_IN_SPEAKER_MIC_AEC_NS_SB,
SND_DEVICE_IN_SPEAKER_DMIC,
SND_DEVICE_IN_SPEAKER_DMIC_AEC,
+ SND_DEVICE_IN_SPEAKER_DMIC_AEC_SB,
SND_DEVICE_IN_SPEAKER_DMIC_NS,
+ SND_DEVICE_IN_SPEAKER_DMIC_NS_SB,
SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS,
+ SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_SB,
SND_DEVICE_IN_HEADSET_MIC,
SND_DEVICE_IN_HEADSET_MIC_AEC,
SND_DEVICE_IN_HEADSET_MIC_FLUENCE,
SND_DEVICE_IN_VOICE_SPEAKER_MIC,
+ SND_DEVICE_IN_VOICE_SPEAKER_MIC_SB,
SND_DEVICE_IN_VOICE_SPEAKER_MIC_HFP,
SND_DEVICE_IN_VOICE_HEADSET_MIC,
SND_DEVICE_IN_SPDIF,
@@ -207,8 +222,10 @@
SND_DEVICE_IN_BT_A2DP,
SND_DEVICE_IN_CAMCORDER_MIC,
SND_DEVICE_IN_VOICE_DMIC,
+ SND_DEVICE_IN_VOICE_DMIC_SB,
SND_DEVICE_IN_VOICE_DMIC_TMUS,
SND_DEVICE_IN_VOICE_SPEAKER_DMIC,
+ SND_DEVICE_IN_VOICE_SPEAKER_DMIC_SB,
SND_DEVICE_IN_VOICE_SPEAKER_TMIC,
SND_DEVICE_IN_VOICE_SPEAKER_QMIC,
SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC,
diff --git a/hal/platform_api.h b/hal/platform_api.h
index c53d460..f4acf1f 100644
--- a/hal/platform_api.h
+++ b/hal/platform_api.h
@@ -245,7 +245,7 @@
int platform_get_edid_info(void *platform);
int platform_get_supported_copp_sampling_rate(uint32_t stream_sr);
int platform_set_channel_map(void *platform, int ch_count, char *ch_map,
- int snd_id);
+ int snd_id, int be_idx);
int platform_set_stream_channel_map(void *platform, audio_channel_mask_t channel_mask,
int snd_id, uint8_t *input_channel_map);
int platform_set_stream_pan_scale_params(void *platform,
@@ -255,7 +255,8 @@
int snd_id,
snd_device_t snd_device,
struct mix_matrix_params mm_params);
-int platform_set_edid_channels_configuration(void *platform, int channels, int backend_idx);
+int platform_set_edid_channels_configuration(void *platform, int channels,
+ int backend_idx, snd_device_t snd_device);
bool platform_spkr_use_default_sample_rate(void *platform);
unsigned char platform_map_to_edid_format(int format);
bool platform_is_edid_supported_format(void *platform, int format);
diff --git a/hal/voice.c b/hal/voice.c
index 6d515e4..4e5dfeb 100644
--- a/hal/voice.c
+++ b/hal/voice.c
@@ -450,6 +450,11 @@
{
snd_device_t incall_record_device = {0};
+ if (!in) {
+ ALOGE("%s: input stream is NULL", __func__);
+ return 0;
+ }
+
switch(in->source) {
case AUDIO_SOURCE_VOICE_UPLINK:
incall_record_device = SND_DEVICE_IN_INCALL_REC_TX;
diff --git a/visualizer/Android.mk b/visualizer/Android.mk
index eedf721..dca016f 100644
--- a/visualizer/Android.mk
+++ b/visualizer/Android.mk
@@ -37,10 +37,6 @@
LOCAL_STATIC_LIBRARIES += libprofile_rt
endif
-ifneq ($(filter sdm660 sdm845 msm8998 apq8098_latv sdm710 qcs605 msmnile kona $(MSMSTEPPE) $(TRINKET) lito,$(TARGET_BOARD_PLATFORM)),)
- LOCAL_CFLAGS += -DCAPTURE_DEVICE=7
-endif
-
LOCAL_HEADER_LIBRARIES := libsystem_headers \
libhardware_headers
LOCAL_SHARED_LIBRARIES := \
diff --git a/visualizer/offload_visualizer.c b/visualizer/offload_visualizer.c
index 678b73a..ccbd8bc 100644
--- a/visualizer/offload_visualizer.c
+++ b/visualizer/offload_visualizer.c
@@ -60,6 +60,11 @@
EFFECT_STATE_ACTIVE,
};
+enum pcm_device_param {
+ SND_CARD_NUM,
+ DEVICE_ID
+};
+
typedef struct effect_context_s effect_context_t;
typedef struct output_context_s output_context_t;
@@ -195,7 +200,7 @@
#define SOUND_CARD 0
#ifndef CAPTURE_DEVICE
-#define CAPTURE_DEVICE 8
+#define CAPTURE_DEVICE 7
#endif
/* Proxy port supports only MMAP read and those fixed parameters*/
@@ -356,6 +361,95 @@
return 0;
}
+// Get sound card number from pcm device
+int get_snd_card_num(char *device_info)
+{
+ char *token = NULL;
+ int num = -1;
+
+ token = strtok(device_info, ": ");
+ token = strtok(token, "-");
+ if (token)
+ num = atoi(token);
+
+ return num;
+}
+
+// Get device id from pcm device
+int get_device_id(char *device_info)
+{
+ char *token = NULL, *saveptr = NULL;
+ int id = -1;
+
+ token = strtok(device_info, ": ");
+ token = strtok_r(token, "-", &saveptr);
+ while (token != NULL) {
+ token = strtok_r(NULL, "-", &saveptr);
+ if (token) {
+ id = atoi(token);
+ break;
+ }
+ }
+
+ return id;
+}
+
+int parse_device_info(int param, char *device_info)
+{
+ switch (param) {
+ case SND_CARD_NUM:
+ return get_snd_card_num(device_info);
+ case DEVICE_ID:
+ return get_device_id(device_info);
+ default:
+ ALOGE("%s: invalid pcm device param", __func__);
+ return -1;
+ }
+}
+
+/*
+* Parse a pcm device from procfs
+* Entries in pcm file will have one of two formats:
+* <snd_card_num>-<device_id>: <descriptor> : : <playback> : <capture>
+* <snd_card_num>-<device_id>: <descriptor> : : <playback or capture>
+*/
+int parse_pcm_device(char *descriptor, int param)
+{
+ const char *pcm_devices_path = "/proc/asound/pcm";
+ char *device_info = NULL;
+ size_t len = 0;
+ ssize_t bytes_read = -1;
+ FILE *fp = NULL;
+ int ret = -1;
+
+ if (descriptor == NULL) {
+ ALOGE("%s: pcm device descriptor is NULL", __func__);
+ return ret;
+ }
+
+ if ((fp = fopen(pcm_devices_path, "r")) == NULL) {
+ ALOGE("Cannot open %s file to get list of pcm devices",
+ pcm_devices_path);
+ return ret;
+ }
+
+ while ((bytes_read = getline(&device_info, &len, fp) != -1)) {
+ if (strstr(device_info, descriptor)) {
+ ret = parse_device_info(param, device_info);
+ break;
+ }
+ }
+
+ if (device_info) {
+ free(device_info);
+ device_info = NULL;
+ }
+
+ fclose(fp);
+ fp = NULL;
+
+ return ret;
+}
void *capture_thread_loop(void *arg)
{
@@ -368,6 +462,8 @@
struct pcm *pcm = NULL;
int ret;
int retry_num = 0;
+ int sound_card = SOUND_CARD;
+ int capture_device = CAPTURE_DEVICE;
ALOGD("thread enter");
@@ -394,7 +490,15 @@
if (!capture_enabled) {
ret = configure_proxy_capture(mixer, 1);
if (ret == 0) {
- pcm = pcm_open(SOUND_CARD, CAPTURE_DEVICE,
+ sound_card =
+ parse_pcm_device("AFE-PROXY TX", SND_CARD_NUM);
+ sound_card =
+ (sound_card == -1)? SOUND_CARD : sound_card;
+ capture_device =
+ parse_pcm_device("AFE-PROXY TX", DEVICE_ID);
+ capture_device =
+ (capture_device == -1)? CAPTURE_DEVICE : capture_device;
+ pcm = pcm_open(sound_card, capture_device,
PCM_IN|PCM_MMAP|PCM_NOIRQ, &pcm_config_capture);
if (pcm && !pcm_is_ready(pcm)) {
ALOGW("%s: %s", __func__, pcm_get_error(pcm));