Merge "configs: bengal bringup changes"
diff --git a/configs/atoll/atoll.mk b/configs/atoll/atoll.mk
index 8c40c39..e301a24 100644
--- a/configs/atoll/atoll.mk
+++ b/configs/atoll/atoll.mk
@@ -42,7 +42,9 @@
AUDIO_FEATURE_ENABLED_AUDIOSPHERE := true
AUDIO_FEATURE_ENABLED_USB_TUNNEL := true
AUDIO_FEATURE_ENABLED_A2DP_OFFLOAD := true
+ifeq ($(filter R% r%,$(TARGET_PLATFORM_VERSION)),)
AUDIO_FEATURE_ENABLED_3D_AUDIO := true
+endif
AUDIO_FEATURE_ENABLED_AHAL_EXT := true
AUDIO_FEATURE_ENABLED_EXTENDED_COMPRESS_FORMAT := true
DOLBY_ENABLE := false
diff --git a/configs/atoll/audio_platform_info_intcodec.xml b/configs/atoll/audio_platform_info_intcodec.xml
index b479cfc..7c44d9f 100644
--- a/configs/atoll/audio_platform_info_intcodec.xml
+++ b/configs/atoll/audio_platform_info_intcodec.xml
@@ -122,7 +122,9 @@
<device name="SND_DEVICE_OUT_VOICE_ANC_HEADSET" backend="headphones" interface="RX_CDC_DMA_RX_0"/>
<device name="SND_DEVICE_OUT_VOICE_LINE" backend="headphones" interface="RX_CDC_DMA_RX_0"/>
<device name="SND_DEVICE_OUT_VOICE_TTY_FULL_HEADPHONES" backend="headphones" interface="RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_TTY_FULL_HEADSET" backend="headset" interface="RX_CDC_DMA_RX_0"/>
<device name="SND_DEVICE_OUT_VOICE_TTY_VCO_HEADPHONES" backend="headphones" interface="RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_TTY_VCO_HEADSET" backend="headset" interface="RX_CDC_DMA_RX_0"/>
<device name="SND_DEVICE_OUT_HANDSET" interface="WSA_CDC_DMA_RX_0"/>
<device name="SND_DEVICE_OUT_SPEAKER" interface="WSA_CDC_DMA_RX_0"/>
<device name="SND_DEVICE_OUT_SPEAKER_EXTERNAL_1" interface="WSA_CDC_DMA_RX_0"/>
@@ -189,9 +191,7 @@
<device name="SND_DEVICE_IN_VOICE_DMIC" interface="TX_CDC_DMA_TX_3"/>
<device name="SND_DEVICE_IN_VOICE_SPEAKER_DMIC" interface="TX_CDC_DMA_TX_3"/>
<device name="SND_DEVICE_IN_VOICE_SPEAKER_QMIC" interface="TX_CDC_DMA_TX_3"/>
- <device name="SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC" interface="TX_CDC_DMA_TX_3"/>
<device name="SND_DEVICE_IN_VOICE_TTY_VCO_HANDSET_MIC" interface="TX_CDC_DMA_TX_3"/>
- <device name="SND_DEVICE_IN_VOICE_TTY_HCO_HEADSET_MIC" interface="TX_CDC_DMA_TX_3"/>
<device name="SND_DEVICE_IN_VOICE_REC_MIC" interface="TX_CDC_DMA_TX_3"/>
<device name="SND_DEVICE_IN_VOICE_REC_MIC_NS" interface="TX_CDC_DMA_TX_3"/>
<device name="SND_DEVICE_IN_VOICE_REC_DMIC_STEREO" interface="TX_CDC_DMA_TX_3"/>
diff --git a/configs/atoll/mixer_paths_wcd937x.xml b/configs/atoll/mixer_paths_wcd937x.xml
index 4195193..c4784fd 100644
--- a/configs/atoll/mixer_paths_wcd937x.xml
+++ b/configs/atoll/mixer_paths_wcd937x.xml
@@ -2769,11 +2769,19 @@
</path>
<path name="hph-highquality-mode">
+ <ctl name="RX_HPH_PWR_MODE" value="LOHIFI" />
+ <ctl name="RX HPH Mode" value="CLS_H_LOHIFI" />
</path>
<path name="hph-lowpower-mode">
+ <ctl name="RX_HPH_PWR_MODE" value="ULP" />
+ <ctl name="RX HPH Mode" value="CLS_H_ULP" />
</path>
+ <path name="hph-class-ab-mode">
+ <ctl name="RX HPH Mode" value="CLS_AB" />
+ </path>
+
<path name="true-native-mode">
</path>
diff --git a/configs/bengal/bengal.mk b/configs/bengal/bengal.mk
index feac346..a144b70 100644
--- a/configs/bengal/bengal.mk
+++ b/configs/bengal/bengal.mk
@@ -42,7 +42,9 @@
AUDIO_FEATURE_ENABLED_AUDIOSPHERE := true
AUDIO_FEATURE_ENABLED_USB_TUNNEL := true
AUDIO_FEATURE_ENABLED_A2DP_OFFLOAD := true
+ifeq ($(filter R% r%,$(TARGET_PLATFORM_VERSION)),)
AUDIO_FEATURE_ENABLED_3D_AUDIO := true
+endif
AUDIO_FEATURE_ENABLED_AHAL_EXT := true
AUDIO_FEATURE_ENABLED_EXTENDED_COMPRESS_FORMAT := true
DOLBY_ENABLE := false
@@ -103,7 +105,7 @@
PRODUCT_PACKAGES += $(AUDIO_HAL_TEST_APPS)
ifeq ($(AUDIO_FEATURE_ENABLED_DLKM),true)
-BOARD_VENDOR_KERNEL_MODULES := \
+BOARD_VENDOR_KERNEL_MODULES += \
$(KERNEL_MODULES_OUT)/audio_apr.ko \
$(KERNEL_MODULES_OUT)/audio_q6_pdr.ko \
$(KERNEL_MODULES_OUT)/audio_q6_notifier.ko \
@@ -114,21 +116,19 @@
$(KERNEL_MODULES_OUT)/audio_swr.ko \
$(KERNEL_MODULES_OUT)/audio_wcd_core.ko \
$(KERNEL_MODULES_OUT)/audio_swr_ctrl.ko \
- $(KERNEL_MODULES_OUT)/audio_wsa881x.ko \
+ $(KERNEL_MODULES_OUT)/audio_wsa881x_analog.ko \
$(KERNEL_MODULES_OUT)/audio_platform.ko \
- $(KERNEL_MODULES_OUT)/audio_hdmi.ko \
$(KERNEL_MODULES_OUT)/audio_stub.ko \
$(KERNEL_MODULES_OUT)/audio_wcd9xxx.ko \
$(KERNEL_MODULES_OUT)/audio_mbhc.ko \
- $(KERNEL_MODULES_OUT)/audio_wcd938x.ko \
- $(KERNEL_MODULES_OUT)/audio_wcd938x_slave.ko \
+ $(KERNEL_MODULES_OUT)/audio_native.ko \
+ $(KERNEL_MODULES_OUT)/audio_wcd937x.ko \
+ $(KERNEL_MODULES_OUT)/audio_wcd937x_slave.ko \
$(KERNEL_MODULES_OUT)/audio_bolero_cdc.ko \
- $(KERNEL_MODULES_OUT)/audio_wsa_macro.ko \
$(KERNEL_MODULES_OUT)/audio_va_macro.ko \
$(KERNEL_MODULES_OUT)/audio_rx_macro.ko \
$(KERNEL_MODULES_OUT)/audio_tx_macro.ko \
- $(KERNEL_MODULES_OUT)/audio_native.ko \
- $(KERNEL_MODULES_OUT)/audio_machine_lito.ko \
+ $(KERNEL_MODULES_OUT)/audio_machine_bengal.ko \
$(KERNEL_MODULES_OUT)/audio_snd_event.ko
endif
@@ -139,25 +139,23 @@
AUDIO_DLKM += audio_adsp_loader.ko
AUDIO_DLKM += audio_q6.ko
AUDIO_DLKM += audio_usf.ko
-AUDIO_DLKM += audio_pinctrl_wcd.ko
+AUDIO_DLKM += audio_pinctrl_lpi.ko
AUDIO_DLKM += audio_swr.ko
AUDIO_DLKM += audio_wcd_core.ko
AUDIO_DLKM += audio_swr_ctrl.ko
-AUDIO_DLKM += audio_wsa881x.ko
+AUDIO_DLKM += audio_wsa881x_analog.ko
AUDIO_DLKM += audio_platform.ko
-AUDIO_DLKM += audio_hdmi.ko
AUDIO_DLKM += audio_stub.ko
AUDIO_DLKM += audio_wcd9xxx.ko
AUDIO_DLKM += audio_mbhc.ko
AUDIO_DLKM += audio_native.ko
-AUDIO_DLKM += audio_wcd938x.ko
-AUDIO_DLKM += audio_wcd938x_slave.ko
+AUDIO_DLKM += audio_wcd937x.ko
+AUDIO_DLKM += audio_wcd937x_slave.ko
AUDIO_DLKM += audio_bolero_cdc.ko
-AUDIO_DLKM += audio_wsa_macro.ko
AUDIO_DLKM += audio_va_macro.ko
AUDIO_DLKM += audio_rx_macro.ko
AUDIO_DLKM += audio_tx_macro.ko
-AUDIO_DLKM += audio_machine_lito.ko
+AUDIO_DLKM += audio_machine_bengal.ko
AUDIO_DLKM += audio_snd_event.ko
PRODUCT_PACKAGES += $(AUDIO_DLKM)
diff --git a/configs/common_au/audio_policy_configuration.xml b/configs/common_au/audio_policy_configuration.xml
index 10e8c5c..00eeb5a 100644
--- a/configs/common_au/audio_policy_configuration.xml
+++ b/configs/common_au/audio_policy_configuration.xml
@@ -58,10 +58,8 @@
<item>Nav Guidance Bus</item>
<item>Phone Bus</item>
<item>Rear Seat Bus</item>
- <item>Telephony Tx</item>
<item>Built-In Mic</item>
<item>Built-In Back Mic</item>
- <item>Telephony Rx</item>
</attachedDevices>
<defaultOutputDevice>Media Bus</defaultOutputDevice>
<mixPorts>
diff --git a/configs/kona/audio_platform_info_intcodec.xml b/configs/kona/audio_platform_info_intcodec.xml
index d1c45b9..a1ac568 100644
--- a/configs/kona/audio_platform_info_intcodec.xml
+++ b/configs/kona/audio_platform_info_intcodec.xml
@@ -244,9 +244,7 @@
<device name="SND_DEVICE_IN_VOICE_SPEAKER_DMIC" interface="TX_CDC_DMA_TX_3"/>
<device name="SND_DEVICE_IN_VOICE_SPEAKER_DMIC_SB" interface="TX_CDC_DMA_TX_3"/>
<device name="SND_DEVICE_IN_VOICE_SPEAKER_QMIC" interface="TX_CDC_DMA_TX_3"/>
- <device name="SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC" interface="TX_CDC_DMA_TX_3"/>
<device name="SND_DEVICE_IN_VOICE_TTY_VCO_HANDSET_MIC" interface="TX_CDC_DMA_TX_3"/>
- <device name="SND_DEVICE_IN_VOICE_TTY_HCO_HEADSET_MIC" interface="TX_CDC_DMA_TX_3"/>
<device name="SND_DEVICE_IN_VOICE_REC_MIC" interface="TX_CDC_DMA_TX_3"/>
<device name="SND_DEVICE_IN_VOICE_REC_MIC_NS" interface="TX_CDC_DMA_TX_3"/>
<device name="SND_DEVICE_IN_VOICE_REC_DMIC_STEREO" interface="TX_CDC_DMA_TX_3"/>
diff --git a/configs/kona/kona.mk b/configs/kona/kona.mk
index 6b73f5d..9bdc261 100644
--- a/configs/kona/kona.mk
+++ b/configs/kona/kona.mk
@@ -43,7 +43,9 @@
AUDIO_FEATURE_ENABLED_AUDIOSPHERE := true
AUDIO_FEATURE_ENABLED_USB_TUNNEL := true
AUDIO_FEATURE_ENABLED_A2DP_OFFLOAD := true
+ifeq ($(filter R% r%,$(TARGET_PLATFORM_VERSION)),)
AUDIO_FEATURE_ENABLED_3D_AUDIO := true
+endif
AUDIO_FEATURE_ENABLED_AHAL_EXT := true
AUDIO_FEATURE_ENABLED_EXTENDED_COMPRESS_FORMAT := true
DOLBY_ENABLE := false
diff --git a/configs/kona/sound_trigger_platform_info.xml b/configs/kona/sound_trigger_platform_info.xml
index 479d7dc..b4a611f 100644
--- a/configs/kona/sound_trigger_platform_info.xml
+++ b/configs/kona/sound_trigger_platform_info.xml
@@ -213,7 +213,7 @@
<param capture_device="HANDSET" />
<!-- 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" />
+ <param adm_cfg_profile="DEFAULT" />
<!-- fluence_type: "FLUENCE_MIC", "FLUENCE_DMIC", "FLUENCE_TMIC" -->
<!-- "FLUENCE_QMIC". Param value is valid when adm_cfg_profile -->
<!-- is FFECNS -->
@@ -229,7 +229,7 @@
</lsm_usecase>
<lsm_usecase>
<param capture_device="HEADSET" />
- <param adm_cfg_profile="NONE" />
+ <param adm_cfg_profile="DEFAULT" />
<param fluence_type="NONE" />
<param execution_mode="ADSP" />
<param app_type="4" /> <!-- app type for MD used in ACDB -->
@@ -263,7 +263,7 @@
<param capture_device="HANDSET" />
<!-- 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" />
+ <param adm_cfg_profile="DEFAULT" />
<!-- fluence_type: "FLUENCE_MIC", "FLUENCE_DMIC", "FLUENCE_TMIC" -->
<!-- "FLUENCE_QMIC". Param value is valid when adm_cfg_profile -->
<!-- is FFECNS -->
@@ -288,7 +288,7 @@
<param capture_device="HANDSET" />
<!-- 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" />
+ <param adm_cfg_profile="DEFAULT" />
<!-- fluence_type: "FLUENCE_MIC", "FLUENCE_DMIC", "FLUENCE_TMIC" -->
<!-- "FLUENCE_QMIC". Param value is valid when adm_cfg_profile -->
<!-- is FFECNS -->
@@ -311,7 +311,7 @@
</lsm_usecase>
<lsm_usecase>
<param capture_device="HEADSET" />
- <param adm_cfg_profile="NONE" />
+ <param adm_cfg_profile="DEFAULT" />
<param fluence_type="NONE" />
<param execution_mode="ADSP" />
<param app_type="3" /> <!-- app type used in ACDB -->
@@ -344,7 +344,7 @@
<param capture_device="HANDSET" />
<!-- 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" />
+ <param adm_cfg_profile="DEFAULT" />
<!-- fluence_type: "FLUENCE_MIC", "FLUENCE_DMIC", "FLUENCE_TMIC" -->
<!-- "FLUENCE_QMIC". Param value is valid when adm_cfg_profile -->
<!-- is FFECNS -->
@@ -361,7 +361,7 @@
</lsm_usecase>
<lsm_usecase>
<param capture_device="HEADSET" />
- <param adm_cfg_profile="NONE" />
+ <param adm_cfg_profile="DEFAULT" />
<param fluence_type="NONE" />
<param execution_mode="ADSP" />
<param app_type="3" /> <!-- app type used in ACDB -->
@@ -391,4 +391,12 @@
<param bit_width="16" />
<param out_channels="5"/>
</adm_config>
+
+ <adm_config>
+ <param adm_cfg_profile="DEFAULT" />
+ <param app_type="69938" />
+ <param sample_rate="16000" />
+ <param bit_width="16" />
+ <param out_channels="1"/>
+ </adm_config>
</sound_trigger_platform_info>
diff --git a/configs/lito/audio_platform_info_intcodec.xml b/configs/lito/audio_platform_info_intcodec.xml
index 93b3658..eeb05b6 100644
--- a/configs/lito/audio_platform_info_intcodec.xml
+++ b/configs/lito/audio_platform_info_intcodec.xml
@@ -122,7 +122,9 @@
<device name="SND_DEVICE_OUT_VOICE_ANC_HEADSET" backend="headphones" interface="RX_CDC_DMA_RX_0"/>
<device name="SND_DEVICE_OUT_VOICE_LINE" backend="headphones" interface="RX_CDC_DMA_RX_0"/>
<device name="SND_DEVICE_OUT_VOICE_TTY_FULL_HEADPHONES" backend="headphones" interface="RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_TTY_FULL_HEADSET" backend="headset" interface="RX_CDC_DMA_RX_0"/>
<device name="SND_DEVICE_OUT_VOICE_TTY_VCO_HEADPHONES" backend="headphones" interface="RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_TTY_VCO_HEADSET" backend="headset" interface="RX_CDC_DMA_RX_0"/>
<device name="SND_DEVICE_OUT_HANDSET" interface="WSA_CDC_DMA_RX_0"/>
<device name="SND_DEVICE_OUT_SPEAKER" interface="WSA_CDC_DMA_RX_0"/>
<device name="SND_DEVICE_OUT_SPEAKER_EXTERNAL_1" interface="WSA_CDC_DMA_RX_0"/>
@@ -189,9 +191,7 @@
<device name="SND_DEVICE_IN_VOICE_DMIC" interface="TX_CDC_DMA_TX_3"/>
<device name="SND_DEVICE_IN_VOICE_SPEAKER_DMIC" interface="TX_CDC_DMA_TX_3"/>
<device name="SND_DEVICE_IN_VOICE_SPEAKER_QMIC" interface="TX_CDC_DMA_TX_3"/>
- <device name="SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC" interface="TX_CDC_DMA_TX_3"/>
<device name="SND_DEVICE_IN_VOICE_TTY_VCO_HANDSET_MIC" interface="TX_CDC_DMA_TX_3"/>
- <device name="SND_DEVICE_IN_VOICE_TTY_HCO_HEADSET_MIC" interface="TX_CDC_DMA_TX_3"/>
<device name="SND_DEVICE_IN_VOICE_REC_MIC" interface="TX_CDC_DMA_TX_3"/>
<device name="SND_DEVICE_IN_VOICE_REC_MIC_NS" interface="TX_CDC_DMA_TX_3"/>
<device name="SND_DEVICE_IN_VOICE_REC_DMIC_STEREO" interface="TX_CDC_DMA_TX_3"/>
diff --git a/configs/lito/lito.mk b/configs/lito/lito.mk
index 777cc12..16ff87a 100644
--- a/configs/lito/lito.mk
+++ b/configs/lito/lito.mk
@@ -43,7 +43,9 @@
AUDIO_FEATURE_ENABLED_AUDIOSPHERE := true
AUDIO_FEATURE_ENABLED_USB_TUNNEL := true
AUDIO_FEATURE_ENABLED_A2DP_OFFLOAD := true
+ifeq ($(filter R% r%,$(TARGET_PLATFORM_VERSION)),)
AUDIO_FEATURE_ENABLED_3D_AUDIO := true
+endif
AUDIO_FEATURE_ENABLED_AHAL_EXT := true
AUDIO_FEATURE_ENABLED_EXTENDED_COMPRESS_FORMAT := true
DOLBY_ENABLE := false
diff --git a/configs/msmnile/msmnile.mk b/configs/msmnile/msmnile.mk
index 9fe6c35..5440c7b 100644
--- a/configs/msmnile/msmnile.mk
+++ b/configs/msmnile/msmnile.mk
@@ -41,7 +41,9 @@
AUDIO_FEATURE_ENABLED_AUDIOSPHERE := true
AUDIO_FEATURE_ENABLED_USB_TUNNEL := true
AUDIO_FEATURE_ENABLED_A2DP_OFFLOAD := true
+ifeq ($(filter R% r%,$(TARGET_PLATFORM_VERSION)),)
AUDIO_FEATURE_ENABLED_3D_AUDIO := true
+endif
AUDIO_FEATURE_ENABLED_AHAL_EXT := true
AUDIO_FEATURE_ENABLED_EXTENDED_COMPRESS_FORMAT := true
DOLBY_ENABLE := false
diff --git a/configs/msmnile_au/msmnile_au.mk b/configs/msmnile_au/msmnile_au.mk
index b294dc5..7756819 100644
--- a/configs/msmnile_au/msmnile_au.mk
+++ b/configs/msmnile_au/msmnile_au.mk
@@ -264,6 +264,12 @@
PRODUCT_PROPERTY_OVERRIDES += \
vendor.audio.hw.aac.encoder=true
+#enable hardware decoders for WMA & APE by default
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio.use.hw.wma.decoder=true
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio.use.hw.ape.decoder=true
+
#audio becoming noisy intent broadcast delay
PRODUCT_PROPERTY_OVERRIDES += \
audio.sys.noisy.broadcast.delay=600
diff --git a/configs/msmsteppe_au/msmsteppe_au.mk b/configs/msmsteppe_au/msmsteppe_au.mk
index 36f876e..01b2ec7 100644
--- a/configs/msmsteppe_au/msmsteppe_au.mk
+++ b/configs/msmsteppe_au/msmsteppe_au.mk
@@ -255,6 +255,12 @@
PRODUCT_PROPERTY_OVERRIDES += \
vendor.audio.hw.aac.encoder=true
+#enable hardware decoders for WMA & APE by default
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio.use.hw.wma.decoder=true
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio.use.hw.ape.decoder=true
+
#audio becoming noisy intent broadcast delay
PRODUCT_PROPERTY_OVERRIDES += \
audio.sys.noisy.broadcast.delay=600
diff --git a/configs/qssi/qssi.mk b/configs/qssi/qssi.mk
index 457e860..5ae801c 100644
--- a/configs/qssi/qssi.mk
+++ b/configs/qssi/qssi.mk
@@ -22,7 +22,9 @@
AUDIO_FEATURE_ENABLED_AAC_ADTS_OFFLOAD := true
AUDIO_FEATURE_ENABLED_PROXY_DEVICE := true
AUDIO_FEATURE_ENABLED_AUDIOSPHERE := true
+ifeq ($(filter R% r%,$(TARGET_PLATFORM_VERSION)),)
AUDIO_FEATURE_ENABLED_3D_AUDIO := true
+endif
AUDIO_FEATURE_ENABLED_AHAL_EXT := true
DOLBY_ENABLE := false
endif
diff --git a/configs/sdm710/sdm710.mk b/configs/sdm710/sdm710.mk
index 9af31e1..1a113cf 100644
--- a/configs/sdm710/sdm710.mk
+++ b/configs/sdm710/sdm710.mk
@@ -32,7 +32,9 @@
AUDIO_FEATURE_ENABLED_AUDIOSPHERE := true
AUDIO_FEATURE_ENABLED_USB_TUNNEL := true
AUDIO_FEATURE_ENABLED_A2DP_OFFLOAD := true
+ifeq ($(filter R% r%,$(TARGET_PLATFORM_VERSION)),)
AUDIO_FEATURE_ENABLED_3D_AUDIO := true
+endif
AUDIO_FEATURE_ENABLED_VOICE_PRINT := false
USE_LEGACY_AUDIO_DAEMON := false
USE_LEGACY_AUDIO_MEASUREMENT := false
diff --git a/configs/sdm845/sdm845.mk b/configs/sdm845/sdm845.mk
index bf73e64..d9a9251 100644
--- a/configs/sdm845/sdm845.mk
+++ b/configs/sdm845/sdm845.mk
@@ -30,7 +30,9 @@
AUDIO_FEATURE_ENABLED_AUDIOSPHERE := true
AUDIO_FEATURE_ENABLED_USB_TUNNEL := true
AUDIO_FEATURE_ENABLED_A2DP_OFFLOAD := true
+ifeq ($(filter R% r%,$(TARGET_PLATFORM_VERSION)),)
AUDIO_FEATURE_ENABLED_3D_AUDIO := true
+endif
AUDIO_FEATURE_ENABLED_AHAL_EXT := false
AUDIO_FEATURE_ENABLED_EXTENDED_COMPRESS_FORMAT := true
DOLBY_ENABLE := false
diff --git a/hal/audio_extn/a2dp.c b/hal/audio_extn/a2dp.c
index 34869d4..bffa3fd 100644
--- a/hal/audio_extn/a2dp.c
+++ b/hal/audio_extn/a2dp.c
@@ -202,6 +202,7 @@
APTX_AD_SR_UNCHANGED = 0x0,
APTX_AD_48 = 0x1, // 48 KHz default
APTX_AD_44_1 = 0x2, // 44.1kHz
+ APTX_AD_96 = 0x3, // 96KHz
} enc_aptx_ad_s_rate;
typedef void (*bt_audio_pre_init_t)(void);
@@ -1701,7 +1702,7 @@
a2dp.enc_channels = CH_MONO;
aptx_dsp_cfg->custom_cfg.num_channels = CH_MONO;
aptx_dsp_cfg->custom_cfg.channel_mapping[0] = PCM_CHANNEL_C;
- break;
+ break;
}
switch(aptx_dsp_cfg->aptx_ad_cfg.sampling_freq) {
case APTX_AD_SR_UNCHANGED:
@@ -1713,7 +1714,7 @@
case APTX_AD_44_1:
a2dp.enc_sampling_rate = SAMPLING_RATE_441K;
aptx_dsp_cfg->custom_cfg.sample_rate = SAMPLING_RATE_441K;
- break;
+ break;
}
ALOGV("Successfully updated APTX AD enc format with \
samplingrate: %d channels:%d",
@@ -1774,7 +1775,7 @@
a2dp.enc_channels = CH_MONO;
aptx_dsp_cfg->custom_cfg.num_channels = CH_MONO;
aptx_dsp_cfg->custom_cfg.channel_mapping[0] = PCM_CHANNEL_C;
- break;
+ break;
}
switch(aptx_dsp_cfg->aptx_ad_cfg.sampling_freq) {
case APTX_AD_SR_UNCHANGED:
@@ -1786,7 +1787,11 @@
case APTX_AD_44_1:
a2dp.enc_sampling_rate = SAMPLING_RATE_441K;
aptx_dsp_cfg->custom_cfg.sample_rate = SAMPLING_RATE_441K;
- break;
+ break;
+ case APTX_AD_96:
+ a2dp.enc_sampling_rate = SAMPLING_RATE_96K;
+ aptx_dsp_cfg->custom_cfg.sample_rate = SAMPLING_RATE_96K;
+ break;
}
ALOGV("Successfully updated APTX AD enc format with \
samplingrate: %d channels:%d",
diff --git a/hal/audio_extn/audio_extn.c b/hal/audio_extn/audio_extn.c
index 9057016..2d31509 100644
--- a/hal/audio_extn/audio_extn.c
+++ b/hal/audio_extn/audio_extn.c
@@ -5677,6 +5677,7 @@
auto_hal_init_config.fp_disable_snd_device = disable_snd_device;
auto_hal_init_config.fp_adev_get_active_input = adev_get_active_input;
auto_hal_init_config.fp_platform_set_echo_reference = platform_set_echo_reference;
+ auto_hal_init_config.fp_platform_get_eccarstate = platform_get_eccarstate;
return auto_hal_init(adev, auto_hal_init_config);
}
else
diff --git a/hal/audio_extn/audio_extn.h b/hal/audio_extn/audio_extn.h
index d282f45..c0e8cf4 100644
--- a/hal/audio_extn/audio_extn.h
+++ b/hal/audio_extn/audio_extn.h
@@ -696,6 +696,7 @@
struct audio_usecase *);
typedef int (*fp_audio_extn_auto_hal_stop_hfp_downlink_t)(struct audio_device *,
struct audio_usecase *);
+typedef bool (*fp_platform_get_eccarstate_t)(void *);
typedef struct hfp_init_config {
fp_platform_set_mic_mute_t fp_platform_set_mic_mute;
@@ -1360,6 +1361,7 @@
fp_disable_snd_device_t fp_disable_snd_device;
fp_adev_get_active_input_t fp_adev_get_active_input;
fp_platform_set_echo_reference_t fp_platform_set_echo_reference;
+ fp_platform_get_eccarstate_t fp_platform_get_eccarstate;
} auto_hal_init_config_t;
// END: AUTO_HAL FEATURE ==================================================
diff --git a/hal/audio_extn/auto_hal.c b/hal/audio_extn/auto_hal.c
index b09a9d0..41b3762 100644
--- a/hal/audio_extn/auto_hal.c
+++ b/hal/audio_extn/auto_hal.c
@@ -59,6 +59,7 @@
static fp_disable_snd_device_t fp_disable_snd_device;
static fp_adev_get_active_input_t fp_adev_get_active_input;
static fp_platform_set_echo_reference_t fp_platform_set_echo_reference;
+static fp_platform_get_eccarstate_t fp_platform_get_eccarstate;
/* Auto hal module struct */
static struct auto_hal_module *auto_hal = NULL;
@@ -827,7 +828,11 @@
switch (usecase->id) {
case USECASE_AUDIO_HFP_SCO:
case USECASE_AUDIO_HFP_SCO_WB:
- snd_device = SND_DEVICE_IN_VOICE_SPEAKER_MIC_HFP;
+ if (fp_platform_get_eccarstate((void *) adev->platform)) {
+ snd_device = SND_DEVICE_IN_VOICE_SPEAKER_MIC_HFP_MMSECNS;
+ } else {
+ snd_device = SND_DEVICE_IN_VOICE_SPEAKER_MIC_HFP;
+ }
if (adev->enable_hfp)
fp_platform_set_echo_reference(adev, true, out_device);
break;
@@ -971,6 +976,7 @@
fp_disable_snd_device = init_config.fp_disable_snd_device;
fp_adev_get_active_input = init_config.fp_adev_get_active_input;
fp_platform_set_echo_reference = init_config.fp_platform_set_echo_reference;
+ fp_platform_get_eccarstate = init_config.fp_platform_get_eccarstate;
return ret;
}
diff --git a/hal/audio_extn/ext_hw_plugin.c b/hal/audio_extn/ext_hw_plugin.c
index 6e784cb..92f3f30 100644
--- a/hal/audio_extn/ext_hw_plugin.c
+++ b/hal/audio_extn/ext_hw_plugin.c
@@ -286,9 +286,12 @@
}
}
- if ((usecase->type == PCM_CAPTURE) &&
- (usecase->id == USECASE_AUDIO_RECORD) &&
- (usecase->in_snd_device == SND_DEVICE_IN_SPEAKER_QMIC_AEC)) {
+ if (((usecase->type == PCM_CAPTURE) &&
+ (usecase->id == USECASE_AUDIO_RECORD) &&
+ (usecase->in_snd_device == SND_DEVICE_IN_SPEAKER_QMIC_AEC)) ||
+ ((usecase->type == PCM_HFP_CALL) &&
+ ((usecase->id == USECASE_AUDIO_HFP_SCO) || (usecase->id == USECASE_AUDIO_HFP_SCO_WB)) &&
+ (usecase->in_snd_device == SND_DEVICE_IN_VOICE_SPEAKER_MIC_HFP_MMSECNS))) {
audio_hal_plugin_codec_enable_t codec_enable_ec = {0,};
codec_enable_ec.snd_dev = usecase->in_snd_device;
// TODO - below should be related with in_snd_dev
diff --git a/hal/audio_extn/hfp.c b/hal/audio_extn/hfp.c
index 62eb9e6..e646bc1 100644
--- a/hal/audio_extn/hfp.c
+++ b/hal/audio_extn/hfp.c
@@ -83,6 +83,7 @@
struct pcm *hfp_sco_tx;
struct pcm *hfp_pcm_rx;
struct pcm *hfp_pcm_tx;
+ struct pcm *hfp_ext_ec_tx;
bool is_hfp_running;
float hfp_volume;
int32_t hfp_pcm_dev_id;
@@ -96,6 +97,7 @@
.hfp_sco_tx = NULL,
.hfp_pcm_rx = NULL,
.hfp_pcm_tx = NULL,
+ .hfp_ext_ec_tx = NULL,
.is_hfp_running = 0,
.hfp_volume = 0,
.hfp_pcm_dev_id = HFP_ASM_RX_TX,
@@ -288,6 +290,7 @@
int32_t ret = 0;
struct audio_usecase *uc_info;
int32_t pcm_dev_rx_id, pcm_dev_tx_id, pcm_dev_asm_rx_id, pcm_dev_asm_tx_id;
+ int32_t pcm_ext_ec_ref_id;
ALOGD("%s: enter", __func__);
@@ -396,6 +399,27 @@
goto exit;
}
+#ifdef PLATFORM_AUTO
+ /* echo reference path for single-mic/multi-mic surround ECNS hfp calls */
+ pcm_ext_ec_ref_id = HFP_EXT_EC_REF_TX;
+ ALOGD("%s: Opening PCM capture device card_id(%d) device_id(%d)",
+ __func__, adev->snd_card, pcm_ext_ec_ref_id);
+ hfpmod.hfp_ext_ec_tx = pcm_open(adev->snd_card,
+ pcm_ext_ec_ref_id,
+ PCM_IN, &pcm_config_hfp);
+ if (hfpmod.hfp_ext_ec_tx && !pcm_is_ready(hfpmod.hfp_ext_ec_tx)) {
+ ALOGE("%s: %s", __func__, pcm_get_error(hfpmod.hfp_ext_ec_tx));
+ ret = -EIO;
+ goto exit;
+ }
+
+ if (pcm_start(hfpmod.hfp_ext_ec_tx) < 0) {
+ ALOGE("%s: pcm start for hfp ext ec tx failed", __func__);
+ ret = -EINVAL;
+ goto exit;
+ }
+#endif
+
hfpmod.is_hfp_running = true;
hfp_set_volume(adev, hfpmod.hfp_volume);
@@ -438,6 +462,14 @@
hfpmod.hfp_pcm_tx = NULL;
}
+#ifdef PLATFORM_AUTO
+ /* echo reference path for single-mic/multi-mic surround ECNS hfp calls */
+ if (hfpmod.hfp_ext_ec_tx) {
+ pcm_close(hfpmod.hfp_ext_ec_tx);
+ hfpmod.hfp_ext_ec_tx = NULL;
+ }
+#endif
+
uc_info = fp_get_usecase_from_list(adev, hfpmod.ucid);
if (uc_info == NULL) {
ALOGE("%s: Could not find the usecase (%d) in the list",
diff --git a/hal/audio_extn/sndmonitor.c b/hal/audio_extn/sndmonitor.c
index 7b3e0a0..4f27db9 100644
--- a/hal/audio_extn/sndmonitor.c
+++ b/hal/audio_extn/sndmonitor.c
@@ -225,6 +225,7 @@
(strncasecmp(card_id, "sa", 2) != 0) &&
(strncasecmp(card_id, "kona", 4) != 0) &&
(strncasecmp(card_id, "atoll", 5) != 0) &&
+ (strncasecmp(card_id, "bengal", 6) != 0) &&
(strncasecmp(card_id, "lito", 4) != 0)) {
ALOGW("Skip over non-ADSP snd card %s", card_id);
continue;
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 89228ec..0df1981 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -1128,7 +1128,9 @@
in->ec_opened = true;
}
}
- } else if (usecase->type == TRANSCODE_LOOPBACK_TX) {
+ } else if ((usecase->type == TRANSCODE_LOOPBACK_TX) || ((usecase->type == PCM_HFP_CALL) &&
+ ((usecase->id == USECASE_AUDIO_HFP_SCO) || (usecase->id == USECASE_AUDIO_HFP_SCO_WB)) &&
+ (usecase->in_snd_device == SND_DEVICE_IN_VOICE_SPEAKER_MIC_HFP_MMSECNS))) {
snd_device = usecase->in_snd_device;
} else {
snd_device = usecase->out_snd_device;
@@ -7651,9 +7653,11 @@
out->compr_config.fragments = DIRECT_PCM_NUM_FRAGMENTS;
- if ((config->offload_info.duration_us >= MIN_OFFLOAD_BUFFER_DURATION_MS * 1000) &&
- (config->offload_info.duration_us <= MAX_OFFLOAD_BUFFER_DURATION_MS * 1000))
- out->info.duration_us = (int64_t)config->offload_info.duration_us;
+ if (property_get_bool("vendor.audio.offload.buffer.duration.enabled", false)) {
+ if ((config->offload_info.duration_us >= MIN_OFFLOAD_BUFFER_DURATION_MS * 1000) &&
+ (config->offload_info.duration_us <= MAX_OFFLOAD_BUFFER_DURATION_MS * 1000))
+ out->info.duration_us = (int64_t)config->offload_info.duration_us;
+ }
/* Check if alsa session is configured with the same format as HAL input format,
* if not then derive correct fragment size needed to accomodate the
diff --git a/hal/audio_hw.h b/hal/audio_hw.h
index 5e9627b..3998d43 100644
--- a/hal/audio_hw.h
+++ b/hal/audio_hw.h
@@ -121,6 +121,13 @@
uint32_t param_value;
};
+struct audio_fluence_mmsecns_config {
+ uint32_t topology_id;
+ uint32_t module_id;
+ uint32_t instance_id;
+ uint32_t param_id;
+};
+
#define MAX_MIXER_PATH_LEN 64
typedef enum card_status_t {
diff --git a/hal/msm8974/hw_info.c b/hal/msm8974/hw_info.c
index fbdb262..bcc5a58 100644
--- a/hal/msm8974/hw_info.c
+++ b/hal/msm8974/hw_info.c
@@ -520,7 +520,11 @@
struct hardware_info *hw_info,
const char *snd_card_name)
{
- if (!strncmp(snd_card_name, "kona-mtp-snd-card",
+ if (!strncmp(snd_card_name, "bengal-idp-snd-card",
+ sizeof("bengal-idp-snd-card"))) {
+ strlcpy(hw_info->name, "bengal", sizeof(hw_info->name));
+ hw_info->is_stereo_spkr = false;
+ } else if (!strncmp(snd_card_name, "kona-mtp-snd-card",
sizeof("kona-mtp-snd-card"))) {
strlcpy(hw_info->name, "kona", sizeof(hw_info->name));
} else if (!strncmp(snd_card_name, "lito-mtp-snd-card",
@@ -822,7 +826,7 @@
ALOGV("SDA845 - variant soundcard");
update_hardware_info_sda845(hw_info, snd_card_name);
} else if (strstr(snd_card_name, "kona") || strstr(snd_card_name, "lito")
- || strstr(snd_card_name, "atoll")) {
+ || strstr(snd_card_name, "atoll") || strstr(snd_card_name, "bengal")) {
ALOGV("KONA - variant soundcard");
update_hardware_info_kona(hw_info, snd_card_name);
} else if(strstr(snd_card_name, "sdm439")) {
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index 264c6f6..3cf05fe 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -149,6 +149,7 @@
#define AUDIO_PARAMETER_KEY_VOLUME_BOOST "volume_boost"
#define AUDIO_PARAMETER_KEY_AUD_CALDATA "cal_data"
#define AUDIO_PARAMETER_KEY_AUD_CALRESULT "cal_result"
+#define AUDIO_PARAMETER_KEY_EC_CAR_STATE "ec_car_state"
#define AUDIO_PARAMETER_KEY_MONO_SPEAKER "mono_speaker"
@@ -175,6 +176,7 @@
#define AUDIO_PARAMETER_KEY_DP_FOR_VOICE_USECASE "dp_for_voice"
#define AUDIO_PARAMETER_KEY_DP_CHANNEL_MASK "dp_channel_mask"
#define AUDIO_PARAMETER_KEY_SPKR_DEVICE_CHMAP "spkr_device_chmap"
+#define AUDIO_PARAMETER_KEY_HFP_ZONE "hfp_zone"
#define EVENT_EXTERNAL_SPK_1 "qc_ext_spk_1"
#define EVENT_EXTERNAL_SPK_2 "qc_ext_spk_2"
@@ -300,8 +302,10 @@
bool ec_ref_enabled;
bool is_wsa_speaker;
bool hifi_audio;
+ bool is_cls_ab_only_supported;
bool is_i2s_ext_modem;
bool is_acdb_initialized;
+ bool ec_car_state;
/* Vbat monitor related flags */
bool is_vbat_speaker;
bool is_bcl_speaker;
@@ -656,6 +660,7 @@
[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",
+ [SND_DEVICE_IN_VOICE_SPEAKER_MIC_HFP_MMSECNS] = "voice-speaker-mic-hfp-mmsecns",
[SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC] = "voice-tty-full-headset-mic",
[SND_DEVICE_IN_VOICE_TTY_VCO_HANDSET_MIC] = "voice-tty-vco-handset-mic",
[SND_DEVICE_IN_VOICE_TTY_HCO_HEADSET_MIC] = "voice-tty-hco-headset-mic",
@@ -771,6 +776,9 @@
[GET_IN_DEVICE_INDEX(SND_DEVICE_IN_HANDSET_MIC_SB)][EFFECT_NS] = {TX_VOICE_FLUENCE_SM_SB, 0x8000, 0x10EAF, 0x02},
};
+static struct audio_fluence_mmsecns_config fluence_mmsecns_table = {TOPOLOGY_ID_MM_HFP_ECNS, MODULE_ID_MM_HFP_ECNS,
+ INSTANCE_ID_MM_HFP_ECNS, PARAM_ID_MM_HFP_ZONE};
+
/* ACDB IDs (audio DSP path configuration IDs) for each sound device */
static int acdb_device_table[SND_DEVICE_MAX] = {
[SND_DEVICE_NONE] = -1,
@@ -906,6 +914,7 @@
[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_SPEAKER_MIC_HFP_MMSECNS] = 131,
[SND_DEVICE_IN_VOICE_HEADSET_MIC] = 8,
[SND_DEVICE_IN_SPDIF] = 143,
[SND_DEVICE_IN_HDMI_MIC] = 143,
@@ -1142,6 +1151,7 @@
{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_SPEAKER_MIC_HFP_MMSECNS)},
{TO_NAME_INDEX(SND_DEVICE_IN_VOICE_HEADSET_MIC)},
{TO_NAME_INDEX(SND_DEVICE_IN_SPDIF)},
{TO_NAME_INDEX(SND_DEVICE_IN_HDMI_MIC)},
@@ -1702,7 +1712,9 @@
!strncmp(snd_card_name, "atoll-idp-snd-card",
sizeof("atoll-idp-snd-card")) ||
!strncmp(snd_card_name, "atoll-qrd-snd-card",
- sizeof("atoll-qrd-snd-card"))) {
+ sizeof("atoll-qrd-snd-card")) ||
+ !strncmp(snd_card_name, "bengal-idp-snd-card",
+ sizeof("bengal-idp-snd-card"))) {
ALOGI("%s: snd_card_name: %s",__func__,snd_card_name);
my_data->is_internal_codec = true;
my_data->is_slimbus_interface = false;
@@ -1893,6 +1905,9 @@
else if (out_device & AUDIO_DEVICE_OUT_USB_HEADSET)
strlcat(ec_ref_mixer_path, " usb-headphones",
MIXER_PATH_MAX_LENGTH);
+ else if (out_device & AUDIO_DEVICE_OUT_BUS)
+ strlcpy(ec_ref_mixer_path, "multi-mic-echo-reference",
+ MIXER_PATH_MAX_LENGTH);
if (audio_route_apply_and_update_path(adev->audio_route,
ec_ref_mixer_path) == 0)
@@ -2184,6 +2199,7 @@
backend_tag_table[SND_DEVICE_OUT_VOICE_SPEAKER_STEREO_AND_VOICE_ANC_HEADSET] = strdup("speaker-and-headphones");
backend_tag_table[SND_DEVICE_OUT_VOICE_SPEAKER_STEREO_AND_VOICE_ANC_FB_HEADSET] = strdup("speaker-and-headphones");
backend_tag_table[SND_DEVICE_OUT_VOICE_HEARING_AID] = strdup("hearing-aid");
+ backend_tag_table[SND_DEVICE_IN_VOICE_SPEAKER_MIC_HFP_MMSECNS] = strdup("bt-sco-mmsecns");
hw_interface_table[SND_DEVICE_OUT_HANDSET] = strdup("SLIMBUS_0_RX");
hw_interface_table[SND_DEVICE_OUT_SPEAKER] = strdup("SLIMBUS_0_RX");
@@ -2341,6 +2357,7 @@
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_MIC_HFP_MMSECNS] = 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");
hw_interface_table[SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC] = strdup("SLIMBUS_0_TX");
@@ -3103,6 +3120,7 @@
my_data->spkr_ch_map = NULL;
my_data->use_sprk_default_sample_rate = true;
my_data->fluence_in_voice_comm = false;
+ my_data->ec_car_state = false;
platform_reset_edid_info(my_data);
//set max volume step for voice call
@@ -3238,7 +3256,6 @@
my_data->hifi_audio = true;
set_platform_defaults(my_data);
-
/* Initialize ACDB ID's */
if (my_data->is_i2s_ext_modem && !is_auto_snd_card(snd_card_name))
platform_info_init(PLATFORM_INFO_XML_PATH_I2S, my_data, PLATFORM);
@@ -3525,7 +3542,8 @@
!strncmp(snd_card_name, "kona", strlen("kona")) ||
!strncmp(snd_card_name, "lito", strlen("lito")) ||
!strncmp(snd_card_name, "atoll", strlen("atoll")) ||
- !strncmp(snd_card_name, "trinket", strlen("trinket"))) {
+ !strncmp(snd_card_name, "trinket", strlen("trinket"))||
+ !strncmp(snd_card_name, "bengal", strlen("bengal"))) {
my_data->current_backend_cfg[DEFAULT_CODEC_BACKEND].bitwidth_mixer_ctl =
strdup("WSA_CDC_DMA_RX_0 Format");
my_data->current_backend_cfg[DEFAULT_CODEC_BACKEND].samplerate_mixer_ctl =
@@ -3553,6 +3571,13 @@
if (default_rx_backend)
free(default_rx_backend);
default_rx_backend = strdup("WSA_CDC_DMA_RX_0");
+ if(!strncmp(snd_card_name, "bengal", strlen("bengal"))) {
+ my_data->current_backend_cfg[DEFAULT_CODEC_BACKEND].bitwidth_mixer_ctl =
+ strdup("RX_CDC_DMA_RX_1 Format");
+ my_data->current_backend_cfg[DEFAULT_CODEC_BACKEND].samplerate_mixer_ctl =
+ strdup("RX_CDC_DMA_RX_1 SampleRate");
+ default_rx_backend = strdup("RX_CDC_DMA_RX_1");
+ }
} else if (!strncmp(snd_card_name, "sdm660", strlen("sdm660")) ||
!strncmp(snd_card_name, "sdm670", strlen("sdm670")) ||
!strncmp(snd_card_name, "qcs605", strlen("qcs605"))) {
@@ -3743,6 +3768,11 @@
my_data->adev->snd_card,
my_data->codec_version);
+ /* WCD9370 codec variant only supports Class AB power mode */
+ if (strstr(my_data->codec_variant, "WCD9370")) {
+ my_data->is_cls_ab_only_supported = true;
+ }
+
if (NATIVE_AUDIO_MODE_INVALID != platform_get_native_support()) {
/*
* Native playback is enabled from the UI.
@@ -4617,6 +4647,26 @@
platform_get_snd_device_name(snd_device), usbid, acdb_id);
}
+static int platform_get_fluence_mmsecns_config_data(struct audio_fluence_mmsecns_config *fluence_mmsecns_config)
+{
+ int ret = 0;
+
+ if (fluence_mmsecns_config == NULL) {
+ ALOGE("%s: Invalid fluence_mmsecns_config", __func__);
+ ret = -EINVAL;
+ goto done;
+ }
+
+ ALOGV("%s: topology_id = 0x%x, module_id = 0x%x, instance_id = 0x%x, param_id = 0x%x",
+ __func__, fluence_mmsecns_table.topology_id, fluence_mmsecns_table.module_id,
+ fluence_mmsecns_table.instance_id, fluence_mmsecns_table.param_id);
+ memcpy(fluence_mmsecns_config, &fluence_mmsecns_table,
+ sizeof(struct audio_fluence_mmsecns_config));
+
+done:
+ return ret;
+}
+
int platform_set_snd_device_acdb_id(snd_device_t snd_device, unsigned int acdb_id)
{
int ret = 0;
@@ -4658,6 +4708,18 @@
return ret;
}
+int platform_set_fluence_mmsecns_config(struct audio_fluence_mmsecns_config fluence_mmsecns_config)
+{
+ int ret = 0;
+
+ ALOGV("%s: topology_id = 0x%x, module_id = 0x%x, instance_id = 0x%x, param_id = 0x%x",
+ __func__, fluence_mmsecns_config.topology_id, fluence_mmsecns_config.module_id,
+ fluence_mmsecns_config.instance_id, fluence_mmsecns_config.param_id);
+ fluence_mmsecns_table = fluence_mmsecns_config;
+
+ return ret;
+}
+
int platform_set_acdb_metainfo_key(void *platform, char *name, int key)
{
struct meta_key_list *key_info;
@@ -7280,6 +7342,21 @@
return ret;
}
+bool platform_get_eccarstate(void *platform)
+{
+ struct platform_data *my_data = (struct platform_data *)platform;
+ return my_data->ec_car_state;
+}
+
+static int platform_set_eccarstate(struct platform_data *my_data, bool state)
+{
+ int ret = 0;
+ ALOGD("Setting EC Car state: %d", state);
+ my_data->ec_car_state = state;
+
+ return ret;
+}
+
static int update_external_device_status(struct platform_data *my_data,
char* event_name, bool status)
{
@@ -7308,6 +7385,141 @@
return ret;
}
+static int platform_set_hfp_zone(struct platform_data *my_data, uint32_t zone)
+{
+ int ret = 0;
+ int acdb_dev_id = -1;
+ struct audio_usecase *usecase = NULL;
+ struct audio_device *adev = (struct audio_device *)(my_data->adev);
+ struct audio_fluence_mmsecns_config fluence_mmsecns_config;
+ acdb_audio_cal_cfg_t cal = {0};
+ ALOGV("Setting HFP Zone: %d", zone);
+
+ /* Zone control is available only when EC car state is set. */
+ if (!platform_get_eccarstate((void *) my_data)) {
+ ALOGE("%s: EC State should be enabled first.", __func__);
+ return -EINVAL;
+ }
+
+ usecase = get_usecase_from_list(adev, audio_extn_hfp_get_usecase());
+ if (usecase == NULL) {
+ ALOGE("%s: Could not find the usecase.", __func__);
+ return -EINVAL;
+ }
+
+ acdb_dev_id = acdb_device_table[platform_get_spkr_prot_snd_device(usecase->in_snd_device)];
+ if (acdb_dev_id < 0) {
+ ALOGE("%s: Could not find acdb id for device(%d)",
+ __func__, usecase->in_snd_device);
+ return -EINVAL;
+ }
+
+ if (platform_get_fluence_mmsecns_config_data(&fluence_mmsecns_config) < 0) {
+ ALOGE("%s: Failed to get fluence mmsecns config data.", __func__);
+ return -EINVAL;
+ }
+
+ cal.acdb_dev_id = acdb_dev_id;
+ cal.app_type = DEFAULT_APP_TYPE_TX_PATH;
+ cal.topo_id = fluence_mmsecns_config.topology_id;
+ cal.module_id = fluence_mmsecns_config.module_id;
+ cal.instance_id = fluence_mmsecns_config.instance_id;
+ cal.param_id = fluence_mmsecns_config.param_id;
+
+ if (my_data->acdb_set_audio_cal) {
+ ret = my_data->acdb_set_audio_cal((void *)&cal, (void *)&zone, sizeof(uint32_t));
+ }
+
+ if (ret < 0)
+ ALOGE("%s: Could not set hfp zone calibration to zone %d",
+ __func__, zone);
+ else
+ ALOGV("%s: Successfully set hfp zone calibration to zone %d",
+ __func__, zone);
+
+ return ret;
+}
+
+static int platform_get_hfp_zone(struct platform_data *my_data)
+{
+ int ret = 0;
+ int acdb_dev_id = -1;
+ struct audio_usecase *usecase = NULL;
+ struct audio_device *adev = (struct audio_device *)(my_data->adev);
+ struct audio_fluence_mmsecns_config fluence_mmsecns_config;
+ acdb_audio_cal_cfg_t cal = {0};
+ uint8_t *dptr = NULL;
+ uint32_t zone = 0;
+ uint32_t param_len = MAX_SET_CAL_BYTE_SIZE;
+ ALOGV("Getting HFP Zone");
+
+ /* Zone control is available only when EC car state is set. */
+ if (!platform_get_eccarstate((void *) my_data)) {
+ ALOGE("%s: EC State should be enabled first.", __func__);
+ return -EINVAL;
+ }
+
+ usecase = get_usecase_from_list(adev, audio_extn_hfp_get_usecase());
+ if (usecase == NULL) {
+ ALOGE("%s: Could not find the usecase.", __func__);
+ return -EINVAL;
+ }
+
+ acdb_dev_id = acdb_device_table[platform_get_spkr_prot_snd_device(usecase->in_snd_device)];
+ if (acdb_dev_id < 0) {
+ ALOGE("%s: Could not find acdb id for device(%d)",
+ __func__, usecase->in_snd_device);
+ return -EINVAL;
+ }
+
+ if (platform_get_fluence_mmsecns_config_data(&fluence_mmsecns_config) < 0) {
+ ALOGE("%s: Failed to get fluence mmsecns config data.", __func__);
+ return -EINVAL;
+ }
+
+ cal.acdb_dev_id = acdb_dev_id;
+ cal.app_type = DEFAULT_APP_TYPE_TX_PATH;
+ cal.topo_id = fluence_mmsecns_config.topology_id;
+ cal.module_id = fluence_mmsecns_config.module_id;
+ cal.instance_id = fluence_mmsecns_config.instance_id;
+ cal.param_id = fluence_mmsecns_config.param_id;
+
+ dptr = (uint8_t*)calloc(param_len, sizeof(uint8_t));
+ if (!dptr) {
+ ALOGE("%s: Failed to allocate memory.", __func__);
+ return -ENOMEM;
+ }
+
+ if (my_data->acdb_get_audio_cal) {
+ ret = my_data->acdb_get_audio_cal((void *)&cal, (void *)dptr, ¶m_len);
+ if (ret == 0) {
+ if ((param_len == 0) || (param_len == MAX_SET_CAL_BYTE_SIZE)) {
+ ret = -EINVAL;
+ } else if (param_len > 16) {
+ /* returned data structure:
+ * u32 module_id
+ * u32 instance_id
+ * u32 parameter_id
+ * u32 payload_size
+ * u8 payload[payload_size]
+ */
+ zone = *(uint32_t *)(dptr + 16);
+ }
+ }
+ }
+
+ if (ret < 0)
+ ALOGE("%s: Could not get hfp zone calibration to zone %d",
+ __func__, zone);
+ else
+ ALOGV("%s: Successfully get hfp zone calibration to zone %d",
+ __func__, zone);
+
+ if (dptr)
+ free(dptr);
+ return zone;
+}
+
static int parse_audiocal_cfg(struct str_parms *parms, acdb_audio_cal_cfg_t *cal)
{
int err;
@@ -7713,6 +7925,18 @@
}
}
+ err = str_parms_get_str(parms, AUDIO_PARAMETER_KEY_EC_CAR_STATE,
+ value, len);
+ if (err >= 0) {
+ bool state = false;
+ if (!strncmp("true", value, sizeof("true"))) {
+ state = true;
+ ALOGD("%s: Value of EC CAR STATE set to true!", __func__);
+ }
+ str_parms_del(parms, AUDIO_PARAMETER_KEY_EC_CAR_STATE);
+ platform_set_eccarstate(my_data, state);
+ }
+
err = str_parms_get_str(parms, AUDIO_PARAMETER_KEY_RELOAD_ACDB,
value, len);
if (err >= 0) {
@@ -7794,6 +8018,18 @@
ALOGV("%s: max_mic_count %d", __func__, my_data->max_mic_count);
}
+ err = str_parms_get_str(parms, AUDIO_PARAMETER_KEY_HFP_ZONE,
+ value, len);
+ if (err >= 0) {
+ uint32_t zone = atoi(value);
+
+ str_parms_del(parms, AUDIO_PARAMETER_KEY_HFP_ZONE);
+ if (zone > 6)
+ ALOGE("%s: Only Zones 0 through 6 are supported", __func__);
+ else
+ platform_set_hfp_zone(my_data, zone);
+ }
+
platform_set_fluence_params(platform, parms, value, len);
/* handle audio calibration parameters */
@@ -8081,6 +8317,13 @@
str_parms_add_str(reply, AUDIO_PARAMETER_KEY_VOLUME_BOOST, value);
}
+ ret = str_parms_get_str(query, AUDIO_PARAMETER_KEY_EC_CAR_STATE,
+ value, sizeof(value));
+ if (ret >= 0) {
+ str_parms_add_str(reply, AUDIO_PARAMETER_KEY_EC_CAR_STATE,
+ my_data->ec_car_state? "true" : "false");
+ }
+
ret = str_parms_get_str(query, AUDIO_PARAMETER_KEY_DP_FOR_VOICE_USECASE,
value, sizeof(value));
@@ -8115,6 +8358,13 @@
}
}
+ ret = str_parms_get_str(query, AUDIO_PARAMETER_KEY_HFP_ZONE,
+ value, sizeof(value));
+ if (ret >= 0) {
+ snprintf(value, sizeof(value), "%d", platform_get_hfp_zone(my_data));
+ str_parms_add_str(reply, AUDIO_PARAMETER_KEY_HFP_ZONE, value);
+ }
+
/* Handle audio calibration keys */
get_audiocal(platform, query, reply);
native_audio_get_params(query, reply, value, sizeof(value));
@@ -8352,16 +8602,20 @@
}
/* Use client specified buffer size if mentioned */
- if ((info != NULL) &&
- (info->duration_us >= MIN_OFFLOAD_BUFFER_DURATION_MS) &&
- (info->duration_us <= MAX_OFFLOAD_BUFFER_DURATION_MS)) {
- duration_ms = info->duration_us / 1000;
- channel_count = audio_channel_count_from_in_mask(info->channel_mask);
+ if (property_get_bool("vendor.audio.offload.buffer.duration.enabled", false)) {
+ if ((info != NULL) &&
+ (info->duration_us >= MIN_OFFLOAD_BUFFER_DURATION_MS) &&
+ (info->duration_us <= MAX_OFFLOAD_BUFFER_DURATION_MS)) {
+ duration_ms = info->duration_us / 1000;
+ channel_count = audio_channel_count_from_in_mask(info->channel_mask);
- new_fragment_size = (duration_ms * info->sample_rate * channel_count * audio_bytes_per_sample(info->format)) / 1000;
- ALOGI("%s:: Overwriting offload buffer size with client requested size old:%d new:%d", __func__, fragment_size, new_fragment_size);
+ new_fragment_size = (duration_ms * info->sample_rate * channel_count *
+ audio_bytes_per_sample(info->format)) / 1000;
+ ALOGI("%s:: Overwriting offload buffer size with client requested size old:%d new:%d",
+ __func__, fragment_size, new_fragment_size);
- fragment_size = new_fragment_size;
+ fragment_size = new_fragment_size;
+ }
}
if (info != NULL) {
@@ -9230,13 +9484,18 @@
if (snd_device == SND_DEVICE_OUT_HEADPHONES || snd_device ==
SND_DEVICE_OUT_HEADPHONES_44_1 || snd_device == SND_DEVICE_OUT_HEADPHONES_HIFI_FILTER) {
- if (sample_rate > 48000 ||
- (bit_width >= 24 && (sample_rate == 48000 || sample_rate == 44100))) {
- ALOGI("%s: apply HPH HQ mode\n", __func__);
- audio_route_apply_and_update_path(adev->audio_route, "hph-highquality-mode");
+ if (my_data->is_cls_ab_only_supported) {
+ ALOGI("%s: apply CLS AB HPH power mode\n", __func__);
+ audio_route_apply_and_update_path(adev->audio_route, "hph-class-ab-mode");
} else {
- ALOGI("%s: apply HPH LP mode\n", __func__);
- audio_route_apply_and_update_path(adev->audio_route, "hph-lowpower-mode");
+ if (sample_rate > 48000 ||
+ (bit_width >= 24 && (sample_rate == 48000 || sample_rate == 44100))) {
+ ALOGI("%s: apply HPH HQ mode\n", __func__);
+ audio_route_apply_and_update_path(adev->audio_route, "hph-highquality-mode");
+ } else {
+ ALOGI("%s: apply HPH LP mode\n", __func__);
+ audio_route_apply_and_update_path(adev->audio_route, "hph-lowpower-mode");
+ }
}
}
diff --git a/hal/msm8974/platform.h b/hal/msm8974/platform.h
index f9d4198..f59f514 100644
--- a/hal/msm8974/platform.h
+++ b/hal/msm8974/platform.h
@@ -231,6 +231,7 @@
SND_DEVICE_IN_VOICE_SPEAKER_MIC,
SND_DEVICE_IN_VOICE_SPEAKER_MIC_SB,
SND_DEVICE_IN_VOICE_SPEAKER_MIC_HFP,
+ SND_DEVICE_IN_VOICE_SPEAKER_MIC_HFP_MMSECNS,
SND_DEVICE_IN_VOICE_HEADSET_MIC,
SND_DEVICE_IN_SPDIF,
SND_DEVICE_IN_HDMI_MIC,
@@ -643,6 +644,7 @@
#elif PLATFORM_AUTO
#define HFP_SCO_RX 29
#define HFP_ASM_RX_TX 36
+#define HFP_EXT_EC_REF_TX 1
#elif defined (PLATFORM_MSMFALCON) || defined (PLATFORM_MSM8937)
#define HFP_SCO_RX 17
#define HFP_ASM_RX_TX 18
@@ -694,6 +696,12 @@
#define TX_VOICE_FLUENCE_SM_SB 0x10F38
#define TX_VOICE_FLUENCE_MM_SB 0x10F39
+/* multi-mic surround ECNS zone control */
+#define TOPOLOGY_ID_MM_HFP_ECNS 0x1FFF0002
+#define MODULE_ID_MM_HFP_ECNS 0x10F3B
+#define PARAM_ID_MM_HFP_ZONE 0x109F0
+#define INSTANCE_ID_MM_HFP_ECNS 0x8000
+
#define LIB_CSD_CLIENT "libcsd-client.so"
#define AUDIO_MAKE_STRING_FROM_ENUM(X) { #X, X }
diff --git a/hal/platform_api.h b/hal/platform_api.h
index bb8c558..cd5f888 100644
--- a/hal/platform_api.h
+++ b/hal/platform_api.h
@@ -173,6 +173,7 @@
int platform_get_effect_config_data(snd_device_t snd_device,
struct audio_effect_config *effect_config,
effect_type_t effect_type);
+int platform_set_fluence_mmsecns_config(struct audio_fluence_mmsecns_config fluence_mmsecns_config);
int platform_get_snd_device_bit_width(snd_device_t snd_device);
int platform_set_acdb_metainfo_key(void *platform, char *name, int key);
void platform_release_acdb_metainfo_key(void *platform);
@@ -374,6 +375,7 @@
size_t *mic_count);
int platform_get_license_by_product(void *platform, const char* product_name, int *product_id, char* product_license);
+bool platform_get_eccarstate(void *platform);
int platform_get_haptics_pcm_device_id();
int platform_set_qtime(void *platform, int audio_pcm_device_id,
int haptic_pcm_device_id);
diff --git a/hal/platform_info.c b/hal/platform_info.c
index b3b17a7..5e25533 100644
--- a/hal/platform_info.c
+++ b/hal/platform_info.c
@@ -76,6 +76,7 @@
EXTERNAL_DEVICE_SPECIFIC,
CUSTOM_MTMX_IN_PARAMS,
CUSTOM_MTMX_PARAM_IN_CH_INFO,
+ MMSECNS,
} section_t;
typedef void (* section_process_fn)(const XML_Char **attr);
@@ -102,6 +103,7 @@
static void process_external_dev(const XML_Char **attr);
static void process_custom_mtmx_in_params(const XML_Char **attr);
static void process_custom_mtmx_param_in_ch_info(const XML_Char **attr);
+static void process_fluence_mmsecns(const XML_Char **attr);
static section_process_fn section_table[] = {
[ROOT] = process_root,
@@ -125,6 +127,7 @@
[EXTERNAL_DEVICE_SPECIFIC] = process_external_dev,
[CUSTOM_MTMX_IN_PARAMS] = process_custom_mtmx_in_params,
[CUSTOM_MTMX_PARAM_IN_CH_INFO] = process_custom_mtmx_param_in_ch_info,
+ [MMSECNS] = process_fluence_mmsecns,
};
static section_t section;
@@ -550,7 +553,6 @@
strtol((char *)attr[7], NULL, 0),
strtol((char *)attr[9], NULL, 0)};
-
if (platform_set_effect_config_data(index, effect_config, effect_type) < 0) {
ALOGE("%s: Effect = %d Device %s, MODULE/INSTANCE/PARAM ID %lu %lu %lu %lu was not set!",
__func__, effect_type, attr[1], strtol((char *)attr[3], NULL, 0),
@@ -575,6 +577,63 @@
return;
}
+static void process_fluence_mmsecns(const XML_Char **attr)
+{
+ int index;
+ struct audio_fluence_mmsecns_config fluence_mmsecns_config;
+
+ if (strcmp(attr[0], "name") != 0) {
+ ALOGE("%s: 'name' not found, no MODULE ID set!", __func__);
+ goto done;
+ }
+
+ index = platform_get_snd_device_index((char *)attr[1]);
+ if (index < 0) {
+ ALOGE("%s: Device %s in platform info xml not found, no MODULE ID set!",
+ __func__, attr[1]);
+ goto done;
+ }
+
+ if (strcmp(attr[2], "topology_id") != 0) {
+ ALOGE("%s: Device %s in platform info xml has no topology_id, no MODULE ID set!",
+ __func__, attr[2]);
+ goto done;
+ }
+
+ if (strcmp(attr[4], "module_id") != 0) {
+ ALOGE("%s: Device %s in platform info xml has no module_id, no MODULE ID set!",
+ __func__, attr[4]);
+ goto done;
+ }
+
+ if (strcmp(attr[6], "instance_id") != 0) {
+ ALOGE("%s: Device %s in platform info xml has no instance_id, no INSTANCE ID set!",
+ __func__, attr[6]);
+ goto done;
+ }
+
+ if (strcmp(attr[8], "param_id") != 0) {
+ ALOGE("%s: Device %s in platform info xml has no param_id, no PARAM ID set!",
+ __func__, attr[8]);
+ goto done;
+ }
+
+ fluence_mmsecns_config = (struct audio_fluence_mmsecns_config){strtol((char *)attr[3], NULL, 0),
+ strtol((char *)attr[5], NULL, 0),
+ strtol((char *)attr[7], NULL, 0),
+ strtol((char *)attr[9], NULL, 0)};
+
+
+ if (platform_set_fluence_mmsecns_config(fluence_mmsecns_config) < 0) {
+ ALOGE("%s: Device %s, TOPOLOGY/MODULE/INSTANCE/PARAM ID %lu %lu %lu %lu was not set!",
+ __func__, attr[1], strtol((char *)attr[3], NULL, 0), strtol((char *)attr[5], NULL, 0),
+ strtol((char *)attr[7], NULL, 0), strtol((char *)attr[9], NULL, 0));
+ goto done;
+ }
+
+done:
+ return;
+}
static void process_bit_width(const XML_Char **attr)
{
int index;
@@ -1238,7 +1297,7 @@
} else if (strcmp(tag_name, "snd_devices") == 0) {
section = SND_DEVICES;
} else if (strcmp(tag_name, "device") == 0) {
- if ((section != ACDB) && (section != AEC) && (section != NS) &&
+ if ((section != ACDB) && (section != AEC) && (section != NS) && (section != MMSECNS) &&
(section != BACKEND_NAME) && (section != BITWIDTH) &&
(section != INTERFACE_NAME) && (section != OPERATOR_SPECIFIC)) {
ALOGE("device tag only supported for acdb/backend names/bitwitdh/interface names");
@@ -1284,6 +1343,12 @@
return;
}
section = NS;
+ } else if (strcmp(tag_name, "mmsecns") == 0) {
+ if (section != MODULE) {
+ ALOGE("mmsecns tag only supported with MODULE section");
+ return;
+ }
+ section = MMSECNS;
} else if (strcmp(tag_name, "gain_level_map") == 0) {
if (section != GAIN_LEVEL_MAPPING) {
ALOGE("gain_level_map tag only supported with GAIN_LEVEL_MAPPING section");
@@ -1403,6 +1468,8 @@
section = MODULE;
} else if (strcmp(tag_name, "ns") == 0) {
section = MODULE;
+ } else if (strcmp(tag_name, "mmsecns") == 0) {
+ section = MODULE;
} else if (strcmp(tag_name, "pcm_ids") == 0) {
section = ROOT;
} else if (strcmp(tag_name, "backend_names") == 0) {
diff --git a/hal/voice_extn/voice_extn.c b/hal/voice_extn/voice_extn.c
index 7e78fa6..e2dc984 100644
--- a/hal/voice_extn/voice_extn.c
+++ b/hal/voice_extn/voice_extn.c
@@ -752,8 +752,9 @@
out->config.rate = out->sample_rate;
ALOGV("%s: mode=%d, usecase id=%d", __func__, adev->mode, out->usecase);
+ return 0;
}
- return 0;
+ return -ENOSYS;
}
diff --git a/post_proc/effect_api.c b/post_proc/effect_api.c
index 4101647..a07de20 100644
--- a/post_proc/effect_api.c
+++ b/post_proc/effect_api.c
@@ -515,11 +515,11 @@
eq->per_band_cfg[i].freq_millihertz = band_freq_list[i] * 1000;
eq->per_band_cfg[i].gain_millibels = band_gain_list[i] * 100;
eq->per_band_cfg[i].quality_factor = Q8_UNITY;
- }
-
#ifdef DTS_EAGLE
update_effects_node(PCM_DEV_ID, EFFECT_TYPE_EQ, EFFECT_SET_PARAM, EFFECT_NO_OP, EFFECT_NO_OP, i, band_gain_list[i] * 100);
#endif
+ }
+
}
static int eq_send_params(eff_mode_t mode, void *ctl, struct eq_params *eq,
diff --git a/post_proc/equalizer.c b/post_proc/equalizer.c
index ed16f12..a2e69b0 100644
--- a/post_proc/equalizer.c
+++ b/post_proc/equalizer.c
@@ -517,6 +517,8 @@
set_config(context, &context->config);
eq_ctxt->hw_acc_fd = -1;
+ for (int i = 0; i < NUM_EQ_BANDS; i++)
+ eq_ctxt->band_levels[i] = 0;
memset(&(eq_ctxt->offload_eq), 0, sizeof(struct eq_params));
offload_eq_set_preset(&(eq_ctxt->offload_eq), INVALID_PRESET);
enable_gcov();