Merge "configs: Set Multiple native true mode." into audio-hal.lnx.6.0
diff --git a/configs/atoll/atoll.mk b/configs/atoll/atoll.mk
index d4572ee..6e5a786 100644
--- a/configs/atoll/atoll.mk
+++ b/configs/atoll/atoll.mk
@@ -69,6 +69,87 @@
AUDIO_FEATURE_ENABLED_BATTERY_LISTENER := true
##AUDIO_FEATURE_FLAGS
+AUDIO_HARDWARE := audio.a2dp.default
+AUDIO_HARDWARE += audio.usb.default
+AUDIO_HARDWARE += audio.r_submix.default
+AUDIO_HARDWARE += audio.primary.atoll
+
+#HAL Wrapper
+AUDIO_WRAPPER := libqahw
+AUDIO_WRAPPER += libqahwwrapper
+
+#HAL Test app
+AUDIO_HAL_TEST_APPS := hal_play_test
+AUDIO_HAL_TEST_APPS += hal_rec_test
+
+PRODUCT_PACKAGES += $(AUDIO_HARDWARE)
+PRODUCT_PACKAGES += $(AUDIO_WRAPPER)
+PRODUCT_PACKAGES += $(AUDIO_HAL_TEST_APPS)
+
+ifeq ($(AUDIO_FEATURE_ENABLED_DLKM),true)
+BOARD_VENDOR_KERNEL_MODULES := \
+ $(KERNEL_MODULES_OUT)/audio_apr.ko \
+ $(KERNEL_MODULES_OUT)/audio_q6_pdr.ko \
+ $(KERNEL_MODULES_OUT)/audio_q6_notifier.ko \
+ $(KERNEL_MODULES_OUT)/audio_adsp_loader.ko \
+ $(KERNEL_MODULES_OUT)/audio_q6.ko \
+ $(KERNEL_MODULES_OUT)/audio_usf.ko \
+ $(KERNEL_MODULES_OUT)/audio_pinctrl_lpi.ko \
+ $(KERNEL_MODULES_OUT)/audio_swr.ko \
+ $(KERNEL_MODULES_OUT)/audio_wcd_core.ko \
+ $(KERNEL_MODULES_OUT)/audio_swr_ctrl.ko \
+ $(KERNEL_MODULES_OUT)/audio_wsa881x.ko \
+ $(KERNEL_MODULES_OUT)/audio_platform.ko \
+ $(KERNEL_MODULES_OUT)/audio_hdmi.ko \
+ $(KERNEL_MODULES_OUT)/audio_stub.ko \
+ $(KERNEL_MODULES_OUT)/audio_wcd9xxx.ko \
+ $(KERNEL_MODULES_OUT)/audio_mbhc.ko \
+ $(KERNEL_MODULES_OUT)/audio_wcd938x.ko \
+ $(KERNEL_MODULES_OUT)/audio_wcd938x_slave.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_atoll.ko \
+ $(KERNEL_MODULES_OUT)/audio_snd_event.ko
+endif
+
+#Audio DLKM
+AUDIO_DLKM := audio_apr.ko
+AUDIO_DLKM += audio_q6_pdr.ko
+AUDIO_DLKM += audio_q6_notifier.ko
+AUDIO_DLKM += audio_adsp_loader.ko
+AUDIO_DLKM += audio_q6.ko
+AUDIO_DLKM += audio_usf.ko
+AUDIO_DLKM += audio_pinctrl_wcd.ko
+AUDIO_DLKM += audio_swr.ko
+AUDIO_DLKM += audio_wcd_core.ko
+AUDIO_DLKM += audio_swr_ctrl.ko
+AUDIO_DLKM += audio_wsa881x.ko
+AUDIO_DLKM += audio_platform.ko
+AUDIO_DLKM += audio_hdmi.ko
+AUDIO_DLKM += audio_stub.ko
+AUDIO_DLKM += audio_wcd9xxx.ko
+AUDIO_DLKM += audio_mbhc.ko
+AUDIO_DLKM += audio_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_atoll.ko
+AUDIO_DLKM += audio_snd_event.ko
+
+PRODUCT_PACKAGES += $(AUDIO_DLKM)
+
#Audio Specific device overlays
DEVICE_PACKAGE_OVERLAYS += vendor/qcom/opensource/audio-hal/primary-hal/configs/common/overlay
@@ -115,6 +196,19 @@
persist.vendor.audio.fluence.voicerec=false\
persist.vendor.audio.fluence.speaker=true
+#
+#snapdragon value add features
+#
+PRODUCT_PROPERTY_OVERRIDES += \
+ro.qc.sdk.audio.ssr=false
+
+##fluencetype can be "fluence" or "fluencepro" or "none"
+PRODUCT_PROPERTY_OVERRIDES += \
+ro.qc.sdk.audio.fluencetype=none\
+persist.audio.fluence.voicecall=true\
+persist.audio.fluence.voicerec=false\
+persist.audio.fluence.speaker=true
+
##speaker protection v3 switch and ADSP AFE API version
PRODUCT_PROPERTY_OVERRIDES += \
persist.vendor.audio.spv3.enable=true\
diff --git a/configs/kona/audio_configs.xml b/configs/kona/audio_configs.xml
index 8c24bb2..3c13e33 100644
--- a/configs/kona/audio_configs.xml
+++ b/configs/kona/audio_configs.xml
@@ -31,7 +31,7 @@
<!-- APM Configs -->
<property name="audio.deep_buffer.media" value="true"/>
<property name="audio.offload.disable" value="false"/>
- <property name="audio.offload.min.duration.secs" value="60"/>
+ <property name="audio.offload.min.duration.secs" value="30"/>
<property name="audio.offload.video" value="true"/>
<property name="persist.vendor.audio.sva.conc.enabled" value="false"/>
<property name="persist.vendor.audio.va_concurrency_enabled" value="false"/>
@@ -53,7 +53,7 @@
<!-- AV Configs -->
<property name="vendor.audio.use.sw.alac.decoder" value="true"/>
<property name="vendor.audio.use.sw.ape.decoder" value="true"/>
- <property name="vendor.audio.use.sw.mpegh.decoder" value="false"/>
+ <property name="vendor.audio.use.sw.mpegh.decoder" value="true"/>
<property name="vendor.audio.flac.sw.decoder.24bit" value="true"/>
<property name="vendor.audio.hw.aac.encoder" value="true"/>
<flag name="aac_adts_offload_enabled" value="true" />
@@ -70,6 +70,7 @@
<flag name="a2dp_offload_enabled" value="true" />
<flag name="anc_headset_enabled" value="true" />
<flag name="audiosphere_enabled" value="true" />
+ <flag name="audio_zoom_enabled" value="false" />
<flag name="battery_listener_enabled" value="true" />
<flag name="compress_capture_enabled" value="false" />
<flag name="compress_in_enabled" value="true" />
diff --git a/configs/kona/audio_configs_stock.xml b/configs/kona/audio_configs_stock.xml
index b9ecf45..e26ef14 100644
--- a/configs/kona/audio_configs_stock.xml
+++ b/configs/kona/audio_configs_stock.xml
@@ -32,6 +32,7 @@
<flag name="a2dp_offload_enabled" value="true" />
<flag name="afe_proxy_enabled" value="false" />
<flag name="anc_headset_enabled" value="false" />
+ <flag name="audio_zoom_enabled" value="false" />
<flag name="audiosphere_enabled" value="false" />
<flag name="battery_listener_enabled" value="false" />
<flag name="compress_capture_enabled" value="false" />
diff --git a/configs/kona/audio_effects.xml b/configs/kona/audio_effects.xml
index 7c0cd22..15adc92 100644
--- a/configs/kona/audio_effects.xml
+++ b/configs/kona/audio_effects.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!--- Copyright (c) 2018, The Linux Foundation. All rights reserved. -->
+<!--- Copyright (c) 2018-2019, The Linux Foundation. All rights reserved. -->
<!--- -->
<!--- Redistribution and use in source and binary forms, with or without -->
<!--- modification, are permitted provided that the following conditions are -->
@@ -30,9 +30,6 @@
<libraries>
<library name="bundle" path="libbundlewrapper.so"/>
<library name="reverb" path="libreverbwrapper.so"/>
- <library name="qcbassboost" path="libqcbassboost.so"/>
- <library name="qcvirt" path="libqcvirt.so"/>
- <library name="qcreverb" path="libqcreverb.so"/>
<library name="visualizer_sw" path="libvisualizer.so"/>
<library name="visualizer_hw" path="libqcomvisualizer.so"/>
<library name="downmix" path="libdownmix.so"/>
@@ -47,11 +44,11 @@
</libraries>
<effects>
<effectProxy name="bassboost" library="proxy" uuid="14804144-a5ee-4d24-aa88-0002a5d5c51b">
- <libsw library="qcbassboost" uuid="23aca180-44bd-11e2-bcfd-0800200c9a66"/>
+ <libsw library="bundle" uuid="8631f300-72e2-11df-b57e-0002a5d5c51b"/>
<libhw library="offload_bundle" uuid="2c4a8c24-1581-487f-94f6-0002a5d5c51b"/>
</effectProxy>
<effectProxy name="virtualizer" library="proxy" uuid="d3467faa-acc7-4d34-acaf-0002a5d5c51b">
- <libsw library="qcvirt" uuid="e6c98a16-22a3-11e2-b87b-f23c91aec05e"/>
+ <libsw library="bundle" uuid="1d4033c0-8557-11df-9f2d-0002a5d5c51b"/>
<libhw library="offload_bundle" uuid="509a4498-561a-4bea-b3b1-0002a5d5c51b"/>
</effectProxy>
<effectProxy name="equalizer" library="proxy" uuid="c8e70ecd-48ca-456e-8a4f-0002a5d5c51b">
@@ -60,19 +57,19 @@
</effectProxy>
<effect name="volume" library="bundle" uuid="119341a0-8469-11df-81f9-0002a5d5c51b"/>
<effectProxy name="reverb_env_aux" library="proxy" uuid="48404ac9-d202-4ccc-bf84-0002a5d5c51b">
- <libsw library="qcreverb" uuid="a8c1e5f3-293d-43cd-95ec-d5e26c02e217"/>
+ <libsw library="reverb" uuid="4a387fc0-8ab3-11df-8bad-0002a5d5c51b"/>
<libhw library="offload_bundle" uuid="79a18026-18fd-4185-8233-0002a5d5c51b"/>
</effectProxy>
<effectProxy name="reverb_env_ins" library="proxy" uuid="b707403a-a1c1-4291-9573-0002a5d5c51b">
- <libsw library="qcreverb" uuid="791fff8b-8129-4655-83a4-59bc61034c3a"/>
+ <libsw library="reverb" uuid="c7a511a0-a3bb-11df-860e-0002a5d5c51b"/>
<libhw library="offload_bundle" uuid="eb64ea04-973b-43d2-8f5e-0002a5d5c51b"/>
</effectProxy>
<effectProxy name="reverb_pre_aux" library="proxy" uuid="1b78f587-6d1c-422e-8b84-0002a5d5c51b">
- <libsw library="qcreverb" uuid="53ef1db5-c0c0-445b-b060-e34d20ebb70a"/>
+ <libsw library="reverb" uuid="f29a1400-a3bb-11df-8ddc-0002a5d5c51b"/>
<libhw library="offload_bundle" uuid="6987be09-b142-4b41-9056-0002a5d5c51b"/>
</effectProxy>
<effectProxy name="reverb_pre_ins" library="proxy" uuid="f3e178d2-ebcb-408e-8357-0002a5d5c51b">
- <libsw library="qcreverb" uuid="b08a0e38-22a5-11e2-b87b-f23c91aec05e"/>
+ <libsw library="reverb" uuid="172cdf00-a3bc-11df-a72f-0002a5d5c51b"/>
<libhw library="offload_bundle" uuid="aa2bebf6-47cf-4613-9bca-0002a5d5c51b"/>
</effectProxy>
<effectProxy name="visualizer" library="proxy" uuid="1d0a1a53-7d5d-48f2-8e71-27fbd10d842c">
diff --git a/configs/kona/audio_platform_info.xml b/configs/kona/audio_platform_info.xml
index 09cb923..5b12029 100644
--- a/configs/kona/audio_platform_info.xml
+++ b/configs/kona/audio_platform_info.xml
@@ -56,10 +56,10 @@
<device name="SND_DEVICE_IN_SPEAKER_MIC_AEC_NS" module_id="0x10F31" instance_id="0x0" param_id="0x10EAF" param_value="0x01"/>
<device name="SND_DEVICE_IN_HANDSET_DMIC_AEC_NS" module_id="0x10F33" instance_id="0x0" param_id="0x10EAF" param_value="0x01"/>
<device name="SND_DEVICE_IN_HANDSET_MIC_AEC_NS" module_id="0x10F31" instance_id="0x0" param_id="0x10EAF" param_value="0x01"/>
- <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_SB" module_id="0x10F33" instance_id="0x0" param_id="0x10EAF" param_value="0x01"/>
- <device name="SND_DEVICE_IN_SPEAKER_MIC_AEC_NS_SB" module_id="0x10F31" instance_id="0x0" param_id="0x10EAF" param_value="0x01"/>
- <device name="SND_DEVICE_IN_HANDSET_DMIC_AEC_NS_SB" module_id="0x10F33" instance_id="0x0" param_id="0x10EAF" param_value="0x01"/>
- <device name="SND_DEVICE_IN_HANDSET_MIC_AEC_NS_SB" module_id="0x10F31" instance_id="0x0" param_id="0x10EAF" param_value="0x01"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_SB" module_id="0x10F39" instance_id="0x8000" param_id="0x10EAF" param_value="0x01"/>
+ <device name="SND_DEVICE_IN_SPEAKER_MIC_AEC_NS_SB" module_id="0x10F38" instance_id="0x8000" param_id="0x10EAF" param_value="0x01"/>
+ <device name="SND_DEVICE_IN_HANDSET_DMIC_AEC_NS_SB" module_id="0x10F39" instance_id="0x8000" param_id="0x10EAF" param_value="0x01"/>
+ <device name="SND_DEVICE_IN_HANDSET_MIC_AEC_NS_SB" module_id="0x10F38" instance_id="0x8000" param_id="0x10EAF" param_value="0x01"/>
</aec>
<ns>
<device name="SND_DEVICE_IN_SPEAKER_TMIC_AEC_NS" module_id="0x10F35" instance_id="0x0" param_id="0x10EAF" param_value="0x02"/>
@@ -68,10 +68,10 @@
<device name="SND_DEVICE_IN_SPEAKER_MIC_AEC_NS" module_id="0x10F31" instance_id="0x0" param_id="0x10EAF" param_value="0x02"/>
<device name="SND_DEVICE_IN_HANDSET_DMIC_AEC_NS" module_id="0x10F33" instance_id="0x0" param_id="0x10EAF" param_value="0x02"/>
<device name="SND_DEVICE_IN_HANDSET_MIC_AEC_NS" module_id="0x10F31" instance_id="0x0" param_id="0x10EAF" param_value="0x02"/>
- <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_SB" module_id="0x10F33" instance_id="0x0" param_id="0x10EAF" param_value="0x02"/>
- <device name="SND_DEVICE_IN_SPEAKER_MIC_AEC_NS_SB" module_id="0x10F31" instance_id="0x0" param_id="0x10EAF" param_value="0x02"/>
- <device name="SND_DEVICE_IN_HANDSET_DMIC_AEC_NS_SB" module_id="0x10F33" instance_id="0x0" param_id="0x10EAF" param_value="0x02"/>
- <device name="SND_DEVICE_IN_HANDSET_MIC_AEC_NS_SB" module_id="0x10F31" instance_id="0x0" param_id="0x10EAF" param_value="0x02"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_SB" module_id="0x10F39" instance_id="0x8000" param_id="0x10EAF" param_value="0x02"/>
+ <device name="SND_DEVICE_IN_SPEAKER_MIC_AEC_NS_SB" module_id="0x10F38" instance_id="0x8000" param_id="0x10EAF" param_value="0x02"/>
+ <device name="SND_DEVICE_IN_HANDSET_DMIC_AEC_NS_SB" module_id="0x10F39" instance_id="0x8000" param_id="0x10EAF" param_value="0x02"/>
+ <device name="SND_DEVICE_IN_HANDSET_MIC_AEC_NS_SB" module_id="0x10F38" instance_id="0x8000" param_id="0x10EAF" param_value="0x02"/>
</ns>
</module_ids>
diff --git a/configs/kona/audio_platform_info_intcodec.xml b/configs/kona/audio_platform_info_intcodec.xml
index a285226..2aa4b27 100644
--- a/configs/kona/audio_platform_info_intcodec.xml
+++ b/configs/kona/audio_platform_info_intcodec.xml
@@ -32,6 +32,34 @@
<device name="AUDIO_DEVICE_IN_BUILTIN_MIC" interface="TX_CDC_DMA_TX_3" codec_type="internal"/>
<device name="AUDIO_DEVICE_IN_BACK_MIC" interface="TX_CDC_DMA_TX_3" codec_type="internal"/>
</interface_names>
+
+ <module_ids>
+ <aec>
+ <device name="SND_DEVICE_IN_SPEAKER_TMIC_AEC_NS" module_id="0x10F35" instance_id="0x0" param_id="0x10EAF" param_value="0x01"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_BROADSIDE" module_id="0x10F34" instance_id="0x0" param_id="0x10EAF" param_value="0x01"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS" module_id="0x10F33" instance_id="0x0" param_id="0x10EAF" param_value="0x01"/>
+ <device name="SND_DEVICE_IN_SPEAKER_MIC_AEC_NS" module_id="0x10F31" instance_id="0x0" param_id="0x10EAF" param_value="0x01"/>
+ <device name="SND_DEVICE_IN_HANDSET_DMIC_AEC_NS" module_id="0x10F33" instance_id="0x0" param_id="0x10EAF" param_value="0x01"/>
+ <device name="SND_DEVICE_IN_HANDSET_MIC_AEC_NS" module_id="0x10F31" instance_id="0x0" param_id="0x10EAF" param_value="0x01"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_SB" module_id="0x10F39" instance_id="0x8000" param_id="0x10EAF" param_value="0x01"/>
+ <device name="SND_DEVICE_IN_SPEAKER_MIC_AEC_NS_SB" module_id="0x10F38" instance_id="0x8000" param_id="0x10EAF" param_value="0x01"/>
+ <device name="SND_DEVICE_IN_HANDSET_DMIC_AEC_NS_SB" module_id="0x10F39" instance_id="0x8000" param_id="0x10EAF" param_value="0x01"/>
+ <device name="SND_DEVICE_IN_HANDSET_MIC_AEC_NS_SB" module_id="0x10F38" instance_id="0x8000" param_id="0x10EAF" param_value="0x01"/>
+ </aec>
+ <ns>
+ <device name="SND_DEVICE_IN_SPEAKER_TMIC_AEC_NS" module_id="0x10F35" instance_id="0x0" param_id="0x10EAF" param_value="0x02"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_BROADSIDE" module_id="0x10F34" instance_id="0x0" param_id="0x10EAF" param_value="0x02"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS" module_id="0x10F33" instance_id="0x0" param_id="0x10EAF" param_value="0x02"/>
+ <device name="SND_DEVICE_IN_SPEAKER_MIC_AEC_NS" module_id="0x10F31" instance_id="0x0" param_id="0x10EAF" param_value="0x02"/>
+ <device name="SND_DEVICE_IN_HANDSET_DMIC_AEC_NS" module_id="0x10F33" instance_id="0x0" param_id="0x10EAF" param_value="0x02"/>
+ <device name="SND_DEVICE_IN_HANDSET_MIC_AEC_NS" module_id="0x10F31" instance_id="0x0" param_id="0x10EAF" param_value="0x02"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_SB" module_id="0x10F39" instance_id="0x8000" param_id="0x10EAF" param_value="0x02"/>
+ <device name="SND_DEVICE_IN_SPEAKER_MIC_AEC_NS_SB" module_id="0x10F38" instance_id="0x8000" param_id="0x10EAF" param_value="0x02"/>
+ <device name="SND_DEVICE_IN_HANDSET_DMIC_AEC_NS_SB" module_id="0x10F39" instance_id="0x8000" param_id="0x10EAF" param_value="0x02"/>
+ <device name="SND_DEVICE_IN_HANDSET_MIC_AEC_NS_SB" module_id="0x10F38" instance_id="0x8000" param_id="0x10EAF" param_value="0x02"/>
+ </ns>
+ </module_ids>
+
<pcm_ids>
<usecase name="USECASE_AUDIO_PLAYBACK_LOW_LATENCY" type="out" id="9"/>
<usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD" type="out" id="7"/>
@@ -78,6 +106,13 @@
<param key="hfp_pcm_dev_id" value="39"/>
<param key="input_mic_max_count" value="4"/>
</config_params>
+ <gain_db_to_level_mapping>
+ <gain_level_map db="-59" level="5"/>
+ <gain_level_map db="-17.4" level="4"/>
+ <gain_level_map db="-13.8" level="3"/>
+ <gain_level_map db="-10.2" level="2"/>
+ <gain_level_map db="0" level="1"/>
+ </gain_db_to_level_mapping>
<acdb_ids>
<device name="SND_DEVICE_OUT_SPEAKER" acdb_id="15"/>
<device name="SND_DEVICE_OUT_SPEAKER_REVERSE" acdb_id="15"/>
@@ -100,7 +135,7 @@
<device name="SND_DEVICE_IN_UNPROCESSED_THREE_MIC" acdb_id="145"/>
<device name="SND_DEVICE_IN_UNPROCESSED_QUAD_MIC" acdb_id="146"/>
<device name="SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC" acdb_id="147"/>
- <device name="SND_DEVICE_IN_HANDSET_GENERIC_QMIC" acdb_id="157"/>
+ <device name="SND_DEVICE_IN_HANDSET_GENERIC_QMIC" acdb_id="191"/>
</acdb_ids>
<backend_names>
<device name="SND_DEVICE_OUT_HEADPHONES" backend="headphones" interface="RX_CDC_DMA_RX_0"/>
diff --git a/configs/kona/audio_platform_info_qrd.xml b/configs/kona/audio_platform_info_qrd.xml
index a1f6a57..7ff0f17 100644
--- a/configs/kona/audio_platform_info_qrd.xml
+++ b/configs/kona/audio_platform_info_qrd.xml
@@ -32,6 +32,32 @@
<device name="AUDIO_DEVICE_IN_BUILTIN_MIC" interface="TX_CDC_DMA_TX_3" codec_type="internal"/>
<device name="AUDIO_DEVICE_IN_BACK_MIC" interface="TX_CDC_DMA_TX_3" codec_type="internal"/>
</interface_names>
+ <module_ids>
+ <aec>
+ <device name="SND_DEVICE_IN_SPEAKER_TMIC_AEC_NS" module_id="0x10F35" instance_id="0x0" param_id="0x10EAF" param_value="0x01"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_BROADSIDE" module_id="0x10F34" instance_id="0x0" param_id="0x10EAF" param_value="0x01"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS" module_id="0x10F33" instance_id="0x0" param_id="0x10EAF" param_value="0x01"/>
+ <device name="SND_DEVICE_IN_SPEAKER_MIC_AEC_NS" module_id="0x10F31" instance_id="0x0" param_id="0x10EAF" param_value="0x01"/>
+ <device name="SND_DEVICE_IN_HANDSET_DMIC_AEC_NS" module_id="0x10F33" instance_id="0x0" param_id="0x10EAF" param_value="0x01"/>
+ <device name="SND_DEVICE_IN_HANDSET_MIC_AEC_NS" module_id="0x10F31" instance_id="0x0" param_id="0x10EAF" param_value="0x01"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_SB" module_id="0x10F39" instance_id="0x8000" param_id="0x10EAF" param_value="0x01"/>
+ <device name="SND_DEVICE_IN_SPEAKER_MIC_AEC_NS_SB" module_id="0x10F38" instance_id="0x8000" param_id="0x10EAF" param_value="0x01"/>
+ <device name="SND_DEVICE_IN_HANDSET_DMIC_AEC_NS_SB" module_id="0x10F39" instance_id="0x8000" param_id="0x10EAF" param_value="0x01"/>
+ <device name="SND_DEVICE_IN_HANDSET_MIC_AEC_NS_SB" module_id="0x10F38" instance_id="0x8000" param_id="0x10EAF" param_value="0x01"/>
+ </aec>
+ <ns>
+ <device name="SND_DEVICE_IN_SPEAKER_TMIC_AEC_NS" module_id="0x10F35" instance_id="0x0" param_id="0x10EAF" param_value="0x02"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_BROADSIDE" module_id="0x10F34" instance_id="0x0" param_id="0x10EAF" param_value="0x02"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS" module_id="0x10F33" instance_id="0x0" param_id="0x10EAF" param_value="0x02"/>
+ <device name="SND_DEVICE_IN_SPEAKER_MIC_AEC_NS" module_id="0x10F31" instance_id="0x0" param_id="0x10EAF" param_value="0x02"/>
+ <device name="SND_DEVICE_IN_HANDSET_DMIC_AEC_NS" module_id="0x10F33" instance_id="0x0" param_id="0x10EAF" param_value="0x02"/>
+ <device name="SND_DEVICE_IN_HANDSET_MIC_AEC_NS" module_id="0x10F31" instance_id="0x0" param_id="0x10EAF" param_value="0x02"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_SB" module_id="0x10F39" instance_id="0x8000" param_id="0x10EAF" param_value="0x02"/>
+ <device name="SND_DEVICE_IN_SPEAKER_MIC_AEC_NS_SB" module_id="0x10F38" instance_id="0x8000" param_id="0x10EAF" param_value="0x02"/>
+ <device name="SND_DEVICE_IN_HANDSET_DMIC_AEC_NS_SB" module_id="0x10F39" instance_id="0x8000" param_id="0x10EAF" param_value="0x02"/>
+ <device name="SND_DEVICE_IN_HANDSET_MIC_AEC_NS_SB" module_id="0x10F38" instance_id="0x8000" param_id="0x10EAF" param_value="0x02"/>
+ </ns>
+ </module_ids>
<pcm_ids>
<usecase name="USECASE_AUDIO_PLAYBACK_LOW_LATENCY" type="out" id="9"/>
<usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD" type="out" id="7"/>
@@ -71,12 +97,19 @@
<!-- In the below value string, the value indicates default mono -->
<!-- speaker. It can be set to either left or right -->
<param key="mono_speaker" value="right"/>
- <param key="spkr_1_tz_name" value="wsatz.13"/>
+ <param key="spkr_2_tz_name" value="wsatz.14"/>
<param key="true_32_bit" value="true"/>
<param key="native_audio_mode" value="multiple_mix_dsp"/>
<param key="hfp_pcm_dev_id" value="39"/>
- <param key="input_mic_max_count" value="2"/>
+ <param key="input_mic_max_count" value="4"/>
</config_params>
+ <gain_db_to_level_mapping>
+ <gain_level_map db="-59" level="5"/>
+ <gain_level_map db="-17.4" level="4"/>
+ <gain_level_map db="-13.8" level="3"/>
+ <gain_level_map db="-10.2" level="2"/>
+ <gain_level_map db="0" level="1"/>
+ </gain_db_to_level_mapping>
<acdb_ids>
<device name="SND_DEVICE_OUT_SPEAKER" acdb_id="15"/>
<device name="SND_DEVICE_OUT_SPEAKER_REVERSE" acdb_id="15"/>
@@ -99,7 +132,7 @@
<device name="SND_DEVICE_IN_UNPROCESSED_THREE_MIC" acdb_id="145"/>
<device name="SND_DEVICE_IN_UNPROCESSED_QUAD_MIC" acdb_id="146"/>
<device name="SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC" acdb_id="147"/>
- <device name="SND_DEVICE_IN_HANDSET_GENERIC_QMIC" acdb_id="157"/>
+ <device name="SND_DEVICE_IN_HANDSET_GENERIC_QMIC" acdb_id="191"/>
</acdb_ids>
<module_ids>
<aec>
diff --git a/configs/kona/audio_policy_configuration.xml b/configs/kona/audio_policy_configuration.xml
index 50920b3..657b5d1 100644
--- a/configs/kona/audio_policy_configuration.xml
+++ b/configs/kona/audio_policy_configuration.xml
@@ -173,11 +173,6 @@
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000"
channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK"/>
</mixPort>
- <mixPort name="surround_sound" role="sink">
- <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
- samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_INDEX_MASK_3,AUDIO_CHANNEL_INDEX_MASK_4,AUDIO_CHANNEL_IN_5POINT1,AUDIO_CHANNEL_INDEX_MASK_6"/>
- </mixPort>
<mixPort name="usb_surround_sound" role="sink">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,88200,96000,176400,192000"
@@ -263,17 +258,17 @@
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
</devicePort>
<devicePort tagName="BT A2DP Out" type="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP" role="sink"
- encodedFormats="AUDIO_FORMAT_SBC AUDIO_FORMAT_AAC AUDIO_FORMAT_APTX AUDIO_FORMAT_APTX_HD AUDIO_FORMAT_LDAC AUDIO_FORMAT_CELT AUDIO_FORMAT_APTX_ADAPTIVE">
+ encodedFormats="AUDIO_FORMAT_SBC AUDIO_FORMAT_AAC AUDIO_FORMAT_APTX AUDIO_FORMAT_APTX_HD AUDIO_FORMAT_LDAC AUDIO_FORMAT_CELT AUDIO_FORMAT_APTX_ADAPTIVE AUDIO_FORMAT_APTX_TWSP">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</devicePort>
<devicePort tagName="BT A2DP Headphones" type="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES" role="sink"
- encodedFormats="AUDIO_FORMAT_SBC AUDIO_FORMAT_AAC AUDIO_FORMAT_APTX AUDIO_FORMAT_APTX_HD AUDIO_FORMAT_LDAC AUDIO_FORMAT_CELT AUDIO_FORMAT_APTX_ADAPTIVE">
+ encodedFormats="AUDIO_FORMAT_SBC AUDIO_FORMAT_AAC AUDIO_FORMAT_APTX AUDIO_FORMAT_APTX_HD AUDIO_FORMAT_LDAC AUDIO_FORMAT_CELT AUDIO_FORMAT_APTX_ADAPTIVE AUDIO_FORMAT_APTX_TWSP">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</devicePort>
<devicePort tagName="BT A2DP Speaker" type="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER" role="sink"
- encodedFormats="AUDIO_FORMAT_SBC AUDIO_FORMAT_AAC AUDIO_FORMAT_APTX AUDIO_FORMAT_APTX_HD AUDIO_FORMAT_LDAC AUDIO_FORMAT_CELT AUDIO_FORMAT_APTX_ADAPTIVE">
+ encodedFormats="AUDIO_FORMAT_SBC AUDIO_FORMAT_AAC AUDIO_FORMAT_APTX AUDIO_FORMAT_APTX_HD AUDIO_FORMAT_LDAC AUDIO_FORMAT_CELT AUDIO_FORMAT_APTX_ADAPTIVE AUDIO_FORMAT_APTX_TWSP">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</devicePort>
@@ -374,8 +369,6 @@
sources="Telephony Rx"/>
<route type="mix" sink="primary input"
sources="Wired Headset Mic,BT SCO Headset Mic,FM Tuner,USB Device In,USB Headset In,Telephony Rx"/>
- <route type="mix" sink="surround_sound"
- sources="Built-In Mic,Built-In Back Mic"/>
<route type="mix" sink="usb_surround_sound"
sources="USB Device In,USB Headset In"/>
<route type="mix" sink="record_24"
diff --git a/configs/kona/audio_tuning_mixer.txt b/configs/kona/audio_tuning_mixer.txt
new file mode 100644
index 0000000..474f18b
--- /dev/null
+++ b/configs/kona/audio_tuning_mixer.txt
@@ -0,0 +1,67 @@
+# Copyright (c) 2019, The Linux Foundation. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following
+# disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of The Linux Foundation nor the names of its
+# contributors may be used to endorse or promote products derived
+# from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#RAS_TEST_SPKR_PHONE_SPKR_STEREO
+acdb_dev_id:136
+!Playback
+Rxdevice:0
+
+enable
+WSA_CDC_DMA_RX_0 Channels:Two
+WSA RX0 MUX:AIF1_PB
+WSA RX1 MUX:AIF1_PB
+WSA_RX0 INP0:RX0
+WSA_RX1 INP0:RX1
+WSA_COMP1 Switch:1
+WSA_COMP2 Switch:1
+SpkrLeft COMP Switch:1
+SpkrRight COMP Switch:1
+SpkrLeft BOOST Switch:1
+SpkrRight BOOST Switch:1
+SpkrLeft VISENSE Switch:1
+SpkrRight VISENSE Switch:1
+SpkrLeft SWR DAC_Port Switch:1
+SpkrRight SWR DAC_Port Switch:1
+WSA_RX0 Digital Volume:62
+WSA_RX1 Digital Volume:62
+WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia1:1
+
+disable
+WSA RX0 MUX:ZERO
+WSA RX1 MUX:ZERO
+WSA_RX0 INP0:ZERO
+WSA_RX1 INP0:ZERO
+WSA_COMP1 Switch:0
+WSA_COMP2 Switch:0
+SpkrLeft COMP Switch:0
+SpkrRight COMP Switch:0
+SpkrLeft BOOST Switch:0
+SpkrRight BOOST Switch:0
+SpkrLeft VISENSE Switch:0
+SpkrRight VISENSE Switch:0
+SpkrLeft SWR DAC_Port Switch:0
+SpkrRight SWR DAC_Port Switch:0
+WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia1:0
+
diff --git a/configs/kona/kona.mk b/configs/kona/kona.mk
index 72fa5ba..e9b79de 100644
--- a/configs/kona/kona.mk
+++ b/configs/kona/kona.mk
@@ -81,6 +81,89 @@
AUDIO_FEATURE_ENABLED_BATTERY_LISTENER := true
##AUDIO_FEATURE_FLAGS
+BOARD_SUPPORTS_OPENSOURCE_STHAL := true
+
+AUDIO_HARDWARE := audio.a2dp.default
+AUDIO_HARDWARE += audio.usb.default
+AUDIO_HARDWARE += audio.r_submix.default
+AUDIO_HARDWARE += audio.primary.kona
+
+#HAL Wrapper
+AUDIO_WRAPPER := libqahw
+AUDIO_WRAPPER += libqahwwrapper
+
+#HAL Test app
+AUDIO_HAL_TEST_APPS := hal_play_test
+AUDIO_HAL_TEST_APPS += hal_rec_test
+
+PRODUCT_PACKAGES += $(AUDIO_HARDWARE)
+PRODUCT_PACKAGES += $(AUDIO_WRAPPER)
+PRODUCT_PACKAGES += $(AUDIO_HAL_TEST_APPS)
+
+ifeq ($(AUDIO_FEATURE_ENABLED_DLKM),true)
+BOARD_VENDOR_KERNEL_MODULES := \
+ $(KERNEL_MODULES_OUT)/audio_apr.ko \
+ $(KERNEL_MODULES_OUT)/audio_q6_pdr.ko \
+ $(KERNEL_MODULES_OUT)/audio_q6_notifier.ko \
+ $(KERNEL_MODULES_OUT)/audio_adsp_loader.ko \
+ $(KERNEL_MODULES_OUT)/audio_q6.ko \
+ $(KERNEL_MODULES_OUT)/audio_usf.ko \
+ $(KERNEL_MODULES_OUT)/audio_pinctrl_wcd.ko \
+ $(KERNEL_MODULES_OUT)/audio_pinctrl_lpi.ko \
+ $(KERNEL_MODULES_OUT)/audio_swr.ko \
+ $(KERNEL_MODULES_OUT)/audio_wcd_core.ko \
+ $(KERNEL_MODULES_OUT)/audio_swr_ctrl.ko \
+ $(KERNEL_MODULES_OUT)/audio_wsa881x.ko \
+ $(KERNEL_MODULES_OUT)/audio_platform.ko \
+ $(KERNEL_MODULES_OUT)/audio_hdmi.ko \
+ $(KERNEL_MODULES_OUT)/audio_stub.ko \
+ $(KERNEL_MODULES_OUT)/audio_wcd9xxx.ko \
+ $(KERNEL_MODULES_OUT)/audio_mbhc.ko \
+ $(KERNEL_MODULES_OUT)/audio_wcd938x.ko \
+ $(KERNEL_MODULES_OUT)/audio_wcd938x_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_kona.ko \
+ $(KERNEL_MODULES_OUT)/audio_snd_event.ko
+endif
+
+BOARD_VENDOR_KERNEL_MODULES += \
+ $(KERNEL_MODULES_OUT)/qca_cld3_wlan.ko
+
+#Audio DLKM
+AUDIO_DLKM := audio_apr.ko
+AUDIO_DLKM += audio_q6_pdr.ko
+AUDIO_DLKM += audio_q6_notifier.ko
+AUDIO_DLKM += audio_adsp_loader.ko
+AUDIO_DLKM += audio_q6.ko
+AUDIO_DLKM += audio_usf.ko
+AUDIO_DLKM += audio_pinctrl_wcd.ko
+AUDIO_DLKM += audio_swr.ko
+AUDIO_DLKM += audio_wcd_core.ko
+AUDIO_DLKM += audio_swr_ctrl.ko
+AUDIO_DLKM += audio_wsa881x.ko
+AUDIO_DLKM += audio_platform.ko
+AUDIO_DLKM += audio_hdmi.ko
+AUDIO_DLKM += audio_stub.ko
+AUDIO_DLKM += audio_wcd9xxx.ko
+AUDIO_DLKM += audio_mbhc.ko
+AUDIO_DLKM += audio_native.ko
+AUDIO_DLKM += audio_wcd938x.ko
+AUDIO_DLKM += audio_wcd938x_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_kona.ko
+AUDIO_DLKM += audio_snd_event.ko
+
+PRODUCT_PACKAGES += $(AUDIO_DLKM)
+
ifneq ($(strip $(TARGET_USES_RRO)), true)
#Audio Specific device overlays
DEVICE_PACKAGE_OVERLAYS += vendor/qcom/opensource/audio-hal/primary-hal/configs/common/overlay
@@ -100,6 +183,7 @@
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_stock.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_configs_stock.xml \
+ vendor/qcom/opensource/audio-hal/primary-hal/configs/kona/audio_tuning_mixer.txt:$(TARGET_COPY_OUT_VENDOR)/etc/audio_tuning_mixer.txt \
frameworks/native/data/etc/android.hardware.audio.pro.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.audio.pro.xml
#XML Audio configuration files
@@ -131,6 +215,19 @@
persist.vendor.audio.fluence.speaker=true\
persist.vendor.audio.fluence.tmic.enabled=false
+#
+#snapdragon value add features
+#
+PRODUCT_PROPERTY_OVERRIDES += \
+ro.qc.sdk.audio.ssr=false
+
+##fluencetype can be "fluence" or "fluencepro" or "none"
+PRODUCT_PROPERTY_OVERRIDES += \
+ro.qc.sdk.audio.fluencetype=none\
+persist.audio.fluence.voicecall=true\
+persist.audio.fluence.voicerec=false\
+persist.audio.fluence.speaker=true
+
##speaker protection v3 switch and ADSP AFE API version
PRODUCT_PROPERTY_OVERRIDES += \
persist.vendor.audio.spv3.enable=true\
@@ -286,6 +383,51 @@
PRODUCT_PROPERTY_OVERRIDES += \
persist.vendor.bt.aac_frm_ctl.enabled=true
+#add dynamic feature flags here
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio.feature.a2dp_offload.enable=true \
+vendor.audio.feature.afe_proxy.enable=true \
+vendor.audio.feature.anc_headset.enable=true \
+vendor.audio.feature.audio_sphere.enable=true \
+vendor.audio.feature.battery_listener.enable=true \
+vendor.audio.feature.compr_cap.enable=false \
+vendor.audio.feature.compress_in.enable=true \
+vendor.audio.feature.compress_meta_data.enable=true \
+vendor.audio.feature.compr_voip.enable=false \
+vendor.audio.feature.concurrent_capture.enable=false \
+vendor.audio.feature.custom_stereo.enable=true \
+vendor.audio.feature.display_port.enable=true \
+vendor.audio.feature.dsm_feedback.enable=false \
+vendor.audio.feature.dynamic_ecns.enable=true \
+vendor.audio.feature.ext_hw_plugin.enable=true \
+vendor.audio.feature.external_dsp.enable=false \
+vendor.audio.feature.external_speaker.enable=false \
+vendor.audio.feature.external_speaker_tfa.enable=false \
+vendor.audio.feature.fluence.enable=true \
+vendor.audio.feature.fm.enable=true \
+vendor.audio.feature.hdmi_edid.enable=true \
+vendor.audio.feature.hdmi_passthrough.enable=true \
+vendor.audio.feature.hfp.enable=true \
+vendor.audio.feature.hifi_audio.enable=false \
+vendor.audio.feature.hwdep_cal.enable=false \
+vendor.audio.feature.incall_music.enable=true \
+vendor.audio.feature.keep_alive.enable=true \
+vendor.audio.feature.kpi_optimize.enable=true \
+vendor.audio.feature.maxx_audio.enable=false \
+vendor.audio.feature.ras.enable=true \
+vendor.audio.feature.record_play_concurency.enable=false \
+vendor.audio.feature.src_trkn.enable=true \
+vendor.audio.feature.spkr_prot.enable=true \
+vendor.audio.feature.ssrec.enable=true \
+vendor.audio.feature.usb_offload.enable=true \
+vendor.audio.feature.usb_offload_burst_mode.enable=true \
+vendor.audio.feature.usb_offload_sidetone_volume.enable=false \
+vendor.audio.feature.deepbuffer_as_primary.enable=false \
+vendor.audio.feature.vbat.enable=true \
+vendor.audio.feature.wsa.enable=false \
+vendor.audio.feature.audiozoom.enable=false \
+vendor.audio.feature.snd_mon.enable=true
+
# for HIDL related packages
PRODUCT_PACKAGES += \
android.hardware.audio@2.0-service \
diff --git a/configs/kona/mixer_paths_qrd.xml b/configs/kona/mixer_paths_qrd.xml
index 70f047d..4a305ca 100644
--- a/configs/kona/mixer_paths_qrd.xml
+++ b/configs/kona/mixer_paths_qrd.xml
@@ -352,10 +352,10 @@
<ctl name="HPHR Volume" value="20" />
<ctl name="EAR SPKR PA Gain" value="G_DEFAULT" />
- <ctl name="TX_DEC0 Volume" value="84" />
- <ctl name="TX_DEC1 Volume" value="84" />
- <ctl name="TX_DEC2 Volume" value="84" />
- <ctl name="TX_DEC3 Volume" value="84" />
+ <ctl name="TX_DEC0 Volume" value="102" />
+ <ctl name="TX_DEC1 Volume" value="102" />
+ <ctl name="TX_DEC2 Volume" value="102" />
+ <ctl name="TX_DEC3 Volume" value="102" />
<ctl name="TX_DEC4 Volume" value="84" />
<ctl name="TX_DEC5 Volume" value="84" />
<ctl name="TX_DEC6 Volume" value="84" />
@@ -1802,6 +1802,10 @@
<path name="audio-playback-voip bt-sco" />
</path>
+ <path name="audio-playback-voip bt-a2dp">
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia10" value="1" />
+ </path>
+
<path name="audio-playback-voip afe-proxy">
<ctl name="AFE_PCM_RX Audio Mixer MultiMedia10" value="1" />
</path>
@@ -1984,7 +1988,7 @@
</path>
<path name="mmap-playback bt-sco-wb">
- <ctl name="BT SampleRate" value="16000" />
+ <ctl name="BT SampleRate" value="KHZ_16" />
<path name="mmap-playback bt-sco" />
</path>
@@ -2008,7 +2012,7 @@
<ctl name="DISPLAY_PORT Mixer MultiMedia16" value="1" />
</path>
- <path name="mmap-buffer-playback hdmi">
+ <path name="mmap-playback hdmi">
<ctl name="HDMI Mixer MultiMedia16" value="1" />
</path>
@@ -2068,6 +2072,10 @@
<ctl name="USB_AUDIO_RX Audio Mixer MultiMedia2" value="1" />
</path>
+ <path name="hifi-record">
+ <ctl name="MultiMedia2 Mixer TX_CDC_DMA_TX_3" value="1" />
+ </path>
+
<path name="hifi-record usb-headset-mic">
<ctl name="MultiMedia2 Mixer USB_AUDIO_TX" value="1" />
</path>
@@ -2280,7 +2288,7 @@
</path>
<path name="speaker-protected">
- <ctl name="WSA_AIF_VI Mixer WSA_SPKR_VI_1" value="1" />
+ <ctl name="WSA_AIF_VI Mixer WSA_SPKR_VI_2" value="1" />
<ctl name="WSA_CDC_DMA_0 TX Format" value="PACKED_16B" />
<path name="speaker" />
<ctl name="VI_FEED_TX Channels" value="One" />
@@ -2288,7 +2296,7 @@
</path>
<path name="voice-speaker-protected">
- <ctl name="WSA_AIF_VI Mixer WSA_SPKR_VI_1" value="1" />
+ <ctl name="WSA_AIF_VI Mixer WSA_SPKR_VI_2" value="1" />
<ctl name="WSA_CDC_DMA_0 TX Format" value="PACKED_16B" />
<path name="speaker-mono" />
<ctl name="VI_FEED_TX Channels" value="One" />
@@ -2371,6 +2379,7 @@
<path name="headset-mic">
<path name="amic2" />
+ <ctl name="TX_DEC0 Volume" value="84" />
</path>
<path name="voice-handset">
@@ -2474,7 +2483,7 @@
<ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
<ctl name="TX DMIC MUX0" value="DMIC1" />
<ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
- <ctl name="TX DMIC MUX0" value="DMIC3" />
+ <ctl name="TX DMIC MUX1" value="DMIC3" />
</path>
<path name="speaker-dmic-endfire">
@@ -2482,7 +2491,7 @@
<ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
<ctl name="TX DMIC MUX0" value="DMIC2" />
<ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
- <ctl name="TX DMIC MUX0" value="DMIC1" />
+ <ctl name="TX DMIC MUX1" value="DMIC1" />
</path>
<path name="dmic-endfire">
@@ -2603,14 +2612,18 @@
<ctl name="TX DMIC MUX1" value="DMIC1" />
<ctl name="TX_AIF1_CAP Mixer DEC2" value="1" />
<ctl name="TX DMIC MUX2" value="DMIC3" />
- <ctl name="TX_AIF1_CAP Mixer DEC4" value="1" />
- <ctl name="TX DMIC MUX2" value="DMIC3" />
+ <ctl name="TX_AIF1_CAP Mixer DEC3" value="1" />
+ <ctl name="TX DMIC MUX3" value="DMIC5" />
</path>
<path name="voice-speaker-qmic">
<path name="speaker-qmic" />
</path>
+ <path name="quad-mic">
+ <path name="speaker-qmic" />
+ </path>
+
<path name="unprocessed-quad-mic">
<path name="quad-mic" />
</path>
diff --git a/configs/kona/sound_trigger_mixer_paths_qrd.xml b/configs/kona/sound_trigger_mixer_paths_qrd.xml
index ccbdd94..a8180e4 100644
--- a/configs/kona/sound_trigger_mixer_paths_qrd.xml
+++ b/configs/kona/sound_trigger_mixer_paths_qrd.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="DMIC1" />
<ctl name="VA DMIC MUX1" value="DMIC2" />
- <ctl name="VA DMIC MUX5" value="DMIC5" />
+ <ctl name="VA DMIC MUX2" value="DMIC5" />
</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="DMIC1" />
<ctl name="VA DMIC MUX1" value="DMIC2" />
<ctl name="VA DMIC MUX2" value="DMIC3" />
- <ctl name="VA DMIC MUX5" value="DMIC5" />
+ <ctl name="VA DMIC MUX3" value="DMIC5" />
</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 4f1aa6f..c5b9676 100644
--- a/configs/kona/sound_trigger_platform_info.xml
+++ b/configs/kona/sound_trigger_platform_info.xml
@@ -78,6 +78,7 @@
<param sample_rate="16000" />
<param bit_width="16" />
<param out_channels="1"/> <!-- Module output channels -->
+ <param dam_token_id="1"/>
<arm_ss_usecase>
<!-- Options are "KEYWORD_DETECTION", "USER_VERIFICATION", "CUSTOM_DETECTION" -->
@@ -120,6 +121,7 @@
<param polling_enable_ids="0x00012C1C, 0x0, 0x00012C1B" />
<param custom_config_ids="0x00012C1C, 0x0, 0x00012C20" />
<param det_event_type_ids="0x00012C1C, 0x0, 0x00012C2C" />
+ <param lab_dam_cfg_ids="0x00012C08, 0x0, 0x000102C4" />
</lsm_usecase>
<lsm_usecase>
<param capture_device="HEADSET" />
@@ -135,6 +137,7 @@
<param polling_enable_ids="0x00012C1C, 0x0, 0x00012C1B" />
<param custom_config_ids="0x00012C1C, 0x0, 0x00012C20" />
<param det_event_type_ids="0x00012C1C, 0x0, 0x00012C2C" />
+ <param lab_dam_cfg_ids="0x00012C08, 0x0, 0x000102C4" />
</lsm_usecase>
<!-- format: "ADPCM_packet" or "PCM_packet" !-->
diff --git a/configs/lito/audio_configs.xml b/configs/lito/audio_configs.xml
new file mode 100644
index 0000000..bcc617d
--- /dev/null
+++ b/configs/lito/audio_configs.xml
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+Copyright (c) 2019, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<configs>
+ <!-- APM Configs -->
+ <property name="audio.deep_buffer.media" value="true"/>
+ <property name="audio.offload.disable" value="false"/>
+ <property name="audio.offload.min.duration.secs" value="60"/>
+ <property name="audio.offload.video" value="true"/>
+ <property name="persist.vendor.audio.sva.conc.enabled" value="false"/>
+ <property name="persist.vendor.audio.va_concurrency_enabled" value="false"/>
+ <property name="vendor.audio.av.streaming.offload.enable" value="false"/>
+ <property name="vendor.audio.offload.track.enable" value="true"/>
+ <property name="vendor.audio.offload.multiple.enabled" value="false"/>
+ <property name="vendor.audio.rec.playback.conc.disabled" value="false"/>
+ <property name="vendor.voice.conc.fallbackpath" value=""/>
+ <property name="vendor.voice.dsd.playback.conc.disabled" value="true"/>
+ <property name="vendor.voice.path.for.pcm.voip" value="true"/>
+ <property name="vendor.voice.playback.conc.disabled" value="false"/>
+ <property name="vendor.voice.record.conc.disabled" value="false"/>
+ <property name="vendor.voice.voip.conc.disabled" value="false"/>
+ <flag name="audio_extn_formats_enabled" value="true" />
+ <flag name="audio_extn_hdmi_spk_enabled" value="true" />
+ <flag name="use_xml_audio_policy_conf" value="true" />
+ <flag name="voice_concurrency" value="false" />
+
+ <!-- AV Configs -->
+ <property name="vendor.audio.use.sw.alac.decoder" value="true"/>
+ <property name="vendor.audio.use.sw.ape.decoder" value="true"/>
+ <property name="vendor.audio.use.sw.mpegh.decoder" value="false"/>
+ <property name="vendor.audio.flac.sw.decoder.24bit" value="true"/>
+ <property name="vendor.audio.hw.aac.encoder" value="true"/>
+ <flag name="aac_adts_offload_enabled" value="true" />
+ <flag name="alac_offload_enabled" value="true" />
+ <flag name="ape_offload_enabled" value="true" />
+ <flag name="flac_offload_enabled" value="true" />
+ <flag name="pcm_offload_enabled_16" value="true" />
+ <flag name="pcm_offload_enabled_24" value="true" />
+ <flag name="qti_flac_decoder" value="true" />
+ <flag name="vorbis_offload_enabled" value="true" />
+ <flag name="wma_offload_enabled" value="true" />
+
+ <!-- AHAL Configs -->
+ <flag name="a2dp_offload_enabled" value="true" />
+ <flag name="anc_headset_enabled" value="true" />
+ <flag name="audiosphere_enabled" value="true" />
+ <flag name="audio_zoom_enabled" value="false" />
+ <flag name="battery_listener_enabled" value="true" />
+ <flag name="compress_capture_enabled" value="false" />
+ <flag name="compress_in_enabled" value="true" />
+ <flag name="compress_metadata_needed" value="true" />
+ <flag name="concurrent_capture_enabled" value="true" />
+ <flag name="custom_stereo_enabled" value="true" />
+ <flag name="display_port_enabled" value="true" />
+ <flag name="dsm_feedback_enabled" value="false" />
+ <flag name="dynamic_ecns_enabled" value="true" />
+ <flag name="ext_hw_plugin_enabled" value="true" />
+ <flag name="ext_qdsp_enabled" value="false" />
+ <flag name="ext_spkr_enabled" value="false" />
+ <flag name="ext_spkr_tfa_enabled" value="false" />
+ <flag name="fluence_enabled" value="true" />
+ <flag name="hdmi_edid_enabled" value="true" />
+ <flag name="hdmi_passthrough_enabled" value="true" />
+ <flag name="hfp_enabled" value="true" />
+ <flag name="hifi_audio_enabled" value="false" />
+ <flag name="hwdep_cal_enabled" value="false" />
+ <flag name="incall_music_enabled" value="true" />
+ <flag name="keep_alive_enabled" value="true" />
+ <flag name="kpi_optimize_enabled" value="true" />
+ <flag name="maxx_audio_enabled" value="false" />
+ <flag name="receiver_aided_stereo" value="true" />
+ <flag name="snd_monitor_enabled" value="true" />
+ <flag name="source_track_enabled" value="true" />
+ <flag name="spkr_prot_enabled" value="true" />
+ <flag name="ssrec_enabled" value="true" />
+ <flag name="usb_offload_burst_mode" value="true" />
+ <flag name="usb_offload_enabled" value="true" />
+ <flag name="usb_offload_sidetone_vol_enabled" value="false" />
+ <flag name="use_deep_buffer_as_primary_output" value="false" />
+ <flag name="vbat_enabled" value="true" />
+ <flag name="wsa_enabled" value="false" />
+
+ <!-- Common configs between APM and AHAL -->
+ <flag name="afe_proxy_enabled" value="true" />
+ <flag name="compress_voip_enabled" value="false" />
+ <flag name="fm_power_opt" value="true" />
+ <flag name="record_play_concurrency" value="false" />
+</configs>
diff --git a/configs/lito/audio_configs_stock.xml b/configs/lito/audio_configs_stock.xml
new file mode 100644
index 0000000..e26ef14
--- /dev/null
+++ b/configs/lito/audio_configs_stock.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+Copyright (c) 2019, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<configs>
+ <!-- AHAL Configs -->
+ <flag name="a2dp_offload_enabled" value="true" />
+ <flag name="afe_proxy_enabled" value="false" />
+ <flag name="anc_headset_enabled" value="false" />
+ <flag name="audio_zoom_enabled" value="false" />
+ <flag name="audiosphere_enabled" value="false" />
+ <flag name="battery_listener_enabled" value="false" />
+ <flag name="compress_capture_enabled" value="false" />
+ <flag name="compress_in_enabled" value="false" />
+ <flag name="compress_metadata_needed" value="false" />
+ <flag name="compress_voip_enabled" value="false" />
+ <flag name="concurrent_capture_enabled" value="true" />
+ <flag name="custom_stereo_enabled" value="false" />
+ <flag name="display_port_enabled" value="false" />
+ <flag name="dsm_feedback_enabled" value="false" />
+ <flag name="dynamic_ecns_enabled" value="false" />
+ <flag name="ext_hw_plugin_enabled" value="false" />
+ <flag name="ext_qdsp_enabled" value="true" />
+ <flag name="ext_spkr_enabled" value="true" />
+ <flag name="ext_spkr_tfa_enabled" value="false" />
+ <flag name="fluence_enabled" value="false" />
+ <flag name="fm_power_opt" value="false" />
+ <flag name="hdmi_edid_enabled" value="false" />
+ <flag name="hdmi_passthrough_enabled" value="false" />
+ <flag name="hfp_enabled" value="true" />
+ <flag name="hifi_audio_enabled" value="false" />
+ <flag name="hwdep_cal_enabled" value="true" />
+ <flag name="incall_music_enabled" value="true" />
+ <flag name="keep_alive_enabled" value="false" />
+ <flag name="kpi_optimize_enabled" value="false" />
+ <flag name="receiver_aided_stereo" value="false" />
+ <flag name="record_play_concurrency" value="false" />
+ <flag name="snd_monitor_enabled" value="true" />
+ <flag name="source_track_enabled" value="false" />
+ <flag name="spkr_prot_enabled" value="true" />
+ <flag name="ssrec_enabled" value="false" />
+ <flag name="usb_offload_burst_mode" value="false" />
+ <flag name="usb_offload_enabled" value="true" />
+ <flag name="usb_offload_sidetone_vol_enabled" value="false" />
+ <flag name="use_deep_buffer_as_primary_output" value="false" />
+ <flag name="vbat_enabled" value="false" />
+ <flag name="wsa_enabled" value="false" />
+</configs>
diff --git a/configs/lito/audio_io_policy.conf b/configs/lito/audio_io_policy.conf
index 350fe11..7e00464 100644
--- a/configs/lito/audio_io_policy.conf
+++ b/configs/lito/audio_io_policy.conf
@@ -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/lito/audio_platform_info.xml b/configs/lito/audio_platform_info.xml
index 339fffd..510818a 100644
--- a/configs/lito/audio_platform_info.xml
+++ b/configs/lito/audio_platform_info.xml
@@ -87,9 +87,9 @@
<usecase name="USECASE_VOWLAN_CALL" type="in" id="-1"/>
<usecase name="USECASE_VOWLAN_CALL" type="out" id="-1"/>
<usecase name="USECASE_AUDIO_PLAYBACK_FM" type="out" id="30"/>
- <usecase name="USECASE_AUDIO_PLAYBACK_FM" type="in" id="29"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_FM" type="in" id="38"/>
<usecase name="USECASE_AUDIO_SPKR_CALIB_RX" type="out" id="30"/>
- <usecase name="USECASE_AUDIO_SPKR_CALIB_TX" type="in" id="35"/>
+ <usecase name="USECASE_AUDIO_SPKR_CALIB_TX" type="in" id="33"/>
<usecase name="USECASE_AUDIO_PLAYBACK_AFE_PROXY" type="out" id="5"/>
<usecase name="USECASE_AUDIO_RECORD_AFE_PROXY" type="in" id="6"/>
<usecase name="USECASE_AUDIO_RECORD_LOW_LATENCY" type="in" id="13" />
@@ -99,7 +99,8 @@
<usecase name="USECASE_AUDIO_RECORD_VOIP" type="in" id="12" />
<usecase name="USECASE_AUDIO_PLAYBACK_MMAP" type="out" id="29" />
<usecase name="USECASE_AUDIO_RECORD_MMAP" type="in" id="29" />
- <usecase name="USECASE_AUDIO_A2DP_ABR_FEEDBACK" type="in" id="40" />
+ <usecase name="USECASE_AUDIO_A2DP_ABR_FEEDBACK" type="in" id="36" />
+ <usecase name="USECASE_AUDIO_A2DP_ABR_FEEDBACK" type="out" id="36" />
<usecase name="USECASE_INCALL_MUSIC_UPLINK" type="out" id="23" />
</pcm_ids>
<config_params>
diff --git a/configs/lito/audio_platform_info_intcodec.xml b/configs/lito/audio_platform_info_intcodec.xml
index 8e57862..d162cbc 100644
--- a/configs/lito/audio_platform_info_intcodec.xml
+++ b/configs/lito/audio_platform_info_intcodec.xml
@@ -49,8 +49,8 @@
<usecase name="USECASE_VOWLAN_CALL" type="in" id="-1"/>
<usecase name="USECASE_VOWLAN_CALL" type="out" id="-1"/>
<usecase name="USECASE_AUDIO_PLAYBACK_FM" type="out" id="30"/>
- <usecase name="USECASE_AUDIO_PLAYBACK_FM" type="in" id="32"/>
- <usecase name="USECASE_AUDIO_SPKR_CALIB_RX" type="out" id="38"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_FM" type="in" id="38"/>
+ <usecase name="USECASE_AUDIO_SPKR_CALIB_RX" type="out" id="30"/>
<usecase name="USECASE_AUDIO_SPKR_CALIB_TX" type="in" id="33"/>
<usecase name="USECASE_AUDIO_PLAYBACK_AFE_PROXY" type="out" id="5"/>
<usecase name="USECASE_AUDIO_RECORD_AFE_PROXY" type="in" id="6"/>
@@ -63,7 +63,8 @@
<usecase name="USECASE_AUDIO_HFP_SCO_WB" type="in" id="12" />
<usecase name="USECASE_AUDIO_PLAYBACK_MMAP" type="out" id="29" />
<usecase name="USECASE_AUDIO_RECORD_MMAP" type="in" id="29" />
- <usecase name="USECASE_AUDIO_A2DP_ABR_FEEDBACK" type="in" id="40" />
+ <usecase name="USECASE_AUDIO_A2DP_ABR_FEEDBACK" type="in" id="36" />
+ <usecase name="USECASE_AUDIO_A2DP_ABR_FEEDBACK" type="out" id="36" />
<usecase name="USECASE_INCALL_MUSIC_UPLINK" type="out" id="23" />
</pcm_ids>
<config_params>
diff --git a/configs/lito/audio_platform_info_qrd.xml b/configs/lito/audio_platform_info_qrd.xml
index e1e64cd..33eb0df 100644
--- a/configs/lito/audio_platform_info_qrd.xml
+++ b/configs/lito/audio_platform_info_qrd.xml
@@ -49,9 +49,9 @@
<usecase name="USECASE_VOWLAN_CALL" type="in" id="-1"/>
<usecase name="USECASE_VOWLAN_CALL" type="out" id="-1"/>
<usecase name="USECASE_AUDIO_PLAYBACK_FM" type="out" id="30"/>
- <usecase name="USECASE_AUDIO_PLAYBACK_FM" type="in" id="29"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_FM" type="in" id="38"/>
<usecase name="USECASE_AUDIO_SPKR_CALIB_RX" type="out" id="30"/>
- <usecase name="USECASE_AUDIO_SPKR_CALIB_TX" type="in" id="35"/>
+ <usecase name="USECASE_AUDIO_SPKR_CALIB_TX" type="in" id="33"/>
<usecase name="USECASE_AUDIO_PLAYBACK_AFE_PROXY" type="out" id="5"/>
<usecase name="USECASE_AUDIO_RECORD_AFE_PROXY" type="in" id="6"/>
<usecase name="USECASE_AUDIO_RECORD_LOW_LATENCY" type="in" id="13" />
@@ -63,14 +63,15 @@
<usecase name="USECASE_AUDIO_HFP_SCO_WB" type="in" id="12" />
<usecase name="USECASE_AUDIO_PLAYBACK_MMAP" type="out" id="29" />
<usecase name="USECASE_AUDIO_RECORD_MMAP" type="in" id="29" />
- <usecase name="USECASE_AUDIO_A2DP_ABR_FEEDBACK" type="in" id="40" />
+ <usecase name="USECASE_AUDIO_A2DP_ABR_FEEDBACK" type="in" id="36" />
+ <usecase name="USECASE_AUDIO_A2DP_ABR_FEEDBACK" type="out" id="36" />
<usecase name="USECASE_INCALL_MUSIC_UPLINK" type="out" id="23" />
</pcm_ids>
<config_params>
<!-- In the below value string, the value indicates default mono -->
<!-- speaker. It can be set to either left or right -->
<param key="mono_speaker" value="right"/>
- <param key="spkr_1_tz_name" value="wsatz.13"/>
+ <param key="spkr_2_tz_name" value="wsatz.14"/>
<param key="true_32_bit" value="true"/>
<param key="native_audio_mode" value="multiple_mix_dsp"/>
<param key="hfp_pcm_dev_id" value="39"/>
@@ -116,7 +117,7 @@
<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_VCO_HEADPHONES" backend="headphones" interface="RX_CDC_DMA_RX_0"/>
- <device name="SND_DEVICE_OUT_HANDSET" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_HANDSET" backend="handset" interface="RX_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"/>
<device name="SND_DEVICE_OUT_SPEAKER_EXTERNAL_2" interface="WSA_CDC_DMA_RX_0"/>
@@ -124,7 +125,7 @@
<device name="SND_DEVICE_OUT_SPEAKER_VBAT" interface="WSA_CDC_DMA_RX_0"/>
<device name="SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES_EXTERNAL_1" interface="WSA_CDC_DMA_RX_0-and-RX_CDC_DMA_RX_0"/>
<device name="SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES_EXTERNAL_2" interface="WSA_CDC_DMA_RX_0-and-RX_CDC_DMA_RX_0"/>
- <device name="SND_DEVICE_OUT_VOICE_HANDSET" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_HANDSET" backend="handset" interface="RX_CDC_DMA_RX_0"/>
<device name="SND_DEVICE_IN_HANDSET_GENERIC_QMIC" interface="TX_CDC_DMA_TX_3"/>
<device name="SND_DEVICE_OUT_VOICE_SPEAKER" interface="WSA_CDC_DMA_RX_0"/>
<device name="SND_DEVICE_OUT_VOICE_SPEAKER_VBAT" interface="WSA_CDC_DMA_RX_0"/>
@@ -133,7 +134,7 @@
<device name="SND_DEVICE_OUT_SPEAKER_AND_HDMI" interface="WSA_CDC_DMA_RX_0-and-HDMI"/>
<device name="SND_DEVICE_OUT_SPEAKER_AND_DISPLAY_PORT" interface="WSA_CDC_DMA_RX_0-and-DISPLAY_PORT"/>
<device name="SND_DEVICE_OUT_SPEAKER_AND_BT_A2DP" interface="WSA_CDC_DMA_RX_0-and-SLIMBUS_7_RX"/>
- <device name="SND_DEVICE_OUT_VOICE_TTY_HCO_HANDSET" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_TTY_HCO_HANDSET" interface="RX_CDC_DMA_RX_0"/>
<device name="SND_DEVICE_OUT_ANC_FB_HEADSET" interface="RX_CDC_DMA_RX_0"/>
<device name="SND_DEVICE_OUT_VOICE_ANC_FB_HEADSET" interface="RX_CDC_DMA_RX_0"/>
<device name="SND_DEVICE_OUT_ANC_HANDSET" interface="RX_CDC_DMA_RX_0"/>
diff --git a/configs/lito/audio_policy_configuration.xml b/configs/lito/audio_policy_configuration.xml
index f98f9d2..50920b3 100644
--- a/configs/lito/audio_policy_configuration.xml
+++ b/configs/lito/audio_policy_configuration.xml
@@ -262,15 +262,18 @@
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
</devicePort>
- <devicePort tagName="BT A2DP Out" type="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP" role="sink">
+ <devicePort tagName="BT A2DP Out" type="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP" role="sink"
+ encodedFormats="AUDIO_FORMAT_SBC AUDIO_FORMAT_AAC AUDIO_FORMAT_APTX AUDIO_FORMAT_APTX_HD AUDIO_FORMAT_LDAC AUDIO_FORMAT_CELT AUDIO_FORMAT_APTX_ADAPTIVE">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</devicePort>
- <devicePort tagName="BT A2DP Headphones" type="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES" role="sink">
+ <devicePort tagName="BT A2DP Headphones" type="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES" role="sink"
+ encodedFormats="AUDIO_FORMAT_SBC AUDIO_FORMAT_AAC AUDIO_FORMAT_APTX AUDIO_FORMAT_APTX_HD AUDIO_FORMAT_LDAC AUDIO_FORMAT_CELT AUDIO_FORMAT_APTX_ADAPTIVE">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</devicePort>
- <devicePort tagName="BT A2DP Speaker" type="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER" role="sink">
+ <devicePort tagName="BT A2DP Speaker" type="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER" role="sink"
+ encodedFormats="AUDIO_FORMAT_SBC AUDIO_FORMAT_AAC AUDIO_FORMAT_APTX AUDIO_FORMAT_APTX_HD AUDIO_FORMAT_LDAC AUDIO_FORMAT_CELT AUDIO_FORMAT_APTX_ADAPTIVE">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</devicePort>
diff --git a/configs/lito/lito.mk b/configs/lito/lito.mk
index f307de9..107e0b8 100644
--- a/configs/lito/lito.mk
+++ b/configs/lito/lito.mk
@@ -1,12 +1,22 @@
#BOARD_USES_GENERIC_AUDIO := true
#
#AUDIO_FEATURE_FLAGS
+ifeq ($(TARGET_USES_QMAA_OVERRIDE_AUDIO), false)
+ifeq ($(TARGET_USES_QMAA),true)
+AUDIO_USE_STUB_HAL := true
+endif
+endif
+
+ifneq ($(AUDIO_USE_STUB_HAL), true)
BOARD_USES_ALSA_AUDIO := true
TARGET_USES_AOSP_FOR_AUDIO := false
ifneq ($(TARGET_USES_AOSP_FOR_AUDIO), true)
USE_CUSTOM_AUDIO_POLICY := 1
+AUDIO_FEATURE_QSSI_COMPLIANCE := false
AUDIO_FEATURE_ENABLED_COMPRESS_CAPTURE := false
+AUDIO_FEATURE_ENABLED_COMPRESS_INPUT := true
+AUDIO_FEATURE_ENABLED_CONCURRENT_CAPTURE := true
AUDIO_FEATURE_ENABLED_COMPRESS_VOIP := false
AUDIO_FEATURE_ENABLED_DYNAMIC_ECNS := true
AUDIO_FEATURE_ENABLED_EXTN_FORMATS := true
@@ -30,18 +40,18 @@
MM_AUDIO_ENABLED_SAFX := true
AUDIO_FEATURE_ENABLED_HW_ACCELERATED_EFFECTS := false
AUDIO_FEATURE_ENABLED_AUDIOSPHERE := true
-AUDIO_FEATURE_ENABLED_USB_TUNNEL_AUDIO := true
-AUDIO_FEATURE_ENABLED_SPLIT_A2DP := true
+AUDIO_FEATURE_ENABLED_USB_TUNNEL := true
+AUDIO_FEATURE_ENABLED_A2DP_OFFLOAD := true
AUDIO_FEATURE_ENABLED_3D_AUDIO := true
+AUDIO_FEATURE_ENABLED_AHAL_EXT := true
DOLBY_ENABLE := false
endif
-USE_XML_AUDIO_POLICY_CONF := 1
AUDIO_FEATURE_ENABLED_DLKM := true
BOARD_SUPPORTS_SOUND_TRIGGER := true
BOARD_SUPPORTS_GCS := false
AUDIO_FEATURE_ENABLED_INSTANCE_ID := true
-AUDIO_USE_LL_AS_PRIMARY_OUTPUT := true
+AUDIO_USE_DEEP_AS_PRIMARY_OUTPUT := false
AUDIO_FEATURE_ENABLED_VBAT_MONITOR := true
AUDIO_FEATURE_ENABLED_ANC_HEADSET := true
AUDIO_FEATURE_ENABLED_CUSTOMSTEREO := true
@@ -71,6 +81,83 @@
AUDIO_FEATURE_ENABLED_BATTERY_LISTENER := true
##AUDIO_FEATURE_FLAGS
+AUDIO_HARDWARE := audio.a2dp.default
+AUDIO_HARDWARE += audio.usb.default
+AUDIO_HARDWARE += audio.r_submix.default
+AUDIO_HARDWARE += audio.primary.lito
+
+#HAL Wrapper
+AUDIO_WRAPPER := libqahw
+AUDIO_WRAPPER += libqahwwrapper
+
+#HAL Test app
+AUDIO_HAL_TEST_APPS := hal_play_test
+AUDIO_HAL_TEST_APPS += hal_rec_test
+
+PRODUCT_PACKAGES += $(AUDIO_HARDWARE)
+PRODUCT_PACKAGES += $(AUDIO_WRAPPER)
+PRODUCT_PACKAGES += $(AUDIO_HAL_TEST_APPS)
+
+ifeq ($(AUDIO_FEATURE_ENABLED_DLKM),true)
+BOARD_VENDOR_KERNEL_MODULES := \
+ $(KERNEL_MODULES_OUT)/audio_apr.ko \
+ $(KERNEL_MODULES_OUT)/audio_q6_pdr.ko \
+ $(KERNEL_MODULES_OUT)/audio_q6_notifier.ko \
+ $(KERNEL_MODULES_OUT)/audio_adsp_loader.ko \
+ $(KERNEL_MODULES_OUT)/audio_q6.ko \
+ $(KERNEL_MODULES_OUT)/audio_usf.ko \
+ $(KERNEL_MODULES_OUT)/audio_pinctrl_lpi.ko \
+ $(KERNEL_MODULES_OUT)/audio_swr.ko \
+ $(KERNEL_MODULES_OUT)/audio_wcd_core.ko \
+ $(KERNEL_MODULES_OUT)/audio_swr_ctrl.ko \
+ $(KERNEL_MODULES_OUT)/audio_wsa881x.ko \
+ $(KERNEL_MODULES_OUT)/audio_platform.ko \
+ $(KERNEL_MODULES_OUT)/audio_hdmi.ko \
+ $(KERNEL_MODULES_OUT)/audio_stub.ko \
+ $(KERNEL_MODULES_OUT)/audio_wcd9xxx.ko \
+ $(KERNEL_MODULES_OUT)/audio_mbhc.ko \
+ $(KERNEL_MODULES_OUT)/audio_wcd938x.ko \
+ $(KERNEL_MODULES_OUT)/audio_wcd938x_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_snd_event.ko
+endif
+
+#Audio DLKM
+AUDIO_DLKM := audio_apr.ko
+AUDIO_DLKM += audio_q6_pdr.ko
+AUDIO_DLKM += audio_q6_notifier.ko
+AUDIO_DLKM += audio_adsp_loader.ko
+AUDIO_DLKM += audio_q6.ko
+AUDIO_DLKM += audio_usf.ko
+AUDIO_DLKM += audio_pinctrl_wcd.ko
+AUDIO_DLKM += audio_swr.ko
+AUDIO_DLKM += audio_wcd_core.ko
+AUDIO_DLKM += audio_swr_ctrl.ko
+AUDIO_DLKM += audio_wsa881x.ko
+AUDIO_DLKM += audio_platform.ko
+AUDIO_DLKM += audio_hdmi.ko
+AUDIO_DLKM += audio_stub.ko
+AUDIO_DLKM += audio_wcd9xxx.ko
+AUDIO_DLKM += audio_mbhc.ko
+AUDIO_DLKM += audio_native.ko
+AUDIO_DLKM += audio_wcd938x.ko
+AUDIO_DLKM += audio_wcd938x_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_snd_event.ko
+
+PRODUCT_PACKAGES += $(AUDIO_DLKM)
+
ifneq ($(strip $(TARGET_USES_RRO)), true)
#Audio Specific device overlays
DEVICE_PACKAGE_OVERLAYS += vendor/qcom/opensource/audio-hal/primary-hal/configs/common/overlay
@@ -86,8 +173,11 @@
vendor/qcom/opensource/audio-hal/primary-hal/configs/lito/audio_platform_info_intcodec.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_platform_info_intcodec.xml \
vendor/qcom/opensource/audio-hal/primary-hal/configs/lito/sound_trigger_mixer_paths.xml:$(TARGET_COPY_OUT_VENDOR)/etc/sound_trigger_mixer_paths.xml \
vendor/qcom/opensource/audio-hal/primary-hal/configs/lito/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/lito/mixer_paths_mtp.xml:$(TARGET_COPY_OUT_VENDOR)/etc/mixer_paths_mtp.xml \
+ vendor/qcom/opensource/audio-hal/primary-hal/configs/lito/mixer_paths.xml:$(TARGET_COPY_OUT_VENDOR)/etc/mixer_paths.xml \
vendor/qcom/opensource/audio-hal/primary-hal/configs/lito/mixer_paths_qrd.xml:$(TARGET_COPY_OUT_VENDOR)/etc/mixer_paths_qrd.xml \
+ vendor/qcom/opensource/audio-hal/primary-hal/configs/lito/audio_configs.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_configs.xml \
+ vendor/qcom/opensource/audio-hal/primary-hal/configs/lito/audio_configs_stock.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_configs_stock.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)
@@ -118,6 +208,24 @@
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
+
+#
+#snapdragon value add features
+#
+PRODUCT_PROPERTY_OVERRIDES += \
+ro.qc.sdk.audio.ssr=false
+
+##fluencetype can be "fluence" or "fluencepro" or "none"
+PRODUCT_PROPERTY_OVERRIDES += \
+ro.qc.sdk.audio.fluencetype=none\
+persist.audio.fluence.voicecall=true\
+persist.audio.fluence.voicerec=false\
+persist.audio.fluence.speaker=true
+
#disable tunnel encoding
PRODUCT_PROPERTY_OVERRIDES += \
vendor.audio.tunnel.encode=false
@@ -187,6 +295,18 @@
PRODUCT_PROPERTY_OVERRIDES += \
persist.vendor.bt.a2dp_offload_cap=sbc-aptx-aptxtws-aptxhd-aac-ldac
+# A2DP offload support
+PRODUCT_PROPERTY_OVERRIDES += \
+ro.bluetooth.a2dp_offload.supported=true
+
+# Disable A2DP offload
+PRODUCT_PROPERTY_OVERRIDES += \
+persist.bluetooth.a2dp_offload.disabled=false
+
+# A2DP offload DSP supported encoder list
+PRODUCT_PROPERTY_OVERRIDES += \
+persist.bluetooth.a2dp_offload.cap=sbc-aac-aptx-aptxhd-ldac
+
#enable software decoders for ALAC and APE
PRODUCT_PROPERTY_OVERRIDES += \
vendor.audio.use.sw.alac.decoder=true
@@ -221,10 +341,29 @@
PRODUCT_PROPERTY_OVERRIDES += \
vendor.audio.adm.buffering.ms=2
+#enable headset calibration
+PRODUCT_PROPERTY_OVERRIDES += \
+audio.volume.headset.gain.depcal=true
+
+#enable dualmic fluence for voice communication
+PRODUCT_PROPERTY_OVERRIDES += \
+persist.audio.fluence.voicecomm=true
+endif
+
+USE_XML_AUDIO_POLICY_CONF := 1
+
#enable keytone FR
PRODUCT_PROPERTY_OVERRIDES += \
vendor.audio.hal.output.suspend.supported=true
+#Enable AAudio MMAP/NOIRQ data path
+#2 is AAUDIO_POLICY_AUTO so it will try MMAP then fallback to Legacy path
+PRODUCT_PROPERTY_OVERRIDES += aaudio.mmap_policy=2
+#Allow EXCLUSIVE then fall back to SHARED.
+PRODUCT_PROPERTY_OVERRIDES += aaudio.mmap_exclusive_policy=2
+PRODUCT_PROPERTY_OVERRIDES += aaudio.hw_burst_min_usec=2000
+
+
#enable mirror-link feature
PRODUCT_PROPERTY_OVERRIDES += \
vendor.audio.enable.mirrorlink=false
@@ -237,6 +376,51 @@
PRODUCT_PROPERTY_OVERRIDES += \
persist.vendor.bt.aac_frm_ctl.enabled=true
+#add dynamic feature flags here
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio.feature.a2dp_offload.enable=true \
+vendor.audio.feature.afe_proxy.enable=true \
+vendor.audio.feature.anc_headset.enable=true \
+vendor.audio.feature.audio_sphere.enable=true \
+vendor.audio.feature.battery_listener.enable=true \
+vendor.audio.feature.compr_cap.enable=false \
+vendor.audio.feature.compress_in.enable=true \
+vendor.audio.feature.compress_meta_data.enable=true \
+vendor.audio.feature.compr_voip.enable=false \
+vendor.audio.feature.concurrent_capture.enable=false \
+vendor.audio.feature.custom_stereo.enable=true \
+vendor.audio.feature.display_port.enable=true \
+vendor.audio.feature.dsm_feedback.enable=false \
+vendor.audio.feature.dynamic_ecns.enable=true \
+vendor.audio.feature.ext_hw_plugin.enable=true \
+vendor.audio.feature.external_dsp.enable=false \
+vendor.audio.feature.external_speaker.enable=false \
+vendor.audio.feature.external_speaker_tfa.enable=false \
+vendor.audio.feature.fluence.enable=true \
+vendor.audio.feature.fm.enable=true \
+vendor.audio.feature.hdmi_edid.enable=true \
+vendor.audio.feature.hdmi_passthrough.enable=true \
+vendor.audio.feature.hfp.enable=true \
+vendor.audio.feature.hifi_audio.enable=false \
+vendor.audio.feature.hwdep_cal.enable=false \
+vendor.audio.feature.incall_music.enable=true \
+vendor.audio.feature.keep_alive.enable=true \
+vendor.audio.feature.kpi_optimize.enable=true \
+vendor.audio.feature.maxx_audio.enable=false \
+vendor.audio.feature.ras.enable=true \
+vendor.audio.feature.record_play_concurency.enable=false \
+vendor.audio.feature.src_trkn.enable=true \
+vendor.audio.feature.spkr_prot.enable=true \
+vendor.audio.feature.ssrec.enable=true \
+vendor.audio.feature.usb_offload.enable=true \
+vendor.audio.feature.usb_offload_burst_mode.enable=true \
+vendor.audio.feature.usb_offload_sidetone_volume.enable=false \
+vendor.audio.feature.deepbuffer_as_primary.enable=false \
+vendor.audio.feature.vbat.enable=true \
+vendor.audio.feature.wsa.enable=false \
+vendor.audio.feature.audiozoom.enable=false \
+vendor.audio.feature.snd_mon.enable=true
+
# for HIDL related packages
PRODUCT_PACKAGES += \
android.hardware.audio@2.0-service \
@@ -248,4 +432,14 @@
android.hardware.audio.common@4.0-util \
android.hardware.audio@4.0-impl \
android.hardware.audio.effect@4.0 \
- android.hardware.audio.effect@4.0-impl
+ android.hardware.audio.effect@4.0-impl \
+ vendor.qti.hardware.audiohalext@1.0 \
+ vendor.qti.hardware.audiohalext@1.0-impl \
+ vendor.qti.hardware.audiohalext-utils
+
+PRODUCT_PACKAGES_ENG += \
+ VoicePrintTest \
+ VoicePrintDemo
+
+PRODUCT_PACKAGES_DEBUG += \
+ AudioSettings
diff --git a/configs/lito/mixer_paths_mtp.xml b/configs/lito/mixer_paths.xml
similarity index 91%
rename from configs/lito/mixer_paths_mtp.xml
rename to configs/lito/mixer_paths.xml
index 1c343bc..a8f65b8 100644
--- a/configs/lito/mixer_paths_mtp.xml
+++ b/configs/lito/mixer_paths.xml
@@ -163,12 +163,12 @@
<!-- usb headset end -->
<!-- fm -->
<ctl name="Tert MI2S LOOPBACK Volume" value="0" />
- <ctl name="WSA_CDC_DMA_RX_0 Port Mixer TERT_MI2S_TX" value="0" />
+ <ctl name="WSA_CDC_DMA_RX_0 Port Mixer SLIM_8_TX" value="0" />
<ctl name="WSA_CDC_DMA_RX_0_DL_HL Switch" value="0" />
- <ctl name="RX_CDC_DMA_RX_0 Port Mixer TERT_MI2S_TX" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0 Port Mixer SLIM_8_TX" value="0" />
<ctl name="RX_CDC_DMA_RX_0_DL_HL Switch" value="0" />
- <ctl name="MultiMedia1 Mixer TERT_MI2S_TX" value="0" />
- <ctl name="MultiMedia2 Mixer TERT_MI2S_TX" value="0" />
+ <ctl name="MultiMedia1 Mixer SLIM_8_TX" value="0" />
+ <ctl name="MultiMedia2 Mixer SLIM_8_TX" value="0" />
<!-- fm end -->
<!-- Multimode Voice1 -->
@@ -283,7 +283,6 @@
<!-- RX Controls -->
<ctl name="RX_MACRO RX0 MUX" value="ZERO" />
<ctl name="RX_MACRO RX1 MUX" value="ZERO" />
- <ctl name="RX_Native" value="OFF" />
<ctl name="RX_CDC_DMA_RX_0 Channels" value="One" />
<ctl name="RX INT0_1 MIX1 INP0" value="ZERO" />
<ctl name="RX INT0_1 MIX1 INP1" value="ZERO" />
@@ -353,10 +352,10 @@
<ctl name="HPHR Volume" value="20" />
<ctl name="EAR SPKR PA Gain" value="G_DEFAULT" />
- <ctl name="TX_DEC0 Volume" value="84" />
- <ctl name="TX_DEC1 Volume" value="84" />
- <ctl name="TX_DEC2 Volume" value="84" />
- <ctl name="TX_DEC3 Volume" value="84" />
+ <ctl name="TX_DEC0 Volume" value="102" />
+ <ctl name="TX_DEC1 Volume" value="102" />
+ <ctl name="TX_DEC2 Volume" value="102" />
+ <ctl name="TX_DEC3 Volume" value="102" />
<ctl name="TX_DEC4 Volume" value="84" />
<ctl name="TX_DEC5 Volume" value="84" />
<ctl name="TX_DEC6 Volume" value="84" />
@@ -376,10 +375,6 @@
<ctl name="RX_HPH_PWR_MODE" value="ULP" />
<ctl name="RX HPH Mode" value="CLS_H_ULP" />
- <!-- TX HDR AMIC Default connections -->
- <ctl name="TX HDR12" value="0" />
- <ctl name="TX HDR34" value="0" />
-
<!-- IIR/voice anc -->
<ctl name="IIR0 Band1" id ="0" value="268435456" />
<ctl name="IIR0 Band1" id ="1" value="0" />
@@ -429,7 +424,7 @@
<!-- defaults for mmap record -->
<ctl name="MultiMedia16 Mixer TX_CDC_DMA_TX_3" value="0" />
<ctl name="MultiMedia16 Mixer SLIM_7_TX" value="0" />
- <ctl name="MultiMedia16 Mixer TERT_MI2S_TX" value="0" />
+ <ctl name="MultiMedia16 Mixer SLIM_8_TX" value="0" />
<ctl name="MultiMedia16 Mixer USB_AUDIO_TX" value="0" />
<!-- These are audio route (FE to BE) specific mixer settings -->
@@ -453,6 +448,14 @@
<ctl name="AUDIO_REF_EC_UL1 MUX" value="RX_CDC_DMA_RX_0" />
</path>
+ <path name="echo-reference-voip">
+ <ctl name="AUDIO_REF_EC_UL10 MUX" value="WSA_CDC_DMA_RX_0" />
+ </path>
+
+ <path name="echo-reference-voip headphones">
+ <ctl name="AUDIO_REF_EC_UL10 MUX" value="RX_CDC_DMA_RX_0" />
+ </path>
+
<path name="deep-buffer-playback">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia1" value="1" />
</path>
@@ -479,6 +482,10 @@
<path name="deep-buffer-playback bt-sco" />
</path>
+ <path name="deep-buffer-playback bt-sco-swb">
+ <path name="deep-buffer-playback bt-sco" />
+ </path>
+
<path name="deep-buffer-playback afe-proxy">
<ctl name="AFE_PCM_RX Audio Mixer MultiMedia1" value="1" />
</path>
@@ -515,6 +522,11 @@
<path name="deep-buffer-playback" />
</path>
+ <path name="deep-buffer-playback speaker-and-bt-sco-swb">
+ <path name="deep-buffer-playback bt-sco-swb" />
+ <path name="deep-buffer-playback" />
+ </path>
+
<path name="low-latency-playback">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia5" value="1" />
</path>
@@ -536,6 +548,10 @@
<path name="low-latency-playback bt-sco" />
</path>
+ <path name="low-latency-playback bt-sco-swb">
+ <path name="low-latency-playback bt-sco" />
+ </path>
+
<path name="low-latency-playback speaker-and-display-port">
<path name="low-latency-playback display-port" />
<path name="low-latency-playback" />
@@ -580,6 +596,11 @@
<path name="low-latency-playback" />
</path>
+ <path name="low-latency-playback speaker-and-bt-sco-swb">
+ <path name="low-latency-playback bt-sco-swb" />
+ <path name="low-latency-playback" />
+ </path>
+
<path name="audio-ull-playback">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia8" value="1" />
</path>
@@ -610,6 +631,10 @@
<path name="audio-ull-playback bt-sco" />
</path>
+ <path name="audio-ull-playback bt-sco-swb">
+ <path name="audio-ull-playback bt-sco" />
+ </path>
+
<path name="audio-ull-playback speaker-and-display-port">
<path name="audio-ull-playback display-port" />
<path name="audio-ull-playback" />
@@ -637,6 +662,11 @@
<path name="audio-ull-playback" />
</path>
+ <path name="audio-ull-playback speaker-and-bt-sco-swb">
+ <path name="audio-ull-playback bt-sco-swb" />
+ <path name="audio-ull-playback" />
+ </path>
+
<path name="multi-channel-playback display-port">
<ctl name="DISPLAY_PORT Mixer MultiMedia2" value="1" />
</path>
@@ -670,6 +700,10 @@
<path name="compress-offload-playback bt-sco" />
</path>
+ <path name="compress-offload-playback bt-sco-swb">
+ <path name="compress-offload-playback bt-sco" />
+ </path>
+
<path name="compress-offload-playback speaker-and-display-port">
<path name="compress-offload-playback display-port" />
<path name="compress-offload-playback" />
@@ -719,6 +753,11 @@
<path name="compress-offload-playback" />
</path>
+ <path name="compress-offload-playback speaker-and-bt-sco-swb">
+ <path name="compress-offload-playback bt-sco-swb" />
+ <path name="compress-offload-playback" />
+ </path>
+
<path name="compress-offload-playback2">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia7" value="1" />
</path>
@@ -736,6 +775,10 @@
<path name="compress-offload-playback2 bt-sco" />
</path>
+ <path name="compress-offload-playback2 bt-sco-swb">
+ <path name="compress-offload-playback2 bt-sco" />
+ </path>
+
<path name="compress-offload-playback2 speaker-and-display-port">
<path name="compress-offload-playback2 display-port" />
<path name="compress-offload-playback2" />
@@ -786,6 +829,11 @@
<path name="compress-offload-playback2" />
</path>
+ <path name="compress-offload-playback2 speaker-and-bt-sco-swb">
+ <path name="compress-offload-playback2 bt-sco-swb" />
+ <path name="compress-offload-playback2" />
+ </path>
+
<path name="compress-offload-playback3">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia10" value="1" />
</path>
@@ -803,6 +851,10 @@
<path name="compress-offload-playback3 bt-sco" />
</path>
+ <path name="compress-offload-playback3 bt-sco-swb">
+ <path name="compress-offload-playback3 bt-sco" />
+ </path>
+
<path name="compress-offload-playback3 speaker-and-display-port">
<path name="compress-offload-playback3 display-port" />
<path name="compress-offload-playback3" />
@@ -852,6 +904,11 @@
<path name="compress-offload-playback3" />
</path>
+ <path name="compress-offload-playback3 speaker-and-bt-sco-swb">
+ <path name="compress-offload-playback3 bt-sco-swb" />
+ <path name="compress-offload-playback3" />
+ </path>
+
<path name="compress-offload-playback4">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia11" value="1" />
</path>
@@ -869,6 +926,10 @@
<path name="compress-offload-playback4 bt-sco" />
</path>
+ <path name="compress-offload-playback4 bt-sco-swb">
+ <path name="compress-offload-playback4 bt-sco" />
+ </path>
+
<path name="compress-offload-playback4 speaker-and-display-port">
<path name="compress-offload-playback4 display-port" />
<path name="compress-offload-playback4" />
@@ -919,6 +980,11 @@
<path name="compress-offload-playback4" />
</path>
+ <path name="compress-offload-playback4 speaker-and-bt-sco-swb">
+ <path name="compress-offload-playback4 bt-sco-swb" />
+ <path name="compress-offload-playback4" />
+ </path>
+
<path name="compress-offload-playback5">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia12" value="1" />
</path>
@@ -936,6 +1002,10 @@
<path name="compress-offload-playback5 bt-sco" />
</path>
+ <path name="compress-offload-playback5 bt-sco-swb">
+ <path name="compress-offload-playback5 bt-sco" />
+ </path>
+
<path name="compress-offload-playback5 speaker-and-display-port">
<path name="compress-offload-playback5 display-port" />
<path name="compress-offload-playback5" />
@@ -985,6 +1055,11 @@
<path name="compress-offload-playback5" />
</path>
+ <path name="compress-offload-playback5 speaker-and-bt-sco-swb">
+ <path name="compress-offload-playback5 bt-sco-swb" />
+ <path name="compress-offload-playback5" />
+ </path>
+
<path name="compress-offload-playback6">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia13" value="1" />
</path>
@@ -1002,6 +1077,10 @@
<path name="compress-offload-playback6 bt-sco" />
</path>
+ <path name="compress-offload-playback6 bt-sco-swb">
+ <path name="compress-offload-playback6 bt-sco" />
+ </path>
+
<path name="compress-offload-playback6 speaker-and-display-port">
<path name="compress-offload-playback6 display-port" />
<path name="compress-offload-playback6" />
@@ -1051,6 +1130,11 @@
<path name="compress-offload-playback6" />
</path>
+ <path name="compress-offload-playback6 speaker-and-bt-sco-swb">
+ <path name="compress-offload-playback6 bt-sco-swb" />
+ <path name="compress-offload-playback6" />
+ </path>
+
<path name="compress-offload-playback7">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia14" value="1" />
</path>
@@ -1068,6 +1152,10 @@
<path name="compress-offload-playback7 bt-sco" />
</path>
+ <path name="compress-offload-playback7 bt-sco-swb">
+ <path name="compress-offload-playback7 bt-sco" />
+ </path>
+
<path name="compress-offload-playback7 speaker-and-display-port">
<path name="compress-offload-playback7 display-port" />
<path name="compress-offload-playback7" />
@@ -1117,6 +1205,11 @@
<path name="compress-offload-playback7" />
</path>
+ <path name="compress-offload-playback7 speaker-and-bt-sco-swb">
+ <path name="compress-offload-playback7 bt-sco-swb" />
+ <path name="compress-offload-playback7" />
+ </path>
+
<path name="compress-offload-playback8">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia15" value="1" />
</path>
@@ -1134,6 +1227,10 @@
<path name="compress-offload-playback8 bt-sco" />
</path>
+ <path name="compress-offload-playback8 bt-sco-swb">
+ <path name="compress-offload-playback8 bt-sco" />
+ </path>
+
<path name="compress-offload-playback8 speaker-and-display-port">
<path name="compress-offload-playback8 display-port" />
<path name="compress-offload-playback8" />
@@ -1183,6 +1280,11 @@
<path name="compress-offload-playback8" />
</path>
+ <path name="compress-offload-playback8 speaker-and-bt-sco-swb">
+ <path name="compress-offload-playback8 bt-sco-swb" />
+ <path name="compress-offload-playback8" />
+ </path>
+
<path name="compress-offload-playback9">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia16" value="1" />
</path>
@@ -1200,6 +1302,10 @@
<path name="compress-offload-playback9 bt-sco" />
</path>
+ <path name="compress-offload-playback9 bt-sco-swb">
+ <path name="compress-offload-playback9 bt-sco" />
+ </path>
+
<path name="compress-offload-playback9 speaker-and-display-port">
<path name="compress-offload-playback9 display-port" />
<path name="compress-offload-playback9" />
@@ -1249,6 +1355,11 @@
<path name="compress-offload-playback9" />
</path>
+ <path name="compress-offload-playback9 speaker-and-bt-sco-swb">
+ <path name="compress-offload-playback9 bt-sco-swb" />
+ <path name="compress-offload-playback9" />
+ </path>
+
<path name="audio-record">
<ctl name="MultiMedia1 Mixer TX_CDC_DMA_TX_3" value="1" />
</path>
@@ -1266,8 +1377,12 @@
<path name="audio-record bt-sco" />
</path>
+ <path name="audio-record bt-sco-swb">
+ <path name="audio-record bt-sco" />
+ </path>
+
<path name="audio-record capture-fm">
- <ctl name="MultiMedia1 Mixer TERT_MI2S_TX" value="1" />
+ <ctl name="MultiMedia1 Mixer SLIM_8_TX" value="1" />
</path>
<path name="audio-record-compress">
@@ -1283,6 +1398,10 @@
<path name="audio-record-compress bt-sco" />
</path>
+ <path name="audio-record-compress bt-sco-swb">
+ <path name="audio-record-compress bt-sco" />
+ </path>
+
<path name="audio-record-compress usb-headset-mic">
<ctl name="MultiMedia8 Mixer USB_AUDIO_TX" value="1" />
</path>
@@ -1300,27 +1419,31 @@
<path name="low-latency-record bt-sco" />
</path>
+ <path name="low-latency-record bt-sco-swb">
+ <path name="low-latency-record bt-sco" />
+ </path>
+
<path name="low-latency-record usb-headset-mic">
<ctl name="MultiMedia8 Mixer USB_AUDIO_TX" value="1" />
</path>
<path name="low-latency-record capture-fm">
- <ctl name="MultiMedia8 Mixer TERT_MI2S_TX" value="1" />
+ <ctl name="MultiMedia8 Mixer SLIM_8_TX" value="1" />
</path>
<path name="fm-virtual-record capture-fm">
- <ctl name="MultiMedia2 Mixer TERT_MI2S_TX" value="1" />
+ <ctl name="MultiMedia2 Mixer SLIM_8_TX" value="1" />
</path>
<path name="play-fm">
<ctl name="Tert MI2S LOOPBACK Volume" value="1" />
- <ctl name="WSA_CDC_DMA_RX_0 Port Mixer TERT_MI2S_TX" value="1" />
+ <ctl name="WSA_CDC_DMA_RX_0 Port Mixer SLIM_8_TX" value="1" />
<ctl name="WSA_CDC_DMA_RX_0_DL_HL Switch" value="1" />
</path>
<path name="play-fm headphones">
<ctl name="Tert MI2S LOOPBACK Volume" value="1" />
- <ctl name="RX_CDC_DMA_RX_0 Port Mixer TERT_MI2S_TX" value="1" />
+ <ctl name="RX_CDC_DMA_RX_0 Port Mixer SLIM_8_TX" value="1" />
<ctl name="RX_CDC_DMA_RX_0_DL_HL Switch" value="1" />
</path>
@@ -1336,6 +1459,10 @@
<path name="incall-rec-uplink" />
</path>
+ <path name="incall-rec-uplink bt-sco-swb">
+ <path name="incall-rec-uplink" />
+ </path>
+
<path name="incall-rec-uplink usb-headset-mic">
<path name="incall-rec-uplink" />
</path>
@@ -1356,6 +1483,10 @@
<path name="incall-rec-uplink-compress" />
</path>
+ <path name="incall-rec-uplink-compress bt-sco-swb">
+ <path name="incall-rec-uplink-compress" />
+ </path>
+
<path name="incall-rec-uplink-compress usb-headset-mic">
<path name="incall-rec-uplink-compress" />
</path>
@@ -1376,6 +1507,10 @@
<path name="incall-rec-downlink" />
</path>
+ <path name="incall-rec-downlink bt-sco-swb">
+ <path name="incall-rec-downlink" />
+ </path>
+
<path name="incall-rec-downlink usb-headset-mic">
<path name="incall-rec-downlink" />
</path>
@@ -1396,6 +1531,10 @@
<path name="incall-rec-downlink-compress" />
</path>
+ <path name="incall-rec-downlink-compress bt-sco-swb">
+ <path name="incall-rec-downlink-compress" />
+ </path>
+
<path name="incall-rec-downlink-compress usb-headset-mic">
<path name="incall-rec-downlink-compress" />
</path>
@@ -1417,6 +1556,10 @@
<path name="incall-rec-uplink-and-downlink" />
</path>
+ <path name="incall-rec-uplink-and-downlink bt-sco-swb">
+ <path name="incall-rec-uplink-and-downlink" />
+ </path>
+
<path name="incall-rec-uplink-and-downlink usb-headset-mic">
<path name="incall-rec-uplink-and-downlink" />
</path>
@@ -1438,6 +1581,10 @@
<path name="incall-rec-uplink-and-downlink-compress" />
</path>
+ <path name="incall-rec-uplink-and-downlink-compress bt-sco-swb">
+ <path name="incall-rec-uplink-and-downlink-compress" />
+ </path>
+
<path name="incall-rec-uplink-and-downlink-compress usb-headset-mic">
<path name="incall-rec-uplink-and-downlink-compress" />
</path>
@@ -1486,6 +1633,10 @@
<path name="compress-voip-call bt-sco" />
</path>
+ <path name="compress-voip-call bt-sco-swb">
+ <path name="compress-voip-call bt-sco" />
+ </path>
+
<path name="compress-voip-call afe-proxy">
<ctl name="AFE_PCM_RX_Voice Mixer Voip" value="1" />
<ctl name="Voip_Tx Mixer AFE_PCM_TX_Voip" value="1" />
@@ -1521,6 +1672,10 @@
<path name="voicemmode1-call bt-sco" />
</path>
+ <path name="voicemmode1-call bt-sco-swb">
+ <path name="voicemmode1-call bt-sco" />
+ </path>
+
<path name="voicemmode1-call afe-proxy">
<ctl name="AFE_PCM_RX_Voice Mixer VoiceMMode1" value="1" />
<ctl name="VoiceMMode1_Tx Mixer AFE_PCM_TX_MMode1" value="1" />
@@ -1566,6 +1721,10 @@
<path name="voicemmode2-call bt-sco" />
</path>
+ <path name="voicemmode2-call bt-sco-swb">
+ <path name="voicemmode2-call bt-sco" />
+ </path>
+
<path name="voicemmode2-call afe-proxy">
<ctl name="AFE_PCM_RX_Voice Mixer VoiceMMode2" value="1" />
<ctl name="VoiceMMode2_Tx Mixer AFE_PCM_TX_MMode2" value="1" />
@@ -1609,6 +1768,10 @@
<path name="audio-playback-voip bt-sco" />
</path>
+ <path name="audio-playback-voip bt-sco-swb">
+ <path name="audio-playback-voip bt-sco" />
+ </path>
+
<path name="audio-playback-voip bt-a2dp">
<ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia10" value="1" />
</path>
@@ -1652,6 +1815,10 @@
<path name="audio-record-voip bt-sco" />
</path>
+ <path name="audio-record-voip bt-sco-swb">
+ <path name="audio-record-voip bt-sco" />
+ </path>
+
<path name="spkr-rx-calib">
<ctl name="WSA_CDC_DMA_RX_0_DL_HL Switch" value="1" />
</path>
@@ -1662,7 +1829,7 @@
<!-- These are actual sound device specific mixer settings -->
<path name="amic2">
<ctl name="TX DEC0 MUX" value="SWR_MIC" />
- <ctl name="TX SMIC MUX0" value="ADC2" />
+ <ctl name="TX SMIC MUX0" value="ADC1" />
<ctl name="TX_CDC_DMA_TX_3 Channels" value="One" />
<ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
<ctl name="ADC2_MIXER Switch" value="1" />
@@ -1849,7 +2016,7 @@
</path>
<path name="handset-mic">
- <path name="dmic1" />
+ <path name="dmic2" />
</path>
<path name="headphones">
@@ -1860,6 +2027,8 @@
<ctl name="RX INT1_1 MIX1 INP0" value="RX1" />
<ctl name="RX INT0 DEM MUX" value="CLSH_DSM_OUT" />
<ctl name="RX INT1 DEM MUX" value="CLSH_DSM_OUT" />
+ <ctl name="RX_HPH_PWR_MODE" value="LOHIFI" />
+ <ctl name="RX HPH Mode" value="CLS_H_LOHIFI" />
<ctl name="RX_COMP1 Switch" value="1" />
<ctl name="RX_COMP2 Switch" value="1" />
<ctl name="HPHL_COMP Switch" value="1" />
@@ -1869,7 +2038,6 @@
</path>
<path name="headphones-44.1">
- <ctl name="RX_Native" value="ON" />
<path name="headphones" />
</path>
@@ -1888,6 +2056,7 @@
<path name="headset-mic">
<path name="amic2" />
+ <ctl name="TX_DEC0 Volume" value="84" />
</path>
<path name="headset-mic-liquid">
@@ -2012,6 +2181,12 @@
<path name="bt-sco-mic-wb">
</path>
+ <path name="bt-sco-headset-swb">
+ </path>
+
+ <path name="bt-sco-mic-swb">
+ </path>
+
<path name="usb-headset-mic">
</path>
@@ -2022,17 +2197,17 @@
<path name="handset-dmic-endfire">
<ctl name="TX_CDC_DMA_TX_3 Channels" value="Two" />
<ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
- <ctl name="TX DMIC MUX0" value="DMIC0" />
+ <ctl name="TX DMIC MUX0" value="DMIC1" />
<ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
- <ctl name="TX DMIC MUX1" value="DMIC2" />
+ <ctl name="TX DMIC MUX1" value="DMIC3" />
</path>
<path name="speaker-dmic-endfire">
<ctl name="TX_CDC_DMA_TX_3 Channels" value="Two" />
<ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
- <ctl name="TX DMIC MUX0" value="DMIC0" />
+ <ctl name="TX DMIC MUX0" value="DMIC4" />
<ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
- <ctl name="TX DMIC MUX1" value="DMIC4" />
+ <ctl name="TX DMIC MUX1" value="DMIC1" />
</path>
<path name="dmic-endfire">
@@ -2099,9 +2274,9 @@
<path name="speaker-dmic-broadside">
<ctl name="TX_CDC_DMA_TX_3 Channels" value="Two" />
<ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
- <ctl name="TX DMIC MUX0" value="DMIC0" />
+ <ctl name="TX DMIC MUX0" value="DMIC4" />
<ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
- <ctl name="TX DMIC MUX1" value="DMIC4" />
+ <ctl name="TX DMIC MUX1" value="DMIC1" />
</path>
<path name="dmic-broadside">
@@ -2127,9 +2302,9 @@
<path name="speaker-tmic">
<ctl name="TX_CDC_DMA_TX_3 Channels" value="Three" />
<ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
- <ctl name="TX DMIC MUX0" value="DMIC0" />
+ <ctl name="TX DMIC MUX0" value="DMIC4" />
<ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
- <ctl name="TX DMIC MUX1" value="DMIC2" />
+ <ctl name="TX DMIC MUX1" value="DMIC1" />
<ctl name="TX_AIF1_CAP Mixer DEC2" value="1" />
<ctl name="TX DMIC MUX2" value="DMIC3" />
</path>
@@ -2142,13 +2317,13 @@
<path name="speaker-qmic">
<ctl name="TX_CDC_DMA_TX_3 Channels" value="Four" />
<ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
- <ctl name="TX DMIC MUX0" value="DMIC0" />
+ <ctl name="TX DMIC MUX0" value="DMIC4" />
<ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
<ctl name="TX DMIC MUX1" value="DMIC1" />
<ctl name="TX_AIF1_CAP Mixer DEC2" value="1" />
- <ctl name="TX DMIC MUX2" value="DMIC2" />
+ <ctl name="TX DMIC MUX2" value="DMIC3" />
<ctl name="TX_AIF1_CAP Mixer DEC3" value="1" />
- <ctl name="TX DMIC MUX3" value="DMIC4" />
+ <ctl name="TX DMIC MUX3" value="DMIC0" />
</path>
<path name="speaker-qmic-liquid">
@@ -2205,6 +2380,7 @@
<path name="voice-tty-full-headset-mic">
<path name="amic2" />
<ctl name="ADC2 Volume" value="0" />
+ <ctl name="TX_DEC0 Volume" value="84" />
</path>
<path name="voice-tty-hco-headset-mic">
@@ -2408,6 +2584,10 @@
<path name="mmap-playback bt-sco" />
</path>
+ <path name="mmap-playback bt-sco-swb">
+ <path name="mmap-playback bt-sco" />
+ </path>
+
<path name="mmap-playback afe-proxy">
<ctl name="AFE_PCM_RX Audio Mixer MultiMedia16" value="1" />
</path>
@@ -2456,8 +2636,12 @@
<path name="mmap-record bt-sco" />
</path>
+ <path name="mmap-record bt-sco-swb">
+ <path name="mmap-record bt-sco" />
+ </path>
+
<path name="mmap-record capture-fm">
- <ctl name="MultiMedia16 Mixer TERT_MI2S_TX" value="1" />
+ <ctl name="MultiMedia16 Mixer SLIM_8_TX" value="1" />
</path>
<path name="mmap-record usb-headset-mic">
@@ -2516,6 +2700,10 @@
<path name="incall_music_uplink" />
</path>
+ <path name="incall_music_uplink bt-sco-swb">
+ <path name="incall_music_uplink" />
+ </path>
+
<path name="incall_music_uplink speaker-and-display-port">
<path name="incall_music_uplink" />
</path>
diff --git a/configs/lito/mixer_paths_qrd.xml b/configs/lito/mixer_paths_qrd.xml
index 39d49bc..9b6dc48 100644
--- a/configs/lito/mixer_paths_qrd.xml
+++ b/configs/lito/mixer_paths_qrd.xml
@@ -163,12 +163,12 @@
<!-- usb headset end -->
<!-- fm -->
<ctl name="Tert MI2S LOOPBACK Volume" value="0" />
- <ctl name="WSA_CDC_DMA_RX_0 Port Mixer TERT_MI2S_TX" value="0" />
+ <ctl name="WSA_CDC_DMA_RX_0 Port Mixer SLIM_8_TX" value="0" />
<ctl name="WSA_CDC_DMA_RX_0_DL_HL Switch" value="0" />
- <ctl name="RX_CDC_DMA_RX_0 Port Mixer TERT_MI2S_TX" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0 Port Mixer SLIM_8_TX" value="0" />
<ctl name="RX_CDC_DMA_RX_0_DL_HL Switch" value="0" />
- <ctl name="MultiMedia1 Mixer TERT_MI2S_TX" value="0" />
- <ctl name="MultiMedia2 Mixer TERT_MI2S_TX" value="0" />
+ <ctl name="MultiMedia1 Mixer SLIM_8_TX" value="0" />
+ <ctl name="MultiMedia2 Mixer SLIM_8_TX" value="0" />
<!-- fm end -->
<!-- Multimode Voice1 -->
@@ -283,7 +283,6 @@
<!-- RX Controls -->
<ctl name="RX_MACRO RX0 MUX" value="ZERO" />
<ctl name="RX_MACRO RX1 MUX" value="ZERO" />
- <ctl name="RX_Native" value="OFF" />
<ctl name="RX_CDC_DMA_RX_0 Channels" value="One" />
<ctl name="RX INT0_1 MIX1 INP0" value="ZERO" />
<ctl name="RX INT0_1 MIX1 INP1" value="ZERO" />
@@ -376,10 +375,6 @@
<ctl name="RX_HPH_PWR_MODE" value="ULP" />
<ctl name="RX HPH Mode" value="CLS_H_ULP" />
- <!-- TX HDR AMIC Default connections -->
- <ctl name="TX HDR12" value="0" />
- <ctl name="TX HDR34" value="0" />
-
<!-- IIR/voice anc -->
<ctl name="IIR0 Band1" id ="0" value="268435456" />
<ctl name="IIR0 Band1" id ="1" value="0" />
@@ -429,7 +424,7 @@
<!-- defaults for mmap record -->
<ctl name="MultiMedia16 Mixer TX_CDC_DMA_TX_3" value="0" />
<ctl name="MultiMedia16 Mixer SLIM_7_TX" value="0" />
- <ctl name="MultiMedia16 Mixer TERT_MI2S_TX" value="0" />
+ <ctl name="MultiMedia16 Mixer SLIM_8_TX" value="0" />
<ctl name="MultiMedia16 Mixer USB_AUDIO_TX" value="0" />
<!-- These are audio route (FE to BE) specific mixer settings -->
@@ -453,6 +448,18 @@
<ctl name="AUDIO_REF_EC_UL1 MUX" value="RX_CDC_DMA_RX_0" />
</path>
+ <path name="echo-reference-voip">
+ <ctl name="AUDIO_REF_EC_UL10 MUX" value="WSA_CDC_DMA_RX_0" />
+ </path>
+
+ <path name="echo-reference-voip handset">
+ <ctl name="AUDIO_REF_EC_UL10 MUX" value="RX_CDC_DMA_RX_0" />
+ </path>
+
+ <path name="echo-reference-voip headphones">
+ <ctl name="AUDIO_REF_EC_UL10 MUX" value="RX_CDC_DMA_RX_0" />
+ </path>
+
<path name="deep-buffer-playback">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia1" value="1" />
</path>
@@ -483,6 +490,10 @@
<path name="deep-buffer-playback bt-sco" />
</path>
+ <path name="deep-buffer-playback bt-sco-swb">
+ <path name="deep-buffer-playback bt-sco" />
+ </path>
+
<path name="deep-buffer-playback afe-proxy">
<ctl name="AFE_PCM_RX Audio Mixer MultiMedia1" value="1" />
</path>
@@ -519,6 +530,11 @@
<path name="deep-buffer-playback" />
</path>
+ <path name="deep-buffer-playback speaker-and-bt-sco-swb">
+ <path name="deep-buffer-playback bt-sco-swb" />
+ <path name="deep-buffer-playback" />
+ </path>
+
<path name="low-latency-playback">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia5" value="1" />
</path>
@@ -544,6 +560,10 @@
<path name="low-latency-playback bt-sco" />
</path>
+ <path name="low-latency-playback bt-sco-swb">
+ <path name="low-latency-playback bt-sco" />
+ </path>
+
<path name="low-latency-playback speaker-and-display-port">
<path name="low-latency-playback display-port" />
<path name="low-latency-playback" />
@@ -585,6 +605,11 @@
<path name="low-latency-playback" />
</path>
+ <path name="low-latency-playback speaker-and-bt-sco-swb">
+ <path name="low-latency-playback bt-sco-swb" />
+ <path name="low-latency-playback" />
+ </path>
+
<path name="audio-ull-playback">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia8" value="1" />
</path>
@@ -619,6 +644,10 @@
<path name="audio-ull-playback bt-sco" />
</path>
+ <path name="audio-ull-playback bt-sco-swb">
+ <path name="audio-ull-playback bt-sco" />
+ </path>
+
<path name="audio-ull-playback speaker-and-display-port">
<path name="audio-ull-playback display-port" />
<path name="audio-ull-playback" />
@@ -646,6 +675,11 @@
<path name="audio-ull-playback" />
</path>
+ <path name="audio-ull-playback speaker-and-bt-sco-swb">
+ <path name="audio-ull-playback bt-sco-swb" />
+ <path name="audio-ull-playback" />
+ </path>
+
<path name="multi-channel-playback display-port">
<ctl name="DISPLAY_PORT Mixer MultiMedia2" value="1" />
</path>
@@ -683,6 +717,10 @@
<path name="compress-offload-playback bt-sco" />
</path>
+ <path name="compress-offload-playback bt-sco-swb">
+ <path name="compress-offload-playback bt-sco" />
+ </path>
+
<path name="compress-offload-playback speaker-and-display-port">
<path name="compress-offload-playback display-port" />
<path name="compress-offload-playback" />
@@ -728,6 +766,11 @@
<path name="compress-offload-playback" />
</path>
+ <path name="compress-offload-playback speaker-and-bt-sco-swb">
+ <path name="compress-offload-playback bt-sco-swb" />
+ <path name="compress-offload-playback" />
+ </path>
+
<path name="compress-offload-playback2">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia7" value="1" />
</path>
@@ -749,6 +792,10 @@
<path name="compress-offload-playback2 bt-sco" />
</path>
+ <path name="compress-offload-playback2 bt-sco-swb">
+ <path name="compress-offload-playback2 bt-sco" />
+ </path>
+
<path name="compress-offload-playback2 speaker-and-display-port">
<path name="compress-offload-playback2 display-port" />
<path name="compress-offload-playback2" />
@@ -794,6 +841,11 @@
<path name="compress-offload-playback2" />
</path>
+ <path name="compress-offload-playback2 speaker-and-bt-sco-swb">
+ <path name="compress-offload-playback2 bt-sco-swb" />
+ <path name="compress-offload-playback2" />
+ </path>
+
<path name="compress-offload-playback3">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia10" value="1" />
</path>
@@ -815,6 +867,10 @@
<path name="compress-offload-playback3 bt-sco" />
</path>
+ <path name="compress-offload-playback3 bt-sco-swb">
+ <path name="compress-offload-playback3 bt-sco" />
+ </path>
+
<path name="compress-offload-playback3 speaker-and-display-port">
<path name="compress-offload-playback3 display-port" />
<path name="compress-offload-playback3" />
@@ -860,6 +916,11 @@
<path name="compress-offload-playback3" />
</path>
+ <path name="compress-offload-playback3 speaker-and-bt-sco-swb">
+ <path name="compress-offload-playback3 bt-sco-swb" />
+ <path name="compress-offload-playback3" />
+ </path>
+
<path name="compress-offload-playback4">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia11" value="1" />
</path>
@@ -881,6 +942,10 @@
<path name="compress-offload-playback4 bt-sco" />
</path>
+ <path name="compress-offload-playback4 bt-sco-swb">
+ <path name="compress-offload-playback4 bt-sco" />
+ </path>
+
<path name="compress-offload-playback4 speaker-and-display-port">
<path name="compress-offload-playback4 display-port" />
<path name="compress-offload-playback4" />
@@ -927,6 +992,11 @@
<path name="compress-offload-playback4" />
</path>
+ <path name="compress-offload-playback4 speaker-and-bt-sco-swb">
+ <path name="compress-offload-playback4 bt-sco-swb" />
+ <path name="compress-offload-playback4" />
+ </path>
+
<path name="compress-offload-playback5">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia12" value="1" />
</path>
@@ -948,6 +1018,10 @@
<path name="compress-offload-playback5 bt-sco" />
</path>
+ <path name="compress-offload-playback5 bt-sco-swb">
+ <path name="compress-offload-playback5 bt-sco" />
+ </path>
+
<path name="compress-offload-playback5 speaker-and-display-port">
<path name="compress-offload-playback5 display-port" />
<path name="compress-offload-playback5" />
@@ -993,6 +1067,11 @@
<path name="compress-offload-playback5" />
</path>
+ <path name="compress-offload-playback5 speaker-and-bt-sco-swb">
+ <path name="compress-offload-playback5 bt-sco-swb" />
+ <path name="compress-offload-playback5" />
+ </path>
+
<path name="compress-offload-playback6">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia13" value="1" />
</path>
@@ -1014,6 +1093,10 @@
<path name="compress-offload-playback6 bt-sco" />
</path>
+ <path name="compress-offload-playback6 bt-sco-swb">
+ <path name="compress-offload-playback6 bt-sco" />
+ </path>
+
<path name="compress-offload-playback6 speaker-and-display-port">
<path name="compress-offload-playback6 display-port" />
<path name="compress-offload-playback6" />
@@ -1059,6 +1142,11 @@
<path name="compress-offload-playback6" />
</path>
+ <path name="compress-offload-playback6 speaker-and-bt-sco-swb">
+ <path name="compress-offload-playback6 bt-sco-swb" />
+ <path name="compress-offload-playback6" />
+ </path>
+
<path name="compress-offload-playback7">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia14" value="1" />
</path>
@@ -1080,6 +1168,10 @@
<path name="compress-offload-playback7 bt-sco" />
</path>
+ <path name="compress-offload-playback7 bt-sco-swb">
+ <path name="compress-offload-playback7 bt-sco" />
+ </path>
+
<path name="compress-offload-playback7 speaker-and-display-port">
<path name="compress-offload-playback7 display-port" />
<path name="compress-offload-playback7" />
@@ -1125,6 +1217,11 @@
<path name="compress-offload-playback7" />
</path>
+ <path name="compress-offload-playback7 speaker-and-bt-sco-swb">
+ <path name="compress-offload-playback7 bt-sco-swb" />
+ <path name="compress-offload-playback7" />
+ </path>
+
<path name="compress-offload-playback8">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia15" value="1" />
</path>
@@ -1146,6 +1243,10 @@
<path name="compress-offload-playback8 bt-sco" />
</path>
+ <path name="compress-offload-playback8 bt-sco-swb">
+ <path name="compress-offload-playback8 bt-sco" />
+ </path>
+
<path name="compress-offload-playback8 speaker-and-display-port">
<path name="compress-offload-playback8 display-port" />
<path name="compress-offload-playback8" />
@@ -1191,6 +1292,11 @@
<path name="compress-offload-playback8" />
</path>
+ <path name="compress-offload-playback8 speaker-and-bt-sco-swb">
+ <path name="compress-offload-playback8 bt-sco-swb" />
+ <path name="compress-offload-playback8" />
+ </path>
+
<path name="compress-offload-playback9">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia16" value="1" />
</path>
@@ -1212,6 +1318,10 @@
<path name="compress-offload-playback9 bt-sco" />
</path>
+ <path name="compress-offload-playback9 bt-sco-swb">
+ <path name="compress-offload-playback9 bt-sco" />
+ </path>
+
<path name="compress-offload-playback9 speaker-and-display-port">
<path name="compress-offload-playback9 display-port" />
<path name="compress-offload-playback9" />
@@ -1257,6 +1367,11 @@
<path name="compress-offload-playback9" />
</path>
+ <path name="compress-offload-playback9 speaker-and-bt-sco-swb">
+ <path name="compress-offload-playback9 bt-sco-swb" />
+ <path name="compress-offload-playback9" />
+ </path>
+
<path name="audio-record">
<ctl name="MultiMedia1 Mixer TX_CDC_DMA_TX_3" value="1" />
</path>
@@ -1274,8 +1389,12 @@
<path name="audio-record bt-sco" />
</path>
+ <path name="audio-record bt-sco-swb">
+ <path name="audio-record bt-sco" />
+ </path>
+
<path name="audio-record capture-fm">
- <ctl name="MultiMedia1 Mixer TERT_MI2S_TX" value="1" />
+ <ctl name="MultiMedia1 Mixer SLIM_8_TX" value="1" />
</path>
<path name="audio-record-compress">
@@ -1291,6 +1410,10 @@
<path name="audio-record-compress bt-sco" />
</path>
+ <path name="audio-record-compress bt-sco-swb">
+ <path name="audio-record-compress bt-sco" />
+ </path>
+
<path name="audio-record-compress usb-headset-mic">
<ctl name="MultiMedia8 Mixer USB_AUDIO_TX" value="1" />
</path>
@@ -1308,27 +1431,31 @@
<path name="low-latency-record bt-sco" />
</path>
+ <path name="low-latency-record bt-sco-swb">
+ <path name="low-latency-record bt-sco" />
+ </path>
+
<path name="low-latency-record usb-headset-mic">
<ctl name="MultiMedia8 Mixer USB_AUDIO_TX" value="1" />
</path>
<path name="low-latency-record capture-fm">
- <ctl name="MultiMedia8 Mixer TERT_MI2S_TX" value="1" />
+ <ctl name="MultiMedia8 Mixer SLIM_8_TX" value="1" />
</path>
<path name="fm-virtual-record capture-fm">
- <ctl name="MultiMedia2 Mixer TERT_MI2S_TX" value="1" />
+ <ctl name="MultiMedia2 Mixer SLIM_8_TX" value="1" />
</path>
<path name="play-fm">
<ctl name="Tert MI2S LOOPBACK Volume" value="1" />
- <ctl name="WSA_CDC_DMA_RX_0 Port Mixer TERT_MI2S_TX" value="1" />
+ <ctl name="WSA_CDC_DMA_RX_0 Port Mixer SLIM_8_TX" value="1" />
<ctl name="WSA_CDC_DMA_RX_0_DL_HL Switch" value="1" />
</path>
<path name="play-fm headphones">
<ctl name="Tert MI2S LOOPBACK Volume" value="1" />
- <ctl name="RX_CDC_DMA_RX_0 Port Mixer TERT_MI2S_TX" value="1" />
+ <ctl name="RX_CDC_DMA_RX_0 Port Mixer SLIM_8_TX" value="1" />
<ctl name="RX_CDC_DMA_RX_0_DL_HL Switch" value="1" />
</path>
@@ -1344,6 +1471,10 @@
<path name="incall-rec-uplink" />
</path>
+ <path name="incall-rec-uplink bt-sco-swb">
+ <path name="incall-rec-uplink" />
+ </path>
+
<path name="incall-rec-uplink usb-headset-mic">
<path name="incall-rec-uplink" />
</path>
@@ -1364,6 +1495,10 @@
<path name="incall-rec-uplink-compress" />
</path>
+ <path name="incall-rec-uplink-compress bt-sco-swb">
+ <path name="incall-rec-uplink-compress" />
+ </path>
+
<path name="incall-rec-uplink-compress usb-headset-mic">
<path name="incall-rec-uplink-compress" />
</path>
@@ -1384,6 +1519,10 @@
<path name="incall-rec-downlink" />
</path>
+ <path name="incall-rec-downlink bt-sco-swb">
+ <path name="incall-rec-downlink" />
+ </path>
+
<path name="incall-rec-downlink usb-headset-mic">
<path name="incall-rec-downlink" />
</path>
@@ -1404,6 +1543,10 @@
<path name="incall-rec-downlink-compress" />
</path>
+ <path name="incall-rec-downlink-compress bt-sco-swb">
+ <path name="incall-rec-downlink-compress" />
+ </path>
+
<path name="incall-rec-downlink-compress usb-headset-mic">
<path name="incall-rec-downlink-compress" />
</path>
@@ -1425,6 +1568,10 @@
<path name="incall-rec-uplink-and-downlink" />
</path>
+ <path name="incall-rec-uplink-and-downlink bt-sco-swb">
+ <path name="incall-rec-uplink-and-downlink" />
+ </path>
+
<path name="incall-rec-uplink-and-downlink usb-headset-mic">
<path name="incall-rec-uplink-and-downlink" />
</path>
@@ -1446,6 +1593,10 @@
<path name="incall-rec-uplink-and-downlink-compress" />
</path>
+ <path name="incall-rec-uplink-and-downlink-compress bt-sco-swb">
+ <path name="incall-rec-uplink-and-downlink-compress" />
+ </path>
+
<path name="incall-rec-uplink-and-downlink-compress usb-headset-mic">
<path name="incall-rec-uplink-and-downlink-compress" />
</path>
@@ -1498,6 +1649,10 @@
<path name="compress-voip-call bt-sco" />
</path>
+ <path name="compress-voip-call bt-sco-swb">
+ <path name="compress-voip-call bt-sco" />
+ </path>
+
<path name="compress-voip-call afe-proxy">
<ctl name="AFE_PCM_RX_Voice Mixer Voip" value="1" />
<ctl name="Voip_Tx Mixer AFE_PCM_TX_Voip" value="1" />
@@ -1538,6 +1693,10 @@
<path name="voicemmode1-call bt-sco" />
</path>
+ <path name="voicemmode1-call bt-sco-swb">
+ <path name="voicemmode1-call bt-sco" />
+ </path>
+
<path name="voicemmode1-call afe-proxy">
<ctl name="AFE_PCM_RX_Voice Mixer VoiceMMode1" value="1" />
<ctl name="VoiceMMode1_Tx Mixer AFE_PCM_TX_MMode1" value="1" />
@@ -1588,6 +1747,10 @@
<path name="voicemmode2-call bt-sco" />
</path>
+ <path name="voicemmode2-call bt-sco-swb">
+ <path name="voicemmode2-call bt-sco" />
+ </path>
+
<path name="voicemmode2-call afe-proxy">
<ctl name="AFE_PCM_RX_Voice Mixer VoiceMMode2" value="1" />
<ctl name="VoiceMMode2_Tx Mixer AFE_PCM_TX_MMode2" value="1" />
@@ -1635,6 +1798,14 @@
<path name="audio-playback-voip bt-sco" />
</path>
+ <path name="audio-playback-voip bt-sco-swb">
+ <path name="audio-playback-voip bt-sco" />
+ </path>
+
+ <path name="audio-playback-voip bt-a2dp">
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia10" value="1" />
+ </path>
+
<path name="audio-playback-voip afe-proxy">
<ctl name="AFE_PCM_RX Audio Mixer MultiMedia10" value="1" />
</path>
@@ -1674,6 +1845,10 @@
<path name="audio-record-voip bt-sco" />
</path>
+ <path name="audio-record-voip bt-sco-swb">
+ <path name="audio-record-voip bt-sco" />
+ </path>
+
<path name="bt-a2dp">
<ctl name="SLIM7_RX ADM Channels" value="Two" />
</path>
@@ -1817,6 +1992,10 @@
<path name="mmap-playback bt-sco" />
</path>
+ <path name="mmap-playback bt-sco-swb">
+ <path name="mmap-playback bt-sco" />
+ </path>
+
<path name="mmap-playback afe-proxy">
<ctl name="AFE_PCM_RX Audio Mixer MultiMedia16" value="1" />
</path>
@@ -1865,8 +2044,12 @@
<path name="mmap-record bt-sco" />
</path>
+ <path name="mmap-record bt-sco-swb">
+ <path name="mmap-record bt-sco" />
+ </path>
+
<path name="mmap-record capture-fm">
- <ctl name="MultiMedia16 Mixer TERT_MI2S_TX" value="1" />
+ <ctl name="MultiMedia16 Mixer SLIM_8_TX" value="1" />
</path>
<path name="mmap-record usb-headset-mic">
@@ -1921,6 +2104,10 @@
<path name="incall_music_uplink" />
</path>
+ <path name="incall_music_uplink bt-sco-swb">
+ <path name="incall_music_uplink" />
+ </path>
+
<path name="incall_music_uplink speaker-and-display-port">
<path name="incall_music_uplink" />
</path>
@@ -1986,7 +2173,7 @@
<path name="amic2">
<ctl name="TX DEC0 MUX" value="SWR_MIC" />
- <ctl name="TX SMIC MUX0" value="ADC2" />
+ <ctl name="TX SMIC MUX0" value="ADC1" />
<ctl name="TX_CDC_DMA_TX_3 Channels" value="One" />
<ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
<ctl name="ADC2_MIXER Switch" value="1" />
@@ -2093,7 +2280,7 @@
</path>
<path name="speaker-mic">
- <path name="dmic2" />
+ <path name="dmic3" />
</path>
<path name="speaker-protected">
@@ -2155,6 +2342,8 @@
<ctl name="RX INT1_1 MIX1 INP0" value="RX1" />
<ctl name="RX INT0 DEM MUX" value="CLSH_DSM_OUT" />
<ctl name="RX INT1 DEM MUX" value="CLSH_DSM_OUT" />
+ <ctl name="RX_HPH_PWR_MODE" value="LOHIFI" />
+ <ctl name="RX HPH Mode" value="CLS_H_LOHIFI" />
<ctl name="RX_COMP1 Switch" value="1" />
<ctl name="RX_COMP2 Switch" value="1" />
<ctl name="HPHL_COMP Switch" value="1" />
@@ -2164,7 +2353,6 @@
</path>
<path name="headphones-44.1">
- <ctl name="RX_Native" value="ON" />
<path name="headphones" />
</path>
@@ -2272,6 +2460,12 @@
<path name="bt-sco-mic-wb">
</path>
+ <path name="bt-sco-mic-swb">
+ </path>
+
+ <path name="bt-sco-headset-swb">
+ </path>
+
<path name="usb-headset-mic">
</path>
@@ -2288,7 +2482,11 @@
</path>
<path name="speaker-dmic-endfire">
- <path name="handset-dmic-endfire" />
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="Two" />
+ <ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="TX DMIC MUX0" value="DMIC2" />
+ <ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
+ <ctl name="TX DMIC MUX0" value="DMIC1" />
</path>
<path name="dmic-endfire">
@@ -2387,6 +2585,36 @@
<path name="three-mic" />
</path>
+ <path name="speaker-tmic">
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="Three" />
+ <ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="TX DMIC MUX0" value="DMIC2" />
+ <ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
+ <ctl name="TX DMIC MUX1" value="DMIC1" />
+ <ctl name="TX_AIF1_CAP Mixer DEC2" value="1" />
+ <ctl name="TX DMIC MUX2" value="DMIC3" />
+ </path>
+
+ <path name="voice-speaker-tmic">
+ <path name="speaker-tmic" />
+ </path>
+
+ <path name="speaker-qmic">
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="Four" />
+ <ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="TX DMIC MUX0" value="DMIC2" />
+ <ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
+ <ctl name="TX DMIC MUX1" value="DMIC1" />
+ <ctl name="TX_AIF1_CAP Mixer DEC2" value="1" />
+ <ctl name="TX DMIC MUX2" value="DMIC3" />
+ <ctl name="TX_AIF1_CAP Mixer DEC4" value="1" />
+ <ctl name="TX DMIC MUX2" value="DMIC3" />
+ </path>
+
+ <path name="voice-speaker-qmic">
+ <path name="speaker-qmic" />
+ </path>
+
<path name="unprocessed-quad-mic">
<path name="quad-mic" />
</path>
diff --git a/configs/lito/sound_trigger_mixer_paths.xml b/configs/lito/sound_trigger_mixer_paths.xml
index 3ab9c0f..8cb6622 100644
--- a/configs/lito/sound_trigger_mixer_paths.xml
+++ b/configs/lito/sound_trigger_mixer_paths.xml
@@ -213,7 +213,7 @@
<path name="listen-ape-handset-mic">
<ctl name="VA_AIF1_CAP Mixer DEC0" value="1" />
<ctl name="VA DEC0 MUX" value="MSM_DMIC" />
- <ctl name="VA DMIC MUX0" value="DMIC0" />
+ <ctl name="VA DMIC MUX0" value="DMIC4" />
</path>
<path name="listen-ape-handset-mic-preproc">
@@ -226,8 +226,8 @@
<ctl name="VA_AIF1_CAP Mixer DEC1" value="1" />
<ctl name="VA DEC0 MUX" value="MSM_DMIC" />
<ctl name="VA DEC1 MUX" value="MSM_DMIC" />
- <ctl name="VA DMIC MUX0" value="DMIC0" />
- <ctl name="VA DMIC MUX1" value="DMIC1" />
+ <ctl name="VA DMIC MUX0" value="DMIC4" />
+ <ctl name="VA DMIC MUX1" value="DMIC0" />
</path>
<path name="listen-ape-handset-tmic">
@@ -238,9 +238,9 @@
<ctl name="VA DEC0 MUX" value="MSM_DMIC" />
<ctl name="VA DEC1 MUX" value="MSM_DMIC" />
<ctl name="VA DEC2 MUX" value="MSM_DMIC" />
- <ctl name="VA DMIC MUX0" value="DMIC0" />
- <ctl name="VA DMIC MUX1" value="DMIC1" />
- <ctl name="VA DMIC MUX2" value="DMIC4" />
+ <ctl name="VA DMIC MUX0" value="DMIC4" />
+ <ctl name="VA DMIC MUX1" value="DMIC0" />
+ <ctl name="VA DMIC MUX2" value="DMIC1" />
</path>
<path name="listen-ape-handset-qmic">
@@ -253,16 +253,19 @@
<ctl name="VA DEC1 MUX" value="MSM_DMIC" />
<ctl name="VA DEC2 MUX" value="MSM_DMIC" />
<ctl name="VA DEC3 MUX" value="MSM_DMIC" />
- <ctl name="VA DMIC MUX0" value="DMIC0" />
- <ctl name="VA DMIC MUX1" value="DMIC1" />
- <ctl name="VA DMIC MUX2" value="DMIC2" />
- <ctl name="VA DMIC MUX3" value="DMIC4" />
+ <ctl name="VA DMIC MUX0" value="DMIC4" />
+ <ctl name="VA DMIC MUX1" value="DMIC0" />
+ <ctl name="VA DMIC MUX2" value="DMIC1" />
+ <ctl name="VA DMIC MUX3" value="DMIC2" />
</path>
<path name="listen-ape-headset-mic">
<ctl name="VA_AIF1_CAP Mixer DEC0" value="1" />
<ctl name="VA DEC0 MUX" value="SWR_MIC" />
- <ctl name="VA SMIC MUX0" value="ADC2" />
+ <ctl name="VA SMIC MUX0" value="ADC1" />
+ <ctl name="ADC2 Volume" value="62" />
+ <ctl name="ADC2_MIXER Switch" value="1" />
+ <ctl name="ADC2 MUX" value="INP2" />
</path>
<path name="echo-reference">
diff --git a/configs/lito/sound_trigger_mixer_paths_qrd.xml b/configs/lito/sound_trigger_mixer_paths_qrd.xml
index 58229ed..ccbdd94 100644
--- a/configs/lito/sound_trigger_mixer_paths_qrd.xml
+++ b/configs/lito/sound_trigger_mixer_paths_qrd.xml
@@ -28,14 +28,14 @@
<mixer>
<!-- These are the initial mixer settings -->
- <ctl name="LSM1 Mixer TX_CDC_DMA_TX_3" value="0" />
- <ctl name="LSM2 Mixer TX_CDC_DMA_TX_3" value="0" />
- <ctl name="LSM3 Mixer TX_CDC_DMA_TX_3" value="0" />
- <ctl name="LSM4 Mixer TX_CDC_DMA_TX_3" value="0" />
- <ctl name="LSM5 Mixer TX_CDC_DMA_TX_3" value="0" />
- <ctl name="LSM6 Mixer TX_CDC_DMA_TX_3" value="0" />
- <ctl name="LSM7 Mixer TX_CDC_DMA_TX_3" value="0" />
- <ctl name="LSM8 Mixer TX_CDC_DMA_TX_3" value="0" />
+ <ctl name="LSM1 Mixer VA_CDC_DMA_TX_0" value="0" />
+ <ctl name="LSM2 Mixer VA_CDC_DMA_TX_0" value="0" />
+ <ctl name="LSM3 Mixer VA_CDC_DMA_TX_0" value="0" />
+ <ctl name="LSM4 Mixer VA_CDC_DMA_TX_0" value="0" />
+ <ctl name="LSM5 Mixer VA_CDC_DMA_TX_0" value="0" />
+ <ctl name="LSM6 Mixer VA_CDC_DMA_TX_0" value="0" />
+ <ctl name="LSM7 Mixer VA_CDC_DMA_TX_0" value="0" />
+ <ctl name="LSM8 Mixer VA_CDC_DMA_TX_0" value="0" />
<ctl name="LSM1 Port" value="None" />
<ctl name="LSM2 Port" value="None" />
<ctl name="LSM3 Port" value="None" />
@@ -44,171 +44,228 @@
<ctl name="LSM6 Port" value="None" />
<ctl name="LSM7 Port" value="None" />
<ctl name="LSM8 Port" value="None" />
- <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="None" />
- <ctl name="TX_CDC_DMA_TX_3 Channels" value="One" />
- <ctl name="TX_AIF1_CAP Mixer DEC0" value="0" />
- <ctl name="TX_AIF1_CAP Mixer DEC1" value="0" />
- <ctl name="TX_AIF1_CAP Mixer DEC2" value="0" />
- <ctl name="TX_AIF1_CAP Mixer DEC3" value="0" />
- <ctl name="TX DEC0 MUX" value="MSM_DMIC" />
- <ctl name="TX DMIC MUX0" value="ZERO" />
- <ctl name="TX SMIC MUX0" value="ZERO" />
- <ctl name="TX DEC1 MUX" value="MSM_DMIC" />
- <ctl name="TX DMIC MUX1" value="ZERO" />
- <ctl name="TX SMIC MUX1" value="ZERO" />
- <ctl name="TX DEC2 MUX" value="MSM_DMIC" />
- <ctl name="TX DMIC MUX2" value="ZERO" />
- <ctl name="TX DEC3 MUX" value="MSM_DMIC" />
- <ctl name="TX DMIC MUX3" value="ZERO" />
- <ctl name="ADC1_MIXER Switch" value="0" />
- <ctl name="ADC2_MIXER Switch" value="0" />
- <ctl name="ADC2 MUX" value="ZERO" />
+ <ctl name="VA_CDC_DMA_TX_0 Channels" value="One" />
+ <ctl name="VA_AIF1_CAP Mixer DEC0" value="0" />
+ <ctl name="VA_AIF1_CAP Mixer DEC1" value="0" />
+ <ctl name="VA_AIF1_CAP Mixer DEC2" value="0" />
+ <ctl name="VA_AIF1_CAP Mixer DEC3" value="0" />
+ <ctl name="VA_AIF1_CAP Mixer DEC4" value="0" />
+ <ctl name="VA_AIF1_CAP Mixer DEC5" value="0" />
+ <ctl name="VA_AIF1_CAP Mixer DEC6" value="0" />
+ <ctl name="VA_AIF1_CAP Mixer DEC7" value="0" />
+ <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 DEC3 MUX" value="MSM_DMIC" />
+ <ctl name="VA DEC4 MUX" value="MSM_DMIC" />
+ <ctl name="VA DEC5 MUX" value="MSM_DMIC" />
+ <ctl name="VA DEC6 MUX" value="MSM_DMIC" />
+ <ctl name="VA DEC7 MUX" value="MSM_DMIC" />
+ <ctl name="VA DMIC MUX0" value="ZERO" />
+ <ctl name="VA DMIC MUX1" value="ZERO" />
+ <ctl name="VA DMIC MUX2" value="ZERO" />
+ <ctl name="VA DMIC MUX3" value="ZERO" />
+ <ctl name="VA DMIC MUX4" value="ZERO" />
+ <ctl name="VA DMIC MUX5" value="ZERO" />
+ <ctl name="VA DMIC MUX6" value="ZERO" />
+ <ctl name="VA DMIC MUX7" value="ZERO" />
+ <ctl name="VA SMIC MUX0" value="ZERO" />
+ <ctl name="VA SMIC MUX1" value="ZERO" />
+ <ctl name="VA SMIC MUX2" value="ZERO" />
+ <ctl name="VA SMIC MUX3" value="ZERO" />
+ <ctl name="VA SMIC MUX4" value="ZERO" />
+ <ctl name="VA SMIC MUX5" value="ZERO" />
+ <ctl name="VA SMIC MUX6" value="ZERO" />
+ <ctl name="VA SMIC MUX7" value="ZERO" />
<ctl name="AUDIO_REF_EC_UL1 MUX" value="None"/>
<ctl name="EC Reference Channels" value="Zero"/>
<ctl name="EC Reference Bit Format" value="0"/>
<ctl name="EC Reference SampleRate" value="0"/>
<path name="listen-voice-wakeup-1">
- <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
- <ctl name="LSM1 Port" value="TX_CDC_DMA_TX_3" />
- <ctl name="LSM1 Mixer TX_CDC_DMA_TX_3" value="1" />
+ <ctl name="LSM1 Mixer VA_CDC_DMA_TX_0" value="1" />
</path>
<path name="listen-voice-wakeup-2">
- <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
- <ctl name="LSM2 Port" value="TX_CDC_DMA_TX_3" />
- <ctl name="LSM2 Mixer TX_CDC_DMA_TX_3" value="1" />
+ <ctl name="LSM2 Mixer VA_CDC_DMA_TX_0" value="1" />
</path>
<path name="listen-voice-wakeup-3">
- <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
- <ctl name="LSM3 Port" value="TX_CDC_DMA_TX_3" />
- <ctl name="LSM3 Mixer TX_CDC_DMA_TX_3" value="1" />
+ <ctl name="LSM3 Mixer VA_CDC_DMA_TX_0" value="1" />
</path>
<path name="listen-voice-wakeup-4">
- <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
- <ctl name="LSM4 Port" value="TX_CDC_DMA_TX_3" />
- <ctl name="LSM4 Mixer TX_CDC_DMA_TX_3" value="1" />
+ <ctl name="LSM4 Mixer VA_CDC_DMA_TX_0" value="1" />
</path>
<path name="listen-voice-wakeup-5">
- <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
- <ctl name="LSM5 Port" value="TX_CDC_DMA_TX_3" />
- <ctl name="LSM5 Mixer TX_CDC_DMA_TX_3" value="1" />
+ <ctl name="LSM5 Mixer VA_CDC_DMA_TX_0" value="1" />
</path>
<path name="listen-voice-wakeup-6">
- <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
- <ctl name="LSM6 Port" value="TX_CDC_DMA_TX_3" />
- <ctl name="LSM6 Mixer TX_CDC_DMA_TX_3" value="1" />
+ <ctl name="LSM6 Mixer VA_CDC_DMA_TX_0" value="1" />
</path>
<path name="listen-voice-wakeup-7">
- <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
- <ctl name="LSM7 Port" value="TX_CDC_DMA_TX_3" />
- <ctl name="LSM7 Mixer TX_CDC_DMA_TX_3" value="1" />
+ <ctl name="LSM7 Mixer VA_CDC_DMA_TX_0" value="1" />
</path>
<path name="listen-voice-wakeup-8">
- <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
- <ctl name="LSM8 Port" value="TX_CDC_DMA_TX_3" />
- <ctl name="LSM8 Mixer TX_CDC_DMA_TX_3" value="1" />
+ <ctl name="LSM8 Mixer VA_CDC_DMA_TX_0" value="1" />
</path>
<path name="listen-voice-wakeup-1 preproc">
- <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
- <ctl name="LSM1 Port" value="ADM_LSM_TX" />
- <ctl name="LSM1 Mixer TX_CDC_DMA_TX_3" value="1" />
+ <path name="listen-voice-wakeup-1" />
</path>
<path name="listen-voice-wakeup-2 preproc">
- <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
- <ctl name="LSM2 Port" value="ADM_LSM_TX" />
- <ctl name="LSM2 Mixer TX_CDC_DMA_TX_3" value="1" />
+ <path name="listen-voice-wakeup-2" />
</path>
<path name="listen-voice-wakeup-3 preproc">
- <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
- <ctl name="LSM3 Port" value="ADM_LSM_TX" />
- <ctl name="LSM3 Mixer TX_CDC_DMA_TX_3" value="1" />
+ <path name="listen-voice-wakeup-3" />
</path>
<path name="listen-voice-wakeup-4 preproc">
- <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
- <ctl name="LSM4 Port" value="ADM_LSM_TX" />
- <ctl name="LSM4 Mixer TX_CDC_DMA_TX_3" value="1" />
+ <path name="listen-voice-wakeup-4" />
</path>
<path name="listen-voice-wakeup-5 preproc">
- <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
- <ctl name="LSM5 Port" value="ADM_LSM_TX" />
- <ctl name="LSM5 Mixer TX_CDC_DMA_TX_3" value="1" />
+ <path name="listen-voice-wakeup-5" />
</path>
<path name="listen-voice-wakeup-6 preproc">
- <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
- <ctl name="LSM6 Port" value="ADM_LSM_TX" />
- <ctl name="LSM6 Mixer TX_CDC_DMA_TX_3" value="1" />
+ <path name="listen-voice-wakeup-6" />
</path>
<path name="listen-voice-wakeup-7 preproc">
- <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
- <ctl name="LSM7 Port" value="ADM_LSM_TX" />
- <ctl name="LSM7 Mixer TX_CDC_DMA_TX_3" value="1" />
+ <path name="listen-voice-wakeup-7" />
</path>
<path name="listen-voice-wakeup-8 preproc">
- <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
+ <path name="listen-voice-wakeup-8" />
+ </path>
+
+ <path name="listen-voice-wakeup-1 port">
+ <ctl name="LSM1 Port" value="VA_CDC_DMA_TX_0" />
+ </path>
+
+ <path name="listen-voice-wakeup-2 port">
+ <ctl name="LSM2 Port" value="VA_CDC_DMA_TX_0" />
+ </path>
+
+ <path name="listen-voice-wakeup-3 port">
+ <ctl name="LSM3 Port" value="VA_CDC_DMA_TX_0" />
+ </path>
+
+ <path name="listen-voice-wakeup-4 port">
+ <ctl name="LSM4 Port" value="VA_CDC_DMA_TX_0" />
+ </path>
+
+ <path name="listen-voice-wakeup-5 port">
+ <ctl name="LSM5 Port" value="VA_CDC_DMA_TX_0" />
+ </path>
+
+ <path name="listen-voice-wakeup-6 port">
+ <ctl name="LSM6 Port" value="VA_CDC_DMA_TX_0" />
+ </path>
+
+ <path name="listen-voice-wakeup-7 port">
+ <ctl name="LSM7 Port" value="VA_CDC_DMA_TX_0" />
+ </path>
+
+ <path name="listen-voice-wakeup-8 port">
+ <ctl name="LSM8 Port" value="VA_CDC_DMA_TX_0" />
+ </path>
+
+ <path name="listen-voice-wakeup-1 preproc port">
+ <ctl name="LSM1 Port" value="ADM_LSM_TX" />
+ </path>
+
+ <path name="listen-voice-wakeup-2 preproc port">
+ <ctl name="LSM2 Port" value="ADM_LSM_TX" />
+ </path>
+
+ <path name="listen-voice-wakeup-3 preproc port">
+ <ctl name="LSM3 Port" value="ADM_LSM_TX" />
+ </path>
+
+ <path name="listen-voice-wakeup-4 preproc port">
+ <ctl name="LSM4 Port" value="ADM_LSM_TX" />
+ </path>
+
+ <path name="listen-voice-wakeup-5 preproc port">
+ <ctl name="LSM5 Port" value="ADM_LSM_TX" />
+ </path>
+
+ <path name="listen-voice-wakeup-6 preproc port">
+ <ctl name="LSM6 Port" value="ADM_LSM_TX" />
+ </path>
+
+ <path name="listen-voice-wakeup-7 preproc port">
+ <ctl name="LSM7 Port" value="ADM_LSM_TX" />
+ </path>
+
+ <path name="listen-voice-wakeup-8 preproc port">
<ctl name="LSM8 Port" value="ADM_LSM_TX" />
- <ctl name="LSM8 Mixer TX_CDC_DMA_TX_3" value="1" />
</path>
<path name="listen-ape-handset-mic">
- <ctl name="TX DEC0 MUX" value="SWR_MIC" />
- <ctl name="TX SMIC MUX0" value="ADC0" />
- <ctl name="TX_CDC_DMA_TX_3 Channels" value="One" />
- <ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
- <ctl name="ADC1_MIXER Switch" value="1" />
+ <ctl name="VA_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="VA DEC0 MUX" value="MSM_DMIC" />
+ <ctl name="VA DMIC MUX0" value="DMIC1" />
</path>
<path name="listen-ape-handset-mic-preproc">
- <path name="listen-ape-handset-mic"/>
+ <path name="listen-ape-handset-mic" />
</path>
<path name="listen-ape-handset-dmic">
- <ctl name="TX_CDC_DMA_TX_3 Channels" value="Two" />
- <ctl name="TX DEC0 MUX" value="SWR_MIC" />
- <ctl name="TX SMIC MUX0" value="ADC0" />
- <ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
- <ctl name="ADC1_MIXER Switch" value="1" />
- <ctl name="TX DEC1 MUX" value="SWR_MIC" />
- <ctl name="TX SMIC MUX1" value="ADC2" />
- <ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
- <ctl name="ADC2_MIXER Switch" value="1" />
- <ctl name="ADC2 MUX" value="INP3" />
+ <ctl name="VA_CDC_DMA_TX_0 Channels" value="Two" />
+ <ctl name="VA_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="VA_AIF1_CAP Mixer DEC1" value="1" />
+ <ctl name="VA DEC0 MUX" value="MSM_DMIC" />
+ <ctl name="VA DEC1 MUX" value="MSM_DMIC" />
+ <ctl name="VA DMIC MUX0" value="DMIC1" />
+ <ctl name="VA DMIC MUX1" value="DMIC2" />
</path>
<path name="listen-ape-handset-tmic">
- <ctl name="TX_CDC_DMA_TX_3 Channels" value="Three" />
- <ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
- <ctl name="TX DMIC MUX0" value="DMIC2" />
- <ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
- <ctl name="TX DMIC MUX1" value="DMIC0" />
- <ctl name="TX_AIF1_CAP Mixer DEC2" value="1" />
- <ctl name="TX DMIC MUX2" value="DMIC3" />
+ <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 DEC0 MUX" value="MSM_DMIC" />
+ <ctl name="VA DEC1 MUX" value="MSM_DMIC" />
+ <ctl name="VA DEC5 MUX" value="MSM_DMIC" />
+ <ctl name="VA DMIC MUX0" value="DMIC1" />
+ <ctl name="VA DMIC MUX1" value="DMIC2" />
+ <ctl name="VA DMIC MUX5" value="DMIC5" />
</path>
<path name="listen-ape-handset-qmic">
- <ctl name="TX_CDC_DMA_TX_3 Channels" value="Four" />
- <ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
- <ctl name="TX DMIC MUX0" value="DMIC2" />
- <ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
- <ctl name="TX DMIC MUX1" value="DMIC1" />
- <ctl name="TX_AIF1_CAP Mixer DEC2" value="1" />
- <ctl name="TX DMIC MUX2" value="DMIC3" />
- <ctl name="TX_AIF1_CAP Mixer DEC3" value="1" />
- <ctl name="TX DMIC MUX3" value="DMIC0" />
+ <ctl name="VA_CDC_DMA_TX_0 Channels" value="Four" />
+ <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 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 DMIC MUX0" value="DMIC1" />
+ <ctl name="VA DMIC MUX1" value="DMIC2" />
+ <ctl name="VA DMIC MUX2" value="DMIC3" />
+ <ctl name="VA DMIC MUX5" value="DMIC5" />
+ </path>
+
+ <path name="listen-ape-headset-mic">
+ <ctl name="VA_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="VA DEC0 MUX" value="SWR_MIC" />
+ <ctl name="VA SMIC MUX0" value="ADC1" />
+ <ctl name="ADC2 Volume" value="62" />
+ <ctl name="ADC2_MIXER Switch" value="1" />
+ <ctl name="ADC2 MUX" value="INP2" />
</path>
<path name="echo-reference">
diff --git a/configs/lito/sound_trigger_platform_info.xml b/configs/lito/sound_trigger_platform_info.xml
index dee10c8..4f1aa6f 100644
--- a/configs/lito/sound_trigger_platform_info.xml
+++ b/configs/lito/sound_trigger_platform_info.xml
@@ -40,9 +40,7 @@
<param max_ape_sessions="8" />
<param enable_failure_detection="false" />
<param support_device_switch="false" />
- <!-- Transition will only occur if execution_type="DYNAMIC" -->
- <param transit_to_adsp_on_playback="false" />
- <param transit_to_adsp_on_battery_charging="false" />
+ <param transit_to_non_lpi_on_battery_charging="false" />
<!-- Below backend params must match with port used in mixer path file -->
<!-- param used to configure backend sample rate, format and channels -->
<param backend_port_name="VA_CDC_DMA_TX_0" />
@@ -56,12 +54,13 @@
<param DEVICE_HANDSET_MIC_APE="100" />
<param DEVICE_HANDSET_MIC_PP_APE="135" />
<param DEVICE_HANDSET_DMIC_APE="149" />
- <param DEVICE_HANDSET_DMIC_LPI_APE="149" />
+ <param DEVICE_HANDSET_DMIC_LPI_APE="179" />
<param DEVICE_HANDSET_TMIC_APE="157" />
- <param DEVICE_HANDSET_TMIC_LPI_APE="157" />
+ <param DEVICE_HANDSET_TMIC_LPI_APE="180" />
<param DEVICE_HANDSET_QMIC_APE="137" />
- <param DEVICE_HANDSET_QMIC_LPI_APE="137" />
+ <param DEVICE_HANDSET_QMIC_LPI_APE="181" />
<param DEVICE_HEADSET_MIC_APE="141" />
+ <param DEVICE_HEADSET_MIC_APE_LPI="182" />
</acdb_ids>
<!-- Multiple sound_model_config tags can be listed, each with unique -->
@@ -259,9 +258,51 @@
<param vendor_uuid="9f6ad62a-1f0b-11e7-87c5-40a8f03d3f15" />
<param execution_type="ADSP" />
<param library="none" />
+ <param max_ape_phrases="1" />
+ <param max_ape_users="1" />
+ <!-- Profile specific data which the algorithm can support -->
+ <param sample_rate="16000" />
+ <param bit_width="16" />
+ <param out_channels="1"/> <!-- Module output channels -->
+ <lsm_usecase>
+ <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" />
+ <!-- fluence_type: "FLUENCE_MIC", "FLUENCE_DMIC", "FLUENCE_TMIC" -->
+ <!-- "FLUENCE_QMIC". Param value is valid when adm_cfg_profile -->
+ <!-- is FFECNS -->
+ <param fluence_type="NONE" />
+ <param execution_mode="ADSP" />
+ <param app_type="3" /> <!-- app type used in ACDB -->
+ <param in_channels="1"/> <!-- Module input channels -->
+ <param load_sound_model_ids="0x18000001, 0x0, 0x00012C14" />
+ <param unload_sound_model_ids="0x18000001, 0x0, 0x00012C15" />
+ <param confidence_levels_ids="0x18000001, 0x0, 0x00012C07" />
+ <param operation_mode_ids="0x18000001, 0x0, 0x00012C02" />
+ <param polling_enable_ids="0x18000001, 0x0, 0x00012C1B" />
+ <param custom_config_ids="0x18000001, 0x0, 0x00012C20" />
+ </lsm_usecase>
+ <lsm_usecase>
+ <param capture_device="HEADSET" />
+ <param adm_cfg_profile="NONE" />
+ <param fluence_type="NONE" />
+ <param execution_mode="ADSP" />
+ <param app_type="3" /> <!-- app type used in ACDB -->
+ <param in_channels="1"/> <!-- Module input channels -->
+ <param load_sound_model_ids="0x18000001, 0x0, 0x00012C14" />
+ <param unload_sound_model_ids="0x18000001, 0x0, 0x00012C15" />
+ <param confidence_levels_ids="0x18000001, 0x0, 0x00012C07" />
+ <param operation_mode_ids="0x18000001, 0x0, 0x00012C02" />
+ <param polling_enable_ids="0x18000001, 0x0, 0x00012C1B" />
+ <param custom_config_ids="0x18000001, 0x0, 0x00012C20" />
+ </lsm_usecase>
+
+ <!-- format: "ADPCM_packet" or "PCM_packet" !-->
+ <!-- transfer_mode: "FTRT" or "RT" -->
<!-- kw_duration is in milli seconds. It is valid only for FTRT
transfer mode -->
- <param capture_keyword="MULAW_raw, FTRT, 5000" />
+ <param capture_keyword="PCM_raw, FTRT, 5000" />
<param client_capture_read_delay="2000" />
</sound_model_config>
diff --git a/configs/msm8909/audio_policy_configuration.xml b/configs/msm8909/audio_policy_configuration.xml
index 8abf817..d4dcd79 100644
--- a/configs/msm8909/audio_policy_configuration.xml
+++ b/configs/msm8909/audio_policy_configuration.xml
@@ -162,10 +162,6 @@
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="8000,16000" channelMasks="AUDIO_CHANNEL_OUT_MONO"/>
</devicePort>
- <devicePort tagName="BT SCO All" type="AUDIO_DEVICE_OUT_ALL_SCO" role="sink">
- <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
- samplingRates="8000,16000" channelMasks="AUDIO_CHANNEL_OUT_MONO"/>
- </devicePort>
<devicePort tagName="Proxy" type="AUDIO_DEVICE_OUT_PROXY" role="sink">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="8000,11025,16000,22050,32000,44100,48000,64000,88200,96000,128000,176400,192000" channelMasks="dynamic"/>
@@ -221,7 +217,11 @@
sources="primary output,low_latency,compressed_offload"/>
<route type="mix" sink="FM"
sources="primary output"/>
- <route type="mix" sink="BT SCO All"
+ <route type="mix" sink="BT SCO"
+ sources="primary output,low_latency,compressed_offload,voip_rx"/>
+ <route type="mix" sink="BT SCO Headset"
+ sources="primary output,low_latency,compressed_offload,voip_rx"/>
+ <route type="mix" sink="BT SCO Car Kit"
sources="primary output,low_latency,compressed_offload,voip_rx"/>
<route type="mix" sink="primary input"
sources="Built-In Mic,Wired Headset Mic,BT SCO Headset Mic,Built-In Back Mic,FM Tuner,In Call-Voice"/>
diff --git a/configs/msm8937/audio_policy_configuration.xml b/configs/msm8937/audio_policy_configuration.xml
index b4b0358..948ddba 100644
--- a/configs/msm8937/audio_policy_configuration.xml
+++ b/configs/msm8937/audio_policy_configuration.xml
@@ -187,10 +187,6 @@
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="8000,16000" channelMasks="AUDIO_CHANNEL_OUT_MONO"/>
</devicePort>
- <devicePort tagName="BT SCO All" type="AUDIO_DEVICE_OUT_ALL_SCO" role="sink">
- <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
- samplingRates="8000,16000" channelMasks="AUDIO_CHANNEL_OUT_MONO"/>
- </devicePort>
<devicePort tagName="Telephony Tx" type="AUDIO_DEVICE_OUT_TELEPHONY_TX" role="sink">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="8000,16000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
@@ -255,7 +251,11 @@
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload"/>
<route type="mix" sink="FM"
sources="primary output"/>
- <route type="mix" sink="BT SCO All"
+ <route type="mix" sink="BT SCO"
+ sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx"/>
+ <route type="mix" sink="BT SCO Headset"
+ sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx"/>
+ <route type="mix" sink="BT SCO Car Kit"
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx"/>
<route type="mix" sink="Telephony Tx"
sources="voice_tx"/>
diff --git a/configs/msm8937/msm8937.mk b/configs/msm8937/msm8937.mk
index 2f282cb..1730357 100644
--- a/configs/msm8937/msm8937.mk
+++ b/configs/msm8937/msm8937.mk
@@ -240,6 +240,51 @@
PRODUCT_PROPERTY_OVERRIDES += \
audio.volume.headset.gain.depcal=true
+#add dynamic feature flags here
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio.feature.a2dp_offload.enable=false \
+vendor.audio.feature.afe_proxy.enable=true \
+vendor.audio.feature.anc_headset.enable=true \
+vendor.audio.feature.audio_sphere.enable=true \
+vendor.audio.feature.battery_listener.enable=false \
+vendor.audio.feature.compr_cap.enable=false \
+vendor.audio.feature.compress_in.enable=false \
+vendor.audio.feature.compress_meta_data.enable=true \
+vendor.audio.feature.compr_voip.enable=true \
+vendor.audio.feature.concurrent_capture.enable=false \
+vendor.audio.feature.custom_stereo.enable=true \
+vendor.audio.feature.display_port.enable=false \
+vendor.audio.feature.dsm_feedback.enable=false \
+vendor.audio.feature.dynamic_ecns.enable=false \
+vendor.audio.feature.ext_hw_plugin.enable=false \
+vendor.audio.feature.external_dsp.enable=false \
+vendor.audio.feature.external_speaker.enable=false \
+vendor.audio.feature.external_speaker_tfa.enable=false \
+vendor.audio.feature.fluence.enable=true \
+vendor.audio.feature.fm.enable=true \
+vendor.audio.feature.hdmi_edid.enable=true \
+vendor.audio.feature.hdmi_passthrough.enable=false \
+vendor.audio.feature.hfp.enable=true \
+vendor.audio.feature.hifi_audio.enable=true \
+vendor.audio.feature.hwdep_cal.enable=false \
+vendor.audio.feature.incall_music.enable=false \
+vendor.audio.feature.keep_alive.enable=false \
+vendor.audio.feature.kpi_optimize.enable=true \
+vendor.audio.feature.maxx_audio.enable=false \
+vendor.audio.feature.ras.enable=false \
+vendor.audio.feature.record_play_concurency.enable=false \
+vendor.audio.feature.src_trkn.enable=true \
+vendor.audio.feature.spkr_prot.enable=true \
+vendor.audio.feature.ssrec.enable=true \
+vendor.audio.feature.usb_offload.enable=false \
+vendor.audio.feature.usb_offload_burst_mode.enable=false \
+vendor.audio.feature.usb_offload_sidetone_volume.enable=false \
+vendor.audio.feature.deepbuffer_as_primary.enable=false \
+vendor.audio.feature.vbat.enable=true \
+vendor.audio.feature.wsa.enable=true \
+vendor.audio.feature.audiozoom.enable=false \
+vendor.audio.feature.snd_mon.enable=true
+
# for HIDL related packages
PRODUCT_PACKAGES += \
android.hardware.audio@2.0-service \
diff --git a/configs/msm8953/audio_policy_configuration.xml b/configs/msm8953/audio_policy_configuration.xml
index f54d6b4..9f6e7dc 100644
--- a/configs/msm8953/audio_policy_configuration.xml
+++ b/configs/msm8953/audio_policy_configuration.xml
@@ -198,10 +198,6 @@
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="8000,16000" channelMasks="AUDIO_CHANNEL_OUT_MONO"/>
</devicePort>
- <devicePort tagName="BT SCO All" type="AUDIO_DEVICE_OUT_ALL_SCO" role="sink">
- <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
- samplingRates="8000,16000" channelMasks="AUDIO_CHANNEL_OUT_MONO"/>
- </devicePort>
<devicePort tagName="Telephony Tx" type="AUDIO_DEVICE_OUT_TELEPHONY_TX" role="sink">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="8000,16000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
@@ -266,7 +262,11 @@
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload"/>
<route type="mix" sink="FM"
sources="primary output"/>
- <route type="mix" sink="BT SCO All"
+ <route type="mix" sink="BT SCO"
+ sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx"/>
+ <route type="mix" sink="BT SCO Headset"
+ sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx"/>
+ <route type="mix" sink="BT SCO Car Kit"
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx"/>
<route type="mix" sink="Telephony Tx"
sources="voice_tx"/>
diff --git a/configs/msm8996/audio_policy_configuration.xml b/configs/msm8996/audio_policy_configuration.xml
index 9b0234b..0a70bba 100644
--- a/configs/msm8996/audio_policy_configuration.xml
+++ b/configs/msm8996/audio_policy_configuration.xml
@@ -198,10 +198,6 @@
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="8000,16000" channelMasks="AUDIO_CHANNEL_OUT_MONO"/>
</devicePort>
- <devicePort tagName="BT SCO All" type="AUDIO_DEVICE_OUT_ALL_SCO" role="sink">
- <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
- samplingRates="8000,16000" channelMasks="AUDIO_CHANNEL_OUT_MONO"/>
- </devicePort>
<devicePort tagName="Telephony Tx" type="AUDIO_DEVICE_OUT_TELEPHONY_TX" role="sink">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="8000,16000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
@@ -266,7 +262,11 @@
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload"/>
<route type="mix" sink="FM"
sources="primary output"/>
- <route type="mix" sink="BT SCO All"
+ <route type="mix" sink="BT SCO"
+ sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx"/>
+ <route type="mix" sink="BT SCO Headset"
+ sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx"/>
+ <route type="mix" sink="BT SCO Car Kit"
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx"/>
<route type="mix" sink="Telephony Tx"
sources="voice_tx"/>
diff --git a/configs/msm8998/audio_configs.xml b/configs/msm8998/audio_configs.xml
new file mode 100644
index 0000000..4b0159d
--- /dev/null
+++ b/configs/msm8998/audio_configs.xml
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+Copyright (c) 2019, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<configs>
+ <!-- APM Configs -->
+ <property name="audio.deep_buffer.media" value="true"/>
+ <property name="audio.offload.disable" value="false"/>
+ <property name="audio.offload.min.duration.secs" value="60"/>
+ <property name="audio.offload.video" value="true"/>
+ <property name="persist.vendor.audio.sva.conc.enabled" value="false"/>
+ <property name="persist.vendor.audio.va_concurrency_enabled" value="false"/>
+ <property name="vendor.audio.av.streaming.offload.enable" value="false"/>
+ <property name="vendor.audio.offload.track.enable" value="true"/>
+ <property name="vendor.audio.offload.multiple.enabled" value="false"/>
+ <property name="vendor.audio.rec.playback.conc.disabled" value="false"/>
+ <property name="vendor.voice.conc.fallbackpath" value=""/>
+ <property name="vendor.voice.dsd.playback.conc.disabled" value="true"/>
+ <property name="vendor.voice.path.for.pcm.voip" value="true"/>
+ <property name="vendor.voice.playback.conc.disabled" value="false"/>
+ <property name="vendor.voice.record.conc.disabled" value="false"/>
+ <property name="vendor.voice.voip.conc.disabled" value="false"/>
+ <flag name="audio_extn_formats_enabled" value="true" />
+ <flag name="audio_extn_hdmi_spk_enabled" value="true" />
+ <flag name="use_xml_audio_policy_conf" value="true" />
+ <flag name="voice_concurrency" value="false" />
+
+ <!-- AV Configs -->
+ <property name="vendor.audio.use.sw.alac.decoder" value="true"/>
+ <property name="vendor.audio.use.sw.ape.decoder" value="true"/>
+ <property name="vendor.audio.use.sw.mpegh.decoder" value="false"/>
+ <property name="vendor.audio.flac.sw.decoder.24bit" value="true"/>
+ <property name="vendor.audio.hw.aac.encoder" value="true"/>
+ <flag name="aac_adts_offload_enabled" value="true" />
+ <flag name="alac_offload_enabled" value="true" />
+ <flag name="ape_offload_enabled" value="true" />
+ <flag name="flac_offload_enabled" value="true" />
+ <flag name="pcm_offload_enabled_16" value="true" />
+ <flag name="pcm_offload_enabled_24" value="true" />
+ <flag name="qti_flac_decoder" value="true" />
+ <flag name="vorbis_offload_enabled" value="true" />
+ <flag name="wma_offload_enabled" value="true" />
+
+ <!-- AHAL Configs -->
+ <flag name="a2dp_offload_enabled" value="true" />
+ <flag name="anc_headset_enabled" value="true" />
+ <flag name="audiosphere_enabled" value="true" />
+ <flag name="battery_listener_enabled" value="false" />
+ <flag name="compress_capture_enabled" value="false" />
+ <flag name="compress_in_enabled" value="false" />
+ <flag name="compress_metadata_needed" value="true" />
+ <flag name="concurrent_capture_enabled" value="false" />
+ <flag name="custom_stereo_enabled" value="true" />
+ <flag name="display_port_enabled" value="true" />
+ <flag name="dsm_feedback_enabled" value="false" />
+ <flag name="dynamic_ecns_enabled" value="false" />
+ <flag name="ext_hw_plugin_enabled" value="false" />
+ <flag name="ext_qdsp_enabled" value="false" />
+ <flag name="ext_spkr_enabled" value="false" />
+ <flag name="ext_spkr_tfa_enabled" value="false" />
+ <flag name="fluence_enabled" value="true" />
+ <flag name="hdmi_edid_enabled" value="true" />
+ <flag name="hdmi_passthrough_enabled" value="true" />
+ <flag name="hfp_enabled" value="true" />
+ <flag name="hifi_audio_enabled" value="false" />
+ <flag name="hwdep_cal_enabled" value="false" />
+ <flag name="incall_music_enabled" value="false" />
+ <flag name="keep_alive_enabled" value="false" />
+ <flag name="kpi_optimize_enabled" value="true" />
+ <flag name="maxx_audio_enabled" value="false" />
+ <flag name="receiver_aided_stereo" value="true" />
+ <flag name="snd_monitor_enabled" value="true" />
+ <flag name="source_track_enabled" value="true" />
+ <flag name="spkr_prot_enabled" value="true" />
+ <flag name="ssrec_enabled" value="true" />
+ <flag name="usb_offload_burst_mode" value="false" />
+ <flag name="usb_offload_enabled" value="true" />
+ <flag name="usb_offload_sidetone_vol_enabled" value="false" />
+ <flag name="use_deep_buffer_as_primary_output" value="false" />
+ <flag name="vbat_enabled" value="true" />
+ <flag name="wsa_enabled" value="false" />
+
+ <!-- Common configs between APM and AHAL -->
+ <flag name="afe_proxy_enabled" value="true" />
+ <flag name="compress_voip_enabled" value="false" />
+ <flag name="fm_power_opt" value="true" />
+ <flag name="record_play_concurrency" value="false" />
+</configs>
diff --git a/configs/msm8998/audio_effects.xml b/configs/msm8998/audio_effects.xml
index 7c0cd22..15adc92 100644
--- a/configs/msm8998/audio_effects.xml
+++ b/configs/msm8998/audio_effects.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!--- Copyright (c) 2018, The Linux Foundation. All rights reserved. -->
+<!--- Copyright (c) 2018-2019, The Linux Foundation. All rights reserved. -->
<!--- -->
<!--- Redistribution and use in source and binary forms, with or without -->
<!--- modification, are permitted provided that the following conditions are -->
@@ -30,9 +30,6 @@
<libraries>
<library name="bundle" path="libbundlewrapper.so"/>
<library name="reverb" path="libreverbwrapper.so"/>
- <library name="qcbassboost" path="libqcbassboost.so"/>
- <library name="qcvirt" path="libqcvirt.so"/>
- <library name="qcreverb" path="libqcreverb.so"/>
<library name="visualizer_sw" path="libvisualizer.so"/>
<library name="visualizer_hw" path="libqcomvisualizer.so"/>
<library name="downmix" path="libdownmix.so"/>
@@ -47,11 +44,11 @@
</libraries>
<effects>
<effectProxy name="bassboost" library="proxy" uuid="14804144-a5ee-4d24-aa88-0002a5d5c51b">
- <libsw library="qcbassboost" uuid="23aca180-44bd-11e2-bcfd-0800200c9a66"/>
+ <libsw library="bundle" uuid="8631f300-72e2-11df-b57e-0002a5d5c51b"/>
<libhw library="offload_bundle" uuid="2c4a8c24-1581-487f-94f6-0002a5d5c51b"/>
</effectProxy>
<effectProxy name="virtualizer" library="proxy" uuid="d3467faa-acc7-4d34-acaf-0002a5d5c51b">
- <libsw library="qcvirt" uuid="e6c98a16-22a3-11e2-b87b-f23c91aec05e"/>
+ <libsw library="bundle" uuid="1d4033c0-8557-11df-9f2d-0002a5d5c51b"/>
<libhw library="offload_bundle" uuid="509a4498-561a-4bea-b3b1-0002a5d5c51b"/>
</effectProxy>
<effectProxy name="equalizer" library="proxy" uuid="c8e70ecd-48ca-456e-8a4f-0002a5d5c51b">
@@ -60,19 +57,19 @@
</effectProxy>
<effect name="volume" library="bundle" uuid="119341a0-8469-11df-81f9-0002a5d5c51b"/>
<effectProxy name="reverb_env_aux" library="proxy" uuid="48404ac9-d202-4ccc-bf84-0002a5d5c51b">
- <libsw library="qcreverb" uuid="a8c1e5f3-293d-43cd-95ec-d5e26c02e217"/>
+ <libsw library="reverb" uuid="4a387fc0-8ab3-11df-8bad-0002a5d5c51b"/>
<libhw library="offload_bundle" uuid="79a18026-18fd-4185-8233-0002a5d5c51b"/>
</effectProxy>
<effectProxy name="reverb_env_ins" library="proxy" uuid="b707403a-a1c1-4291-9573-0002a5d5c51b">
- <libsw library="qcreverb" uuid="791fff8b-8129-4655-83a4-59bc61034c3a"/>
+ <libsw library="reverb" uuid="c7a511a0-a3bb-11df-860e-0002a5d5c51b"/>
<libhw library="offload_bundle" uuid="eb64ea04-973b-43d2-8f5e-0002a5d5c51b"/>
</effectProxy>
<effectProxy name="reverb_pre_aux" library="proxy" uuid="1b78f587-6d1c-422e-8b84-0002a5d5c51b">
- <libsw library="qcreverb" uuid="53ef1db5-c0c0-445b-b060-e34d20ebb70a"/>
+ <libsw library="reverb" uuid="f29a1400-a3bb-11df-8ddc-0002a5d5c51b"/>
<libhw library="offload_bundle" uuid="6987be09-b142-4b41-9056-0002a5d5c51b"/>
</effectProxy>
<effectProxy name="reverb_pre_ins" library="proxy" uuid="f3e178d2-ebcb-408e-8357-0002a5d5c51b">
- <libsw library="qcreverb" uuid="b08a0e38-22a5-11e2-b87b-f23c91aec05e"/>
+ <libsw library="reverb" uuid="172cdf00-a3bc-11df-a72f-0002a5d5c51b"/>
<libhw library="offload_bundle" uuid="aa2bebf6-47cf-4613-9bca-0002a5d5c51b"/>
</effectProxy>
<effectProxy name="visualizer" library="proxy" uuid="1d0a1a53-7d5d-48f2-8e71-27fbd10d842c">
diff --git a/configs/msm8998/audio_policy_configuration.xml b/configs/msm8998/audio_policy_configuration.xml
index 88a27d3..505a205 100644
--- a/configs/msm8998/audio_policy_configuration.xml
+++ b/configs/msm8998/audio_policy_configuration.xml
@@ -229,10 +229,6 @@
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="8000,16000" channelMasks="AUDIO_CHANNEL_OUT_MONO"/>
</devicePort>
- <devicePort tagName="BT SCO All" type="AUDIO_DEVICE_OUT_ALL_SCO" role="sink">
- <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
- samplingRates="8000,16000" channelMasks="AUDIO_CHANNEL_OUT_MONO"/>
- </devicePort>
<devicePort tagName="Telephony Tx" type="AUDIO_DEVICE_OUT_TELEPHONY_TX" role="sink">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="8000,16000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
@@ -334,7 +330,11 @@
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload"/>
<route type="mix" sink="FM"
sources="primary output"/>
- <route type="mix" sink="BT SCO All"
+ <route type="mix" sink="BT SCO"
+ sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out"/>
+ <route type="mix" sink="BT SCO Headset"
+ sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out"/>
+ <route type="mix" sink="BT SCO Car Kit"
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out"/>
<route type="mix" sink="USB Device Out"
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out,hifi_playback"/>
diff --git a/configs/msm8998/msm8998.mk b/configs/msm8998/msm8998.mk
index 6c8333c..9eb9d79 100644
--- a/configs/msm8998/msm8998.mk
+++ b/configs/msm8998/msm8998.mk
@@ -34,6 +34,7 @@
AUDIO_FEATURE_ENABLED_VOICE_PRINT := false
USE_LEGACY_AUDIO_DAEMON := false
USE_LEGACY_AUDIO_MEASUREMENT := false
+AUDIO_FEATURE_ENABLED_AHAL_EXT := false
DOLBY_ENABLE := false
endif
@@ -97,7 +98,8 @@
vendor/qcom/opensource/audio-hal/primary-hal/configs/msm8998/sound_trigger_mixer_paths_wcd9340.xml:$(TARGET_COPY_OUT_VENDOR)/etc/sound_trigger_mixer_paths_wcd9340.xml \
vendor/qcom/opensource/audio-hal/primary-hal/configs/msm8998/sound_trigger_platform_info.xml:$(TARGET_COPY_OUT_VENDOR)/etc/sound_trigger_platform_info.xml \
vendor/qcom/opensource/audio-hal/primary-hal/configs/msm8998/graphite_ipc_platform_info.xml:$(TARGET_COPY_OUT_VENDOR)/etc/graphite_ipc_platform_info.xml \
- vendor/qcom/opensource/audio-hal/primary-hal/configs/msm8998/audio_platform_info.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_platform_info.xml
+ vendor/qcom/opensource/audio-hal/primary-hal/configs/msm8998/audio_platform_info.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_platform_info.xml \
+ vendor/qcom/opensource/audio-hal/primary-hal/configs/msm8998/audio_configs.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_configs.xml
#XML Audio configuration files
ifeq ($(USE_XML_AUDIO_POLICY_CONF), 1)
@@ -247,6 +249,51 @@
PRODUCT_PROPERTY_OVERRIDES += \
persist.audio.fluence.voicecomm=true
+#add dynamic feature flags here
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio.feature.a2dp_offload.enable=true \
+vendor.audio.feature.afe_proxy.enable=true \
+vendor.audio.feature.anc_headset.enable=true \
+vendor.audio.feature.audio_sphere.enable=true \
+vendor.audio.feature.battery_listener.enable=false \
+vendor.audio.feature.compr_cap.enable=false \
+vendor.audio.feature.compress_in.enable=false \
+vendor.audio.feature.compress_meta_data.enable=true \
+vendor.audio.feature.compr_voip.enable=false \
+vendor.audio.feature.concurrent_capture.enable=false \
+vendor.audio.feature.custom_stereo.enable=true \
+vendor.audio.feature.display_port.enable=true \
+vendor.audio.feature.dsm_feedback.enable=false \
+vendor.audio.feature.dynamic_ecns.enable=false \
+vendor.audio.feature.ext_hw_plugin.enable=false \
+vendor.audio.feature.external_dsp.enable=false \
+vendor.audio.feature.external_speaker.enable=false \
+vendor.audio.feature.external_speaker_tfa.enable=false \
+vendor.audio.feature.fluence.enable=true \
+vendor.audio.feature.fm.enable=true \
+vendor.audio.feature.hdmi_edid.enable=true \
+vendor.audio.feature.hdmi_passthrough.enable=true \
+vendor.audio.feature.hfp.enable=true \
+vendor.audio.feature.hifi_audio.enable=false \
+vendor.audio.feature.hwdep_cal.enable=false \
+vendor.audio.feature.incall_music.enable=false \
+vendor.audio.feature.keep_alive.enable=false \
+vendor.audio.feature.kpi_optimize.enable=true \
+vendor.audio.feature.maxx_audio.enable=false \
+vendor.audio.feature.ras.enable=true \
+vendor.audio.feature.record_play_concurency.enable=false \
+vendor.audio.feature.src_trkn.enable=true \
+vendor.audio.feature.spkr_prot.enable=true \
+vendor.audio.feature.ssrec.enable=true \
+vendor.audio.feature.usb_offload.enable=true \
+vendor.audio.feature.usb_offload_burst_mode.enable=false \
+vendor.audio.feature.usb_offload_sidetone_volume.enable=false \
+vendor.audio.feature.deepbuffer_as_primary.enable=false \
+vendor.audio.feature.vbat.enable=true \
+vendor.audio.feature.wsa.enable=false \
+vendor.audio.feature.audiozoom.enable=false \
+vendor.audio.feature.snd_mon.enable=true
+
# for HIDL related packages
PRODUCT_PACKAGES += \
android.hardware.audio@2.0-service \
diff --git a/configs/msmnile/audio_configs.xml b/configs/msmnile/audio_configs.xml
index 8c24bb2..6217f0c 100644
--- a/configs/msmnile/audio_configs.xml
+++ b/configs/msmnile/audio_configs.xml
@@ -31,7 +31,7 @@
<!-- APM Configs -->
<property name="audio.deep_buffer.media" value="true"/>
<property name="audio.offload.disable" value="false"/>
- <property name="audio.offload.min.duration.secs" value="60"/>
+ <property name="audio.offload.min.duration.secs" value="30"/>
<property name="audio.offload.video" value="true"/>
<property name="persist.vendor.audio.sva.conc.enabled" value="false"/>
<property name="persist.vendor.audio.va_concurrency_enabled" value="false"/>
@@ -69,6 +69,7 @@
<!-- AHAL Configs -->
<flag name="a2dp_offload_enabled" value="true" />
<flag name="anc_headset_enabled" value="true" />
+ <flag name="audio_zoom_enabled" value="false" />
<flag name="audiosphere_enabled" value="true" />
<flag name="battery_listener_enabled" value="true" />
<flag name="compress_capture_enabled" value="false" />
diff --git a/configs/msmnile/audio_configs_stock.xml b/configs/msmnile/audio_configs_stock.xml
index 6414675..bbc44c3 100644
--- a/configs/msmnile/audio_configs_stock.xml
+++ b/configs/msmnile/audio_configs_stock.xml
@@ -32,6 +32,7 @@
<flag name="a2dp_offload_enabled" value="true" />
<flag name="afe_proxy_enabled" value="false" />
<flag name="anc_headset_enabled" value="false" />
+ <flag name="audio_zoom_enabled" value="true" />
<flag name="audiosphere_enabled" value="false" />
<flag name="battery_listener_enabled" value="false" />
<flag name="compress_capture_enabled" value="false" />
diff --git a/configs/msmnile/audio_effects.xml b/configs/msmnile/audio_effects.xml
index 7c0cd22..15adc92 100644
--- a/configs/msmnile/audio_effects.xml
+++ b/configs/msmnile/audio_effects.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!--- Copyright (c) 2018, The Linux Foundation. All rights reserved. -->
+<!--- Copyright (c) 2018-2019, The Linux Foundation. All rights reserved. -->
<!--- -->
<!--- Redistribution and use in source and binary forms, with or without -->
<!--- modification, are permitted provided that the following conditions are -->
@@ -30,9 +30,6 @@
<libraries>
<library name="bundle" path="libbundlewrapper.so"/>
<library name="reverb" path="libreverbwrapper.so"/>
- <library name="qcbassboost" path="libqcbassboost.so"/>
- <library name="qcvirt" path="libqcvirt.so"/>
- <library name="qcreverb" path="libqcreverb.so"/>
<library name="visualizer_sw" path="libvisualizer.so"/>
<library name="visualizer_hw" path="libqcomvisualizer.so"/>
<library name="downmix" path="libdownmix.so"/>
@@ -47,11 +44,11 @@
</libraries>
<effects>
<effectProxy name="bassboost" library="proxy" uuid="14804144-a5ee-4d24-aa88-0002a5d5c51b">
- <libsw library="qcbassboost" uuid="23aca180-44bd-11e2-bcfd-0800200c9a66"/>
+ <libsw library="bundle" uuid="8631f300-72e2-11df-b57e-0002a5d5c51b"/>
<libhw library="offload_bundle" uuid="2c4a8c24-1581-487f-94f6-0002a5d5c51b"/>
</effectProxy>
<effectProxy name="virtualizer" library="proxy" uuid="d3467faa-acc7-4d34-acaf-0002a5d5c51b">
- <libsw library="qcvirt" uuid="e6c98a16-22a3-11e2-b87b-f23c91aec05e"/>
+ <libsw library="bundle" uuid="1d4033c0-8557-11df-9f2d-0002a5d5c51b"/>
<libhw library="offload_bundle" uuid="509a4498-561a-4bea-b3b1-0002a5d5c51b"/>
</effectProxy>
<effectProxy name="equalizer" library="proxy" uuid="c8e70ecd-48ca-456e-8a4f-0002a5d5c51b">
@@ -60,19 +57,19 @@
</effectProxy>
<effect name="volume" library="bundle" uuid="119341a0-8469-11df-81f9-0002a5d5c51b"/>
<effectProxy name="reverb_env_aux" library="proxy" uuid="48404ac9-d202-4ccc-bf84-0002a5d5c51b">
- <libsw library="qcreverb" uuid="a8c1e5f3-293d-43cd-95ec-d5e26c02e217"/>
+ <libsw library="reverb" uuid="4a387fc0-8ab3-11df-8bad-0002a5d5c51b"/>
<libhw library="offload_bundle" uuid="79a18026-18fd-4185-8233-0002a5d5c51b"/>
</effectProxy>
<effectProxy name="reverb_env_ins" library="proxy" uuid="b707403a-a1c1-4291-9573-0002a5d5c51b">
- <libsw library="qcreverb" uuid="791fff8b-8129-4655-83a4-59bc61034c3a"/>
+ <libsw library="reverb" uuid="c7a511a0-a3bb-11df-860e-0002a5d5c51b"/>
<libhw library="offload_bundle" uuid="eb64ea04-973b-43d2-8f5e-0002a5d5c51b"/>
</effectProxy>
<effectProxy name="reverb_pre_aux" library="proxy" uuid="1b78f587-6d1c-422e-8b84-0002a5d5c51b">
- <libsw library="qcreverb" uuid="53ef1db5-c0c0-445b-b060-e34d20ebb70a"/>
+ <libsw library="reverb" uuid="f29a1400-a3bb-11df-8ddc-0002a5d5c51b"/>
<libhw library="offload_bundle" uuid="6987be09-b142-4b41-9056-0002a5d5c51b"/>
</effectProxy>
<effectProxy name="reverb_pre_ins" library="proxy" uuid="f3e178d2-ebcb-408e-8357-0002a5d5c51b">
- <libsw library="qcreverb" uuid="b08a0e38-22a5-11e2-b87b-f23c91aec05e"/>
+ <libsw library="reverb" uuid="172cdf00-a3bc-11df-a72f-0002a5d5c51b"/>
<libhw library="offload_bundle" uuid="aa2bebf6-47cf-4613-9bca-0002a5d5c51b"/>
</effectProxy>
<effectProxy name="visualizer" library="proxy" uuid="1d0a1a53-7d5d-48f2-8e71-27fbd10d842c">
diff --git a/configs/msmnile/audio_platform_info.xml b/configs/msmnile/audio_platform_info.xml
index 4e7c344..6bfadc8 100644
--- a/configs/msmnile/audio_platform_info.xml
+++ b/configs/msmnile/audio_platform_info.xml
@@ -138,6 +138,7 @@
<device name="SND_DEVICE_OUT_SPEAKER_AND_ANC_HEADSET" backend="speaker-and-headphones" interface="SLIMBUS_0_RX-and-SLIMBUS_6_RX"/>
<device name="SND_DEVICE_OUT_SPEAKER_AND_ANC_FB_HEADSET" backend="speaker-and-headphones" interface="SLIMBUS_0_RX-and-SLIMBUS_6_RX"/>
<device name="SND_DEVICE_OUT_VOICE_HEADPHONES" backend="headphones" interface="SLIMBUS_6_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_HEADSET" backend="headset" interface="SLIMBUS_6_RX"/>
<device name="SND_DEVICE_OUT_VOICE_ANC_HEADSET" backend="headphones" interface="SLIMBUS_6_RX"/>
<device name="SND_DEVICE_OUT_VOICE_ANC_FB_HEADSET" backend="headphones" interface="SLIMBUS_6_RX"/>
<device name="SND_DEVICE_OUT_VOICE_LINE" backend="headphones" interface="SLIMBUS_6_RX"/>
diff --git a/configs/msmnile/audio_policy_configuration.xml b/configs/msmnile/audio_policy_configuration.xml
index 50920b3..657b5d1 100644
--- a/configs/msmnile/audio_policy_configuration.xml
+++ b/configs/msmnile/audio_policy_configuration.xml
@@ -173,11 +173,6 @@
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000"
channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK"/>
</mixPort>
- <mixPort name="surround_sound" role="sink">
- <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
- samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_INDEX_MASK_3,AUDIO_CHANNEL_INDEX_MASK_4,AUDIO_CHANNEL_IN_5POINT1,AUDIO_CHANNEL_INDEX_MASK_6"/>
- </mixPort>
<mixPort name="usb_surround_sound" role="sink">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,88200,96000,176400,192000"
@@ -263,17 +258,17 @@
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
</devicePort>
<devicePort tagName="BT A2DP Out" type="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP" role="sink"
- encodedFormats="AUDIO_FORMAT_SBC AUDIO_FORMAT_AAC AUDIO_FORMAT_APTX AUDIO_FORMAT_APTX_HD AUDIO_FORMAT_LDAC AUDIO_FORMAT_CELT AUDIO_FORMAT_APTX_ADAPTIVE">
+ encodedFormats="AUDIO_FORMAT_SBC AUDIO_FORMAT_AAC AUDIO_FORMAT_APTX AUDIO_FORMAT_APTX_HD AUDIO_FORMAT_LDAC AUDIO_FORMAT_CELT AUDIO_FORMAT_APTX_ADAPTIVE AUDIO_FORMAT_APTX_TWSP">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</devicePort>
<devicePort tagName="BT A2DP Headphones" type="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES" role="sink"
- encodedFormats="AUDIO_FORMAT_SBC AUDIO_FORMAT_AAC AUDIO_FORMAT_APTX AUDIO_FORMAT_APTX_HD AUDIO_FORMAT_LDAC AUDIO_FORMAT_CELT AUDIO_FORMAT_APTX_ADAPTIVE">
+ encodedFormats="AUDIO_FORMAT_SBC AUDIO_FORMAT_AAC AUDIO_FORMAT_APTX AUDIO_FORMAT_APTX_HD AUDIO_FORMAT_LDAC AUDIO_FORMAT_CELT AUDIO_FORMAT_APTX_ADAPTIVE AUDIO_FORMAT_APTX_TWSP">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</devicePort>
<devicePort tagName="BT A2DP Speaker" type="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER" role="sink"
- encodedFormats="AUDIO_FORMAT_SBC AUDIO_FORMAT_AAC AUDIO_FORMAT_APTX AUDIO_FORMAT_APTX_HD AUDIO_FORMAT_LDAC AUDIO_FORMAT_CELT AUDIO_FORMAT_APTX_ADAPTIVE">
+ encodedFormats="AUDIO_FORMAT_SBC AUDIO_FORMAT_AAC AUDIO_FORMAT_APTX AUDIO_FORMAT_APTX_HD AUDIO_FORMAT_LDAC AUDIO_FORMAT_CELT AUDIO_FORMAT_APTX_ADAPTIVE AUDIO_FORMAT_APTX_TWSP">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</devicePort>
@@ -374,8 +369,6 @@
sources="Telephony Rx"/>
<route type="mix" sink="primary input"
sources="Wired Headset Mic,BT SCO Headset Mic,FM Tuner,USB Device In,USB Headset In,Telephony Rx"/>
- <route type="mix" sink="surround_sound"
- sources="Built-In Mic,Built-In Back Mic"/>
<route type="mix" sink="usb_surround_sound"
sources="USB Device In,USB Headset In"/>
<route type="mix" sink="record_24"
diff --git a/configs/msmnile/mixer_paths_tavil.xml b/configs/msmnile/mixer_paths_tavil.xml
index a19c667..f2e4842 100644
--- a/configs/msmnile/mixer_paths_tavil.xml
+++ b/configs/msmnile/mixer_paths_tavil.xml
@@ -466,6 +466,7 @@
<ctl name="RX INT8_1 MIX1 INP0" value="ZERO" />
<ctl name="RX INT8_1 MIX1 INP1" value="ZERO" />
<ctl name="RX INT8_1 MIX1 INP2" value="ZERO" />
+ <ctl name="RX INT7 MIX2 INP" value="ZERO" />
<ctl name="RX INT0_2 MUX" value="ZERO" />
<ctl name="RX INT1_2 MUX" value="ZERO" />
<ctl name="RX INT2_2 MUX" value="ZERO" />
@@ -567,6 +568,10 @@
<ctl name="AUDIO_REF_EC_UL1 MUX" value="SLIM_6_RX" />
</path>
+ <path name="echo-reference headset">
+ <path name="echo-reference headphones" />
+ </path>
+
<path name="echo-reference display-port">
<ctl name="AUDIO_REF_EC_UL1 MUX" value="DISPLAY_PORT" />
</path>
@@ -582,6 +587,10 @@
<ctl name="AUDIO_REF_EC_UL10 MUX" value="SLIM_6_RX" />
</path>
+ <path name="echo-reference-voip headset">
+ <path name="echo-reference-voip headphones" />
+ </path>
+
<path name="echo-reference-voip display-port">
<ctl name="AUDIO_REF_EC_UL10 MUX" value="DISPLAY_PORT" />
</path>
@@ -594,6 +603,10 @@
<path name="deep-buffer-playback" />
</path>
+ <path name="deep-buffer-playback speaker-safe">
+ <path name="deep-buffer-playback" />
+ </path>
+
<path name="deep-buffer-playback display-port">
<ctl name="DISPLAY_PORT Mixer MultiMedia1" value="1" />
</path>
@@ -629,25 +642,49 @@
<path name="deep-buffer-playback" />
</path>
+ <path name="deep-buffer-playback speaker-safe-and-usb-headphones">
+ <path name="deep-buffer-playback usb-headphones" />
+ <path name="deep-buffer-playback" />
+ </path>
+
<path name="deep-buffer-playback headphones">
<ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia1" value="1" />
</path>
+ <path name="deep-buffer-playback headset">
+ <path name="deep-buffer-playback headphones" />
+ </path>
+
<path name="deep-buffer-playback speaker-and-headphones">
<path name="deep-buffer-playback headphones" />
<path name="deep-buffer-playback" />
</path>
+ <path name="deep-buffer-playback speaker-safe-and-headphones">
+ <path name="deep-buffer-playback headphones" />
+ <path name="deep-buffer-playback" />
+ </path>
+
<path name="deep-buffer-playback speaker-and-bt-sco">
<path name="deep-buffer-playback bt-sco" />
<path name="deep-buffer-playback" />
</path>
+ <path name="deep-buffer-playback speaker-safe-and-bt-sco">
+ <path name="deep-buffer-playback bt-sco" />
+ <path name="deep-buffer-playback" />
+ </path>
+
<path name="deep-buffer-playback speaker-and-bt-sco-wb">
<path name="deep-buffer-playback bt-sco-wb" />
<path name="deep-buffer-playback" />
</path>
+ <path name="deep-buffer-playback speaker-safe-and-bt-sco-wb">
+ <path name="deep-buffer-playback bt-sco-wb" />
+ <path name="deep-buffer-playback" />
+ </path>
+
<path name="low-latency-playback">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia5" value="1" />
</path>
@@ -656,6 +693,10 @@
<path name="low-latency-playback" />
</path>
+ <path name="low-latency-playback speaker-safe">
+ <path name="low-latency-playback" />
+ </path>
+
<path name="low-latency-playback display-port">
<ctl name="DISPLAY_PORT Mixer MultiMedia5" value="1" />
</path>
@@ -691,15 +732,29 @@
<path name="low-latency-playback" />
</path>
+ <path name="low-latency-playback speaker-safe-and-usb-headphones">
+ <path name="low-latency-playback usb-headphones" />
+ <path name="low-latency-playback" />
+ </path>
+
<path name="low-latency-playback headphones">
<ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia5" value="1" />
</path>
+ <path name="low-latency-playback headset">
+ <path name="low-latency-playback headphones" />
+ </path>
+
<path name="low-latency-playback speaker-and-headphones">
<path name="low-latency-playback headphones" />
<path name="low-latency-playback" />
</path>
+ <path name="low-latency-playback speaker-safe-and-headphones">
+ <path name="low-latency-playback headphones" />
+ <path name="low-latency-playback" />
+ </path>
+
<path name="low-latency-playback resume">
<ctl name="MultiMedia5_RX QOS Vote" value="Enable" />
</path>
@@ -709,11 +764,21 @@
<path name="low-latency-playback" />
</path>
+ <path name="low-latency-playback speaker-safe-and-bt-sco">
+ <path name="low-latency-playback bt-sco" />
+ <path name="low-latency-playback" />
+ </path>
+
<path name="low-latency-playback speaker-and-bt-sco-wb">
<path name="low-latency-playback bt-sco-wb" />
<path name="low-latency-playback" />
</path>
+ <path name="low-latency-playback speaker-safe-and-bt-sco-wb">
+ <path name="low-latency-playback bt-sco-wb" />
+ <path name="low-latency-playback" />
+ </path>
+
<path name="audio-ull-playback">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia8" value="1" />
</path>
@@ -722,15 +787,28 @@
<path name="audio-ull-playback" />
</path>
+ <path name="audio-ull-playback speaker-safe">
+ <path name="audio-ull-playback" />
+ </path>
+
<path name="audio-ull-playback headphones">
<ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia8" value="1" />
</path>
+ <path name="audio-ull-playback headset">
+ <path name="audio-ull-playback headphones" />
+ </path>
+
<path name="audio-ull-playback speaker-and-headphones">
<path name="audio-ull-playback" />
<path name="audio-ull-playback headphones" />
</path>
+ <path name="audio-ull-playback speaker-safe-and-headphones">
+ <path name="audio-ull-playback" />
+ <path name="audio-ull-playback headphones" />
+ </path>
+
<path name="audio-ull-playback display-port">
<ctl name="DISPLAY_PORT Mixer MultiMedia8" value="1" />
</path>
@@ -766,11 +844,21 @@
<path name="audio-ull-playback" />
</path>
+ <path name="audio-ull-playback speaker-safe-and-bt-sco">
+ <path name="audio-ull-playback bt-sco" />
+ <path name="audio-ull-playback" />
+ </path>
+
<path name="audio-ull-playback speaker-and-bt-sco-wb">
<path name="audio-ull-playback bt-sco-wb" />
<path name="audio-ull-playback" />
</path>
+ <path name="audio-ull-playback speaker-safe-and-bt-sco-wb">
+ <path name="audio-ull-playback bt-sco-wb" />
+ <path name="audio-ull-playback" />
+ </path>
+
<path name="multi-channel-playback display-port">
<ctl name="DISPLAY_PORT Mixer MultiMedia2" value="1" />
</path>
@@ -787,6 +875,10 @@
<path name="compress-offload-playback" />
</path>
+ <path name="compress-offload-playback speaker-safe">
+ <path name="compress-offload-playback" />
+ </path>
+
<path name="compress-offload-playback display-port">
<ctl name="DISPLAY_PORT Mixer MultiMedia4" value="1" />
</path>
@@ -826,10 +918,19 @@
<path name="compress-offload-playback" />
</path>
+ <path name="compress-offload-playback speaker-safe-and-usb-headphones">
+ <path name="compress-offload-playback usb-headphones" />
+ <path name="compress-offload-playback" />
+ </path>
+
<path name="compress-offload-playback headphones">
<ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia4" value="1" />
</path>
+ <path name="compress-offload-playback headset">
+ <path name="compress-offload-playback headphones" />
+ </path>
+
<path name="compress-offload-playback headphones-44.1">
<ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia4" value="1" />
</path>
@@ -843,16 +944,31 @@
<path name="compress-offload-playback" />
</path>
+ <path name="compress-offload-playback speaker-safe-and-headphones">
+ <path name="compress-offload-playback headphones" />
+ <path name="compress-offload-playback" />
+ </path>
+
<path name="compress-offload-playback speaker-and-bt-sco">
<path name="compress-offload-playback bt-sco" />
<path name="compress-offload-playback" />
</path>
+ <path name="compress-offload-playback speaker-safe-and-bt-sco">
+ <path name="compress-offload-playback bt-sco" />
+ <path name="compress-offload-playback" />
+ </path>
+
<path name="compress-offload-playback speaker-and-bt-sco-wb">
<path name="compress-offload-playback bt-sco-wb" />
<path name="compress-offload-playback" />
</path>
+ <path name="compress-offload-playback speaker-safe-and-bt-sco-wb">
+ <path name="compress-offload-playback bt-sco-wb" />
+ <path name="compress-offload-playback" />
+ </path>
+
<path name="compress-offload-playback2">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia7" value="1" />
</path>
@@ -892,10 +1008,19 @@
<path name="compress-offload-playback2" />
</path>
+ <path name="compress-offload-playback2 speaker-safe-and-usb-headphones">
+ <path name="compress-offload-playback2 usb-headphones" />
+ <path name="compress-offload-playback2" />
+ </path>
+
<path name="compress-offload-playback2 headphones">
<ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia7" value="1" />
</path>
+ <path name="compress-offload-playback2 headset">
+ <path name="compress-offload-playback2 headphones" />
+ </path>
+
<path name="compress-offload-playback2 headphones-44.1">
<ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia7" value="1" />
</path>
@@ -909,16 +1034,31 @@
<path name="compress-offload-playback2" />
</path>
+ <path name="compress-offload-playback2 speaker-safe-and-headphones">
+ <path name="compress-offload-playback2 headphones" />
+ <path name="compress-offload-playback2" />
+ </path>
+
<path name="compress-offload-playback2 speaker-and-bt-sco">
<path name="compress-offload-playback2 bt-sco" />
<path name="compress-offload-playback2" />
</path>
+ <path name="compress-offload-playback2 speaker-safe-and-bt-sco">
+ <path name="compress-offload-playback2 bt-sco" />
+ <path name="compress-offload-playback2" />
+ </path>
+
<path name="compress-offload-playback2 speaker-and-bt-sco-wb">
<path name="compress-offload-playback2 bt-sco-wb" />
<path name="compress-offload-playback2" />
</path>
+ <path name="compress-offload-playback2 speaker-safe-and-bt-sco-wb">
+ <path name="compress-offload-playback2 bt-sco-wb" />
+ <path name="compress-offload-playback2" />
+ </path>
+
<path name="compress-offload-playback3">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia10" value="1" />
</path>
@@ -962,6 +1102,10 @@
<ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia10" value="1" />
</path>
+ <path name="compress-offload-playback3 headset">
+ <path name="compress-offload-playback3 headphones" />
+ </path>
+
<path name="compress-offload-playback3 headphones-44.1">
<ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia10" value="1" />
</path>
@@ -1029,6 +1173,10 @@
<ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia11" value="1" />
</path>
+ <path name="compress-offload-playback4 headset">
+ <path name="compress-offload-playback4 headphones" />
+ </path>
+
<path name="compress-offload-playback4 headphones-44.1">
<ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia11" value="1" />
</path>
@@ -1095,6 +1243,10 @@
<ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia12" value="1" />
</path>
+ <path name="compress-offload-playback5 headset">
+ <path name="compress-offload-playback5 headphones" />
+ </path>
+
<path name="compress-offload-playback5 headphones-44.1">
<ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia12" value="1" />
</path>
@@ -1161,6 +1313,10 @@
<ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia13" value="1" />
</path>
+ <path name="compress-offload-playback6 headset">
+ <path name="compress-offload-playback6 headphones" />
+ </path>
+
<path name="compress-offload-playback6 headphones-44.1">
<ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia13" value="1" />
</path>
@@ -1227,6 +1383,10 @@
<ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia14" value="1" />
</path>
+ <path name="compress-offload-playback7 headset">
+ <path name="compress-offload-playback7 headphones" />
+ </path>
+
<path name="compress-offload-playback7 headphones-44.1">
<ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia14" value="1" />
</path>
@@ -1293,6 +1453,10 @@
<ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia15" value="1" />
</path>
+ <path name="compress-offload-playback8 headset">
+ <path name="compress-offload-playback8 headphones" />
+ </path>
+
<path name="compress-offload-playback8 headphones-44.1">
<ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia15" value="1" />
</path>
@@ -1359,6 +1523,10 @@
<ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia16" value="1" />
</path>
+ <path name="compress-offload-playback9 headset">
+ <path name="compress-offload-playback9 headphones" />
+ </path>
+
<path name="compress-offload-playback9 headphones-44.1">
<ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia16" value="1" />
</path>
@@ -1490,6 +1658,10 @@
<ctl name="SLIMBUS6_DL_HL Switch" value="1" />
</path>
+ <path name="play-fm headset">
+ <path name="play-fm headphones" />
+ </path>
+
<path name="incall-rec-uplink">
<ctl name="MultiMedia1 Mixer VOC_REC_UL" value="1" />
</path>
@@ -1642,6 +1814,10 @@
<path name="hfp-sco headphones">
</path>
+ <path name="hfp-sco headset">
+ <path name="hfp-sco headphones" />
+ </path>
+
<path name="hfp-sco-wb">
<path name="hfp-sco" />
</path>
@@ -1650,6 +1826,10 @@
<path name="hfp-sco headphones" />
</path>
+ <path name="hfp-sco-wb headset">
+ <path name="hfp-sco headphones" />
+ </path>
+
<path name="compress-voip-call">
<ctl name="SLIM_0_RX_Voice Mixer Voip" value="1" />
<ctl name="Voip_Tx Mixer SLIM_0_TX_Voip" value="1" />
@@ -1662,9 +1842,13 @@
<path name="compress-voip-call headphones">
<ctl name="SLIM_6_RX_Voice Mixer Voip" value="1" />
- <ctl name="Voip_Tx Mixer SLIM_1_TX_Voip" value="1" />
+ <ctl name="Voip_Tx Mixer SLIM_0_TX_Voip" value="1" />
</path>
+ <path name="compress-voip-call headset">
+ <ctl name="SLIM_6_RX_Voice Mixer Voip" value="1" />
+ <ctl name="Voip_Tx Mixer SLIM_1_TX_Voip" value="1" />
+ </path>
<path name="compress-voip-call bt-sco">
<ctl name="SLIM_7_RX_Voice Mixer Voip" value="1" />
@@ -1698,6 +1882,11 @@
<path name="voicemmode1-call headphones">
<ctl name="SLIM_6_RX_Voice Mixer VoiceMMode1" value="1" />
+ <ctl name="VoiceMMode1_Tx Mixer SLIM_0_TX_MMode1" value="1" />
+ </path>
+
+ <path name="voicemmode1-call headset">
+ <ctl name="SLIM_6_RX_Voice Mixer VoiceMMode1" value="1" />
<ctl name="VoiceMMode1_Tx Mixer SLIM_1_TX_MMode1" value="1" />
</path>
@@ -1743,6 +1932,11 @@
<path name="voicemmode2-call headphones">
<ctl name="SLIM_6_RX_Voice Mixer VoiceMMode2" value="1" />
+ <ctl name="VoiceMMode2_Tx Mixer SLIM_0_TX_MMode2" value="1" />
+ </path>
+
+ <path name="voicemmode2-call headset">
+ <ctl name="SLIM_6_RX_Voice Mixer VoiceMMode2" value="1" />
<ctl name="VoiceMMode2_Tx Mixer SLIM_1_TX_MMode2" value="1" />
</path>
@@ -1790,6 +1984,10 @@
<ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia10" value="1" />
</path>
+ <path name="audio-playback-voip headset">
+ <path name="audio-playback-voip headphones" />
+ </path>
+
<path name="audio-playback-voip bt-sco">
<ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia10" value="1" />
</path>
@@ -1986,6 +2184,10 @@
<path name="speaker" />
</path>
+ <path name="speaker-safe">
+ <path name="speaker-mono"/>
+ </path>
+
<path name="sidetone-iir">
<ctl name="IIR0 Enable Band1" value="1" />
<ctl name="IIR0 Enable Band2" value="1" />
@@ -2227,7 +2429,7 @@
<path name="headset-mic">
<path name="amic2" />
- <ctl name="DEC0 Volume" value="84" />
+ <ctl name="DEC1 Volume" value="84" />
</path>
<path name="headset-mic-liquid">
@@ -2294,6 +2496,10 @@
<path name="headphones" />
</path>
+ <path name="voice-headset">
+ <path name="headphones" />
+ </path>
+
<path name="voice-line">
<path name="voice-headphones" />
</path>
@@ -2302,11 +2508,21 @@
<path name="amic2" />
</path>
+ <path name="voice-headset-mic-qrd">
+ <path name="amic2" />
+ <ctl name="DEC0 Volume" value="84" />
+ </path>
+
<path name="speaker-and-headphones">
<path name="headphones" />
<path name="speaker" />
</path>
+ <path name="speaker-safe-and-headphones">
+ <path name="headphones" />
+ <path name="speaker-safe" />
+ </path>
+
<path name="speaker-and-line">
<path name="speaker-and-headphones" />
</path>
@@ -2388,6 +2604,11 @@
<path name="usb-headphones" />
</path>
+ <path name="speaker-safe-and-usb-headphones">
+ <path name="speaker-safe" />
+ <path name="usb-headphones" />
+ </path>
+
<path name="speaker-and-display-port">
<path name="speaker" />
<path name="display-port" />
@@ -2864,6 +3085,11 @@
<path name="bt-a2dp" />
</path>
+ <path name="speaker-safe-and-bt-a2dp">
+ <path name="speaker-safe" />
+ <path name="bt-a2dp" />
+ </path>
+
<path name="deep-buffer-playback bt-a2dp">
<ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia1" value="1" />
</path>
@@ -2917,21 +3143,41 @@
<path name="deep-buffer-playback" />
</path>
+ <path name="deep-buffer-playback speaker-safe-and-bt-a2dp">
+ <path name="deep-buffer-playback bt-a2dp" />
+ <path name="deep-buffer-playback" />
+ </path>
+
<path name="compress-offload-playback speaker-and-bt-a2dp">
<path name="compress-offload-playback bt-a2dp" />
<path name="compress-offload-playback" />
</path>
+ <path name="compress-offload-playback speaker-safe-and-bt-a2dp">
+ <path name="compress-offload-playback bt-a2dp" />
+ <path name="compress-offload-playback" />
+ </path>
+
<path name="low-latency-playback speaker-and-bt-a2dp">
<path name="low-latency-playback bt-a2dp" />
<path name="low-latency-playback" />
</path>
+ <path name="low-latency-playback speaker-safe-and-bt-a2dp">
+ <path name="low-latency-playback bt-a2dp" />
+ <path name="low-latency-playback" />
+ </path>
+
<path name="compress-offload-playback2 speaker-and-bt-a2dp">
<path name="compress-offload-playback2 bt-a2dp" />
<path name="compress-offload-playback2" />
</path>
+ <path name="compress-offload-playback2 speaker-safe-and-bt-a2dp">
+ <path name="compress-offload-playback2 bt-a2dp" />
+ <path name="compress-offload-playback2" />
+ </path>
+
<path name="compress-offload-playback3 speaker-and-bt-a2dp">
<path name="compress-offload-playback3 bt-a2dp" />
<path name="compress-offload-playback3" />
@@ -2972,6 +3218,11 @@
<path name="audio-ull-playback" />
</path>
+ <path name="audio-ull-playback speaker-safe-and-bt-a2dp">
+ <path name="audio-ull-playback bt-a2dp" />
+ <path name="audio-ull-playback" />
+ </path>
+
<path name="mmap-playback">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia16" value="1" />
</path>
@@ -2980,11 +3231,20 @@
<ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia16" value="1" />
</path>
+ <path name="mmap-playback headset">
+ <path name="mmap-playback headphones" />
+ </path>
+
<path name="mmap-playback speaker-and-headphones">
<path name="mmap-playback" />
<path name="mmap-playback headphones" />
</path>
+ <path name="mmap-playback speaker-safe-and-headphones">
+ <path name="mmap-playback" />
+ <path name="mmap-playback headphones" />
+ </path>
+
<path name="mmap-playback bt-sco">
<ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia16" value="1" />
</path>
@@ -3029,6 +3289,11 @@
<path name="mmap-playback" />
</path>
+ <path name="mmap-playback speaker-safe-and-usb-headphones">
+ <path name="mmap-playback usb-headphones" />
+ <path name="mmap-playback" />
+ </path>
+
<path name="mmap-record">
<ctl name="MultiMedia16 Mixer SLIM_0_TX" value="1" />
</path>
@@ -3130,6 +3395,10 @@
<path name="incall_music_uplink" />
</path>
+ <path name="incall_music_uplink speaker-safe-and-usb-headphones">
+ <path name="incall_music_uplink" />
+ </path>
+
<path name="incall_music_uplink headphones">
<path name="incall_music_uplink" />
</path>
@@ -3138,10 +3407,18 @@
<path name="incall_music_uplink" />
</path>
+ <path name="incall_music_uplink speaker-safe-and-headphones">
+ <path name="incall_music_uplink" />
+ </path>
+
<path name="incall_music_uplink speaker-and-bt-sco">
<path name="incall_music_uplink" />
</path>
+ <path name="incall_music_uplink speaker-safe-and-bt-sco">
+ <path name="incall_music_uplink" />
+ </path>
+
<path name="incall_music_uplink voice-tty-hco-handset">
<path name="incall_music_uplink" />
</path>
@@ -3150,6 +3427,10 @@
<path name="incall_music_uplink" />
</path>
+ <path name="incall_music_uplink speaker-safe-and-bt-a2dp">
+ <path name="incall_music_uplink" />
+ </path>
+
<path name="incall_music_uplink bt-a2dp">
<path name="incall_music_uplink" />
</path>
diff --git a/configs/msmnile/msmnile.mk b/configs/msmnile/msmnile.mk
index 3f87f77..4662113 100644
--- a/configs/msmnile/msmnile.mk
+++ b/configs/msmnile/msmnile.mk
@@ -371,6 +371,99 @@
PRODUCT_PROPERTY_OVERRIDES += \
persist.audio.fluence.voicecomm=true
+#add dynamic feature flags here
+ifeq ($(GENERIC_ODM_IMAGE),true)
+# Generic ODM varient related
+PRODUCT_ODM_PROPERTIES += \
+vendor.audio.feature.a2dp_offload.enable=true \
+vendor.audio.feature.afe_proxy.enable=false \
+vendor.audio.feature.anc_headset.enable=false \
+vendor.audio.feature.audio_sphere.enable=false \
+vendor.audio.feature.battery_listener.enable=false \
+vendor.audio.feature.compr_cap.enable=false \
+vendor.audio.feature.compress_in.enable=false \
+vendor.audio.feature.compress_meta_data.enable=false \
+vendor.audio.feature.compr_voip.enable=false \
+vendor.audio.feature.concurrent_capture.enable=true \
+vendor.audio.feature.custom_stereo.enable=false \
+vendor.audio.feature.display_port.enable=false \
+vendor.audio.feature.dsm_feedback.enable=false \
+vendor.audio.feature.dynamic_ecns.enable=false \
+vendor.audio.feature.ext_hw_plugin.enable=false \
+vendor.audio.feature.external_dsp.enable=true \
+vendor.audio.feature.external_speaker.enable=true \
+vendor.audio.feature.external_speaker_tfa.enable=false \
+vendor.audio.feature.fluence.enable=false \
+vendor.audio.feature.fm.enable=false \
+vendor.audio.feature.hdmi_edid.enable=false \
+vendor.audio.feature.hdmi_passthrough.enable=false \
+vendor.audio.feature.hfp.enable=true \
+vendor.audio.feature.hifi_audio.enable=false \
+vendor.audio.feature.hwdep_cal.enable=true \
+vendor.audio.feature.incall_music.enable=true \
+vendor.audio.feature.keep_alive.enable=false \
+vendor.audio.feature.kpi_optimize.enable=false \
+vendor.audio.feature.maxx_audio.enable=true \
+vendor.audio.feature.ras.enable=false \
+vendor.audio.feature.record_play_concurency.enable=false \
+vendor.audio.feature.src_trkn.enable=false \
+vendor.audio.feature.spkr_prot.enable=true \
+vendor.audio.feature.ssrec.enable=false \
+vendor.audio.feature.usb_offload.enable=true \
+vendor.audio.feature.usb_offload_burst_mode.enable=false \
+vendor.audio.feature.usb_offload_sidetone_volume.enable=false \
+vendor.audio.feature.deepbuffer_as_primary.enable=false \
+vendor.audio.feature.vbat.enable=false \
+vendor.audio.feature.wsa.enable=false \
+vendor.audio.feature.audiozoom.enable=true \
+vendor.audio.feature.snd_mon.enable=true
+else
+# Non-Generic ODM varient related
+PRODUCT_ODM_PROPERTIES += \
+vendor.audio.feature.a2dp_offload.enable=true \
+vendor.audio.feature.afe_proxy.enable=true \
+vendor.audio.feature.anc_headset.enable=true \
+vendor.audio.feature.audio_sphere.enable=true \
+vendor.audio.feature.battery_listener.enable=true \
+vendor.audio.feature.compr_cap.enable=false \
+vendor.audio.feature.compress_in.enable=true \
+vendor.audio.feature.compress_meta_data.enable=true \
+vendor.audio.feature.compr_voip.enable=false \
+vendor.audio.feature.concurrent_capture.enable=true \
+vendor.audio.feature.custom_stereo.enable=true \
+vendor.audio.feature.display_port.enable=true \
+vendor.audio.feature.dsm_feedback.enable=false \
+vendor.audio.feature.dynamic_ecns.enable=true \
+vendor.audio.feature.ext_hw_plugin.enable=true \
+vendor.audio.feature.external_dsp.enable=false \
+vendor.audio.feature.external_speaker.enable=false \
+vendor.audio.feature.external_speaker_tfa.enable=false \
+vendor.audio.feature.fluence.enable=true \
+vendor.audio.feature.fm.enable=true \
+vendor.audio.feature.hdmi_edid.enable=true \
+vendor.audio.feature.hdmi_passthrough.enable=true \
+vendor.audio.feature.hfp.enable=true \
+vendor.audio.feature.hifi_audio.enable=false \
+vendor.audio.feature.hwdep_cal.enable=false \
+vendor.audio.feature.incall_music.enable=true \
+vendor.audio.feature.keep_alive.enable=true \
+vendor.audio.feature.kpi_optimize.enable=true \
+vendor.audio.feature.maxx_audio.enable=false \
+vendor.audio.feature.ras.enable=true \
+vendor.audio.feature.record_play_concurency.enable=false \
+vendor.audio.feature.src_trkn.enable=true \
+vendor.audio.feature.spkr_prot.enable=true \
+vendor.audio.feature.ssrec.enable=true \
+vendor.audio.feature.usb_offload.enable=true \
+vendor.audio.feature.usb_offload_burst_mode.enable=true \
+vendor.audio.feature.usb_offload_sidetone_volume.enable=false \
+vendor.audio.feature.deepbuffer_as_primary.enable=false \
+vendor.audio.feature.vbat.enable=true \
+vendor.audio.feature.wsa.enable=false \
+vendor.audio.feature.audiozoom.enable=false \
+vendor.audio.feature.snd_mon.enable=true
+endif
+
# for HIDL related packages
PRODUCT_PACKAGES += \
android.hardware.audio@2.0-service \
diff --git a/configs/msmnile/sound_trigger_mixer_paths_wcd9340.xml b/configs/msmnile/sound_trigger_mixer_paths_wcd9340.xml
index b385769..f32ee2e 100644
--- a/configs/msmnile/sound_trigger_mixer_paths_wcd9340.xml
+++ b/configs/msmnile/sound_trigger_mixer_paths_wcd9340.xml
@@ -298,6 +298,15 @@
<ctl name="AIF4_MAD Mixer SLIM TX13" value="1" />
</path>
+ <path name="listen-ape-headset-mic">
+ <ctl name="AIF3_CAP Mixer SLIM TX2" value="1" />
+ <ctl name="SLIM_1_TX Channels" value="One" />
+ <ctl name="CDC_IF TX2 MUX" value="DEC2" />
+ <ctl name="ADC MUX2" value="AMIC" />
+ <ctl name="AMIC MUX2" value="ADC2" />
+ <ctl name="DEC2 Volume" value="84" />
+ </path>
+
<path name="listen-ape-handset-mic-preproc">
<ctl name="AIF3_CAP Mixer SLIM TX2" value="1" />
<ctl name="SLIM_1_TX Channels" value="One" />
@@ -362,6 +371,20 @@
<ctl name="EC Reference SampleRate" value="48000"/>
</path>
+ <path name="echo-reference line">
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="SLIM_6_RX"/>
+ <ctl name="EC Reference Channels" value="Two"/>
+ <ctl name="EC Reference Bit Format" value="S16_LE"/>
+ <ctl name="EC Reference SampleRate" value="48000"/>
+ </path>
+
+ <path name="echo-reference headset">
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="SLIM_6_RX"/>
+ <ctl name="EC Reference Channels" value="Two"/>
+ <ctl name="EC Reference Bit Format" value="S16_LE"/>
+ <ctl name="EC Reference SampleRate" value="48000"/>
+ </path>
+
<path name="echo-reference a2dp">
<ctl name="AUDIO_REF_EC_UL1 MUX" value="SLIM_7_RX"/>
<ctl name="EC Reference Channels" value="Two"/>
diff --git a/configs/msmnile/sound_trigger_mixer_paths_wcd9340_qrd.xml b/configs/msmnile/sound_trigger_mixer_paths_wcd9340_qrd.xml
index 11e601d..0a7c780 100644
--- a/configs/msmnile/sound_trigger_mixer_paths_wcd9340_qrd.xml
+++ b/configs/msmnile/sound_trigger_mixer_paths_wcd9340_qrd.xml
@@ -298,6 +298,15 @@
<ctl name="AIF4_MAD Mixer SLIM TX13" value="1" />
</path>
+ <path name="listen-ape-headset-mic">
+ <ctl name="AIF3_CAP Mixer SLIM TX2" value="1" />
+ <ctl name="SLIM_1_TX Channels" value="One" />
+ <ctl name="CDC_IF TX2 MUX" value="DEC2" />
+ <ctl name="ADC MUX2" value="AMIC" />
+ <ctl name="AMIC MUX2" value="ADC2" />
+ <ctl name="DEC2 Volume" value="84" />
+ </path>
+
<path name="listen-ape-handset-mic-preproc">
<ctl name="AIF3_CAP Mixer SLIM TX2" value="1" />
<ctl name="SLIM_1_TX Channels" value="One" />
@@ -329,7 +338,7 @@
<ctl name="DMIC MUX0" value="DMIC0" />
<ctl name="CDC_IF TX1 MUX" value="DEC1" />
<ctl name="ADC MUX1" value="DMIC" />
- <ctl name="DMIC MUX1" value="DMIC3" />
+ <ctl name="DMIC MUX1" value="DMIC2" />
<ctl name="CDC_IF TX2 MUX" value="DEC2" />
<ctl name="ADC MUX2" value="DMIC" />
<ctl name="DMIC MUX2" value="DMIC5" />
@@ -362,6 +371,20 @@
<ctl name="EC Reference SampleRate" value="48000"/>
</path>
+ <path name="echo-reference line">
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="SLIM_6_RX"/>
+ <ctl name="EC Reference Channels" value="Two"/>
+ <ctl name="EC Reference Bit Format" value="S16_LE"/>
+ <ctl name="EC Reference SampleRate" value="48000"/>
+ </path>
+
+ <path name="echo-reference headset">
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="SLIM_6_RX"/>
+ <ctl name="EC Reference Channels" value="Two"/>
+ <ctl name="EC Reference Bit Format" value="S16_LE"/>
+ <ctl name="EC Reference SampleRate" value="48000"/>
+ </path>
+
<path name="echo-reference a2dp">
<ctl name="AUDIO_REF_EC_UL1 MUX" value="SLIM_7_RX"/>
<ctl name="EC Reference Channels" value="Two"/>
diff --git a/configs/msmnile/sound_trigger_platform_info.xml b/configs/msmnile/sound_trigger_platform_info.xml
index 91fcb35..8468452 100644
--- a/configs/msmnile/sound_trigger_platform_info.xml
+++ b/configs/msmnile/sound_trigger_platform_info.xml
@@ -60,6 +60,7 @@
<param DEVICE_HANDSET_MIC_PP_APE="135" />
<param DEVICE_HANDSET_QMIC_APE="137" />
<param DEVICE_HEADSET_MIC_CPE="139" />
+ <param DEVICE_HEADSET_MIC_APE="141" />
<param DEVICE_HANDSET_DMIC_APE="149" />
<param DEVICE_HANDSET_DMIC_CPE="148" />
</acdb_ids>
diff --git a/configs/msmnile_au/msmnile_au.mk b/configs/msmnile_au/msmnile_au.mk
index c9d5d96..5a7366f 100644
--- a/configs/msmnile_au/msmnile_au.mk
+++ b/configs/msmnile_au/msmnile_au.mk
@@ -2,7 +2,6 @@
#
#AUDIO_FEATURE_FLAGS
BOARD_USES_ALSA_AUDIO := true
-TARGET_USES_AOSP_FOR_AUDIO := false
ifneq ($(TARGET_USES_AOSP_FOR_AUDIO), true)
USE_CUSTOM_AUDIO_POLICY := 1
diff --git a/configs/msmsteppe/audio_policy_configuration.xml b/configs/msmsteppe/audio_policy_configuration.xml
index 5435fad..f86a518 100644
--- a/configs/msmsteppe/audio_policy_configuration.xml
+++ b/configs/msmsteppe/audio_policy_configuration.xml
@@ -167,11 +167,6 @@
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000"
channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK"/>
</mixPort>
- <mixPort name="surround_sound" role="sink">
- <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
- samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_INDEX_MASK_3,AUDIO_CHANNEL_INDEX_MASK_4,AUDIO_CHANNEL_IN_5POINT1,AUDIO_CHANNEL_INDEX_MASK_6"/>
- </mixPort>
<mixPort name="usb_surround_sound" role="sink">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,88200,96000,176400,192000"
@@ -257,17 +252,17 @@
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
</devicePort>
<devicePort tagName="BT A2DP Out" type="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP" role="sink"
- encodedFormats="AUDIO_FORMAT_SBC AUDIO_FORMAT_AAC AUDIO_FORMAT_APTX AUDIO_FORMAT_APTX_HD AUDIO_FORMAT_LDAC">
+ encodedFormats="AUDIO_FORMAT_SBC AUDIO_FORMAT_AAC AUDIO_FORMAT_APTX AUDIO_FORMAT_APTX_HD AUDIO_FORMAT_LDAC AUDIO_FORMAT_APTX_TWSP">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</devicePort>
<devicePort tagName="BT A2DP Headphones" type="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES" role="sink"
- encodedFormats="AUDIO_FORMAT_SBC AUDIO_FORMAT_AAC AUDIO_FORMAT_APTX AUDIO_FORMAT_APTX_HD AUDIO_FORMAT_LDAC">
+ encodedFormats="AUDIO_FORMAT_SBC AUDIO_FORMAT_AAC AUDIO_FORMAT_APTX AUDIO_FORMAT_APTX_HD AUDIO_FORMAT_LDAC AUDIO_FORMAT_APTX_TWSP">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</devicePort>
<devicePort tagName="BT A2DP Speaker" type="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER" role="sink"
- encodedFormats="AUDIO_FORMAT_SBC AUDIO_FORMAT_AAC AUDIO_FORMAT_APTX AUDIO_FORMAT_APTX_HD AUDIO_FORMAT_LDAC">
+ encodedFormats="AUDIO_FORMAT_SBC AUDIO_FORMAT_AAC AUDIO_FORMAT_APTX AUDIO_FORMAT_APTX_HD AUDIO_FORMAT_LDAC AUDIO_FORMAT_APTX_TWSP">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</devicePort>
@@ -368,8 +363,6 @@
sources="Telephony Rx"/>
<route type="mix" sink="primary input"
sources="Wired Headset Mic,BT SCO Headset Mic,FM Tuner,USB Device In,USB Headset In,Telephony Rx"/>
- <route type="mix" sink="surround_sound"
- sources="Built-In Mic,Built-In Back Mic"/>
<route type="mix" sink="usb_surround_sound"
sources="USB Device In,USB Headset In"/>
<route type="mix" sink="record_24"
diff --git a/configs/msmsteppe/msmsteppe.mk b/configs/msmsteppe/msmsteppe.mk
index 2c21fb9..e35d6be 100644
--- a/configs/msmsteppe/msmsteppe.mk
+++ b/configs/msmsteppe/msmsteppe.mk
@@ -350,6 +350,51 @@
PRODUCT_PROPERTY_OVERRIDES += \
persist.audio.fluence.voicecomm=true
+#add dynamic feature flags here
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio.feature.a2dp_offload.enable=true \
+vendor.audio.feature.afe_proxy.enable=true \
+vendor.audio.feature.anc_headset.enable=true \
+vendor.audio.feature.audio_sphere.enable=true \
+vendor.audio.feature.battery_listener.enable=false \
+vendor.audio.feature.compr_cap.enable=false \
+vendor.audio.feature.compress_in.enable=false \
+vendor.audio.feature.compress_meta_data.enable=true \
+vendor.audio.feature.compr_voip.enable=false \
+vendor.audio.feature.concurrent_capture.enable=false \
+vendor.audio.feature.custom_stereo.enable=true \
+vendor.audio.feature.display_port.enable=true \
+vendor.audio.feature.dsm_feedback.enable=false \
+vendor.audio.feature.dynamic_ecns.enable=false \
+vendor.audio.feature.ext_hw_plugin.enable=false \
+vendor.audio.feature.external_dsp.enable=false \
+vendor.audio.feature.external_speaker.enable=false \
+vendor.audio.feature.external_speaker_tfa.enable=false \
+vendor.audio.feature.fluence.enable=true \
+vendor.audio.feature.fm.enable=true \
+vendor.audio.feature.hdmi_edid.enable=true \
+vendor.audio.feature.hdmi_passthrough.enable=true \
+vendor.audio.feature.hfp.enable=true \
+vendor.audio.feature.hifi_audio.enable=false \
+vendor.audio.feature.hwdep_cal.enable=false \
+vendor.audio.feature.incall_music.enable=false \
+vendor.audio.feature.keep_alive.enable=false \
+vendor.audio.feature.kpi_optimize.enable=true \
+vendor.audio.feature.maxx_audio.enable=false \
+vendor.audio.feature.ras.enable=true \
+vendor.audio.feature.record_play_concurency.enable=false \
+vendor.audio.feature.src_trkn.enable=true \
+vendor.audio.feature.spkr_prot.enable=true \
+vendor.audio.feature.ssrec.enable=true \
+vendor.audio.feature.usb_offload.enable=true \
+vendor.audio.feature.usb_offload_burst_mode.enable=false \
+vendor.audio.feature.usb_offload_sidetone_volume.enable=false \
+vendor.audio.feature.deepbuffer_as_primary.enable=false \
+vendor.audio.feature.vbat.enable=true \
+vendor.audio.feature.wsa.enable=false \
+vendor.audio.feature.audiozoom.enable=false \
+vendor.audio.feature.snd_mon.enable=true
+
# for HIDL related packages
PRODUCT_PACKAGES += \
android.hardware.audio@2.0-service \
diff --git a/configs/qssi/qssi.mk b/configs/qssi/qssi.mk
index 8a8bf6b..3a644e2 100644
--- a/configs/qssi/qssi.mk
+++ b/configs/qssi/qssi.mk
@@ -23,6 +23,7 @@
AUDIO_FEATURE_ENABLED_PROXY_DEVICE := true
AUDIO_FEATURE_ENABLED_AUDIOSPHERE := true
AUDIO_FEATURE_ENABLED_3D_AUDIO := true
+AUDIO_FEATURE_ENABLED_AHAL_EXT := true
DOLBY_ENABLE := false
endif
@@ -124,3 +125,7 @@
PRODUCT_PROPERTY_OVERRIDES += \
vendor.audio.enable.mirrorlink=false
+#enable deep buffer
+PRODUCT_PROPERTY_OVERRIDES += \
+media.stagefright.audio.deep=false
+
diff --git a/configs/sdm660/audio_effects.xml b/configs/sdm660/audio_effects.xml
index b49284b..e5ce555 100644
--- a/configs/sdm660/audio_effects.xml
+++ b/configs/sdm660/audio_effects.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!--- Copyright (c) 2018, The Linux Foundation. All rights reserved. -->
+<!--- Copyright (c) 2018-2019, The Linux Foundation. All rights reserved. -->
<!--- -->
<!--- Redistribution and use in source and binary forms, with or without -->
<!--- modification, are permitted provided that the following conditions are -->
@@ -30,9 +30,6 @@
<libraries>
<library name="bundle" path="libbundlewrapper.so"/>
<library name="reverb" path="libreverbwrapper.so"/>
- <library name="qcbassboost" path="libqcbassboost.so"/>
- <library name="qcvirt" path="libqcvirt.so"/>
- <library name="qcreverb" path="libqcreverb.so"/>
<library name="visualizer_sw" path="libvisualizer.so"/>
<library name="visualizer_hw" path="libqcomvisualizer.so"/>
<library name="downmix" path="libdownmix.so"/>
@@ -46,11 +43,11 @@
</libraries>
<effects>
<effectProxy name="bassboost" library="proxy" uuid="14804144-a5ee-4d24-aa88-0002a5d5c51b">
- <libsw library="qcbassboost" uuid="23aca180-44bd-11e2-bcfd-0800200c9a66"/>
+ <libsw library="bundle" uuid="8631f300-72e2-11df-b57e-0002a5d5c51b"/>
<libhw library="offload_bundle" uuid="2c4a8c24-1581-487f-94f6-0002a5d5c51b"/>
</effectProxy>
<effectProxy name="virtualizer" library="proxy" uuid="d3467faa-acc7-4d34-acaf-0002a5d5c51b">
- <libsw library="qcvirt" uuid="e6c98a16-22a3-11e2-b87b-f23c91aec05e"/>
+ <libsw library="bundle" uuid="1d4033c0-8557-11df-9f2d-0002a5d5c51b"/>
<libhw library="offload_bundle" uuid="509a4498-561a-4bea-b3b1-0002a5d5c51b"/>
</effectProxy>
<effectProxy name="equalizer" library="proxy" uuid="c8e70ecd-48ca-456e-8a4f-0002a5d5c51b">
@@ -59,19 +56,19 @@
</effectProxy>
<effect name="volume" library="bundle" uuid="119341a0-8469-11df-81f9-0002a5d5c51b"/>
<effectProxy name="reverb_env_aux" library="proxy" uuid="48404ac9-d202-4ccc-bf84-0002a5d5c51b">
- <libsw library="qcreverb" uuid="a8c1e5f3-293d-43cd-95ec-d5e26c02e217"/>
+ <libsw library="reverb" uuid="4a387fc0-8ab3-11df-8bad-0002a5d5c51b"/>
<libhw library="offload_bundle" uuid="79a18026-18fd-4185-8233-0002a5d5c51b"/>
</effectProxy>
<effectProxy name="reverb_env_ins" library="proxy" uuid="b707403a-a1c1-4291-9573-0002a5d5c51b">
- <libsw library="qcreverb" uuid="791fff8b-8129-4655-83a4-59bc61034c3a"/>
+ <libsw library="reverb" uuid="c7a511a0-a3bb-11df-860e-0002a5d5c51b"/>
<libhw library="offload_bundle" uuid="eb64ea04-973b-43d2-8f5e-0002a5d5c51b"/>
</effectProxy>
<effectProxy name="reverb_pre_aux" library="proxy" uuid="1b78f587-6d1c-422e-8b84-0002a5d5c51b">
- <libsw library="qcreverb" uuid="53ef1db5-c0c0-445b-b060-e34d20ebb70a"/>
+ <libsw library="reverb" uuid="f29a1400-a3bb-11df-8ddc-0002a5d5c51b"/>
<libhw library="offload_bundle" uuid="6987be09-b142-4b41-9056-0002a5d5c51b"/>
</effectProxy>
<effectProxy name="reverb_pre_ins" library="proxy" uuid="f3e178d2-ebcb-408e-8357-0002a5d5c51b">
- <libsw library="qcreverb" uuid="b08a0e38-22a5-11e2-b87b-f23c91aec05e"/>
+ <libsw library="reverb" uuid="172cdf00-a3bc-11df-a72f-0002a5d5c51b"/>
<libhw library="offload_bundle" uuid="aa2bebf6-47cf-4613-9bca-0002a5d5c51b"/>
</effectProxy>
<effectProxy name="visualizer" library="proxy" uuid="1d0a1a53-7d5d-48f2-8e71-27fbd10d842c">
diff --git a/configs/sdm660/audio_policy_configuration.xml b/configs/sdm660/audio_policy_configuration.xml
index b1cf4b9..662764f 100644
--- a/configs/sdm660/audio_policy_configuration.xml
+++ b/configs/sdm660/audio_policy_configuration.xml
@@ -220,10 +220,6 @@
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="8000,16000" channelMasks="AUDIO_CHANNEL_OUT_MONO"/>
</devicePort>
- <devicePort tagName="BT SCO All" type="AUDIO_DEVICE_OUT_ALL_SCO" role="sink">
- <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
- samplingRates="8000,16000" channelMasks="AUDIO_CHANNEL_OUT_MONO"/>
- </devicePort>
<devicePort tagName="Telephony Tx" type="AUDIO_DEVICE_OUT_TELEPHONY_TX" role="sink">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="8000,16000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
@@ -325,7 +321,11 @@
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload"/>
<route type="mix" sink="FM"
sources="primary output"/>
- <route type="mix" sink="BT SCO All"
+ <route type="mix" sink="BT SCO"
+ sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx"/>
+ <route type="mix" sink="BT SCO Headset"
+ sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx"/>
+ <route type="mix" sink="BT SCO Car Kit"
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx"/>
<route type="mix" sink="USB Device Out"
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,hifi_playback"/>
diff --git a/configs/sdm660/sdm660.mk b/configs/sdm660/sdm660.mk
index 096eb96..1b60af4 100644
--- a/configs/sdm660/sdm660.mk
+++ b/configs/sdm660/sdm660.mk
@@ -260,6 +260,51 @@
PRODUCT_PROPERTY_OVERRIDES += \
audio.volume.headset.gain.depcal=true
+#add dynamic feature flags here
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio.feature.a2dp_offload.enable=true \
+vendor.audio.feature.afe_proxy.enable=true \
+vendor.audio.feature.anc_headset.enable=true \
+vendor.audio.feature.audio_sphere.enable=true \
+vendor.audio.feature.battery_listener.enable=false \
+vendor.audio.feature.compr_cap.enable=false \
+vendor.audio.feature.compress_in.enable=false \
+vendor.audio.feature.compress_meta_data.enable=true \
+vendor.audio.feature.compr_voip.enable=true \
+vendor.audio.feature.concurrent_capture.enable=false \
+vendor.audio.feature.custom_stereo.enable=true \
+vendor.audio.feature.display_port.enable=true \
+vendor.audio.feature.dsm_feedback.enable=false \
+vendor.audio.feature.dynamic_ecns.enable=false \
+vendor.audio.feature.ext_hw_plugin.enable=false \
+vendor.audio.feature.external_dsp.enable=false \
+vendor.audio.feature.external_speaker.enable=false \
+vendor.audio.feature.external_speaker_tfa.enable=false \
+vendor.audio.feature.fluence.enable=true \
+vendor.audio.feature.fm.enable=true \
+vendor.audio.feature.hdmi_edid.enable=true \
+vendor.audio.feature.hdmi_passthrough.enable=true \
+vendor.audio.feature.hfp.enable=true \
+vendor.audio.feature.hifi_audio.enable=true \
+vendor.audio.feature.hwdep_cal.enable=false \
+vendor.audio.feature.incall_music.enable=false \
+vendor.audio.feature.keep_alive.enable=false \
+vendor.audio.feature.kpi_optimize.enable=true \
+vendor.audio.feature.maxx_audio.enable=false \
+vendor.audio.feature.ras.enable=true \
+vendor.audio.feature.record_play_concurency.enable=false \
+vendor.audio.feature.src_trkn.enable=true \
+vendor.audio.feature.spkr_prot.enable=true \
+vendor.audio.feature.ssrec.enable=true \
+vendor.audio.feature.usb_offload.enable=true \
+vendor.audio.feature.usb_offload_burst_mode.enable=false \
+vendor.audio.feature.usb_offload_sidetone_volume.enable=false \
+vendor.audio.feature.deepbuffer_as_primary.enable=false \
+vendor.audio.feature.vbat.enable=true \
+vendor.audio.feature.wsa.enable=false \
+vendor.audio.feature.audiozoom.enable=false \
+vendor.audio.feature.snd_mon.enable=true
+
# for HIDL related packages
PRODUCT_PACKAGES += \
android.hardware.audio@2.0-service \
diff --git a/configs/sdm710/audio_effects.xml b/configs/sdm710/audio_effects.xml
index 7c0cd22..15adc92 100644
--- a/configs/sdm710/audio_effects.xml
+++ b/configs/sdm710/audio_effects.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!--- Copyright (c) 2018, The Linux Foundation. All rights reserved. -->
+<!--- Copyright (c) 2018-2019, The Linux Foundation. All rights reserved. -->
<!--- -->
<!--- Redistribution and use in source and binary forms, with or without -->
<!--- modification, are permitted provided that the following conditions are -->
@@ -30,9 +30,6 @@
<libraries>
<library name="bundle" path="libbundlewrapper.so"/>
<library name="reverb" path="libreverbwrapper.so"/>
- <library name="qcbassboost" path="libqcbassboost.so"/>
- <library name="qcvirt" path="libqcvirt.so"/>
- <library name="qcreverb" path="libqcreverb.so"/>
<library name="visualizer_sw" path="libvisualizer.so"/>
<library name="visualizer_hw" path="libqcomvisualizer.so"/>
<library name="downmix" path="libdownmix.so"/>
@@ -47,11 +44,11 @@
</libraries>
<effects>
<effectProxy name="bassboost" library="proxy" uuid="14804144-a5ee-4d24-aa88-0002a5d5c51b">
- <libsw library="qcbassboost" uuid="23aca180-44bd-11e2-bcfd-0800200c9a66"/>
+ <libsw library="bundle" uuid="8631f300-72e2-11df-b57e-0002a5d5c51b"/>
<libhw library="offload_bundle" uuid="2c4a8c24-1581-487f-94f6-0002a5d5c51b"/>
</effectProxy>
<effectProxy name="virtualizer" library="proxy" uuid="d3467faa-acc7-4d34-acaf-0002a5d5c51b">
- <libsw library="qcvirt" uuid="e6c98a16-22a3-11e2-b87b-f23c91aec05e"/>
+ <libsw library="bundle" uuid="1d4033c0-8557-11df-9f2d-0002a5d5c51b"/>
<libhw library="offload_bundle" uuid="509a4498-561a-4bea-b3b1-0002a5d5c51b"/>
</effectProxy>
<effectProxy name="equalizer" library="proxy" uuid="c8e70ecd-48ca-456e-8a4f-0002a5d5c51b">
@@ -60,19 +57,19 @@
</effectProxy>
<effect name="volume" library="bundle" uuid="119341a0-8469-11df-81f9-0002a5d5c51b"/>
<effectProxy name="reverb_env_aux" library="proxy" uuid="48404ac9-d202-4ccc-bf84-0002a5d5c51b">
- <libsw library="qcreverb" uuid="a8c1e5f3-293d-43cd-95ec-d5e26c02e217"/>
+ <libsw library="reverb" uuid="4a387fc0-8ab3-11df-8bad-0002a5d5c51b"/>
<libhw library="offload_bundle" uuid="79a18026-18fd-4185-8233-0002a5d5c51b"/>
</effectProxy>
<effectProxy name="reverb_env_ins" library="proxy" uuid="b707403a-a1c1-4291-9573-0002a5d5c51b">
- <libsw library="qcreverb" uuid="791fff8b-8129-4655-83a4-59bc61034c3a"/>
+ <libsw library="reverb" uuid="c7a511a0-a3bb-11df-860e-0002a5d5c51b"/>
<libhw library="offload_bundle" uuid="eb64ea04-973b-43d2-8f5e-0002a5d5c51b"/>
</effectProxy>
<effectProxy name="reverb_pre_aux" library="proxy" uuid="1b78f587-6d1c-422e-8b84-0002a5d5c51b">
- <libsw library="qcreverb" uuid="53ef1db5-c0c0-445b-b060-e34d20ebb70a"/>
+ <libsw library="reverb" uuid="f29a1400-a3bb-11df-8ddc-0002a5d5c51b"/>
<libhw library="offload_bundle" uuid="6987be09-b142-4b41-9056-0002a5d5c51b"/>
</effectProxy>
<effectProxy name="reverb_pre_ins" library="proxy" uuid="f3e178d2-ebcb-408e-8357-0002a5d5c51b">
- <libsw library="qcreverb" uuid="b08a0e38-22a5-11e2-b87b-f23c91aec05e"/>
+ <libsw library="reverb" uuid="172cdf00-a3bc-11df-a72f-0002a5d5c51b"/>
<libhw library="offload_bundle" uuid="aa2bebf6-47cf-4613-9bca-0002a5d5c51b"/>
</effectProxy>
<effectProxy name="visualizer" library="proxy" uuid="1d0a1a53-7d5d-48f2-8e71-27fbd10d842c">
diff --git a/configs/sdm710/sdm710.mk b/configs/sdm710/sdm710.mk
index 6df3685..4d487b4 100644
--- a/configs/sdm710/sdm710.mk
+++ b/configs/sdm710/sdm710.mk
@@ -359,6 +359,51 @@
PRODUCT_PROPERTY_OVERRIDES += \
persist.audio.fluence.voicecomm=true
+#add dynamic feature flags here
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio.feature.a2dp_offload.enable=true \
+vendor.audio.feature.afe_proxy.enable=true \
+vendor.audio.feature.anc_headset.enable=true \
+vendor.audio.feature.audio_sphere.enable=true \
+vendor.audio.feature.battery_listener.enable=false \
+vendor.audio.feature.compr_cap.enable=false \
+vendor.audio.feature.compress_in.enable=false \
+vendor.audio.feature.compress_meta_data.enable=true \
+vendor.audio.feature.compr_voip.enable=false \
+vendor.audio.feature.concurrent_capture.enable=false \
+vendor.audio.feature.custom_stereo.enable=true \
+vendor.audio.feature.display_port.enable=true \
+vendor.audio.feature.dsm_feedback.enable=false \
+vendor.audio.feature.dynamic_ecns.enable=false \
+vendor.audio.feature.ext_hw_plugin.enable=false \
+vendor.audio.feature.external_dsp.enable=false \
+vendor.audio.feature.external_speaker.enable=false \
+vendor.audio.feature.external_speaker_tfa.enable=false \
+vendor.audio.feature.fluence.enable=true \
+vendor.audio.feature.fm.enable=true \
+vendor.audio.feature.hdmi_edid.enable=true \
+vendor.audio.feature.hdmi_passthrough.enable=true \
+vendor.audio.feature.hfp.enable=true \
+vendor.audio.feature.hifi_audio.enable=true \
+vendor.audio.feature.hwdep_cal.enable=false \
+vendor.audio.feature.incall_music.enable=false \
+vendor.audio.feature.keep_alive.enable=false \
+vendor.audio.feature.kpi_optimize.enable=true \
+vendor.audio.feature.maxx_audio.enable=false \
+vendor.audio.feature.ras.enable=true \
+vendor.audio.feature.record_play_concurency.enable=false \
+vendor.audio.feature.src_trkn.enable=true \
+vendor.audio.feature.spkr_prot.enable=true \
+vendor.audio.feature.ssrec.enable=true \
+vendor.audio.feature.usb_offload.enable=true \
+vendor.audio.feature.usb_offload_burst_mode.enable=false \
+vendor.audio.feature.usb_offload_sidetone_volume.enable=false \
+vendor.audio.feature.deepbuffer_as_primary.enable=false \
+vendor.audio.feature.vbat.enable=true \
+vendor.audio.feature.wsa.enable=false \
+vendor.audio.feature.audiozoom.enable=false \
+vendor.audio.feature.snd_mon.enable=true
+
# for HIDL related packages
PRODUCT_PACKAGES += \
android.hardware.audio@2.0-service \
diff --git a/configs/sdm845/audio_configs.xml b/configs/sdm845/audio_configs.xml
index 4b0159d..307f9a3 100644
--- a/configs/sdm845/audio_configs.xml
+++ b/configs/sdm845/audio_configs.xml
@@ -31,7 +31,7 @@
<!-- APM Configs -->
<property name="audio.deep_buffer.media" value="true"/>
<property name="audio.offload.disable" value="false"/>
- <property name="audio.offload.min.duration.secs" value="60"/>
+ <property name="audio.offload.min.duration.secs" value="30"/>
<property name="audio.offload.video" value="true"/>
<property name="persist.vendor.audio.sva.conc.enabled" value="false"/>
<property name="persist.vendor.audio.va_concurrency_enabled" value="false"/>
diff --git a/configs/sdm845/audio_effects.xml b/configs/sdm845/audio_effects.xml
index 7c0cd22..15adc92 100644
--- a/configs/sdm845/audio_effects.xml
+++ b/configs/sdm845/audio_effects.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!--- Copyright (c) 2018, The Linux Foundation. All rights reserved. -->
+<!--- Copyright (c) 2018-2019, The Linux Foundation. All rights reserved. -->
<!--- -->
<!--- Redistribution and use in source and binary forms, with or without -->
<!--- modification, are permitted provided that the following conditions are -->
@@ -30,9 +30,6 @@
<libraries>
<library name="bundle" path="libbundlewrapper.so"/>
<library name="reverb" path="libreverbwrapper.so"/>
- <library name="qcbassboost" path="libqcbassboost.so"/>
- <library name="qcvirt" path="libqcvirt.so"/>
- <library name="qcreverb" path="libqcreverb.so"/>
<library name="visualizer_sw" path="libvisualizer.so"/>
<library name="visualizer_hw" path="libqcomvisualizer.so"/>
<library name="downmix" path="libdownmix.so"/>
@@ -47,11 +44,11 @@
</libraries>
<effects>
<effectProxy name="bassboost" library="proxy" uuid="14804144-a5ee-4d24-aa88-0002a5d5c51b">
- <libsw library="qcbassboost" uuid="23aca180-44bd-11e2-bcfd-0800200c9a66"/>
+ <libsw library="bundle" uuid="8631f300-72e2-11df-b57e-0002a5d5c51b"/>
<libhw library="offload_bundle" uuid="2c4a8c24-1581-487f-94f6-0002a5d5c51b"/>
</effectProxy>
<effectProxy name="virtualizer" library="proxy" uuid="d3467faa-acc7-4d34-acaf-0002a5d5c51b">
- <libsw library="qcvirt" uuid="e6c98a16-22a3-11e2-b87b-f23c91aec05e"/>
+ <libsw library="bundle" uuid="1d4033c0-8557-11df-9f2d-0002a5d5c51b"/>
<libhw library="offload_bundle" uuid="509a4498-561a-4bea-b3b1-0002a5d5c51b"/>
</effectProxy>
<effectProxy name="equalizer" library="proxy" uuid="c8e70ecd-48ca-456e-8a4f-0002a5d5c51b">
@@ -60,19 +57,19 @@
</effectProxy>
<effect name="volume" library="bundle" uuid="119341a0-8469-11df-81f9-0002a5d5c51b"/>
<effectProxy name="reverb_env_aux" library="proxy" uuid="48404ac9-d202-4ccc-bf84-0002a5d5c51b">
- <libsw library="qcreverb" uuid="a8c1e5f3-293d-43cd-95ec-d5e26c02e217"/>
+ <libsw library="reverb" uuid="4a387fc0-8ab3-11df-8bad-0002a5d5c51b"/>
<libhw library="offload_bundle" uuid="79a18026-18fd-4185-8233-0002a5d5c51b"/>
</effectProxy>
<effectProxy name="reverb_env_ins" library="proxy" uuid="b707403a-a1c1-4291-9573-0002a5d5c51b">
- <libsw library="qcreverb" uuid="791fff8b-8129-4655-83a4-59bc61034c3a"/>
+ <libsw library="reverb" uuid="c7a511a0-a3bb-11df-860e-0002a5d5c51b"/>
<libhw library="offload_bundle" uuid="eb64ea04-973b-43d2-8f5e-0002a5d5c51b"/>
</effectProxy>
<effectProxy name="reverb_pre_aux" library="proxy" uuid="1b78f587-6d1c-422e-8b84-0002a5d5c51b">
- <libsw library="qcreverb" uuid="53ef1db5-c0c0-445b-b060-e34d20ebb70a"/>
+ <libsw library="reverb" uuid="f29a1400-a3bb-11df-8ddc-0002a5d5c51b"/>
<libhw library="offload_bundle" uuid="6987be09-b142-4b41-9056-0002a5d5c51b"/>
</effectProxy>
<effectProxy name="reverb_pre_ins" library="proxy" uuid="f3e178d2-ebcb-408e-8357-0002a5d5c51b">
- <libsw library="qcreverb" uuid="b08a0e38-22a5-11e2-b87b-f23c91aec05e"/>
+ <libsw library="reverb" uuid="172cdf00-a3bc-11df-a72f-0002a5d5c51b"/>
<libhw library="offload_bundle" uuid="aa2bebf6-47cf-4613-9bca-0002a5d5c51b"/>
</effectProxy>
<effectProxy name="visualizer" library="proxy" uuid="1d0a1a53-7d5d-48f2-8e71-27fbd10d842c">
diff --git a/configs/sdm845/audio_policy_configuration.xml b/configs/sdm845/audio_policy_configuration.xml
index 095819a..76f5236 100644
--- a/configs/sdm845/audio_policy_configuration.xml
+++ b/configs/sdm845/audio_policy_configuration.xml
@@ -167,11 +167,6 @@
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000"
channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK"/>
</mixPort>
- <mixPort name="surround_sound" role="sink">
- <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
- samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_INDEX_MASK_3,AUDIO_CHANNEL_INDEX_MASK_4,AUDIO_CHANNEL_IN_5POINT1,AUDIO_CHANNEL_INDEX_MASK_6"/>
- </mixPort>
<mixPort name="record_24" role="sink">
<profile name="" format="AUDIO_FORMAT_PCM_24_BIT_PACKED"
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,96000,192000"
@@ -346,8 +341,6 @@
sources="Telephony Rx"/>
<route type="mix" sink="primary input"
sources="Wired Headset Mic,BT SCO Headset Mic,FM Tuner,USB Device In,USB Headset In,Telephony Rx"/>
- <route type="mix" sink="surround_sound"
- sources="Built-In Mic,Built-In Back Mic"/>
<route type="mix" sink="record_24"
sources="Built-In Mic,Built-In Back Mic,Wired Headset Mic"/>
<route type="mix" sink="mmap_no_irq_in"
diff --git a/configs/sdm845/sdm845.mk b/configs/sdm845/sdm845.mk
index 407754d..c4d5b54 100644
--- a/configs/sdm845/sdm845.mk
+++ b/configs/sdm845/sdm845.mk
@@ -304,6 +304,51 @@
PRODUCT_PROPERTY_OVERRIDES += \
persist.audio.fluence.voicecomm=true
+#add dynamic feature flags here
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio.feature.a2dp_offload.enable=true \
+vendor.audio.feature.afe_proxy.enable=true \
+vendor.audio.feature.anc_headset.enable=true \
+vendor.audio.feature.audio_sphere.enable=true \
+vendor.audio.feature.battery_listener.enable=false \
+vendor.audio.feature.compr_cap.enable=false \
+vendor.audio.feature.compress_in.enable=false \
+vendor.audio.feature.compress_meta_data.enable=true \
+vendor.audio.feature.compr_voip.enable=false \
+vendor.audio.feature.concurrent_capture.enable=false \
+vendor.audio.feature.custom_stereo.enable=true \
+vendor.audio.feature.display_port.enable=true \
+vendor.audio.feature.dsm_feedback.enable=false \
+vendor.audio.feature.dynamic_ecns.enable=false \
+vendor.audio.feature.ext_hw_plugin.enable=false \
+vendor.audio.feature.external_dsp.enable=false \
+vendor.audio.feature.external_speaker.enable=false \
+vendor.audio.feature.external_speaker_tfa.enable=false \
+vendor.audio.feature.fluence.enable=true \
+vendor.audio.feature.fm.enable=true \
+vendor.audio.feature.hdmi_edid.enable=true \
+vendor.audio.feature.hdmi_passthrough.enable=true \
+vendor.audio.feature.hfp.enable=true \
+vendor.audio.feature.hifi_audio.enable=false \
+vendor.audio.feature.hwdep_cal.enable=false \
+vendor.audio.feature.incall_music.enable=false \
+vendor.audio.feature.keep_alive.enable=false \
+vendor.audio.feature.kpi_optimize.enable=true \
+vendor.audio.feature.maxx_audio.enable=false \
+vendor.audio.feature.ras.enable=true \
+vendor.audio.feature.record_play_concurency.enable=false \
+vendor.audio.feature.src_trkn.enable=true \
+vendor.audio.feature.spkr_prot.enable=true \
+vendor.audio.feature.ssrec.enable=true \
+vendor.audio.feature.usb_offload.enable=true \
+vendor.audio.feature.usb_offload_burst_mode.enable=false \
+vendor.audio.feature.usb_offload_sidetone_volume.enable=false \
+vendor.audio.feature.deepbuffer_as_primary.enable=false \
+vendor.audio.feature.vbat.enable=true \
+vendor.audio.feature.wsa.enable=false \
+vendor.audio.feature.audiozoom.enable=false \
+vendor.audio.feature.snd_mon.enable=true
+
# for HIDL related packages
PRODUCT_PACKAGES += \
android.hardware.audio@2.0-service \
diff --git a/configs/trinket/trinket.mk b/configs/trinket/trinket.mk
index 95a653d..919c8c2 100644
--- a/configs/trinket/trinket.mk
+++ b/configs/trinket/trinket.mk
@@ -232,6 +232,51 @@
PRODUCT_PROPERTY_OVERRIDES += \
vendor.audio.adm.buffering.ms=2
+#add dynamic feature flags here
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio.feature.a2dp_offload.enable=true \
+vendor.audio.feature.afe_proxy.enable=true \
+vendor.audio.feature.anc_headset.enable=true \
+vendor.audio.feature.audio_sphere.enable=true \
+vendor.audio.feature.battery_listener.enable=false \
+vendor.audio.feature.compr_cap.enable=false \
+vendor.audio.feature.compress_in.enable=false \
+vendor.audio.feature.compress_meta_data.enable=true \
+vendor.audio.feature.compr_voip.enable=false \
+vendor.audio.feature.concurrent_capture.enable=false \
+vendor.audio.feature.custom_stereo.enable=true \
+vendor.audio.feature.display_port.enable=true \
+vendor.audio.feature.dsm_feedback.enable=false \
+vendor.audio.feature.dynamic_ecns.enable=false \
+vendor.audio.feature.ext_hw_plugin.enable=false \
+vendor.audio.feature.external_dsp.enable=false \
+vendor.audio.feature.external_speaker.enable=false \
+vendor.audio.feature.external_speaker_tfa.enable=false \
+vendor.audio.feature.fluence.enable=true \
+vendor.audio.feature.fm.enable=true \
+vendor.audio.feature.hdmi_edid.enable=true \
+vendor.audio.feature.hdmi_passthrough.enable=true \
+vendor.audio.feature.hfp.enable=true \
+vendor.audio.feature.hifi_audio.enable=false \
+vendor.audio.feature.hwdep_cal.enable=false \
+vendor.audio.feature.incall_music.enable=false \
+vendor.audio.feature.keep_alive.enable=false \
+vendor.audio.feature.kpi_optimize.enable=true \
+vendor.audio.feature.maxx_audio.enable=false \
+vendor.audio.feature.ras.enable=true \
+vendor.audio.feature.record_play_concurency.enable=false \
+vendor.audio.feature.src_trkn.enable=true \
+vendor.audio.feature.spkr_prot.enable=true \
+vendor.audio.feature.ssrec.enable=true \
+vendor.audio.feature.usb_offload.enable=true \
+vendor.audio.feature.usb_offload_burst_mode.enable=false \
+vendor.audio.feature.usb_offload_sidetone_volume.enable=false \
+vendor.audio.feature.deepbuffer_as_primary.enable=false \
+vendor.audio.feature.vbat.enable=true \
+vendor.audio.feature.wsa.enable=false \
+vendor.audio.feature.audiozoom.enable=false \
+vendor.audio.feature.snd_mon.enable=true
+
# for HIDL related packages
PRODUCT_PACKAGES += \
android.hardware.audio@2.0-service \
diff --git a/hal/Android.mk b/hal/Android.mk
index 383a272..0ce2d6e 100644
--- a/hal/Android.mk
+++ b/hal/Android.mk
@@ -74,6 +74,7 @@
ifneq ($(filter kona,$(TARGET_BOARD_PLATFORM)),)
LOCAL_CFLAGS := -DPLATFORM_KONA
LOCAL_CFLAGS += -DMAX_TARGET_SPECIFIC_CHANNEL_CNT="4"
+ LOCAL_CFLAGS += -DINCALL_STEREO_CAPTURE_ENABLED
endif
ifneq ($(filter $(MSMSTEPPE) ,$(TARGET_BOARD_PLATFORM)),)
LOCAL_CFLAGS := -DPLATFORM_MSMSTEPPE
@@ -85,6 +86,7 @@
endif
ifneq ($(filter lito,$(TARGET_BOARD_PLATFORM)),)
LOCAL_CFLAGS := -DPLATFORM_LITO
+ LOCAL_CFLAGS += -DMAX_TARGET_SPECIFIC_CHANNEL_CNT="4"
endif
ifneq ($(filter sdm660,$(TARGET_BOARD_PLATFORM)),)
LOCAL_CFLAGS := -DPLATFORM_MSMFALCON
@@ -105,7 +107,6 @@
LOCAL_HEADER_LIBRARIES := libhardware_headers
LOCAL_SRC_FILES := \
- ahal_config_helper.cpp \
audio_hw.c \
acdb.c \
platform_info.c \
@@ -113,7 +114,6 @@
voice.c
LOCAL_SRC_FILES += audio_extn/audio_extn.c \
- audio_extn/audio_feature_manager.c \
audio_extn/audio_hidl.cpp \
audio_extn/compress_in.c \
audio_extn/fm.c \
@@ -340,17 +340,14 @@
LOCAL_STATIC_LIBRARIES += libprofile_rt
endif
-ifeq ($(strip $(AUDIO_FEATURE_ENABLED_AUDIO_ZOOM)), true)
- LOCAL_CFLAGS += -DAUDIOZOOM_QDSP_ENABLED
- LOCAL_SRC_FILES += audio_extn/audiozoom.c
-endif
-
-
#ifeq ($(strip $(AUDIO_FEATURE_ENABLED_AUTO_HAL)),true)
# LOCAL_CFLAGS += -DAUDIO_EXTN_AUTO_HAL_ENABLED
# LOCAL_SRC_FILES += audio_extn/auto_hal.c
#endif
+LOCAL_SHARED_LIBRARIES += libbase libhidlbase libhwbinder libutils android.hardware.power@1.2 liblog
+LOCAL_SRC_FILES += audio_perf.cpp
+
LOCAL_MODULE := audio.primary.$(TARGET_BOARD_PLATFORM)
LOCAL_MODULE_RELATIVE_PATH := hw
diff --git a/hal/acdb.c b/hal/acdb.c
index 7394906..d2b2b94 100644
--- a/hal/acdb.c
+++ b/hal/acdb.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2018, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2019, The Linux Foundation. All rights reserved.
* Not a Contribution.
*
* Copyright (C) 2013 The Android Open Source Project
@@ -28,6 +28,8 @@
#include <time.h>
#include "acdb.h"
#include "platform_api.h"
+#include "audio_extn.h"
+#include <platform.h>
#ifdef INSTANCE_ID_ENABLED
int check_and_set_instance_id_support(struct mixer* mixer, bool acdb_support)
@@ -57,6 +59,22 @@
#define check_and_set_instance_id_support(x, y) -ENOSYS
#endif
+void get_platform_file_for_device(struct mixer *mixer, char* platform_info_file)
+{
+ const char *snd_card_name = NULL;
+
+ if (mixer != NULL) {
+ /* Get Sound card name */
+ snd_card_name = mixer_get_name(mixer);
+ if (!snd_card_name) {
+ ALOGE("failed to allocate memory for snd_card_name");
+ return;
+ }
+ /* Get platform info file for target */
+ audio_extn_utils_get_platform_info(snd_card_name, platform_info_file);
+ }
+}
+
int acdb_init(int snd_card_num)
{
@@ -84,7 +102,7 @@
int result = -1;
char *cvd_version = NULL;
-
+ char platform_info_file[MIXER_PATH_MAX_LENGTH] = PLATFORM_INFO_XML_PATH;
const char *snd_card_name = NULL;
struct acdb_platform_data *my_data = NULL;
@@ -100,9 +118,9 @@
}
list_init(&my_data->acdb_meta_key_list);
-
+ get_platform_file_for_device(mixer, platform_info_file);
/* Extract META KEY LIST INFO */
- platform_info_init(PLATFORM_INFO_XML_PATH, my_data, ACDB_EXTN);
+ platform_info_init(platform_info_file, my_data, ACDB_EXTN);
my_data->acdb_handle = dlopen(LIB_ACDB_LOADER, RTLD_NOW);
if (my_data->acdb_handle == NULL) {
@@ -164,13 +182,13 @@
/* Get Sound card name */
snd_card_name = mixer_get_name(mixer);
+ snd_card_name = platform_get_snd_card_name_for_acdb_loader(snd_card_name);
if (!snd_card_name) {
- ALOGE("failed to allocate memory for snd_card_name");
+ ALOGE("failed to get snd_card_name");
result = -1;
goto cleanup;
}
- snd_card_name = platform_get_snd_card_name_for_acdb_loader(snd_card_name);
int key = 0;
struct listnode *node = NULL;
struct meta_key_list *key_info = NULL;
diff --git a/hal/ahal_config_helper.cpp b/hal/ahal_config_helper.cpp
index e46b8f3..9313e5f 100644
--- a/hal/ahal_config_helper.cpp
+++ b/hal/ahal_config_helper.cpp
@@ -109,7 +109,8 @@
true, /* COMPRESS_METADATA_NEEDED */
false, /* INCALL_MUSIC */
false, /* COMPRESS_VOIP */
- true /* DYNAMIC_ECNS */
+ true, /* DYNAMIC_ECNS */
+ false, /* AUDIO_ZOOM */
};
#else
if (isVendorEnhancedFwk) {
@@ -155,6 +156,7 @@
true, /* INCALL_MUSIC */
false, /* COMPRESS_VOIP */
true, /* DYNAMIC_ECNS */
+ false, /* AUDIO_ZOOM */
};
} else {
defaultConfigs = {
@@ -198,7 +200,8 @@
false, /* COMPRESS_METADATA_NEEDED */
true, /* INCALL_MUSIC */
false, /* COMPRESS_VOIP */
- false /* DYNAMIC_ECNS */
+ false, /* DYNAMIC_ECNS */
+ true, /* AUDIO_ZOOM */
};
}
#endif
diff --git a/hal/ahal_config_helper.h b/hal/ahal_config_helper.h
index 39ed68e..d658f7d 100644
--- a/hal/ahal_config_helper.h
+++ b/hal/ahal_config_helper.h
@@ -76,6 +76,7 @@
bool incall_music_enabled;
bool compress_voip_enabled;
bool dynamic_ecns_enabled;
+ bool audio_zoom_enabled;
} AHalValues;
#ifdef __cplusplus
diff --git a/hal/audio_extn/Android.mk b/hal/audio_extn/Android.mk
index feae999..255bc4e 100644
--- a/hal/audio_extn/Android.mk
+++ b/hal/audio_extn/Android.mk
@@ -63,7 +63,7 @@
AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM)
-ifneq ($(filter sdm845 sdm710 qcs605 msmnile kona lito atoll sdm660 msm8937 $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter sdm845 sdm710 qcs605 msmnile kona lito atoll sdm660 msm8937 msm8998 $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
# B-family platform uses msm8974 code base
AUDIO_PLATFORM := msm8974
MULTIPLE_HW_VARIANTS_ENABLED := true
@@ -121,7 +121,7 @@
AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM)
-ifneq ($(filter sdm845 sdm710 msmnile kona lito atoll sdm660 msm8937 $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter sdm845 sdm710 msmnile kona lito atoll sdm660 msm8937 msm8998 $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
# B-family platform uses msm8974 code base
AUDIO_PLATFORM := msm8974
MULTIPLE_HW_VARIANTS_ENABLED := true
@@ -182,7 +182,7 @@
PRIMARY_HAL_PATH := vendor/qcom/opensource/audio-hal/primary-hal/hal
AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM)
-ifneq ($(filter sdm845 sdm710 msmnile kona lito atoll sdm660 msm8937 $(MSMSTEPPE) $(TRINKET),$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter sdm845 sdm710 msmnile kona lito atoll sdm660 msm8937 msm8998 $(MSMSTEPPE) $(TRINKET),$(TARGET_BOARD_PLATFORM)),)
# B-family platform uses msm8974 code base
AUDIO_PLATFORM := msm8974
endif
@@ -234,7 +234,7 @@
#--------------------------------------------
include $(CLEAR_VARS)
-ifneq ($(filter sdm845 sdm710 msmnile kona lito atoll sdm660 msm8937 $(MSMSTEPPE) $(TRINKET),$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter sdm845 sdm710 msmnile kona lito atoll sdm660 msm8937 msm8998 $(MSMSTEPPE) $(TRINKET),$(TARGET_BOARD_PLATFORM)),)
# B-family platform uses msm8974 code base
AUDIO_PLATFORM := msm8974
endif
@@ -289,7 +289,7 @@
include $(CLEAR_VARS)
-ifneq ($(filter sdm845 sdm710 msmnile kona lito atoll sdm660 msm8937 $(MSMSTEPPE) $(TRINKET),$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter sdm845 sdm710 msmnile kona lito atoll sdm660 msm8937 msm8998 $(MSMSTEPPE) $(TRINKET),$(TARGET_BOARD_PLATFORM)),)
# B-family platform uses msm8974 code base
AUDIO_PLATFORM := msm8974
endif
@@ -350,7 +350,7 @@
PRIMARY_HAL_PATH := vendor/qcom/opensource/audio-hal/primary-hal/hal
AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM)
-ifneq ($(filter sdm845 sdm710 msmnile kona lito atoll sdm660 msm8937 $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter sdm845 sdm710 msmnile kona lito atoll sdm660 msm8937 msm8998 $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
# B-family platform uses msm8974 code base
AUDIO_PLATFORM := msm8974
MULTIPLE_HW_VARIANTS_ENABLED := true
@@ -410,7 +410,7 @@
PRIMARY_HAL_PATH := vendor/qcom/opensource/audio-hal/primary-hal/hal
AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM)
-ifneq ($(filter sdm845 sdm710 msmnile kona lito sdm660 msm8937 $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter sdm845 sdm710 msmnile kona lito sdm660 msm8937 msm8998 $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
# B-family platform uses msm8974 code base
AUDIO_PLATFORM := msm8974
MULTIPLE_HW_VARIANTS_ENABLED := true
@@ -469,7 +469,7 @@
PRIMARY_HAL_PATH := vendor/qcom/opensource/audio-hal/primary-hal/hal
AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM)
-ifneq ($(filter sdm845 sdm710 msmnile kona lito sdm660 msm8937 $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter sdm845 sdm710 msmnile kona lito sdm660 msm8937 msm8998 $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
# B-family platform uses msm8974 code base
AUDIO_PLATFORM := msm8974
MULTIPLE_HW_VARIANTS_ENABLED := true
@@ -528,7 +528,7 @@
PRIMARY_HAL_PATH := vendor/qcom/opensource/audio-hal/primary-hal/hal
AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM)
-ifneq ($(filter sdm845 sdm710 msmnile kona lito sdm660 msm8937 $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter sdm845 sdm710 msmnile kona lito sdm660 msm8937 msm8998 $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
# B-family platform uses msm8974 code base
AUDIO_PLATFORM := msm8974
MULTIPLE_HW_VARIANTS_ENABLED := true
@@ -590,7 +590,7 @@
PRIMARY_HAL_PATH := vendor/qcom/opensource/audio-hal/primary-hal/hal
AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM)
-ifneq ($(filter sdm845 sdm710 msmnile kona lito sdm660 msm8937 $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter sdm845 sdm710 msmnile kona lito sdm660 msm8937 msm8998 $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
# B-family platform uses msm8974 code base
AUDIO_PLATFORM := msm8974
MULTIPLE_HW_VARIANTS_ENABLED := true
@@ -660,7 +660,7 @@
PRIMARY_HAL_PATH := vendor/qcom/opensource/audio-hal/primary-hal/hal
AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM)
-ifneq ($(filter sdm845 sdm710 msmnile kona lito sdm660 msm8937 $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter sdm845 sdm710 msmnile kona lito sdm660 msm8937 msm8998 $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
# B-family platform uses msm8974 code base
AUDIO_PLATFORM := msm8974
MULTIPLE_HW_VARIANTS_ENABLED := true
@@ -765,3 +765,62 @@
LOCAL_HEADER_LIBRARIES += libhardware_headers
LOCAL_HEADER_LIBRARIES += libsystem_headers
include $(BUILD_SHARED_LIBRARY)
+#-------------------------------------------
+# Build AUDIOZOOM
+#-------------------------------------------
+include $(CLEAR_VARS)
+
+LOCAL_MODULE:= libaudiozoom
+LOCAL_VENDOR_MODULE := true
+
+PRIMARY_HAL_PATH := vendor/qcom/opensource/audio-hal/primary-hal/hal
+AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM)
+
+ifneq ($(filter sdm845 sdm710 msmnile kona sdm660 msm8937 $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
+ # B-family platform uses msm8974 code base
+ AUDIO_PLATFORM = msm8974
+ MULTIPLE_HW_VARIANTS_ENABLED := true
+endif
+
+LOCAL_SRC_FILES:= \
+ audiozoom.c
+
+LOCAL_CFLAGS += \
+ -Wall \
+ -Werror \
+ -Wno-unused-function \
+ -Wno-unused-variable
+
+LOCAL_SHARED_LIBRARIES := \
+ libaudioutils \
+ libcutils \
+ liblog \
+ libtinyalsa \
+ libtinycompress \
+ libaudioroute \
+ libdl \
+ libexpat
+
+LOCAL_C_INCLUDES := \
+ $(PRIMARY_HAL_PATH) \
+ $(PRIMARY_HAL_PATH)/$(AUDIO_PLATFORM) \
+ external/tinyalsa/include \
+ external/tinycompress/include \
+ external/expat/lib \
+ system/media/audio_utils/include \
+ $(call include-path-for, audio-route) \
+
+LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
+LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/techpack/audio/include
+LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
+
+ifeq ($(strip $(AUDIO_FEATURE_ENABLED_DLKM)),true)
+ LOCAL_HEADER_LIBRARIES += audio_kernel_headers
+ LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/vendor/qcom/opensource/audio-kernel/include
+endif
+
+LOCAL_HEADER_LIBRARIES += libhardware_headers
+LOCAL_HEADER_LIBRARIES += libsystem_headers
+include $(BUILD_SHARED_LIBRARY)
+
+
diff --git a/hal/audio_extn/a2dp.c b/hal/audio_extn/a2dp.c
old mode 100644
new mode 100755
index 19c839c..429a2e3
--- a/hal/audio_extn/a2dp.c
+++ b/hal/audio_extn/a2dp.c
@@ -76,6 +76,7 @@
#define MEDIA_FMT_SBC_ALLOCATION_METHOD_LOUDNESS 0
#define MEDIA_FMT_SBC_ALLOCATION_METHOD_SNR 1
#define MIXER_ENC_CONFIG_BLOCK "SLIM_7_RX Encoder Config"
+#define MIXER_ENC_APTX_AD_CONFIG_BLOCK "SLIM_7_RX APTX_AD Enc Cfg"
#define MIXER_SOURCE_DEC_CONFIG_BLOCK "SLIM_7_TX Decoder Config"
#define MIXER_SINK_DEC_CONFIG_BLOCK "SLIM_9_TX Decoder Config"
#define MIXER_ENC_BIT_FORMAT "AFE Input Bit Format"
@@ -577,6 +578,30 @@
struct abr_enc_cfg_t abr_cfg;
} __attribute__ ((packed));
+struct aptx_ad_enc_cfg_ext_r2_t
+{
+ uint32_t sampling_freq;
+ uint32_t mtu;
+ uint32_t channel_mode;
+ uint32_t min_sink_modeA;
+ uint32_t max_sink_modeA;
+ uint32_t min_sink_modeB;
+ uint32_t max_sink_modeB;
+ uint32_t min_sink_modeC;
+ uint32_t max_sink_modeC;
+ uint32_t mode;
+ uint32_t input_mode;
+ uint32_t fade_duration;
+ uint8_t sink_cap[11];
+} __attribute__ ((packed));
+
+struct aptx_ad_enc_cfg_r2_t
+{
+ struct custom_enc_cfg_t custom_cfg;
+ struct aptx_ad_enc_cfg_ext_r2_t aptx_ad_cfg;
+ struct abr_enc_cfg_t abr_cfg;
+} __attribute__ ((packed));
+
/* APTX AD SPEECH structure */
struct aptx_ad_speech_enc_cfg_t
{
@@ -636,21 +661,26 @@
} audio_aptx_default_config;
typedef struct {
- uint8_t sampling_rate;
- uint8_t channel_mode;
- uint16_t mtu;
- uint8_t min_sink_modeA;
- uint8_t max_sink_modeA;
- uint8_t min_sink_modeB;
- uint8_t max_sink_modeB;
- uint8_t min_sink_modeC;
- uint8_t max_sink_modeC;
+ uint32_t sampling_rate;
+ uint32_t mtu;
+ int32_t channel_mode;
+ uint32_t min_sink_modeA;
+ uint32_t max_sink_modeA;
+ uint32_t min_sink_modeB;
+ uint32_t max_sink_modeB;
+ uint32_t min_sink_modeC;
+ uint32_t max_sink_modeC;
+ uint32_t encoder_mode;
uint8_t TTP_modeA_low;
uint8_t TTP_modeA_high;
uint8_t TTP_modeB_low;
uint8_t TTP_modeB_high;
+ uint8_t TTP_TWS_low;
+ uint8_t TTP_TWS_high;
uint32_t bits_per_sample;
- uint16_t encoder_mode;
+ uint32_t input_mode;
+ uint32_t fade_duration;
+ uint8_t sink_cap[11];
} audio_aptx_ad_config;
typedef struct {
@@ -678,7 +708,6 @@
uint32_t sampling_rate;
uint32_t bitrate;
uint32_t bits_per_sample;
- struct aac_frame_size_control_t frame_ctl;
} audio_aac_encoder_config;
#endif
@@ -711,9 +740,9 @@
uint32_t bit_rate; /*303000,606000,909000(in bits per second)*/
uint16_t channel_mode; /* 0, 4, 2, 1*/
uint16_t mtu; /*679*/
+ uint32_t bits_per_sample;
bool is_abr_enabled;
struct quality_level_to_bitrate_info level_to_bitrate_map;
- uint32_t bits_per_sample;
} audio_ldac_encoder_config;
/* Information about BT AAC decoder configuration
@@ -1128,11 +1157,15 @@
} else {
sampling_rate = a2dp.enc_sampling_rate;
}
- //For LDAC encoder and AAC decoder open slimbus port at
- //96Khz for 48Khz input and 88.2Khz for 44.1Khz input.
+ /*
+ * For LDAC encoder and AAC decoder open slimbus port at
+ * 96Khz for 48Khz input and 88.2Khz for 44.1Khz input.
+ * For APTX AD encoder, open slimbus port at 96Khz for 48Khz input.
+ */
if (((a2dp.bt_encoder_format == CODEC_TYPE_LDAC) ||
(a2dp.bt_decoder_format == CODEC_TYPE_SBC) ||
- (a2dp.bt_decoder_format == AUDIO_FORMAT_AAC)) &&
+ (a2dp.bt_decoder_format == AUDIO_FORMAT_AAC) ||
+ (a2dp.bt_encoder_format == CODEC_TYPE_APTX_AD)) &&
(sampling_rate == 48000 || sampling_rate == 44100 )) {
sampling_rate = sampling_rate *2;
}
@@ -1183,20 +1216,21 @@
rate_str = SPEECH_TX_SAMPLE_RATE;
else
rate_str = ABR_TX_SAMPLE_RATE;
- }
- ALOGD("%s: set backend tx sample rate = %s", __func__, rate_str);
- ctl_sample_rate = mixer_get_ctl_by_name(a2dp.adev->mixer,
- MIXER_SOURCE_SAMPLE_RATE_TX);
- if (!ctl_sample_rate) {
- ALOGE("%s: ERROR backend sample rate mixer control not identifed", __func__);
- is_configured = false;
- goto fail;
- }
- if (mixer_ctl_set_enum_by_string(ctl_sample_rate, rate_str) != 0) {
- ALOGE("%s: Failed to set backend sample rate = %s", __func__, rate_str);
- is_configured = false;
- goto fail;
+ ALOGD("%s: set backend tx sample rate = %s", __func__, rate_str);
+ ctl_sample_rate = mixer_get_ctl_by_name(a2dp.adev->mixer,
+ MIXER_SOURCE_SAMPLE_RATE_TX);
+ if (!ctl_sample_rate) {
+ ALOGE("%s: ERROR backend sample rate mixer control not identifed", __func__);
+ is_configured = false;
+ goto fail;
+ }
+
+ if (mixer_ctl_set_enum_by_string(ctl_sample_rate, rate_str) != 0) {
+ ALOGE("%s: Failed to set backend sample rate = %s", __func__, rate_str);
+ is_configured = false;
+ goto fail;
+ }
}
}
} else {
@@ -1698,6 +1732,79 @@
return ret;
}
+static int update_aptx_ad_dsp_config_r2(struct aptx_ad_enc_cfg_r2_t *aptx_dsp_cfg,
+ audio_aptx_encoder_config *aptx_bt_cfg)
+{
+ int ret = 0;
+
+ if (aptx_dsp_cfg == NULL || aptx_bt_cfg == NULL) {
+ ALOGE("Invalid param, aptx_dsp_cfg %p aptx_bt_cfg %p",
+ aptx_dsp_cfg, aptx_bt_cfg);
+ return -EINVAL;
+ }
+
+ memset(aptx_dsp_cfg, 0x0, sizeof(struct aptx_ad_enc_cfg_r2_t));
+ aptx_dsp_cfg->custom_cfg.enc_format = MEDIA_FMT_APTX_AD;
+
+
+ aptx_dsp_cfg->aptx_ad_cfg.sampling_freq = aptx_bt_cfg->ad_cfg->sampling_rate;
+ aptx_dsp_cfg->aptx_ad_cfg.mtu = aptx_bt_cfg->ad_cfg->mtu;
+ aptx_dsp_cfg->aptx_ad_cfg.channel_mode = aptx_bt_cfg->ad_cfg->channel_mode;
+ aptx_dsp_cfg->aptx_ad_cfg.min_sink_modeA = aptx_bt_cfg->ad_cfg->min_sink_modeA;
+ aptx_dsp_cfg->aptx_ad_cfg.max_sink_modeA = aptx_bt_cfg->ad_cfg->max_sink_modeA;
+ aptx_dsp_cfg->aptx_ad_cfg.min_sink_modeB = aptx_bt_cfg->ad_cfg->min_sink_modeB;
+ aptx_dsp_cfg->aptx_ad_cfg.max_sink_modeB = aptx_bt_cfg->ad_cfg->max_sink_modeB;
+ aptx_dsp_cfg->aptx_ad_cfg.min_sink_modeC = aptx_bt_cfg->ad_cfg->min_sink_modeC;
+ aptx_dsp_cfg->aptx_ad_cfg.max_sink_modeC = aptx_bt_cfg->ad_cfg->max_sink_modeC;
+ aptx_dsp_cfg->aptx_ad_cfg.mode = aptx_bt_cfg->ad_cfg->encoder_mode;
+ aptx_dsp_cfg->aptx_ad_cfg.input_mode = aptx_bt_cfg->ad_cfg->input_mode;
+ aptx_dsp_cfg->aptx_ad_cfg.fade_duration = aptx_bt_cfg->ad_cfg->fade_duration;
+ for (int i = 0; i < sizeof(aptx_dsp_cfg->aptx_ad_cfg.sink_cap); i ++)
+ aptx_dsp_cfg->aptx_ad_cfg.sink_cap[i] = aptx_bt_cfg->ad_cfg->sink_cap[i];
+ aptx_dsp_cfg->abr_cfg.imc_info.direction = IMC_RECEIVE;
+ aptx_dsp_cfg->abr_cfg.imc_info.enable = IMC_ENABLE;
+ aptx_dsp_cfg->abr_cfg.imc_info.purpose = IMC_PURPOSE_ID_BT_INFO;
+ aptx_dsp_cfg->abr_cfg.imc_info.comm_instance = a2dp.abr_config.imc_instance;
+
+
+ switch(aptx_dsp_cfg->aptx_ad_cfg.channel_mode) {
+ case APTX_AD_CHANNEL_UNCHANGED:
+ case APTX_AD_CHANNEL_JOINT_STEREO:
+ case APTX_AD_CHANNEL_DUAL_MONO:
+ case APTX_AD_CHANNEL_STEREO_TWS:
+ case APTX_AD_CHANNEL_EARBUD:
+ default:
+ a2dp.enc_channels = CH_STEREO;
+ aptx_dsp_cfg->custom_cfg.num_channels = CH_STEREO;
+ aptx_dsp_cfg->custom_cfg.channel_mapping[0] = PCM_CHANNEL_L;
+ aptx_dsp_cfg->custom_cfg.channel_mapping[1] = PCM_CHANNEL_R;
+ break;
+ case APTX_AD_CHANNEL_MONO:
+ 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;
+ }
+ switch(aptx_dsp_cfg->aptx_ad_cfg.sampling_freq) {
+ case APTX_AD_SR_UNCHANGED:
+ case APTX_AD_48:
+ default:
+ a2dp.enc_sampling_rate = SAMPLING_RATE_48K;
+ aptx_dsp_cfg->custom_cfg.sample_rate = SAMPLING_RATE_48K;
+ break;
+ case APTX_AD_44_1:
+ a2dp.enc_sampling_rate = SAMPLING_RATE_441K;
+ aptx_dsp_cfg->custom_cfg.sample_rate = SAMPLING_RATE_441K;
+ break;
+ }
+ ALOGV("Successfully updated APTX AD enc format with \
+ samplingrate: %d channels:%d",
+ aptx_dsp_cfg->custom_cfg.sample_rate,
+ aptx_dsp_cfg->custom_cfg.num_channels);
+
+ return ret;
+}
+
static void audio_a2dp_update_tws_channel_mode()
{
char* channel_mode;
@@ -1810,6 +1917,7 @@
bool configure_aptx_enc_format(audio_aptx_encoder_config *aptx_bt_cfg)
{
struct mixer_ctl *ctl_enc_data = NULL;
+ struct mixer_ctl *aptx_ad_ctl = NULL;
int mixer_size = 0;
bool is_configured = false;
int ret = 0;
@@ -1827,9 +1935,17 @@
#ifndef LINUX_ENABLED
struct aptx_enc_cfg_t aptx_dsp_cfg;
struct aptx_ad_enc_cfg_t aptx_ad_dsp_cfg;
+ struct aptx_ad_enc_cfg_r2_t aptx_ad_dsp_cfg_r2;
if (a2dp.is_aptx_adaptive) {
- mixer_size = sizeof(struct aptx_ad_enc_cfg_t);
- ret = update_aptx_ad_dsp_config(&aptx_ad_dsp_cfg, aptx_bt_cfg);
+ aptx_ad_ctl = mixer_get_ctl_by_name(a2dp.adev->mixer,
+ MIXER_ENC_APTX_AD_CONFIG_BLOCK);
+ if (aptx_ad_ctl) {
+ mixer_size = sizeof(struct aptx_ad_enc_cfg_r2_t);
+ ret = update_aptx_ad_dsp_config_r2(&aptx_ad_dsp_cfg_r2, aptx_bt_cfg);
+ } else {
+ mixer_size = sizeof(struct aptx_ad_enc_cfg_t);
+ ret = update_aptx_ad_dsp_config(&aptx_ad_dsp_cfg, aptx_bt_cfg);
+ }
sample_rate_backup = aptx_ad_dsp_cfg.custom_cfg.sample_rate;
} else {
mixer_size = sizeof(struct aptx_enc_cfg_t);
@@ -1842,7 +1958,11 @@
}
if (a2dp.is_aptx_adaptive) {
- ret = mixer_ctl_set_array(ctl_enc_data, (void *)&aptx_ad_dsp_cfg,
+ if (aptx_ad_ctl)
+ ret = mixer_ctl_set_array(aptx_ad_ctl, (void *)&aptx_ad_dsp_cfg_r2,
+ mixer_size);
+ else
+ ret = mixer_ctl_set_array(ctl_enc_data, (void *)&aptx_ad_dsp_cfg,
mixer_size);
} else {
ret = mixer_ctl_set_array(ctl_enc_data, (void *)&aptx_dsp_cfg,
@@ -2679,7 +2799,7 @@
goto param_handled;
list_for_each(node, &a2dp.adev->usecase_list) {
uc_info = node_to_item(node, struct audio_usecase, list);
- if (uc_info->type == PCM_PLAYBACK &&
+ if (uc_info->stream.out && uc_info->type == PCM_PLAYBACK &&
(uc_info->stream.out->devices & AUDIO_DEVICE_OUT_ALL_A2DP)) {
pthread_mutex_unlock(&a2dp.adev->lock);
fp_check_a2dp_restore(a2dp.adev, uc_info->stream.out, false);
@@ -2720,7 +2840,7 @@
}
list_for_each(node, &a2dp.adev->usecase_list) {
uc_info = node_to_item(node, struct audio_usecase, list);
- if (uc_info->type == PCM_PLAYBACK &&
+ if (uc_info->stream.out && uc_info->type == PCM_PLAYBACK &&
(uc_info->stream.out->devices & AUDIO_DEVICE_OUT_ALL_A2DP)) {
pthread_mutex_unlock(&a2dp.adev->lock);
fp_check_a2dp_restore(a2dp.adev, uc_info->stream.out, true);
@@ -3016,9 +3136,11 @@
void sco_reset_configuration()
{
- ALOGD("sco_reset_configuration start");
+ if (a2dp.swb_configured) {
+ ALOGD("sco_reset_configuration start");
- reset_codec_config();
- a2dp.bt_encoder_format = CODEC_TYPE_INVALID;
- a2dp.swb_configured = false;
+ reset_codec_config();
+ a2dp.bt_encoder_format = CODEC_TYPE_INVALID;
+ a2dp.swb_configured = false;
+ }
}
diff --git a/hal/audio_extn/audio_defs.h b/hal/audio_extn/audio_defs.h
index 3fd4b85..d8d1bbb 100644
--- a/hal/audio_extn/audio_defs.h
+++ b/hal/audio_extn/audio_defs.h
@@ -249,6 +249,12 @@
struct audio_device_cfg_param dev_cfg_params;
};
+struct audio_out_presentation_position_param {
+ struct timespec timestamp;
+ uint64_t frames;
+ int32_t clock_id;
+};
+
typedef struct mix_matrix_params {
uint16_t num_output_channels;
uint16_t num_input_channels;
@@ -282,6 +288,7 @@
struct audio_device_cfg_param device_cfg;
struct mix_matrix_params mm_params;
struct audio_license_params license_params;
+ struct audio_out_presentation_position_param pos_param;
} audio_extn_param_payload;
typedef enum {
@@ -305,6 +312,7 @@
AUDIO_EXTN_PARAM_CH_MIX_MATRIX_PARAMS,
/* License information */
AUDIO_EXTN_PARAM_LICENSE_PARAMS,
+ AUDIO_EXTN_PARAM_OUT_PRESENTATION_POSITION,
} audio_extn_param_id;
typedef union {
diff --git a/hal/audio_extn/audio_extn.c b/hal/audio_extn/audio_extn.c
index 24ed4c5..f00f74d 100644
--- a/hal/audio_extn/audio_extn.c
+++ b/hal/audio_extn/audio_extn.c
@@ -46,6 +46,7 @@
#include <cutils/properties.h>
#include <log/log.h>
#include <unistd.h>
+#include <sched.h>
#include "audio_hw.h"
#include "audio_extn.h"
@@ -54,7 +55,6 @@
#include "platform.h"
#include "platform_api.h"
#include "edid.h"
-#include "audio_feature_manager.h"
#include "sound/compress_params.h"
#ifdef DYNAMIC_LOG_ENABLED
@@ -68,7 +68,7 @@
#define MAX_NUM_CHANNELS 8
#define Q14_GAIN_UNITY 0x4000
-static int is_running_vendor_enhanced_fwk = 1;
+static int is_running_vendor_enhanced_fwk = 0;
static bool is_compress_meta_data_enabled = false;
struct snd_card_split cur_snd_card_split = {
@@ -190,6 +190,7 @@
static bool audio_extn_compress_in_enabled = false;
static bool audio_extn_battery_listener_enabled = false;
static bool audio_extn_maxx_audio_enabled = false;
+static bool audio_extn_audiozoom_enabled = false;
#define AUDIO_PARAMETER_KEY_AANC_NOISE_LEVEL "aanc_noise_level"
#define AUDIO_PARAMETER_KEY_ANC "anc_enabled"
@@ -821,7 +822,7 @@
// Refresh device selection for anc playback
list_for_each(node, &adev->usecase_list) {
usecase = node_to_item(node, struct audio_usecase, list);
- if (usecase->type != PCM_CAPTURE) {
+ if (usecase->stream.out && usecase->type != PCM_CAPTURE) {
if (usecase->stream.out->devices == \
AUDIO_DEVICE_OUT_WIRED_HEADPHONE ||
usecase->stream.out->devices == \
@@ -930,7 +931,7 @@
struct mixer_ctl *ctl = NULL;
const char *mixer_ctl_name = "PROXY_RX Channels";
- if (!audio_feature_manager_is_feature_enabled(AFE_PROXY)) {
+ if (!property_get_bool("vendor.audio.feature.afe_proxy.enable", false)) {
ALOGW("%s: AFE_PROXY is disabled", __func__);
return -ENOSYS;
}
@@ -1011,7 +1012,8 @@
int ret = 0;
int channels = aextnmod.proxy_channel_num;
- if (!audio_feature_manager_is_feature_enabled(AFE_PROXY)) {
+ if (!property_get_bool("vendor.audio.feature.afe_proxy.enable",
+ false)) {
ALOGW("%s: AFE_PROXY is disabled", __func__);
return -ENOSYS;
}
@@ -1041,7 +1043,8 @@
int32_t audio_extn_get_afe_proxy_channel_count()
{
- if (!audio_feature_manager_is_feature_enabled(AFE_PROXY)) {
+ if (!property_get_bool("vendor.audio.feature.afe_proxy.enable",
+ false)) {
ALOGW("%s: AFE_PROXY is disabled", __func__);
return -ENOSYS;
}
@@ -1105,6 +1108,7 @@
bool usb_is_tunnel_supported();
bool usb_alive(int card);
bool usb_connected(struct str_parms *parms);
+char *usb_usbid(void);
unsigned long usb_find_service_interval(bool min, bool playback);
int usb_altset_for_service_interval(bool is_playback,
unsigned long service_interval,
@@ -1265,6 +1269,15 @@
return ret_val;
}
+char *audio_extn_usb_usbid(void)
+{
+ char *ret_val = NULL;
+ if (is_usb_offload_enabled)
+ ret_val = usb_usbid();
+
+ return ret_val;
+}
+
unsigned long audio_extn_usb_find_service_interval(bool min, bool playback)
{
unsigned long ret_val = 0;
@@ -3119,6 +3132,13 @@
ALOGE("%s:: avdrift query failed error %d", __func__, ret);
}
break;
+ case AUDIO_EXTN_PARAM_OUT_PRESENTATION_POSITION:
+ ret = audio_ext_get_presentation_position(out,
+ (struct audio_out_presentation_position_param *)payload);
+ if (ret < 0)
+ ALOGE("%s:: presentation position query failed error %d",
+ __func__, ret);
+ break;
default:
ALOGE("%s:: unsupported param_id %d", __func__, param_id);
break;
@@ -4751,6 +4771,105 @@
}
// END: BATTERY_LISTENER ================================================================
+// START: AUDIOZOOM_FEATURE =====================================================================
+#ifdef __LP64__
+#define AUDIOZOOM_LIB_PATH "/vendor/lib64/libaudiozoom.so"
+#else
+#define AUDIOZOOM_LIB_PATH "/vendor/lib/libaudiozoom.so"
+#endif
+
+static void *audiozoom_lib_handle = NULL;
+
+typedef int (*audiozoom_init_t)(audiozoom_init_config_t);
+static audiozoom_init_t audiozoom_init;
+
+typedef int (*audiozoom_set_microphone_direction_t)(struct stream_in *,
+ audio_microphone_direction_t);
+static audiozoom_set_microphone_direction_t audiozoom_set_microphone_direction;
+
+typedef int (*audiozoom_set_microphone_field_dimension_t)(struct stream_in *, float);
+static audiozoom_set_microphone_field_dimension_t audiozoom_set_microphone_field_dimension;
+
+int audiozoom_feature_init(bool is_feature_enabled)
+{
+ audio_extn_audiozoom_enabled = is_feature_enabled;
+ ALOGD("%s: Called with feature %s", __func__,
+ is_feature_enabled ? "Enabled" : "NOT Enabled");
+ if (is_feature_enabled) {
+ // dlopen lib
+ audiozoom_lib_handle = dlopen(AUDIOZOOM_LIB_PATH, RTLD_NOW);
+
+ if (!audiozoom_lib_handle) {
+ ALOGE("%s: dlopen failed", __func__);
+ goto feature_disabled;
+ }
+
+ if (!(audiozoom_init =
+ (audiozoom_init_t)dlsym(audiozoom_lib_handle, "audiozoom_init")) ||
+ !(audiozoom_set_microphone_direction =
+ (audiozoom_set_microphone_direction_t)dlsym(audiozoom_lib_handle,
+ "audiozoom_set_microphone_direction")) ||
+ !(audiozoom_set_microphone_field_dimension =
+ (audiozoom_set_microphone_field_dimension_t)dlsym(audiozoom_lib_handle,
+ "audiozoom_set_microphone_field_dimension"))) {
+ ALOGE("%s: dlsym failed", __func__);
+ goto feature_disabled;
+ }
+
+ ALOGD("%s:: ---- Feature AUDIOZOOM is Enabled ----", __func__);
+ return 0;
+ }
+feature_disabled:
+ if (audiozoom_lib_handle) {
+ dlclose(audiozoom_lib_handle);
+ audiozoom_lib_handle = NULL;
+ }
+
+ audiozoom_init = NULL;
+ audiozoom_set_microphone_direction = NULL;
+ audiozoom_set_microphone_field_dimension = NULL;
+ ALOGW(":: %s: ---- Feature AUDIOZOOM is disabled ----", __func__);
+ return -ENOSYS;
+}
+
+bool audio_extn_is_audiozoom_enabled()
+{
+ return audio_extn_audiozoom_enabled;
+}
+
+int audio_extn_audiozoom_init()
+{
+ int ret_val = 0;
+ if (audiozoom_init) {
+ audiozoom_init_config_t init_config;
+ init_config.fp_platform_set_parameters = platform_set_parameters;
+ ret_val = audiozoom_init(init_config);
+ }
+
+ return ret_val;
+}
+
+int audio_extn_audiozoom_set_microphone_direction(struct stream_in *stream,
+ audio_microphone_direction_t dir)
+{
+ int ret_val = -ENOSYS;
+ if (audiozoom_set_microphone_direction)
+ ret_val = audiozoom_set_microphone_direction(stream, dir);
+
+ return ret_val;
+}
+
+int audio_extn_audiozoom_set_microphone_field_dimension(struct stream_in *stream,
+ float zoom)
+{
+ int ret_val = -ENOSYS;
+ if (audiozoom_set_microphone_field_dimension)
+ ret_val = audiozoom_set_microphone_field_dimension(stream, zoom);
+
+ return ret_val;
+}
+// END: AUDIOZOOM_FEATURE =====================================================================
+
// START: MAXX_AUDIO =====================================================================
#ifdef __LP64__
#define MAXX_AUDIO_LIB_PATH "/vendor/lib64/libmaxxaudio.so"
@@ -4878,121 +4997,121 @@
}
// END: MAXX_AUDIO =====================================================================
-void audio_extn_feature_init(int is_running_with_enhanced_fwk)
+void audio_extn_feature_init()
{
- is_running_vendor_enhanced_fwk = is_running_with_enhanced_fwk;
- for(int index = 0; index < VOICE_START; index++)
- {
- bool enable = audio_feature_manager_is_feature_enabled(index);
- switch (index) {
- case SND_MONITOR:
- snd_mon_feature_init(enable);
- break;
- case COMPRESS_CAPTURE:
- compr_cap_feature_init(enable);
- break;
- case DSM_FEEDBACK:
- dsm_feedback_feature_init(enable);
- break;
- case SSREC:
- ssrec_feature_init(enable);
- break;
- case SOURCE_TRACK:
- src_trkn_feature_init(enable);
- case HDMI_EDID:
- hdmi_edid_feature_init(enable);
- break;
- case KEEP_ALIVE:
- keep_alive_feature_init(enable);
- break;
- case HIFI_AUDIO:
- hifi_audio_feature_init(enable);
- break;
- case RECEIVER_AIDED_STEREO:
- ras_feature_init(enable);
- break;
- case KPI_OPTIMIZE:
- kpi_optimize_feature_init(enable);
- break;
- case USB_OFFLOAD:
- usb_offload_feature_init(enable);
- break;
- case USB_OFFLOAD_BURST_MODE:
- usb_offload_burst_mode_feature_init(enable);
- break;
- case USB_OFFLOAD_SIDETONE_VOLM:
- usb_offload_sidetone_volume_feature_init(enable);
- break;
- case A2DP_OFFLOAD:
- a2dp_offload_feature_init(enable);
- break;
- case WSA:
- wsa_feature_init(enable);
- break;
- case COMPRESS_METADATA_NEEDED:
- compress_meta_data_feature_init(enable);
- break;
- case VBAT:
- vbat_feature_init(enable);
- break;
- case DISPLAY_PORT:
- display_port_feature_init(enable);
- break;
- case FLUENCE:
- fluence_feature_init(enable);
- break;
- case CUSTOM_STEREO:
- custom_stereo_feature_init(enable);
- break;
- case ANC_HEADSET:
- anc_headset_feature_init(enable);
- break;
- case SPKR_PROT:
- spkr_prot_feature_init(enable);
- break;
- case FM_POWER_OPT_FEATURE:
- fm_feature_init(enable);
- break;
- case EXTERNAL_QDSP:
- external_qdsp_feature_init(enable);
- break;
- case EXTERNAL_SPEAKER:
- external_speaker_feature_init(enable);
- break;
- case EXTERNAL_SPEAKER_TFA:
- external_speaker_tfa_feature_init(enable);
- break;
- case HWDEP_CAL:
- hwdep_cal_feature_init(enable);
- break;
- case HFP:
- hfp_feature_init(enable);
- break;
- case EXT_HW_PLUGIN:
- ext_hw_plugin_feature_init(enable);
- break;
- case RECORD_PLAY_CONCURRENCY:
- record_play_concurency_feature_init(enable);
- break;
- case HDMI_PASSTHROUGH:
- hdmi_passthrough_feature_init(enable);
- break;
- case CONCURRENT_CAPTURE:
- concurrent_capture_feature_init(enable);
- break;
- case COMPRESS_IN_CAPTURE:
- compress_in_feature_init(enable);
- break;
- case BATTERY_LISTENER:
- battery_listener_feature_init(enable);
- break;
- case MAXX_AUDIO:
- maxx_audio_feature_init(enable);
- break;
- default:
- break;
- }
- }
+ is_running_vendor_enhanced_fwk = audio_extn_utils_is_vendor_enhanced_fwk();
+
+ // register feature init functions here
+ // each feature needs a vendor property
+ // default value added is for GSI (non vendor modified images)
+ snd_mon_feature_init(
+ property_get_bool("vendor.audio.feature.snd_mon.enable",
+ true));
+ compr_cap_feature_init(
+ property_get_bool("vendor.audio.feature.compr_cap.enable",
+ false));
+ dsm_feedback_feature_init(
+ property_get_bool("vendor.audio.feature.dsm_feedback.enable",
+ false));
+ ssrec_feature_init(
+ property_get_bool("vendor.audio.feature.ssrec.enable",
+ false));
+ src_trkn_feature_init(
+ property_get_bool("vendor.audio.feature.src_trkn.enable",
+ false));
+ hdmi_edid_feature_init(
+ property_get_bool("vendor.audio.feature.hdmi_edid.enable",
+ false));
+ keep_alive_feature_init(
+ property_get_bool("vendor.audio.feature.keep_alive.enable",
+ false));
+ hifi_audio_feature_init(
+ property_get_bool("vendor.audio.feature.hifi_audio.enable",
+ false));
+ ras_feature_init(
+ property_get_bool("vendor.audio.feature.ras.enable",
+ false));
+ kpi_optimize_feature_init(
+ property_get_bool("vendor.audio.feature.kpi_optimize.enable",
+ false));
+ usb_offload_feature_init(
+ property_get_bool("vendor.audio.feature.usb_offload.enable",
+ true));
+ usb_offload_burst_mode_feature_init(
+ property_get_bool("vendor.audio.feature.usb_offload_burst_mode.enable",
+ false));
+ usb_offload_sidetone_volume_feature_init(
+ property_get_bool("vendor.audio.feature.usb_offload_sidetone_volume.enable",
+ false));
+ a2dp_offload_feature_init(
+ property_get_bool("vendor.audio.feature.a2dp_offload.enable",
+ false));
+ wsa_feature_init(
+ property_get_bool("vendor.audio.feature.wsa.enable",
+ false));
+ compress_meta_data_feature_init(
+ property_get_bool("vendor.audio.feature.compress_meta_data.enable",
+ false));
+ vbat_feature_init(
+ property_get_bool("vendor.audio.feature.vbat.enable",
+ false));
+ display_port_feature_init(
+ property_get_bool("vendor.audio.feature.display_port.enable",
+ false));
+ fluence_feature_init(
+ property_get_bool("vendor.audio.feature.fluence.enable",
+ false));
+ custom_stereo_feature_init(
+ property_get_bool("vendor.audio.feature.custom_stereo.enable",
+ false));
+ anc_headset_feature_init(
+ property_get_bool("vendor.audio.feature.anc_headset.enable",
+ false));
+ spkr_prot_feature_init(
+ property_get_bool("vendor.audio.feature.spkr_prot.enable",
+ true));
+ fm_feature_init(
+ property_get_bool("vendor.audio.feature.fm.enable",
+ false));
+ external_qdsp_feature_init(
+ property_get_bool("vendor.audio.feature.external_dsp.enable",
+ true));
+ external_speaker_feature_init(
+ property_get_bool("vendor.audio.feature.external_speaker.enable",
+ true));
+ external_speaker_tfa_feature_init(
+ property_get_bool("vendor.audio.feature.external_speaker_tfa.enable",
+ false));
+ hwdep_cal_feature_init(
+ property_get_bool("vendor.audio.feature.hwdep_cal.enable",
+ true));
+ hfp_feature_init(
+ property_get_bool("vendor.audio.feature.hfp.enable",
+ true));
+ ext_hw_plugin_feature_init(
+ property_get_bool("vendor.audio.feature.ext_hw_plugin.enable",
+ false));
+ record_play_concurency_feature_init(
+ property_get_bool("vendor.audio.feature.record_play_concurency.enable",
+ false));
+ hdmi_passthrough_feature_init(
+ property_get_bool("vendor.audio.feature.hdmi_passthrough.enable",
+ false));
+ concurrent_capture_feature_init(
+ property_get_bool("vendor.audio.feature.concurrent_capture.enable",
+ true));
+ compress_in_feature_init(
+ property_get_bool("vendor.audio.feature.compress_in.enable",
+ false));
+ battery_listener_feature_init(
+ property_get_bool("vendor.audio.feature.battery_listener.enable",
+ false));
+ maxx_audio_feature_init(
+ property_get_bool("vendor.audio.feature.maxx_audio.enable",
+ true));
+ audiozoom_feature_init(
+ property_get_bool("vendor.audio.feature.audiozoom.enable",
+ true));
}
void audio_extn_set_parameters(struct audio_device *adev,
@@ -5052,3 +5171,29 @@
ALOGD_IF(kv_pairs != NULL, "%s: returns %s", __func__, kv_pairs);
free(kv_pairs);
}
+
+int audio_ext_get_presentation_position(struct stream_out *out,
+ struct audio_out_presentation_position_param *pos_param)
+{
+ int ret = -ENODATA;
+
+ if (!out) {
+ ALOGE("%s:: Invalid stream",__func__);
+ return ret;
+ }
+
+ if (is_offload_usecase(out->usecase)) {
+ if (out->compr != NULL)
+ ret = audio_extn_utils_compress_get_dsp_presentation_pos(out,
+ &pos_param->frames, &pos_param->timestamp, pos_param->clock_id);
+ } else {
+ if (out->pcm)
+ ret = audio_extn_utils_pcm_get_dsp_presentation_pos(out,
+ &pos_param->frames, &pos_param->timestamp, pos_param->clock_id);
+ }
+
+ ALOGV("%s frames %lld timestamp %lld", __func__, (long long int)pos_param->frames,
+ pos_param->timestamp.tv_sec*1000000000LL + pos_param->timestamp.tv_nsec);
+
+ return ret;
+}
diff --git a/hal/audio_extn/audio_extn.h b/hal/audio_extn/audio_extn.h
index e1e3ca0..b3297ed 100644
--- a/hal/audio_extn/audio_extn.h
+++ b/hal/audio_extn/audio_extn.h
@@ -192,7 +192,7 @@
// call at adev init
void audio_extn_init(struct audio_device *adev);
-void audio_extn_feature_init(int is_running_with_enhanced_fwk);
+void audio_extn_feature_init();
//START: SND_MONITOR_FEATURE ===========================================
void snd_mon_feature_init (bool is_feature_enabled);
typedef void (* snd_mon_cb)(void * stream, struct str_parms * parms);
@@ -283,6 +283,7 @@
uint32_t *bit_width,
uint32_t *sample_rate,
uint32_t *channel_count);
+char *audio_extn_usb_usbid(void);
int audio_extn_usb_set_service_interval(bool playback,
unsigned long service_interval,
bool *reconfig);
@@ -326,6 +327,22 @@
};
typedef struct a2dp_offload_init_config a2dp_offload_init_config_t;
// END: A2DP_OFFLOAD FEATURE ====================================================
+
+typedef int (*fp_platform_set_parameters_t)(void*, struct str_parms*);
+
+// START: AUDIOZOOM FEATURE ==================================================
+int audio_extn_audiozoom_init();
+int audio_extn_audiozoom_set_microphone_direction(struct stream_in *stream,
+ audio_microphone_direction_t dir);
+int audio_extn_audiozoom_set_microphone_field_dimension(struct stream_in *stream, float zoom);
+bool audio_extn_is_audiozoom_enabled();
+
+struct audiozoom_init_config {
+ fp_platform_set_parameters_t fp_platform_set_parameters;
+};
+typedef struct audiozoom_init_config audiozoom_init_config_t;
+// END: AUDIOZOOM FEATURE ==================================================
+
// START: MAXX_AUDIO FEATURE ==================================================
void audio_extn_ma_init(void *platform);
void audio_extn_ma_deinit();
@@ -336,7 +353,6 @@
struct str_parms *parms);
bool audio_extn_ma_supported_usb();
bool audio_extn_is_maxx_audio_enabled();
-typedef int (*fp_platform_set_parameters_t)(void*, struct str_parms*);
// --- Function pointers from audio_extn needed by MAXX_AUDIO
struct maxx_audio_init_config {
fp_platform_set_parameters_t fp_platform_set_parameters;
@@ -784,6 +800,7 @@
int audio_extn_utils_get_sample_rate_from_string(const char *);
int audio_extn_utils_get_channels_from_string(const char *);
void audio_extn_utils_release_snd_device(snd_device_t snd_device);
+int audio_extn_utils_is_vendor_enhanced_fwk();
#ifdef DS2_DOLBY_DAP_ENABLED
#define LIB_DS2_DAP_HAL "vendor/lib/libhwdaphal.so"
@@ -1066,6 +1083,12 @@
int audio_extn_utils_set_downmix_params(
struct stream_out *out,
struct mix_matrix_params *mm_params);
+int audio_ext_get_presentation_position(struct stream_out *out,
+ struct audio_out_presentation_position_param *pos_param);
+int audio_extn_utils_compress_get_dsp_presentation_pos(struct stream_out *out,
+ uint64_t *frames, struct timespec *timestamp, int32_t clock_id);
+int audio_extn_utils_pcm_get_dsp_presentation_pos(struct stream_out *out,
+ uint64_t *frames, struct timespec *timestamp, int32_t clock_id);
#ifdef AUDIO_HW_LOOPBACK_ENABLED
/* API to create audio patch */
int audio_extn_hw_loopback_create_audio_patch(struct audio_hw_device *dev,
diff --git a/hal/audio_extn/audio_feature_manager.c b/hal/audio_extn/audio_feature_manager.c
index e121426..441071d 100644
--- a/hal/audio_extn/audio_feature_manager.c
+++ b/hal/audio_extn/audio_feature_manager.c
@@ -42,47 +42,17 @@
#include "voice_extn.h"
#include "audio_feature_manager.h"
-#ifdef __LP64__
-#define VNDK_FWK_LIB_PATH "/vendor/lib64/libqti_vndfwk_detect.so"
-#else
-#define VNDK_FWK_LIB_PATH "/vendor/lib/libqti_vndfwk_detect.so"
-#endif
-
AHalValues* confValues = NULL;
-static void *vndk_fwk_lib_handle = NULL;
-
-typedef int (*vndk_fwk_isVendorEnhancedFwk_t)();
-static vndk_fwk_isVendorEnhancedFwk_t vndk_fwk_isVendorEnhancedFwk;
void audio_feature_manager_init()
{
ALOGD("%s: Enter", __func__);
- int is_running_with_enhanced_fwk = 0;
- //dlopen lib
- vndk_fwk_lib_handle = dlopen(VNDK_FWK_LIB_PATH, RTLD_NOW);
- if (vndk_fwk_lib_handle != NULL) {
- vndk_fwk_isVendorEnhancedFwk = (vndk_fwk_isVendorEnhancedFwk_t)
- dlsym(vndk_fwk_lib_handle, "isRunningWithVendorEnhancedFramework");
- if (vndk_fwk_isVendorEnhancedFwk == NULL) {
- ALOGW("%s: VNDK_FWK_LIB not found, defaulting to enhanced_fwk configuration",
- __func__);
- is_running_with_enhanced_fwk = 1;
- } else {
- is_running_with_enhanced_fwk = vndk_fwk_isVendorEnhancedFwk();
- }
- }
-
- ALOGD("%s: vndk_fwk_isVendorEnhancedFwk=%d", __func__, is_running_with_enhanced_fwk);
+ int is_running_with_enhanced_fwk = audio_extn_utils_is_vendor_enhanced_fwk();
audio_extn_ahal_config_helper_init(is_running_with_enhanced_fwk);
audio_extn_get_feature_values(&confValues);
audio_extn_feature_init(is_running_with_enhanced_fwk);
voice_extn_feature_init(is_running_with_enhanced_fwk);
-
- if (vndk_fwk_lib_handle != NULL) {
- dlclose(vndk_fwk_lib_handle);
- vndk_fwk_lib_handle = NULL;
- }
}
bool audio_feature_manager_is_feature_enabled(audio_ext_feature feature)
@@ -178,6 +148,8 @@
return confValues->compress_voip_enabled;
case DYNAMIC_ECNS:
return confValues->dynamic_ecns_enabled;
+ case AUDIO_ZOOM:
+ return confValues->audio_zoom_enabled;
default:
return false;
}
diff --git a/hal/audio_extn/audio_feature_manager.h b/hal/audio_extn/audio_feature_manager.h
index 8df076c..908b0cb 100644
--- a/hal/audio_extn/audio_feature_manager.h
+++ b/hal/audio_extn/audio_feature_manager.h
@@ -33,6 +33,7 @@
#include <ahal_config_helper.h>
enum audio_ext_feature_t {
+ // Start Audio feature flags
SND_MONITOR = 0,
COMPRESS_CAPTURE,
SOURCE_TRACK,
@@ -71,10 +72,14 @@
BATTERY_LISTENER,
COMPRESS_METADATA_NEEDED,
MAXX_AUDIO,
+ AUDIO_ZOOM,
+ // End Audio feature flags
+ // Start Voice feature flags
COMPRESS_VOIP,
VOICE_START = COMPRESS_VOIP,
DYNAMIC_ECNS,
INCALL_MUSIC,
+ // End Voice feature flags
MAX_SUPPORTED_FEATURE
};
diff --git a/hal/audio_extn/audiozoom.c b/hal/audio_extn/audiozoom.c
index 73e4862..9958cc4 100644
--- a/hal/audio_extn/audiozoom.c
+++ b/hal/audio_extn/audiozoom.c
@@ -23,7 +23,6 @@
#include <expat.h>
#include <audio_hw.h>
#include <system/audio.h>
-#include <platform_api.h>
#include "audio_extn.h"
#include "audiozoom.h"
@@ -32,6 +31,9 @@
#define AUDIOZOOM_PRESET_FILE "/vendor/etc/audiozoom.xml"
+// --- external function dependency ---
+fp_platform_set_parameters_t fp_platform_set_parameters;
+
typedef struct qdsp_audiozoom_cfg {
uint32_t topo_id;
uint32_t module_id;
@@ -116,7 +118,7 @@
}
}
-static int audio_extn_audiozoom_parse_info(const char *filename)
+static int audiozoom_parse_info(const char *filename)
{
XML_Parser parser;
FILE *file;
@@ -176,7 +178,7 @@
return ret;
}
-int audio_extn_audiozoom_set_microphone_direction(
+int audiozoom_set_microphone_direction(
struct stream_in *in, audio_microphone_direction_t dir)
{
(void)in;
@@ -184,7 +186,7 @@
return 0;
}
-static int audio_extn_audiozoom_set_microphone_field_dimension_zoom(
+static int audiozoom_set_microphone_field_dimension_zoom(
struct stream_in *in, float zoom)
{
struct audio_device *adev = in->dev;
@@ -212,7 +214,7 @@
if (ret > 0) {
str_parms_add_str(parms, "cal_data", data);
- platform_set_parameters(adev->platform, parms);
+ fp_platform_set_parameters(adev->platform, parms);
} else {
ALOGE("%s: failed to convert data to string, ret %d", __func__, ret);
}
@@ -222,7 +224,7 @@
return 0;
}
-static int audio_extn_audiozoom_set_microphone_field_dimension_wide_angle(
+static int audiozoom_set_microphone_field_dimension_wide_angle(
struct stream_in *in, float zoom)
{
(void)in;
@@ -230,24 +232,25 @@
return 0;
}
-int audio_extn_audiozoom_set_microphone_field_dimension(
+int audiozoom_set_microphone_field_dimension(
struct stream_in *in, float zoom)
{
if (zoom > 1.0 || zoom < -1.0)
return -EINVAL;
if (zoom >= 0 && zoom <= 1.0)
- return audio_extn_audiozoom_set_microphone_field_dimension_zoom(in, zoom);
+ return audiozoom_set_microphone_field_dimension_zoom(in, zoom);
if (zoom >= -1.0 && zoom <= 0)
- return audio_extn_audiozoom_set_microphone_field_dimension_wide_angle(in, zoom);
+ return audiozoom_set_microphone_field_dimension_wide_angle(in, zoom);
return 0;
}
-int audio_extn_audiozoom_init()
+int audiozoom_init(audiozoom_init_config_t init_config)
{
- audio_extn_audiozoom_parse_info(AUDIOZOOM_PRESET_FILE);
+ fp_platform_set_parameters = init_config.fp_platform_set_parameters;
+ audiozoom_parse_info(AUDIOZOOM_PRESET_FILE);
ALOGV("%s: topo_id=%d, module_id=%d, instance_id=%d, zoom__id=%d, dir_id=%d, app_type=%d",
__func__, qdsp_audiozoom.topo_id, qdsp_audiozoom.module_id, qdsp_audiozoom.instance_id,
diff --git a/hal/audio_extn/audiozoom.h b/hal/audio_extn/audiozoom.h
index 2c0ad71..cb00828 100644
--- a/hal/audio_extn/audiozoom.h
+++ b/hal/audio_extn/audiozoom.h
@@ -17,15 +17,9 @@
#ifndef AUDIOZOOM_H_
#define AUDIOZOOM_H_
-#ifndef AUDIOZOOM_QDSP_ENABLED
-#define audio_extn_audiozoom_init() (0)
-#define audio_extn_audiozoom_set_microphone_direction(stream, dir) (-ENOSYS)
-#define audio_extn_audiozoom_set_microphone_field_dimension(stream, zoom) (-ENOSYS)
-#else
-int audio_extn_audiozoom_init();
-int audio_extn_audiozoom_set_microphone_direction(struct stream_in *stream,
+int audiozoom_init(audiozoom_init_config_t init_config);
+int audiozoom_set_microphone_direction(struct stream_in *stream,
audio_microphone_direction_t dir);
-int audio_extn_audiozoom_set_microphone_field_dimension(struct stream_in *stream, float zoom);
-#endif
+int audiozoom_set_microphone_field_dimension(struct stream_in *stream, float zoom);
#endif /* AUDIOZOOM_H_ */
diff --git a/hal/audio_extn/dev_arbi.c b/hal/audio_extn/dev_arbi.c
index d83d6bd..4eb5dee 100644
--- a/hal/audio_extn/dev_arbi.c
+++ b/hal/audio_extn/dev_arbi.c
@@ -142,6 +142,7 @@
{SND_DEVICE_OUT_VOICE_HEADPHONES, AUDIO_DEVICE_OUT_WIRED_HEADPHONE},
{SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES,
AUDIO_DEVICE_OUT_SPEAKER | AUDIO_DEVICE_OUT_WIRED_HEADPHONE}
+ {SND_DEVICE_OUT_VOICE_HEADSET, AUDIO_DEVICE_OUT_WIRED_HEADSET},
};
audio_devices_t aud_device = AUDIO_DEVICE_NONE;
diff --git a/hal/audio_extn/dolby.c b/hal/audio_extn/dolby.c
index 906c234..335cfbd 100644
--- a/hal/audio_extn/dolby.c
+++ b/hal/audio_extn/dolby.c
@@ -245,7 +245,7 @@
list_for_each(node, &adev->usecase_list) {
usecase = node_to_item(node, struct audio_usecase, list);
- if ((usecase->type == PCM_PLAYBACK) &&
+ if (usecase->stream.out && (usecase->type == PCM_PLAYBACK) &&
(usecase->devices & ddp_dev) &&
(usecase->stream.out->flags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD) &&
((usecase->stream.out->format == AUDIO_FORMAT_AC3) ||
@@ -263,7 +263,7 @@
struct audio_usecase *usecase;
list_for_each(node, &adev->usecase_list) {
usecase = node_to_item(node, struct audio_usecase, list);
- if ((usecase->type == PCM_PLAYBACK) &&
+ if (usecase->stream.out && (usecase->type == PCM_PLAYBACK) &&
(usecase->devices & AUDIO_DEVICE_OUT_ALL) &&
(usecase->stream.out->flags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD) &&
((usecase->stream.out->format == AUDIO_FORMAT_AC3) ||
diff --git a/hal/audio_extn/dts_eagle.c b/hal/audio_extn/dts_eagle.c
index 3771a9d..be7bab1 100644
--- a/hal/audio_extn/dts_eagle.c
+++ b/hal/audio_extn/dts_eagle.c
@@ -112,7 +112,7 @@
list_for_each(node, &adev->usecase_list) {
usecase = node_to_item(node, struct audio_usecase, list);
/* set/get eagle params for offload usecases only */
- if ((usecase->type == PCM_PLAYBACK) && is_offload_usecase(usecase->id)) {
+ if (usecase->stream.out && (usecase->type == PCM_PLAYBACK) && is_offload_usecase(usecase->id)) {
tret = do_DTS_Eagle_params_stream(usecase->stream.out, t, get);
if (tret < 0)
ret = tret;
diff --git a/hal/audio_extn/maxxaudio.c b/hal/audio_extn/maxxaudio.c
index 8830486..31feb02 100644
--- a/hal/audio_extn/maxxaudio.c
+++ b/hal/audio_extn/maxxaudio.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2019 The Android Open Source Project
+ * Copyright (C) 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -43,7 +43,9 @@
#define MA_QDSP_PARAM_INIT "maxxaudio_qdsp_initialize"
#define MA_QDSP_PARAM_DEINIT "maxxaudio_qdsp_uninitialize"
+#define MA_QDSP_IS_FEATURE_USED "maxxaudio_qdsp_is_feature_supported"
#define MA_QDSP_SET_LR_SWAP "maxxaudio_qdsp_set_lr_swap"
+#define MA_QDSP_SET_ORIENTATION "maxxaudio_qdsp_set_orientation"
#define MA_QDSP_SET_MODE "maxxaudio_qdsp_set_sound_mode"
#define MA_QDSP_SET_VOL "maxxaudio_qdsp_set_volume"
#define MA_QDSP_SET_VOLT "maxxaudio_qdsp_set_volume_table"
@@ -87,8 +89,8 @@
MA_CMD_VOL,
MA_CMD_SWAP_ENABLE,
MA_CMD_SWAP_DISABLE,
- MA_CMD_SOFT_MUTE_ENABLE,
- MA_CMD_SOFT_MUTE_DISABLE,
+ MA_CMD_ROTATE_ENABLE,
+ MA_CMD_ROTATE_DISABLE,
} ma_cmd_t;
typedef struct ma_audio_cal_version {
@@ -120,9 +122,14 @@
typedef bool (*ma_param_deinit_t)(ma_audio_cal_handle_t *);
+typedef bool (*ma_is_feature_used_t)(ma_audio_cal_handle_t, const char *);
+
typedef bool (*ma_set_lr_swap_t)(ma_audio_cal_handle_t,
const struct ma_audio_cal_settings *, bool);
+typedef bool (*ma_set_orientation_t)(ma_audio_cal_handle_t,
+ const struct ma_audio_cal_settings *, int);
+
typedef bool (*ma_set_sound_mode_t)(ma_audio_cal_handle_t,
const struct ma_audio_cal_settings *,
unsigned int);
@@ -144,12 +151,16 @@
pthread_mutex_t lock;
ma_param_init_t ma_param_init;
ma_param_deinit_t ma_param_deinit;
+ ma_is_feature_used_t ma_is_feature_used;
ma_set_lr_swap_t ma_set_lr_swap;
+ ma_set_orientation_t ma_set_orientation;
ma_set_sound_mode_t ma_set_sound_mode;
ma_set_volume_t ma_set_volume;
ma_set_volume_table_t ma_set_volume_table;
ma_set_param_t ma_set_param;
bool speaker_lr_swap;
+ bool orientation_used;
+ int dispaly_orientation;
};
ma_audio_cal_handle_t g_ma_audio_cal_handle = NULL;
@@ -175,6 +186,13 @@
audio_cal_settings, swap);
}
+static bool ma_set_orientation_l(
+ const struct ma_audio_cal_settings *audio_cal_settings, int orientation)
+{
+ return my_data->ma_set_orientation(g_ma_audio_cal_handle,
+ audio_cal_settings, orientation);
+}
+
static bool ma_set_volume_table_l(
const struct ma_audio_cal_settings *audio_cal_settings,
size_t num_streams, struct ma_state *volume_table)
@@ -192,6 +210,25 @@
audio_cal_settings, index, value);
}
+static void print_state_log()
+{
+ ALOGD("%s: send volume table -(%i,%f,%s),(%i,%f,%s),(%i,%f,%s),(%i,%f,%s),"
+ "(%i,%f,%s),(%i,%f,%s)", __func__,
+ STREAM_VOICE, ma_cur_state_table[STREAM_VOICE].vol,
+ ma_cur_state_table[STREAM_VOICE].active ? "T" : "F",
+ STREAM_SYSTEM, ma_cur_state_table[STREAM_SYSTEM].vol,
+ ma_cur_state_table[STREAM_SYSTEM].active ? "T" : "F",
+ STREAM_RING, ma_cur_state_table[STREAM_RING].vol,
+ ma_cur_state_table[STREAM_RING].active ? "T" : "F",
+ STREAM_MUSIC, ma_cur_state_table[STREAM_MUSIC].vol,
+ ma_cur_state_table[STREAM_MUSIC].active ? "T" : "F",
+ STREAM_ALARM, ma_cur_state_table[STREAM_ALARM].vol,
+ ma_cur_state_table[STREAM_ALARM].active ? "T" : "F",
+ STREAM_NOTIFICATION, ma_cur_state_table[STREAM_NOTIFICATION].vol,
+ ma_cur_state_table[STREAM_NOTIFICATION].active ? "T" : "F");
+
+}
+
static inline bool valid_usecase(struct audio_usecase *usecase)
{
if ((usecase->type == PCM_PLAYBACK) &&
@@ -247,7 +284,7 @@
list_for_each(node, &adev->usecase_list) {
usecase = node_to_item(node, struct audio_usecase, list);
- if (valid_usecase(usecase)) {
+ if (usecase->stream.out && valid_usecase(usecase)) {
ma_cal.common.app_type = usecase->stream.out->app_type_cfg.app_type;
ma_cal.common.device = usecase->stream.out->devices;
ALOGV("%s: send usecase(%d) app_type(%d) device(%d)",
@@ -262,13 +299,7 @@
ALOGV("ma_set_volume_table_l success");
else
ALOGE("ma_set_volume_table_l returned with error.");
-
- ALOGV("%s: send volume table === Start", __func__);
- for (i = 0; i < STREAM_MAX_TYPES; i++)
- ALOGV("%s: stream(%d) volume(%f) active(%s)", __func__,
- i, ma_cur_state_table[i].vol,
- ma_cur_state_table[i].active ? "T" : "F");
- ALOGV("%s: send volume table === End", __func__);
+ print_state_log();
break;
case MA_CMD_SWAP_ENABLE:
@@ -290,22 +321,24 @@
ALOGE("ma_set_lr_swap_l disable returned with error.");
break;
- case MA_CMD_SOFT_MUTE_ENABLE:
- if (usecase->id == USECASE_AUDIO_PLAYBACK_LOW_LATENCY) break;
-
- ma_cal.effect_scope_flag = EFFECTIVE_SCOPE_RTC;
- ret = ma_set_param_l(&ma_cal, MAAP_OUTPUT_GAIN, -96);
- if (!ret)
- ALOGE("soft mute enable returned with error.");
+ case MA_CMD_ROTATE_ENABLE:
+ if (ma_cal.common.device & AUDIO_DEVICE_OUT_SPEAKER) {
+ ret = ma_set_orientation_l(&ma_cal, my_data->dispaly_orientation);
+ if (ret)
+ ALOGV("ma_set_orientation_l %d returned with success.",
+ my_data->dispaly_orientation);
+ else
+ ALOGE("ma_set_orientation_l %d returned with error.",
+ my_data->dispaly_orientation);
+ }
break;
- case MA_CMD_SOFT_MUTE_DISABLE:
- if (usecase->id == USECASE_AUDIO_PLAYBACK_LOW_LATENCY) break;
-
- ma_cal.effect_scope_flag = EFFECTIVE_SCOPE_RTC;
- ret = ma_set_param_l(&ma_cal, MAAP_OUTPUT_GAIN, 0);
- if (!ret)
- ALOGE("soft mute disable returned with error.");
+ case MA_CMD_ROTATE_DISABLE:
+ ret = ma_set_orientation_l(&ma_cal, 0);
+ if (ret)
+ ALOGV("ma_set_orientation_l 0 returned with success.");
+ else
+ ALOGE("ma_set_orientation_l 0 returned with error.");
break;
default:
@@ -351,6 +384,14 @@
check_and_send_all_audio_cal(adev, MA_CMD_SWAP_DISABLE);
}
+static void ma_set_rotation_l(struct audio_device *adev, int orientation)
+{
+ if (orientation != 0)
+ check_and_send_all_audio_cal(adev, MA_CMD_ROTATE_ENABLE);
+ else
+ check_and_send_all_audio_cal(adev, MA_CMD_ROTATE_DISABLE);
+}
+
static void ma_support_usb(bool enable, int card)
{
char path[128];
@@ -430,7 +471,7 @@
my_data->waves_handle = dlopen(lib_path, RTLD_NOW);
if (my_data->waves_handle == NULL) {
- ALOGE("%s: DLOPEN failed for %s", __func__, LIB_MA_PARAM);
+ ALOGE("%s: DLOPEN failed for %s, %s", __func__, LIB_MA_PARAM, dlerror());
goto error;
} else {
ALOGV("%s: DLOPEN successful for %s", __func__, LIB_MA_PARAM);
@@ -449,6 +490,18 @@
goto error;
}
+ my_data->ma_is_feature_used = (ma_is_feature_used_t)dlsym(my_data->waves_handle,
+ MA_QDSP_IS_FEATURE_USED);
+ if (!my_data->ma_is_feature_used) {
+ ALOGV("%s: dlsym error %s for ma_is_feature_used", __func__, dlerror());
+ }
+
+ my_data->ma_set_orientation = (ma_set_orientation_t)dlsym(my_data->waves_handle,
+ MA_QDSP_SET_ORIENTATION);
+ if (!my_data->ma_set_orientation) {
+ ALOGV("%s: dlsym error %s for ma_set_orientation", __func__, dlerror());
+ }
+
my_data->ma_set_lr_swap = (ma_set_lr_swap_t)dlsym(my_data->waves_handle,
MA_QDSP_SET_LR_SWAP);
if (!my_data->ma_set_lr_swap) {
@@ -547,6 +600,13 @@
}
my_data->speaker_lr_swap = false;
+ my_data->orientation_used = false;
+ my_data->dispaly_orientation = 0;
+
+ if (g_ma_audio_cal_handle && my_data->ma_is_feature_used) {
+ my_data->orientation_used = my_data->ma_is_feature_used(
+ g_ma_audio_cal_handle, "SET_ORIENTATION");
+ }
return;
@@ -577,7 +637,6 @@
float vol, bool active)
{
bool ret = false;
- bool first_enable = false;
struct ma_state pr_mstate;
if (stream_type >= STREAM_MAX_TYPES ||
@@ -601,17 +660,10 @@
if (pr_mstate.vol != vol || pr_mstate.active != active) {
pthread_mutex_lock(&my_data->lock);
- // get active state before updating
- first_enable = (!is_active()) && active;
ma_cur_state_table[(ma_stream_type_t)stream_type].vol = vol;
ma_cur_state_table[(ma_stream_type_t)stream_type].active = active;
- if (first_enable) //all F -> one of T
- ret = check_and_send_all_audio_cal(adev, MA_CMD_SOFT_MUTE_DISABLE);
- else if (!is_active()) // all F
- ret = check_and_send_all_audio_cal(adev, MA_CMD_SOFT_MUTE_ENABLE);
-
ret = check_and_send_all_audio_cal(adev, MA_CMD_VOL);
pthread_mutex_unlock(&my_data->lock);
@@ -647,17 +699,19 @@
pthread_mutex_lock(&my_data->lock);
if (is_active()) {
- if (ma_cal.common.device & AUDIO_DEVICE_OUT_SPEAKER)
- ma_set_swap_l(usecase->stream.out->dev, my_data->speaker_lr_swap);
- else
- ma_set_swap_l(usecase->stream.out->dev, false);
- ALOGV("%s: send volume table === Start", __func__);
- for (i = 0; i < STREAM_MAX_TYPES; i++)
- ALOGV("%s: stream(%d) volume(%f) active(%s)", __func__, i,
- ma_cur_state_table[i].vol,
- ma_cur_state_table[i].active ? "T" : "F");
- ALOGV("%s: send volume table === End", __func__);
+ if (ma_cal.common.device & AUDIO_DEVICE_OUT_SPEAKER) {
+ if (my_data->orientation_used)
+ ma_set_rotation_l(usecase->stream.out->dev,
+ my_data->dispaly_orientation);
+ else
+ ma_set_swap_l(usecase->stream.out->dev, my_data->speaker_lr_swap);
+ } else {
+ if (my_data->orientation_used)
+ ma_set_rotation_l(usecase->stream.out->dev, 0);
+ else
+ ma_set_swap_l(usecase->stream.out->dev, false);
+ }
if (!ma_set_volume_table_l(&ma_cal,
STREAM_MAX_TYPES,
@@ -665,6 +719,7 @@
ALOGE("ma_set_volume_table_l returned with error.");
else
ALOGV("ma_set_volume_table_l success");
+ print_state_log();
}
pthread_mutex_unlock(&my_data->lock);
@@ -695,7 +750,12 @@
my_data->speaker_lr_swap = false;
break;
}
- ma_set_swap_l(adev, my_data->speaker_lr_swap);
+ my_data->dispaly_orientation = val;
+
+ if (my_data->orientation_used)
+ ma_set_rotation_l(adev, my_data->dispaly_orientation);
+ else
+ ma_set_swap_l(adev, my_data->speaker_lr_swap);
}
// check connect status
diff --git a/hal/audio_extn/maxxaudio.h b/hal/audio_extn/maxxaudio.h
index 1ab7f80..4f45f79 100644
--- a/hal/audio_extn/maxxaudio.h
+++ b/hal/audio_extn/maxxaudio.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2019 The Android Open Source Project
+ * Copyright (C) 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -25,4 +25,4 @@
void ma_set_parameters(struct audio_device *adev,
struct str_parms *parms);
bool ma_supported_usb();
-#endif /* MAXXAUDIO_H_ */
\ No newline at end of file
+#endif /* MAXXAUDIO_H_ */
diff --git a/hal/audio_extn/passthru.c b/hal/audio_extn/passthru.c
index a59717c..e900932 100644
--- a/hal/audio_extn/passthru.c
+++ b/hal/audio_extn/passthru.c
@@ -284,7 +284,7 @@
/* find max period time among active playback use cases */
list_for_each(node, &adev->usecase_list) {
usecase = node_to_item(node, struct audio_usecase, list);
- if (usecase->type == PCM_PLAYBACK &&
+ if (usecase->stream.out && usecase->type == PCM_PLAYBACK &&
usecase->devices & AUDIO_DEVICE_OUT_AUX_DIGITAL) {
o = usecase->stream.out;
temp = o->config.period_size * 1000000LL / o->sample_rate;
diff --git a/hal/audio_extn/sndmonitor.c b/hal/audio_extn/sndmonitor.c
index 11578fc..9e460f0 100644
--- a/hal/audio_extn/sndmonitor.c
+++ b/hal/audio_extn/sndmonitor.c
@@ -223,7 +223,8 @@
(strncasecmp(card_id, "trinket", 7) != 0) &&
(strncasecmp(card_id, "apq", 3) != 0) &&
(strncasecmp(card_id, "sa", 2) != 0) &&
- (strncasecmp(card_id, "kona", 4) != 0)) {
+ (strncasecmp(card_id, "kona", 4) != 0) &&
+ (strncasecmp(card_id, "lito", 4) != 0)) {
ALOGW("Skip over non-ADSP snd card %s", card_id);
continue;
}
diff --git a/hal/audio_extn/usb.c b/hal/audio_extn/usb.c
index 9981ef0..e6859fe 100644
--- a/hal/audio_extn/usb.c
+++ b/hal/audio_extn/usb.c
@@ -55,6 +55,7 @@
#define SAMPLE_RATE_11025 11025
#define SAMPLE_RATE_192000 192000
// Supported sample rates for USB
+#define USBID_SIZE 16
static uint32_t supported_sample_rates[] =
{384000, 352800, 192000, 176400, 96000, 88200, 64000, 48000, 44100, 32000, 22050, 16000, 11025, 8000};
static uint32_t supported_sample_rates_mask[2];
@@ -97,6 +98,7 @@
int usb_sidetone_vol_min;
int usb_sidetone_vol_max;
int endian;
+ char usbid[USBID_SIZE];
};
struct usb_module {
@@ -620,6 +622,48 @@
return ret;
}
+static int usb_get_usbid(struct usb_card_config *usb_card_info,
+ int card)
+{
+ int32_t fd=-1;
+ char path[128];
+ int ret = 0;
+
+ memset(usb_card_info->usbid, 0, sizeof(usb_card_info->usbid));
+
+ ret = snprintf(path, sizeof(path), "/proc/asound/card%u/usbid",
+ card);
+
+ if (ret < 0) {
+ ALOGE("%s: failed on snprintf (%d) to path %s\n",
+ __func__, ret, path);
+ goto done;
+ }
+
+ fd = open(path, O_RDONLY);
+ if (fd < 0) {
+ ALOGE("%s: error failed to open file %s error: %d\n",
+ __func__, path, errno);
+ ret = -EINVAL;
+ goto done;
+ }
+
+ if (read(fd, usb_card_info->usbid, USBID_SIZE - 1) < 0) {
+ ALOGE("file read error\n");
+ ret = -EINVAL;
+ usb_card_info->usbid[0] = '\0';
+ goto done;
+ }
+
+ strtok(usb_card_info->usbid, "\n");
+
+done:
+ if (fd >= 0)
+ close(fd);
+
+ return ret;
+}
+
static int usb_get_device_cap_config(struct usb_card_config *usb_card_info,
int card)
{
@@ -1164,6 +1208,10 @@
}
list_init(&usb_card_info->usb_device_conf_list);
if (usb_output_device(device)) {
+ if (usb_get_usbid(usb_card_info, card) < 0) {
+ ALOGE("parse card %d usbid fail", card);
+ }
+
if (!usb_get_device_pb_config(usb_card_info, card)){
usb_card_info->usb_card = card;
usb_card_info->usb_device_type = device;
@@ -1172,6 +1220,10 @@
goto exit;
}
} else if (usb_input_device(device)) {
+ if (usb_get_usbid(usb_card_info, card) < 0) {
+ ALOGE("parse card %d usbid fail", card);
+ }
+
if (!usb_get_device_cap_config(usb_card_info, card)) {
usb_card_info->usb_card = card;
usb_card_info->usb_device_type = device;
@@ -1485,6 +1537,22 @@
return usb_connected;
}
+char *usb_usbid()
+{
+ struct usb_card_config *card_info;
+
+ if (usbmod == NULL)
+ return NULL;
+
+ if (list_empty(&usbmod->usb_card_conf_list))
+ return NULL;
+
+ card_info = node_to_item(list_head(&usbmod->usb_card_conf_list),\
+ struct usb_card_config, list);
+
+ return strdup(card_info->usbid);
+}
+
void usb_init(void *adev)
{
if (usbmod == NULL) {
diff --git a/hal/audio_extn/utils.c b/hal/audio_extn/utils.c
index b06276e..09921af 100644
--- a/hal/audio_extn/utils.c
+++ b/hal/audio_extn/utils.c
@@ -30,6 +30,7 @@
#include <log/log.h>
#include <cutils/misc.h>
#include <unistd.h>
+#include <sys/ioctl.h>
#include "audio_hw.h"
@@ -39,6 +40,7 @@
#include "voice.h"
#include <sound/compress_params.h>
#include <sound/compress_offload.h>
+#include <sound/devdep_params.h>
#include <tinycompress/tinycompress.h>
#ifdef DYNAMIC_LOG_ENABLED
@@ -108,6 +110,16 @@
#define MAX_CHANNELS_SUPPORTED 8
#endif
+#ifdef __LP64__
+#define VNDK_FWK_LIB_PATH "/vendor/lib64/libqti_vndfwk_detect.so"
+#else
+#define VNDK_FWK_LIB_PATH "/vendor/lib/libqti_vndfwk_detect.so"
+#endif
+
+static void *vndk_fwk_lib_handle = NULL;
+typedef int (*vndk_fwk_isVendorEnhancedFwk_t)();
+static vndk_fwk_isVendorEnhancedFwk_t vndk_fwk_isVendorEnhancedFwk;
+
typedef struct {
const char *id_string;
const int value;
@@ -2248,6 +2260,80 @@
}
#endif
+#ifdef SNDRV_COMPRESS_DSP_POSITION
+int audio_extn_utils_compress_get_dsp_presentation_pos(struct stream_out *out,
+ uint64_t *frames, struct timespec *timestamp, int32_t clock_id)
+{
+ int ret = -EINVAL;
+ uint64_t *val = NULL;
+ uint64_t time = 0;
+ struct snd_compr_metadata metadata;
+
+ ALOGV("%s:: Quering DSP position with clock id %d",__func__, clock_id);
+ metadata.key = SNDRV_COMPRESS_DSP_POSITION;
+ metadata.value[0] = clock_id;
+ ret = compress_get_metadata(out->compr, &metadata);
+ if (ret) {
+ ALOGE("%s::error %s", __func__, compress_get_error(out->compr));
+ ret = -errno;
+ goto exit;
+ }
+ val = (uint64_t *)&metadata.value[1];
+ *frames = *val;
+ time = *(val + 1);
+ timestamp->tv_sec = time / 1000000;
+ timestamp->tv_nsec = (time % 1000000)*1000;
+
+exit:
+ return ret;
+}
+#else
+int audio_extn_utils_compress_get_dsp_presentation_pos(struct stream_out *out __unused,
+ uint64_t *frames __unused, struct timespec *timestamp __unused,
+ int32_t clock_id __unused)
+{
+ ALOGD("%s:: dsp presentation position not supported", __func__);
+ return 0;
+
+}
+#endif
+
+#ifdef SNDRV_PCM_IOCTL_DSP_POSITION
+int audio_extn_utils_pcm_get_dsp_presentation_pos(struct stream_out *out,
+ uint64_t *frames, struct timespec *timestamp, int32_t clock_id)
+{
+ int ret = -EINVAL;
+ uint64_t time = 0;
+ struct snd_pcm_prsnt_position prsnt_position;
+
+ ALOGV("%s:: Quering DSP position with clock id %d",__func__, clock_id);
+ prsnt_position.clock_id = clock_id;
+ ret = pcm_ioctl(out->pcm, SNDRV_PCM_IOCTL_DSP_POSITION, &prsnt_position);
+ if (ret) {
+ ALOGE("%s::error %d", __func__, ret);
+ ret = -EIO;
+ goto exit;
+ }
+
+ *frames = prsnt_position.frames;
+ time = prsnt_position.timestamp;
+ timestamp->tv_sec = time / 1000000;
+ timestamp->tv_nsec = (time % 1000000)*1000;
+
+exit:
+ return ret;
+}
+#else
+int audio_extn_utils_pcm_get_dsp_presentation_pos(struct stream_out *out __unused,
+ uint64_t *frames __unused, struct timespec *timestamp __unused,
+ int32_t clock_id __unused)
+{
+ ALOGD("%s:: dsp presentation position not supported", __func__);
+ return 0;
+
+}
+#endif
+
#define MAX_SND_CARD 8
#define RETRY_US 1000000
#define RETRY_NUMBER 40
@@ -2752,3 +2838,31 @@
return mixer_ctl_set_array(ctl, gain_cfg,
sizeof(gain_cfg)/sizeof(gain_cfg[0]));
}
+
+int audio_extn_utils_is_vendor_enhanced_fwk()
+{
+ static int is_running_with_enhanced_fwk = -EINVAL;
+
+ if (is_running_with_enhanced_fwk == -EINVAL) {
+ vndk_fwk_lib_handle = dlopen(VNDK_FWK_LIB_PATH, RTLD_NOW);
+ if (vndk_fwk_lib_handle != NULL) {
+ vndk_fwk_isVendorEnhancedFwk = (vndk_fwk_isVendorEnhancedFwk_t)
+ dlsym(vndk_fwk_lib_handle, "isRunningWithVendorEnhancedFramework");
+ if (vndk_fwk_isVendorEnhancedFwk == NULL) {
+ ALOGW("%s: dlsym failed, defaulting to enhanced_fwk configuration",
+ __func__);
+ is_running_with_enhanced_fwk = 1;
+ } else {
+ is_running_with_enhanced_fwk = vndk_fwk_isVendorEnhancedFwk();
+ }
+ dlclose(vndk_fwk_lib_handle);
+ vndk_fwk_lib_handle = NULL;
+ } else {
+ ALOGW("%s: VNDK_FWK_LIB not found, setting stock configuration", __func__);
+ is_running_with_enhanced_fwk = 0;
+ }
+ ALOGV("%s: vndk_fwk_isVendorEnhancedFwk=%d", __func__, is_running_with_enhanced_fwk);
+ }
+
+ return is_running_with_enhanced_fwk;
+}
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 9f90d93..9691ce8 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -69,13 +69,12 @@
#include <audio_effects/effect_ns.h>
#include <audio_utils/format.h>
#include "audio_hw.h"
+#include "audio_perf.h"
#include "platform_api.h"
#include <platform.h>
#include "audio_extn.h"
#include "voice_extn.h"
#include "ip_hdlr_intf.h"
-#include "audio_feature_manager.h"
-#include "audio_extn/audiozoom.h"
#include "sound/compress_params.h"
#include "sound/asound.h"
@@ -584,14 +583,19 @@
adev->adm_request_focus(adev->adm_data, out->handle);
}
-static void request_in_focus(struct stream_in *in, long ns)
+static int request_in_focus(struct stream_in *in, long ns)
{
struct audio_device *adev = in->dev;
+ int ret = 0;
- if (adev->adm_request_focus_v2)
+ if (adev->adm_request_focus_v2_1)
+ ret = adev->adm_request_focus_v2_1(adev->adm_data, in->capture_handle, ns);
+ else if (adev->adm_request_focus_v2)
adev->adm_request_focus_v2(adev->adm_data, in->capture_handle, ns);
else if (adev->adm_request_focus)
adev->adm_request_focus(adev->adm_data, in->capture_handle);
+
+ return ret;
}
static void release_out_focus(struct stream_out *out)
@@ -1069,6 +1073,8 @@
audio_extn_sound_trigger_update_stream_status(usecase, ST_EVENT_STREAM_BUSY);
audio_extn_listen_update_stream_status(usecase, LISTEN_EVENT_STREAM_BUSY);
audio_extn_utils_send_app_type_cfg(adev, usecase);
+ if (audio_extn_is_maxx_audio_enabled())
+ audio_extn_ma_set_device(usecase);
audio_extn_utils_send_audio_calibration(adev, usecase);
if ((usecase->type == PCM_PLAYBACK) && is_offload_usecase(usecase->id)) {
out = usecase->stream.out;
@@ -1077,7 +1083,10 @@
}
audio_extn_set_custom_mtmx_params(adev, usecase, true);
- strlcpy(mixer_path, use_case_table[usecase->id], MIXER_PATH_MAX_LENGTH);
+ // we shouldn't truncate mixer_path
+ ALOGW_IF(strlcpy(mixer_path, use_case_table[usecase->id], sizeof(mixer_path))
+ >= sizeof(mixer_path), "%s: truncation on mixer path", __func__);
+ // this also appends to mixer_path
platform_add_backend_name(mixer_path, snd_device, usecase);
ALOGD("%s: apply mixer and update path: %s", __func__, mixer_path);
ret = audio_route_apply_and_update_path(adev->audio_route, mixer_path);
@@ -1106,14 +1115,18 @@
snd_device = usecase->in_snd_device;
else
snd_device = usecase->out_snd_device;
- strlcpy(mixer_path, use_case_table[usecase->id], MIXER_PATH_MAX_LENGTH);
+ // we shouldn't truncate mixer_path
+ ALOGW_IF(strlcpy(mixer_path, use_case_table[usecase->id], sizeof(mixer_path))
+ >= sizeof(mixer_path), "%s: truncation on mixer path", __func__);
+ // this also appends to mixer_path
platform_add_backend_name(mixer_path, snd_device, usecase);
ALOGD("%s: reset and update mixer path: %s", __func__, mixer_path);
audio_route_reset_and_update_path(adev->audio_route, mixer_path);
audio_extn_sound_trigger_update_stream_status(usecase, ST_EVENT_STREAM_FREE);
audio_extn_listen_update_stream_status(usecase, LISTEN_EVENT_STREAM_FREE);
audio_extn_set_custom_mtmx_params(adev, usecase, false);
- if (usecase->stream.out != NULL)
+ if ((usecase->type == PCM_PLAYBACK) &&
+ (usecase->stream.out != NULL))
usecase->stream.out->pspd_coeff_sent = false;
ALOGV("%s: exit", __func__);
return 0;
@@ -1289,14 +1302,7 @@
audio_extn_a2dp_stop_playback();
else if (snd_device == SND_DEVICE_IN_BT_A2DP)
audio_extn_a2dp_stop_capture();
- else if ((snd_device == SND_DEVICE_OUT_BT_SCO_SWB) ||
- (snd_device == SND_DEVICE_IN_BT_SCO_MIC_SWB_NREC) ||
- (snd_device == SND_DEVICE_IN_BT_SCO_MIC_SWB)) {
- if ((adev->snd_dev_ref_cnt[SND_DEVICE_OUT_BT_SCO_SWB] == 0) &&
- (adev->snd_dev_ref_cnt[SND_DEVICE_IN_BT_SCO_MIC_SWB_NREC] == 0) &&
- (adev->snd_dev_ref_cnt[SND_DEVICE_IN_BT_SCO_MIC_SWB] == 0))
- audio_extn_sco_reset_configuration();
- } else if ((snd_device == SND_DEVICE_OUT_HDMI) ||
+ else if ((snd_device == SND_DEVICE_OUT_HDMI) ||
(snd_device == SND_DEVICE_OUT_DISPLAY_PORT))
adev->is_channel_status_set = false;
else if ((snd_device == SND_DEVICE_OUT_HEADPHONES) &&
@@ -1609,7 +1615,7 @@
usecase->out_snd_device,
platform_get_input_snd_device(adev->platform, uc_info->devices));
enable_audio_route(adev, usecase);
- if (usecase->id == USECASE_AUDIO_PLAYBACK_VOIP) {
+ if (usecase->stream.out && usecase->id == USECASE_AUDIO_PLAYBACK_VOIP) {
out_set_voip_volume(&usecase->stream.out->stream,
usecase->stream.out->volume_l,
usecase->stream.out->volume_r);
@@ -1666,6 +1672,10 @@
((uc_info->devices & backend_check_cond) &&
(((usecase->devices & ~AUDIO_DEVICE_BIT_IN) & AUDIO_DEVICE_IN_ALL_CODEC_BACKEND) ||
(usecase->type == VOIP_CALL))) &&
+ ((uc_info->type == VOICE_CALL &&
+ usecase->devices == AUDIO_DEVICE_IN_VOICE_CALL) ||
+ platform_check_backends_match(snd_device,\
+ usecase->in_snd_device)) &&
(usecase->id != USECASE_AUDIO_SPKR_CALIB_TX)) {
ALOGV("%s: Usecase (%s) is active on (%s) - disabling ..",
__func__, use_case_table[usecase->id],
@@ -1832,27 +1842,40 @@
if (channels > MAX_HIFI_CHANNEL_COUNT)
channels = MAX_HIFI_CHANNEL_COUNT;
- channel_count = DEFAULT_CHANNEL_COUNT;
-
if (is_playback) {
- // For playback we never report mono because the framework always outputs stereo
- // audio_channel_out_mask_from_count() does return positional masks for channel counts
- // above 2 but we want indexed masks here.
- supported_channel_masks[num_masks++] = audio_channel_out_mask_from_count(channel_count);
- } else {
- // audio_channel_in_mask_from_count() does the right conversion to either positional or
- // indexed mask
- supported_channel_masks[num_masks++] = audio_channel_in_mask_from_count(channel_count);
- }
-
- for (channel_count = channels; ((channel_count >= DEFAULT_CHANNEL_COUNT) &&
- (num_masks < max_masks)); channel_count--) {
+ // start from 2 channels as framework currently doesn't support mono.
+ if (channels >= FCC_2) {
+ supported_channel_masks[num_masks++] = audio_channel_out_mask_from_count(FCC_2);
+ }
+ for (channel_count = FCC_2;
+ channel_count <= channels && num_masks < max_masks;
+ ++channel_count) {
supported_channel_masks[num_masks++] =
audio_channel_mask_for_index_assignment_from_count(channel_count);
+ }
+ } else {
+ // For capture we report all supported channel masks from 1 channel up.
+ channel_count = MIN_CHANNEL_COUNT;
+ // audio_channel_in_mask_from_count() does the right conversion to either positional or
+ // indexed mask
+ for ( ; channel_count <= channels && num_masks < max_masks; channel_count++) {
+ audio_channel_mask_t mask = AUDIO_CHANNEL_NONE;
+ if (channel_count <= FCC_2) {
+ mask = audio_channel_in_mask_from_count(channel_count);
+ supported_channel_masks[num_masks++] = mask;
+ }
+ const audio_channel_mask_t index_mask =
+ audio_channel_mask_for_index_assignment_from_count(channel_count);
+ if (mask != index_mask && num_masks < max_masks) { // ensure index mask added.
+ supported_channel_masks[num_masks++] = index_mask;
+ }
+ }
}
- ALOGV("%s: %s supported ch %d supported_channel_masks[0] %08x num_masks %d", __func__,
- is_playback ? "P" : "C", channels, supported_channel_masks[0], num_masks);
+ for (size_t i = 0; i < num_masks; ++i) {
+ ALOGV("%s: %s supported ch %d supported_channel_masks[%zu] %08x num_masks %d", __func__,
+ is_playback ? "P" : "C", channels, i, supported_channel_masks[i], num_masks);
+ }
return num_masks;
}
@@ -2258,7 +2281,8 @@
(usecase->devices & AUDIO_DEVICE_OUT_ALL_CODEC_BACKEND)) ||
((vc_usecase->devices & AUDIO_DEVICE_OUT_ALL_CODEC_BACKEND) &&
(usecase->devices & AUDIO_DEVICE_IN_ALL_CODEC_BACKEND)) ||
- (usecase->devices == AUDIO_DEVICE_IN_VOICE_CALL))) {
+ (vc_usecase->devices == AUDIO_DEVICE_OUT_HEARING_AID) ||
+ (usecase->devices == AUDIO_DEVICE_IN_VOICE_CALL))) {
in_snd_device = vc_usecase->in_snd_device;
out_snd_device = vc_usecase->out_snd_device;
}
@@ -2335,6 +2359,10 @@
platform_set_echo_reference(adev, false, AUDIO_DEVICE_NONE);
} else if (usecase->id == USECASE_AUDIO_RECORD_AFE_PROXY) {
out_device = AUDIO_DEVICE_OUT_TELEPHONY_TX;
+ } else {
+ /* forcing speaker o/p device to get matching i/p pair
+ in case o/p is not routed from same primary HAL */
+ out_device = AUDIO_DEVICE_OUT_SPEAKER;
}
in_snd_device = platform_get_input_snd_device(adev->platform, out_device);
}
@@ -2558,7 +2586,7 @@
}
}
- if (usecase == voip_usecase) {
+ if (usecase->type != PCM_CAPTURE && usecase == voip_usecase) {
struct stream_out *voip_out = voip_usecase->stream.out;
audio_extn_utils_send_app_type_gain(adev,
voip_out->app_type_cfg.app_type,
@@ -2684,6 +2712,7 @@
uc_info->out_snd_device = SND_DEVICE_NONE;
list_add_tail(&adev->usecase_list, &uc_info->list);
+ audio_streaming_hint_start();
audio_extn_perf_lock_acquire(&adev->perf_lock_handle, 0,
adev->perf_lock_opts,
adev->perf_lock_opts_size);
@@ -2786,14 +2815,17 @@
audio_extn_audiozoom_set_microphone_field_dimension(in, in->direction);
done_open:
+ audio_streaming_hint_end();
audio_extn_perf_lock_release(&adev->perf_lock_handle);
ALOGD("%s: exit", __func__);
enable_gcov();
return ret;
error_open:
+ audio_streaming_hint_end();
audio_extn_perf_lock_release(&adev->perf_lock_handle);
stop_input_stream(in);
+
error_config:
adev->active_input = get_next_active_input(adev);
/*
@@ -2968,6 +3000,8 @@
ALOGV("%s", __func__);
lock_output_stream(out);
+ out->offload_state = OFFLOAD_STATE_IDLE;
+ out->playback_started = 0;
for (;;) {
struct offload_cmd *cmd = NULL;
stream_callback_event_t event;
@@ -3136,6 +3170,9 @@
if (adev->offload_effects_stop_output != NULL)
adev->offload_effects_stop_output(out->handle, out->pcm_device_id);
+ } else if (out->usecase == USECASE_AUDIO_PLAYBACK_ULL ||
+ out->usecase == USECASE_AUDIO_PLAYBACK_MMAP) {
+ audio_low_latency_hint_end();
}
if (out->usecase == USECASE_INCALL_MUSIC_UPLINK)
@@ -3186,13 +3223,19 @@
ALOGE("%s: audio_extn_ip_hdlr_intf_close failed %d",__func__, ret);
}
+ /* 1) media + voip output routing to handset must route media back to
+ speaker when voip stops.
+ 2) trigger voip input to reroute when voip output changes to
+ hearing aid. */
if (has_voip_usecase ||
out->devices & AUDIO_DEVICE_OUT_SPEAKER_SAFE) {
struct listnode *node;
struct audio_usecase *usecase;
list_for_each(node, &adev->usecase_list) {
usecase = node_to_item(node, struct audio_usecase, list);
- if (usecase->type == PCM_CAPTURE || usecase == uc_info)
+ if ((usecase->type == PCM_CAPTURE &&
+ usecase->id != USECASE_AUDIO_RECORD_VOIP)
+ || usecase == uc_info)
continue;
ALOGD("%s: select_devices at usecase(%d: %s) after removing the usecase(%d: %s)",
@@ -3339,6 +3382,7 @@
list_add_tail(&adev->usecase_list, &uc_info->list);
+ audio_streaming_hint_start();
audio_extn_perf_lock_acquire(&adev->perf_lock_handle, 0,
adev->perf_lock_opts,
adev->perf_lock_opts_size);
@@ -3441,6 +3485,11 @@
&(adev->haptics_config));
// failure to open haptics pcm shouldnt stop audio,
// so do not close audio pcm in case of error
+
+ if (property_get_bool("vendor.audio.enable_haptic_audio_sync", false)) {
+ ALOGD("%s: enable haptic audio synchronization", __func__);
+ platform_set_qtime(adev->platform, out->pcm_device_id, adev->haptic_pcm_device_id);
+ }
}
if (!out->realtime)
@@ -3532,10 +3581,15 @@
goto error_open;
}
}
-
+ audio_streaming_hint_end();
audio_extn_perf_lock_release(&adev->perf_lock_handle);
ALOGD("%s: exit", __func__);
+ if (out->usecase == USECASE_AUDIO_PLAYBACK_ULL ||
+ out->usecase == USECASE_AUDIO_PLAYBACK_MMAP) {
+ audio_low_latency_hint_start();
+ }
+
if (out->ip_hdlr_handle) {
ret = audio_extn_ip_hdlr_intf_open(out->ip_hdlr_handle, true, out, out->usecase);
if (ret < 0)
@@ -3557,6 +3611,7 @@
pcm_close(adev->haptic_pcm);
adev->haptic_pcm = NULL;
}
+ audio_streaming_hint_end();
audio_extn_perf_lock_release(&adev->perf_lock_handle);
stop_output_stream(out);
error_config:
@@ -4175,7 +4230,8 @@
*/
if ((out->devices & AUDIO_DEVICE_OUT_ALL_A2DP) &&
(val == AUDIO_DEVICE_NONE) &&
- !audio_extn_a2dp_source_is_ready()) {
+ !audio_extn_a2dp_source_is_ready() &&
+ !adev->bt_sco_on) {
val = AUDIO_DEVICE_OUT_SPEAKER;
}
/*
@@ -4942,6 +4998,10 @@
if (alloc_haptic_buffer) {
adev->haptic_buffer = (uint8_t *)calloc(1, total_haptic_buffer_size);
+ if(adev->haptic_buffer == NULL) {
+ ALOGE("%s: failed to allocate mem for dev->haptic_buffer", __func__);
+ return -ENOMEM;
+ }
adev->haptic_buffer_size = total_haptic_buffer_size;
}
@@ -5069,6 +5129,7 @@
pthread_mutex_lock(&adev->lock);
select_devices(adev, out->usecase);
if (!audio_extn_passthru_is_supported_backend_edid_cfg(adev, out)) {
+ pthread_mutex_unlock(&adev->lock);
ret = -EINVAL;
goto exit;
}
@@ -5251,7 +5312,9 @@
__func__, frames, frame_size, bytes_to_write);
if (out->usecase == USECASE_INCALL_MUSIC_UPLINK ||
- out->usecase == USECASE_INCALL_MUSIC_UPLINK2) {
+ out->usecase == USECASE_INCALL_MUSIC_UPLINK2 ||
+ (out->usecase == USECASE_AUDIO_PLAYBACK_VOIP &&
+ !audio_extn_utils_is_vendor_enhanced_fwk())) {
size_t channel_count = audio_channel_count_from_out_mask(out->channel_mask);
int16_t *src = (int16_t *)buffer;
int16_t *dst = (int16_t *)buffer;
@@ -5708,6 +5771,17 @@
ALOGV("%s requested config.period_count = %d", __func__, config->period_count);
}
+// Read offset for the positional timestamp from a persistent vendor property.
+// This is to workaround apparent inaccuracies in the timing information that
+// is used by the AAudio timing model. The inaccuracies can cause glitches.
+static int64_t get_mmap_out_time_offset() {
+ const int32_t kDefaultOffsetMicros = 0;
+ int32_t mmap_time_offset_micros = property_get_int32(
+ "persist.vendor.audio.out_mmap_delay_micros", kDefaultOffsetMicros);
+ ALOGI("mmap_time_offset_micros = %d for output", mmap_time_offset_micros);
+ return mmap_time_offset_micros * (int64_t)1000;
+}
+
static int out_create_mmap_buffer(const struct audio_stream_out *stream,
int32_t min_size_frames,
struct audio_mmap_buffer_info *info)
@@ -5800,6 +5874,8 @@
goto exit;
}
+ out->mmap_time_offset_nanos = get_mmap_out_time_offset();
+
out->standby = false;
ret = 0;
@@ -5843,7 +5919,8 @@
ALOGE("%s: %s", __func__, pcm_get_error(out->pcm));
return ret;
}
- position->time_nanoseconds = ts.tv_sec*1000000000LL + ts.tv_nsec;
+ position->time_nanoseconds = ts.tv_sec*1000000000LL + ts.tv_nsec
+ + out->mmap_time_offset_nanos;
return 0;
}
@@ -6079,6 +6156,8 @@
adev->adm_on_routing_change(adev->adm_data,
in->capture_handle);
ret = select_devices(adev, in->usecase);
+ if (in->usecase == USECASE_AUDIO_RECORD_LOW_LATENCY)
+ adev->adm_routing_changed = true;
}
}
}
@@ -6191,7 +6270,7 @@
struct audio_device *adev = in->dev;
int ret = -1;
- size_t bytes_read = 0;
+ size_t bytes_read = 0, frame_size = 0;
lock_input_stream(in);
@@ -6212,6 +6291,12 @@
goto exit;
}
+ if (in->usecase == USECASE_AUDIO_RECORD_LOW_LATENCY &&
+ !in->standby && adev->adm_routing_changed) {
+ ret = -ENOSYS;
+ goto exit;
+ }
+
if (in->standby) {
pthread_mutex_lock(&adev->lock);
if (in->usecase == USECASE_COMPRESS_VOIP_CALL)
@@ -6234,7 +6319,9 @@
ns = pcm_bytes_to_frames(in->pcm, bytes)*1000000000LL/
in->config.rate;
- request_in_focus(in, ns);
+ ret = request_in_focus(in, ns);
+ if (ret != 0)
+ goto exit;
bool use_mmap = is_mmap_usecase(in->usecase) || in->realtime;
if (audio_extn_cin_attached_usecase(in->usecase)) {
@@ -6283,6 +6370,10 @@
memset(buffer, 0, bytes);
exit:
+ frame_size = audio_stream_in_frame_size(stream);
+ if (frame_size > 0)
+ in->frames_read += bytes_read/frame_size;
+
if (-ENETRESET == ret)
in->card_status = CARD_STATUS_OFFLINE;
pthread_mutex_unlock(&in->lock);
@@ -6299,6 +6390,8 @@
memset(buffer, 0, bytes);
}
in_standby(&in->stream.common);
+ if (in->usecase == USECASE_AUDIO_RECORD_LOW_LATENCY)
+ adev->adm_routing_changed = false;
ALOGV("%s: read failed status %d- sleeping for buffer duration", __func__, ret);
usleep((uint64_t)bytes * 1000000 / audio_stream_in_frame_size(stream) /
in_get_sample_rate(&in->stream.common));
@@ -6487,6 +6580,17 @@
return ret;
}
+// Read offset for the positional timestamp from a persistent vendor property.
+// This is to workaround apparent inaccuracies in the timing information that
+// is used by the AAudio timing model. The inaccuracies can cause glitches.
+static int64_t in_get_mmap_time_offset() {
+ const int32_t kDefaultOffsetMicros = 0;
+ int32_t mmap_time_offset_micros = property_get_int32(
+ "persist.vendor.audio.in_mmap_delay_micros", kDefaultOffsetMicros);
+ ALOGI("mmap_time_offset_micros = %d for input", mmap_time_offset_micros);
+ return mmap_time_offset_micros * (int64_t)1000;
+}
+
static int in_create_mmap_buffer(const struct audio_stream_in *stream,
int32_t min_size_frames,
struct audio_mmap_buffer_info *info)
@@ -6582,6 +6686,8 @@
goto exit;
}
+ in->mmap_time_offset_nanos = in_get_mmap_time_offset();
+
in->standby = false;
ret = 0;
@@ -6622,7 +6728,8 @@
ALOGE("%s: %s", __func__, pcm_get_error(in->pcm));
return ret;
}
- position->time_nanoseconds = ts.tv_sec*1000000000LL + ts.tv_nsec;
+ position->time_nanoseconds = ts.tv_sec*1000000000LL + ts.tv_nsec
+ + in->mmap_time_offset_nanos;
return 0;
}
@@ -6722,7 +6829,8 @@
(devices != AUDIO_DEVICE_OUT_USB_ACCESSORY);
bool direct_dev = is_hdmi || is_usb_dev;
bool use_db_as_primary =
- audio_feature_manager_is_feature_enabled(USE_DEEP_BUFFER_AS_PRIMARY_OUTPUT);
+ property_get_bool("vendor.audio.feature.deepbuffer_as_primary.enable",
+ false);
bool force_haptic_path =
property_get_bool("vendor.audio.test_haptic", false);
bool is_voip_rx = flags & AUDIO_OUTPUT_FLAG_VOIP_RX;
@@ -6868,7 +6976,8 @@
if (!voice_extn_is_compress_voip_supported()) {
if (out->sample_rate == 8000 || out->sample_rate == 16000 ||
out->sample_rate == 32000 || out->sample_rate == 48000) {
- out->channel_mask = AUDIO_CHANNEL_OUT_MONO;
+ out->channel_mask = audio_extn_utils_is_vendor_enhanced_fwk() ?
+ AUDIO_CHANNEL_OUT_MONO : AUDIO_CHANNEL_OUT_STEREO;
out->usecase = USECASE_AUDIO_PLAYBACK_VOIP;
out->format = AUDIO_FORMAT_PCM_16_BIT;
@@ -7601,6 +7710,8 @@
int ret;
int status = 0;
bool a2dp_reconfig = false;
+ struct listnode *node;
+ struct audio_usecase *usecase = NULL;
ALOGD("%s: enter: %s", __func__, kvpairs);
parms = str_parms_create_str(kvpairs);
@@ -7608,16 +7719,31 @@
if (!parms)
goto error;
+ pthread_mutex_lock(&adev->lock);
ret = str_parms_get_str(parms, "BT_SCO", value, sizeof(value));
if (ret >= 0) {
/* When set to false, HAL should disable EC and NS */
- if (strcmp(value, AUDIO_PARAMETER_VALUE_ON) == 0)
+ if (strcmp(value, AUDIO_PARAMETER_VALUE_ON) == 0){
adev->bt_sco_on = true;
- else
+ } else {
+ ALOGD("sco is off, reset sco and route device to handset/mic");
adev->bt_sco_on = false;
+ audio_extn_sco_reset_configuration();
+ list_for_each(node, &adev->usecase_list) {
+ usecase = node_to_item(node, struct audio_usecase, list);
+ if ((usecase->type == PCM_PLAYBACK) && usecase->stream.out &&
+ (usecase->stream.out->devices & AUDIO_DEVICE_OUT_ALL_SCO))
+ usecase->stream.out->devices = AUDIO_DEVICE_OUT_EARPIECE;
+ else if ((usecase->type == PCM_CAPTURE) && usecase->stream.in &&
+ (usecase->stream.in->device & AUDIO_DEVICE_IN_ALL_SCO))
+ usecase->stream.in->device = AUDIO_DEVICE_IN_BUILTIN_MIC;
+ else
+ continue;
+ select_devices(adev, usecase->id);
+ }
+ }
}
- pthread_mutex_lock(&adev->lock);
status = voice_set_parameters(adev, parms);
if (status != 0)
goto done;
@@ -7643,34 +7769,39 @@
adev->screen_off = true;
}
- if(!audio_extn_is_maxx_audio_enabled()) {
- ret = str_parms_get_int(parms, "rotation", &val);
- if (ret >= 0) {
- bool reverse_speakers = false;
- switch(val) {
- // FIXME: note that the code below assumes that the speakers are
- // in the correct placement relative to the user when the device
- // is rotated 90deg from its default rotation. This assumption
- // is device-specific, not platform-specific like this code.
- case 270:
- reverse_speakers = true;
- break;
- case 0:
- case 90:
- case 180:
- break;
- default:
- ALOGE("%s: unexpected rotation of %d", __func__, val);
- status = -EINVAL;
- }
- if (status == 0) {
- // check and set swap
- // - check if orientation changed and speaker active
- // - set rotation and cache the rotation value
- platform_check_and_set_swap_lr_channels(adev, reverse_speakers);
- }
+ ret = str_parms_get_int(parms, "rotation", &val);
+ if (ret >= 0) {
+ bool reverse_speakers = false;
+ int camera_rotation = CAMERA_ROTATION_LANDSCAPE;
+ switch (val) {
+ // FIXME: note that the code below assumes that the speakers are in the correct placement
+ // relative to the user when the device is rotated 90deg from its default rotation. This
+ // assumption is device-specific, not platform-specific like this code.
+ case 270:
+ reverse_speakers = true;
+ camera_rotation = CAMERA_ROTATION_INVERT_LANDSCAPE;
+ break;
+ case 0:
+ case 180:
+ camera_rotation = CAMERA_ROTATION_PORTRAIT;
+ break;
+ case 90:
+ camera_rotation = CAMERA_ROTATION_LANDSCAPE;
+ break;
+ default:
+ ALOGE("%s: unexpected rotation of %d", __func__, val);
+ status = -EINVAL;
}
- }
+ if (status == 0) {
+ // check and set swap
+ // - check if orientation changed and speaker active
+ // - set rotation and cache the rotation value
+ adev->camera_orientation =
+ (adev->camera_orientation & ~CAMERA_ROTATION_MASK) | camera_rotation;
+ if (!audio_extn_is_maxx_audio_enabled())
+ platform_check_and_set_swap_lr_channels(adev, reverse_speakers);
+ }
+ }
ret = str_parms_get_str(parms, AUDIO_PARAMETER_KEY_BT_SCO_WB, value, sizeof(value));
if (ret >= 0) {
@@ -7749,7 +7880,7 @@
struct listnode *node;
list_for_each(node, &adev->usecase_list) {
usecase = node_to_item(node, struct audio_usecase, list);
- if ((usecase->type == PCM_PLAYBACK) &&
+ if (usecase->stream.out && (usecase->type == PCM_PLAYBACK) &&
(usecase->devices & AUDIO_DEVICE_OUT_ALL_A2DP)){
ALOGD("reconfigure a2dp... forcing device switch");
@@ -7782,6 +7913,32 @@
}
}
+ //FIXME: to be replaced by proper video capture properties API
+ ret = str_parms_get_str(parms, AUDIO_PARAMETER_KEY_CAMERA_FACING, value, sizeof(value));
+ if (ret >= 0) {
+ int camera_facing = CAMERA_FACING_BACK;
+ if (strcmp(value, AUDIO_PARAMETER_VALUE_FRONT) == 0)
+ camera_facing = CAMERA_FACING_FRONT;
+ else if (strcmp(value, AUDIO_PARAMETER_VALUE_BACK) == 0)
+ camera_facing = CAMERA_FACING_BACK;
+ else {
+ ALOGW("%s: invalid camera facing value: %s", __func__, value);
+ goto done;
+ }
+ adev->camera_orientation =
+ (adev->camera_orientation & ~CAMERA_FACING_MASK) | camera_facing;
+ struct audio_usecase *usecase;
+ struct listnode *node;
+ list_for_each(node, &adev->usecase_list) {
+ usecase = node_to_item(node, struct audio_usecase, list);
+ struct stream_in *in = usecase->stream.in;
+ if (usecase->type == PCM_CAPTURE && in != NULL &&
+ in->source == AUDIO_SOURCE_CAMCORDER && !in->standby) {
+ select_devices(adev, in->usecase);
+ }
+ }
+ }
+
audio_extn_set_parameters(adev, parms);
done:
str_parms_destroy(parms);
@@ -7909,7 +8066,9 @@
if (adev->mode != mode) {
ALOGD("%s: mode %d\n", __func__, mode);
adev->mode = mode;
- if ((mode == AUDIO_MODE_NORMAL) && voice_is_in_call(adev)) {
+ if (voice_is_in_call(adev) &&
+ (mode == AUDIO_MODE_NORMAL ||
+ (mode == AUDIO_MODE_IN_COMMUNICATION && !voice_is_call_state_active(adev)))) {
list_for_each(node, &adev->usecase_list) {
usecase = node_to_item(node, struct audio_usecase, list);
if (usecase->type == VOICE_CALL)
@@ -8078,6 +8237,10 @@
devices,
flags,
source);
+ ALOGV("%s: enter: flags %#x, is_usb_dev %d, may_use_hifi_record %d,"
+ " sample_rate %u, channel_mask %#x, format %#x",
+ __func__, flags, is_usb_dev, may_use_hifi_record,
+ config->sample_rate, config->channel_mask, config->format);
if (is_usb_dev && (!audio_extn_usb_connected(NULL))) {
is_usb_dev = false;
@@ -8148,7 +8311,7 @@
in->direction = MIC_DIRECTION_UNSPECIFIED;
in->zoom = 0;
- ALOGV("%s: source = %d, config->channel_mask = %d", __func__, source, config->channel_mask);
+ ALOGV("%s: source %d, config->channel_mask %#x", __func__, source, config->channel_mask);
if (source == AUDIO_SOURCE_VOICE_UPLINK ||
source == AUDIO_SOURCE_VOICE_DOWNLINK) {
/* Force channel config requested to mono if incall
@@ -8160,13 +8323,6 @@
}
}
- /* Update config params with the requested sample rate and channels */
- if ((in->device == AUDIO_DEVICE_IN_TELEPHONY_RX) &&
- (adev->mode != AUDIO_MODE_IN_CALL)) {
- ret = -EINVAL;
- goto err_open;
- }
-
if (is_usb_dev && may_use_hifi_record) {
/* HiFi record selects an appropriate format, channel, rate combo
depending on sink capabilities*/
@@ -8749,6 +8905,8 @@
pthread_mutex_lock(&adev_init_lock);
if ((--audio_device_ref_count) == 0) {
+ if (audio_extn_spkr_prot_is_enabled())
+ audio_extn_spkr_prot_deinit();
audio_extn_snd_mon_unregister_listener(adev);
audio_extn_sound_trigger_deinit(adev);
audio_extn_listen_deinit(adev);
@@ -9004,8 +9162,9 @@
adev->bt_sco_on = false;
/* adev->cur_hdmi_channels = 0; by calloc() */
adev->snd_dev_ref_cnt = calloc(SND_DEVICE_MAX, sizeof(int));
- /* Init audio feature manager */
- audio_feature_manager_init();
+ /* Init audio and voice feature */
+ audio_extn_feature_init();
+ voice_extn_feature_init();
voice_init(adev);
list_init(&adev->usecase_list);
list_init(&adev->active_inputs_list);
@@ -9020,6 +9179,7 @@
adev->dsp_bit_width_enforce_mode = 0;
adev->enable_hfp = false;
adev->use_old_pspd_mix_ctrl = false;
+ adev->adm_routing_changed = false;
/* Loads platform specific libraries dynamically */
adev->platform = platform_init(adev);
@@ -9131,6 +9291,8 @@
dlsym(adev->adm_lib, "adm_is_noirq_avail");
adev->adm_on_routing_change = (adm_on_routing_change_t)
dlsym(adev->adm_lib, "adm_on_routing_change");
+ adev->adm_request_focus_v2_1 = (adm_request_focus_v2_1_t)
+ dlsym(adev->adm_lib, "adm_request_focus_v2_1");
}
}
@@ -9177,6 +9339,8 @@
adev->mic_break_enabled = property_get_bool("vendor.audio.mic_break", false);
+ adev->camera_orientation = CAMERA_DEFAULT;
+
if ((property_get("vendor.audio_hal.period_multiplier",value,NULL) > 0) ||
(property_get("audio_hal.period_multiplier",value,NULL) > 0)) {
af_period_multiplier = atoi(value);
diff --git a/hal/audio_hw.h b/hal/audio_hw.h
index 1a04cff..9a93ed7 100644
--- a/hal/audio_hw.h
+++ b/hal/audio_hw.h
@@ -245,6 +245,33 @@
OFFLOAD_CMD_ERROR, /* offload playback hit some error */
};
+/*
+ * Camera selection indicated via set_parameters "cameraFacing=front|back and
+ * "rotation=0|90|180|270""
+ */
+enum {
+ CAMERA_FACING_BACK = 0x0,
+ CAMERA_FACING_FRONT = 0x1,
+ CAMERA_FACING_MASK = 0x0F,
+ CAMERA_ROTATION_LANDSCAPE = 0x0,
+ CAMERA_ROTATION_INVERT_LANDSCAPE = 0x10,
+ CAMERA_ROTATION_PORTRAIT = 0x20,
+ CAMERA_ROTATION_MASK = 0xF0,
+ CAMERA_BACK_LANDSCAPE = (CAMERA_FACING_BACK|CAMERA_ROTATION_LANDSCAPE),
+ CAMERA_BACK_INVERT_LANDSCAPE = (CAMERA_FACING_BACK|CAMERA_ROTATION_INVERT_LANDSCAPE),
+ CAMERA_BACK_PORTRAIT = (CAMERA_FACING_BACK|CAMERA_ROTATION_PORTRAIT),
+ CAMERA_FRONT_LANDSCAPE = (CAMERA_FACING_FRONT|CAMERA_ROTATION_LANDSCAPE),
+ CAMERA_FRONT_INVERT_LANDSCAPE = (CAMERA_FACING_FRONT|CAMERA_ROTATION_INVERT_LANDSCAPE),
+ CAMERA_FRONT_PORTRAIT = (CAMERA_FACING_FRONT|CAMERA_ROTATION_PORTRAIT),
+
+ CAMERA_DEFAULT = CAMERA_BACK_LANDSCAPE,
+};
+
+//FIXME: to be replaced by proper video capture properties API
+#define AUDIO_PARAMETER_KEY_CAMERA_FACING "cameraFacing"
+#define AUDIO_PARAMETER_VALUE_FRONT "front"
+#define AUDIO_PARAMETER_VALUE_BACK "back"
+
enum {
OFFLOAD_STATE_IDLE,
OFFLOAD_STATE_PLAYING,
@@ -317,6 +344,7 @@
uint32_t supported_sample_rates[MAX_SUPPORTED_SAMPLE_RATES+1];
bool muted;
uint64_t written; /* total frames written, not cleared when entering standby */
+ int64_t mmap_time_offset_nanos; /* fudge factor to correct inaccuracies in DSP */
audio_io_handle_t handle;
struct stream_app_type_cfg app_type_cfg;
@@ -396,6 +424,7 @@
bool enable_aec;
bool enable_ns;
audio_format_t format;
+ int64_t mmap_time_offset_nanos; /* fudge factor to correct inaccuracies in DSP */
audio_io_handle_t capture_handle;
audio_input_flags_t flags;
char profile[MAX_STREAM_PROFILE_STR_LEN];
@@ -502,9 +531,11 @@
typedef void (*adm_request_focus_v2_t)(void *, audio_io_handle_t, long);
typedef bool (*adm_is_noirq_avail_t)(void *, int, int, int);
typedef void (*adm_on_routing_change_t)(void *, audio_io_handle_t);
+typedef int (*adm_request_focus_v2_1_t)(void *, audio_io_handle_t, long);
struct audio_device {
struct audio_hw_device device;
+
pthread_mutex_t lock; /* see note below on mutex acquisition order */
pthread_mutex_t cal_lock;
struct mixer *mixer;
@@ -570,6 +601,7 @@
adm_request_focus_v2_t adm_request_focus_v2;
adm_is_noirq_avail_t adm_is_noirq_avail;
adm_on_routing_change_t adm_on_routing_change;
+ adm_request_focus_v2_1_t adm_request_focus_v2_1;
void (*offload_effects_get_parameters)(struct str_parms *,
struct str_parms *);
@@ -609,6 +641,8 @@
struct listnode active_inputs_list;
struct listnode active_outputs_list;
bool use_old_pspd_mix_ctrl;
+ int camera_orientation; /* CAMERA_BACK_LANDSCAPE ... CAMERA_FRONT_PORTRAIT */
+ bool adm_routing_changed;
};
int select_devices(struct audio_device *adev,
diff --git a/hal/audio_perf.cpp b/hal/audio_perf.cpp
new file mode 100644
index 0000000..671a324
--- /dev/null
+++ b/hal/audio_perf.cpp
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "audio_hw_primary"
+
+#include <cinttypes>
+
+#include <utils/Log.h>
+#include <utils/Mutex.h>
+
+#include <android/hardware/power/1.2/IPower.h>
+
+#include "audio_perf.h"
+
+using android::hardware::power::V1_2::IPower;
+using android::hardware::power::V1_2::PowerHint;
+using android::hardware::power::V1_2::toString;
+using android::hardware::Return;
+using android::hardware::Void;
+using android::hardware::hidl_death_recipient;
+using android::hidl::base::V1_0::IBase;
+
+// Do not use gPowerHAL, use getPowerHal to retrieve a copy instead
+static android::sp<IPower> gPowerHal_ = nullptr;
+// Protect gPowerHal_
+static std::mutex gPowerHalMutex;
+
+// PowerHalDeathRecipient to invalid the client when service dies
+struct PowerHalDeathRecipient : virtual public hidl_death_recipient {
+ // hidl_death_recipient interface
+ virtual void serviceDied(uint64_t, const android::wp<IBase>&) override {
+ std::lock_guard<std::mutex> lock(gPowerHalMutex);
+ ALOGE("PowerHAL just died");
+ gPowerHal_ = nullptr;
+ }
+};
+
+// Retrieve a copy of client
+static android::sp<IPower> getPowerHal() {
+ std::lock_guard<std::mutex> lock(gPowerHalMutex);
+ static android::sp<PowerHalDeathRecipient> gPowerHalDeathRecipient = nullptr;
+ static bool gPowerHalExists = true;
+
+ if (gPowerHalExists && gPowerHal_ == nullptr) {
+ gPowerHal_ = IPower::getService();
+
+ if (gPowerHal_ == nullptr) {
+ ALOGE("Unable to get Power service");
+ gPowerHalExists = false;
+ } else {
+ if (gPowerHalDeathRecipient == nullptr) {
+ gPowerHalDeathRecipient = new PowerHalDeathRecipient();
+ }
+ Return<bool> linked = gPowerHal_->linkToDeath(
+ gPowerHalDeathRecipient, 0 /* cookie */);
+ if (!linked.isOk()) {
+ ALOGE("Transaction error in linking to PowerHAL death: %s",
+ linked.description().c_str());
+ gPowerHal_ = nullptr;
+ } else if (!linked) {
+ ALOGW("Unable to link to PowerHal death notifications");
+ gPowerHal_ = nullptr;
+ } else {
+ ALOGD("Connect to PowerHAL and link to death "
+ "notification successfully");
+ }
+ }
+ }
+ return gPowerHal_;
+}
+
+static bool powerHint(PowerHint hint, int32_t data) {
+ android::sp<IPower> powerHal = getPowerHal();
+ if (powerHal == nullptr) {
+ return false;
+ }
+
+ auto ret = powerHal->powerHintAsync_1_2(hint, data);
+
+ if (!ret.isOk()) {
+ ALOGE("powerHint failed, hint: %s, data: %" PRId32 ", error: %s",
+ toString(hint).c_str(),
+ data,
+ ret.description().c_str());
+ }
+ return ret.isOk();
+}
+
+int audio_streaming_hint_start() {
+ return powerHint(PowerHint::AUDIO_STREAMING, 1);
+}
+
+int audio_streaming_hint_end() {
+ return powerHint(PowerHint::AUDIO_STREAMING, 0);
+}
+
+int audio_low_latency_hint_start() {
+ return powerHint(PowerHint::AUDIO_LOW_LATENCY, 1);
+}
+
+int audio_low_latency_hint_end() {
+ return powerHint(PowerHint::AUDIO_LOW_LATENCY, 0);
+}
diff --git a/hal/audio_perf.h b/hal/audio_perf.h
new file mode 100644
index 0000000..b564938
--- /dev/null
+++ b/hal/audio_perf.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __QAUDIOPERF_H__
+#define __QAUDIOPERF_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int audio_streaming_hint_start();
+int audio_streaming_hint_end();
+
+int audio_low_latency_hint_start();
+int audio_low_latency_hint_end();
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif //__QAUDIOPERF_H__
diff --git a/hal/msm8916/platform.c b/hal/msm8916/platform.c
index 7b15f53..903b845 100644
--- a/hal/msm8916/platform.c
+++ b/hal/msm8916/platform.c
@@ -1993,6 +1993,10 @@
snd_card_name = mixer_get_name(my_data->adev->mixer);
snd_card_name = platform_get_snd_card_name_for_acdb_loader(snd_card_name);
+ if (!snd_card_name) {
+ ALOGE("Failed to get snd_card_name");
+ goto cleanup;
+ }
my_data->acdb_init_data.cvd_version = cvd_version;
my_data->acdb_init_data.snd_card_name = strdup(snd_card_name);
@@ -2014,6 +2018,7 @@
strlcpy(my_data->snd_card_name, snd_card_name,
MAX_SND_CARD_STRING_SIZE);
+cleanup:
if (cvd_version)
free(cvd_version);
if (!result) {
@@ -2760,7 +2765,7 @@
ALOGD("%s:DSD playback is supported", __func__);
my_data->is_dsd_supported = true;
my_data->is_asrc_supported = true;
- platform_set_native_support(NATIVE_AUDIO_MODE_MULTIPLE_44_1);
+ platform_set_native_support(NATIVE_AUDIO_MODE_MULTIPLE_MIX_IN_CODEC);
}
}
@@ -2934,8 +2939,6 @@
/* deinit usb */
audio_extn_usb_deinit();
audio_extn_dap_hal_deinit();
- if (audio_extn_spkr_prot_is_enabled())
- audio_extn_spkr_prot_deinit();
#ifdef DYNAMIC_LOG_ENABLED
log_utils_deinit();
#endif
@@ -3051,6 +3054,10 @@
{
int device_id = -1;
+ if ((usecase >= AUDIO_USECASE_MAX) || (usecase <= USECASE_INVALID)) {
+ ALOGE("%s: invalid usecase case idx %d", __func__, usecase);
+ return device_id;
+ }
if (device_type == PCM_PLAYBACK)
device_id = pcm_device_table[usecase][0];
else
@@ -3154,6 +3161,13 @@
return ret;
}
+void platform_add_external_specific_device(snd_device_t snd_device __unused,
+ const char *name __unused,
+ unsigned int acdb_id __unused)
+{
+ return;
+}
+
int platform_get_snd_device_index(char *device_name)
{
return find_index(snd_device_name_index, SND_DEVICE_MAX, device_name);
@@ -3382,12 +3396,14 @@
int platform_set_native_support(int na_mode)
{
if (NATIVE_AUDIO_MODE_SRC == na_mode || NATIVE_AUDIO_MODE_TRUE_44_1 == na_mode
- || NATIVE_AUDIO_MODE_MULTIPLE_44_1 == na_mode) {
+ || NATIVE_AUDIO_MODE_MULTIPLE_MIX_IN_CODEC == na_mode
+ || NATIVE_AUDIO_MODE_MULTIPLE_MIX_IN_DSP == na_mode) {
na_props.platform_na_prop_enabled = na_props.ui_na_prop_enabled = true;
na_props.na_mode = na_mode;
ALOGD("%s:napb: native audio playback enabled in (%s) mode", __func__,
((na_mode == NATIVE_AUDIO_MODE_SRC)?"SRC":
- (na_mode == NATIVE_AUDIO_MODE_TRUE_44_1)?"True":"Multiple"));
+ (na_mode == NATIVE_AUDIO_MODE_TRUE_44_1)?"True":
+ (na_mode == NATIVE_AUDIO_MODE_MULTIPLE_MIX_IN_CODEC)?"Multiple_Mix_Codec":"Multiple_Mix_DSP"));
} else {
na_props.platform_na_prop_enabled = false;
na_props.na_mode = NATIVE_AUDIO_MODE_INVALID;
@@ -3459,8 +3475,10 @@
mode = NATIVE_AUDIO_MODE_SRC;
else if (value && !strncmp(value, "true", sizeof("true")))
mode = NATIVE_AUDIO_MODE_TRUE_44_1;
- else if (value && !strncmp(value, "multiple", sizeof("multiple")))
- mode = NATIVE_AUDIO_MODE_MULTIPLE_44_1;
+ else if (value && !strncmp(value, "multiple_mix_codec", sizeof("multiple")))
+ mode = NATIVE_AUDIO_MODE_MULTIPLE_MIX_IN_CODEC;
+ else if (value && !strncmp(value, "multiple_mix_dsp", sizeof("multiple")))
+ mode = NATIVE_AUDIO_MODE_MULTIPLE_MIX_IN_DSP;
else {
mode = NATIVE_AUDIO_MODE_INVALID;
ALOGE("%s:napb:native_audio_mode in platform info xml,invalid mode string",
@@ -3496,7 +3514,7 @@
list_for_each(node, &(platform->adev)->usecase_list) {
usecase = node_to_item(node, struct audio_usecase, list);
- if (is_offload_usecase(usecase->id) &&
+ if (usecase->stream.out && is_offload_usecase(usecase->id) &&
(usecase->stream.out->devices & AUDIO_DEVICE_OUT_WIRED_HEADPHONE ||
usecase->stream.out->devices & AUDIO_DEVICE_OUT_WIRED_HEADSET) &&
OUTPUT_SAMPLING_RATE_44100 == usecase->stream.out->sample_rate) {
@@ -4359,7 +4377,7 @@
} else if (NATIVE_AUDIO_MODE_SRC == na_mode &&
OUTPUT_SAMPLING_RATE_44100 == sample_rate) {
snd_device = SND_DEVICE_OUT_HEADPHONES_44_1;
- } else if (NATIVE_AUDIO_MODE_MULTIPLE_44_1 == na_mode &&
+ } else if (NATIVE_AUDIO_MODE_MULTIPLE_MIX_IN_CODEC == na_mode &&
(sample_rate % OUTPUT_SAMPLING_RATE_44100 == 0) &&
(out->format != AUDIO_FORMAT_DSD)) {
snd_device = SND_DEVICE_OUT_HEADPHONES_44_1;
@@ -6428,7 +6446,7 @@
ALOGD("%s:becf: afe: true napb active set rate to 44.1 khz",
__func__);
}
- } else if (na_mode != NATIVE_AUDIO_MODE_MULTIPLE_44_1) {
+ } else if (na_mode != NATIVE_AUDIO_MODE_MULTIPLE_MIX_IN_CODEC) {
/*
* Map native sampling rates to upper limit range
* if multiple of native sampling rates are not supported.
@@ -7800,7 +7818,8 @@
list_for_each(node, &adev->usecase_list) {
usecase = node_to_item(node, struct audio_usecase, list);
- if (usecase != NULL && usecase->type == PCM_PLAYBACK) {
+ if (usecase != NULL && usecase->stream.out &&
+ usecase->type == PCM_PLAYBACK) {
int new_snd_device[2] = {0};
int i, num_devices = 1;
@@ -8299,7 +8318,7 @@
list_for_each(node, &adev->usecase_list) {
usecase = node_to_item(node, struct audio_usecase, list);
- if (usecase->type == PCM_PLAYBACK &&
+ if (usecase->stream.out && usecase->type == PCM_PLAYBACK &&
usecase->stream.out->devices & AUDIO_DEVICE_OUT_SPEAKER) {
/*
* If acdb tuning is different for SPEAKER_REVERSE, it is must
diff --git a/hal/msm8960/platform.c b/hal/msm8960/platform.c
index f21602d..e16d20a 100644
--- a/hal/msm8960/platform.c
+++ b/hal/msm8960/platform.c
@@ -423,7 +423,12 @@
int platform_get_pcm_device_id(audio_usecase_t usecase, int device_type)
{
- int device_id;
+ int device_id = -1;
+
+ if ((usecase >= AUDIO_USECASE_MAX) || (usecase <= USECASE_INVALID)) {
+ ALOGE("%s: invalid usecase case idx %d", __func__, usecase);
+ return device_id;
+ }
if (device_type == PCM_PLAYBACK)
device_id = pcm_device_table[usecase][0];
else
@@ -454,6 +459,13 @@
return -ENOSYS;
}
+void platform_add_external_specific_device(snd_device_t snd_device __unused,
+ const char *name __unused,
+ unsigned int acdb_id __unused)
+{
+ return;
+}
+
int platform_set_snd_device_bit_width(snd_device_t snd_device __unused,
unsigned int bit_width __unused)
{
diff --git a/hal/msm8974/hw_info.c b/hal/msm8974/hw_info.c
index 3ccb9fb..e77ab83 100755
--- a/hal/msm8974/hw_info.c
+++ b/hal/msm8974/hw_info.c
@@ -235,6 +235,7 @@
SND_DEVICE_OUT_HANDSET,
SND_DEVICE_OUT_VOICE_HANDSET,
SND_DEVICE_OUT_VOICE_TTY_HCO_HANDSET,
+ SND_DEVICE_IN_VOICE_HEADSET_MIC,
SND_DEVICE_IN_HANDSET_MIC,
SND_DEVICE_IN_HANDSET_MIC_AEC,
SND_DEVICE_IN_HANDSET_MIC_NS,
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index efbd0ae..949499f 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -95,6 +95,10 @@
#include <resolv.h>
+#define QTIME_FREQ_KHZ 19200
+#define IPC_ERROR_DELAY 10000
+
+#define max(a, b) ((a) > (b) ? (a) : (b))
#define min(a, b) ((a) < (b) ? (a) : (b))
#define TOSTRING_(x) #x
@@ -235,6 +239,12 @@
int acdb_id;
};
+struct external_specific_device {
+ struct listnode list;
+ char *usbid;
+ int acdb_id;
+};
+
static struct listnode operator_info_list;
static struct listnode *operator_specific_device_table[SND_DEVICE_MAX];
@@ -261,6 +271,8 @@
size_t mic_count;
};
+static struct listnode *external_specific_device_table[SND_DEVICE_MAX];
+
struct platform_data {
struct audio_device *adev;
bool fluence_in_spkr_mode;
@@ -491,6 +503,7 @@
[SND_DEVICE_OUT_VOICE_SPEAKER_2_WSA] = "wsa-voice-speaker-2",
[SND_DEVICE_OUT_VOICE_SPEAKER_2_VBAT] = "voice-speaker-2-vbat",
[SND_DEVICE_OUT_VOICE_HEADPHONES] = "voice-headphones",
+ [SND_DEVICE_OUT_VOICE_HEADSET] = "voice-headset",
[SND_DEVICE_OUT_VOICE_LINE] = "voice-line",
[SND_DEVICE_OUT_HDMI] = "hdmi",
[SND_DEVICE_OUT_SPEAKER_AND_HDMI] = "speaker-and-hdmi",
@@ -551,6 +564,7 @@
[SND_DEVICE_OUT_SPEAKER_WSA_AND_BT_SCO] = "wsa-speaker-and-bt-sco",
[SND_DEVICE_OUT_SPEAKER_WSA_AND_BT_SCO_WB] = "wsa-speaker-and-bt-sco-wb",
[SND_DEVICE_OUT_SPEAKER_WSA_AND_BT_SCO_SWB] = "wsa-speaker-and-bt-sco-wb",
+ [SND_DEVICE_OUT_VOICE_HEARING_AID] = "hearing-aid",
/* Capture sound devices */
[SND_DEVICE_IN_HANDSET_MIC] = "handset-mic",
@@ -600,7 +614,7 @@
[SND_DEVICE_IN_BT_SCO_MIC_SWB] = "bt-sco-mic-swb",
[SND_DEVICE_IN_BT_SCO_MIC_SWB_NREC] = "bt-sco-mic-swb",
[SND_DEVICE_IN_BT_A2DP] = "bt-a2dp-cap",
- [SND_DEVICE_IN_CAMCORDER_MIC] = "camcorder-mic",
+ [SND_DEVICE_IN_CAMCORDER_LANDSCAPE] = "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",
@@ -674,9 +688,15 @@
[SND_DEVICE_IN_LINE] = "line-in",
[SND_DEVICE_IN_HANDSET_6MIC] = "handset-6mic",
[SND_DEVICE_IN_HANDSET_8MIC] = "handset-8mic",
+ [SND_DEVICE_IN_CAMCORDER_INVERT_LANDSCAPE] = "camcorder-mic",
+ [SND_DEVICE_IN_CAMCORDER_PORTRAIT] = "camcorder-mic",
+ [SND_DEVICE_IN_CAMCORDER_SELFIE_LANDSCAPE] = "camcorder-mic",
+ [SND_DEVICE_IN_CAMCORDER_SELFIE_INVERT_LANDSCAPE] = "camcorder-mic",
+ [SND_DEVICE_IN_CAMCORDER_SELFIE_PORTRAIT] = "camcorder-mic",
[SND_DEVICE_OUT_VOIP_HANDSET] = "voip-handset",
[SND_DEVICE_OUT_VOIP_SPEAKER] = "voip-speaker",
[SND_DEVICE_OUT_VOIP_HEADPHONES] = "voip-headphones",
+ [SND_DEVICE_IN_VOICE_HEARING_AID] = "hearing-aid-mic",
};
// Platform specific backend bit width table
@@ -702,14 +722,14 @@
[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},
+ [GET_IN_DEVICE_INDEX(SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_SB)][EFFECT_AEC] = {TX_VOICE_FLUENCE_SM_SB, 0x8000, 0x10EAF, 0x01},
+ [GET_IN_DEVICE_INDEX(SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_SB)][EFFECT_NS] = {TX_VOICE_FLUENCE_SM_SB, 0x8000, 0x10EAF, 0x02},
+ [GET_IN_DEVICE_INDEX(SND_DEVICE_IN_SPEAKER_MIC_SB)][EFFECT_AEC] = {TX_VOICE_FLUENCE_SM_SB, 0x8000, 0x10EAF, 0x01},
+ [GET_IN_DEVICE_INDEX(SND_DEVICE_IN_SPEAKER_MIC_SB)][EFFECT_NS] = {TX_VOICE_FLUENCE_SM_SB, 0x8000, 0x10EAF, 0x02},
+ [GET_IN_DEVICE_INDEX(SND_DEVICE_IN_HANDSET_DMIC_AEC_NS_SB)][EFFECT_AEC] = {TX_VOICE_FLUENCE_SM_SB, 0x8000, 0x10EAF, 0x01},
+ [GET_IN_DEVICE_INDEX(SND_DEVICE_IN_HANDSET_DMIC_AEC_NS_SB)][EFFECT_NS] = {TX_VOICE_FLUENCE_MM_SB, 0x8000, 0x10EAF, 0x02},
+ [GET_IN_DEVICE_INDEX(SND_DEVICE_IN_HANDSET_MIC_SB)][EFFECT_AEC] = {TX_VOICE_FLUENCE_SM_SB, 0x8000, 0x10EAF, 0x01},
+ [GET_IN_DEVICE_INDEX(SND_DEVICE_IN_HANDSET_MIC_SB)][EFFECT_NS] = {TX_VOICE_FLUENCE_SM_SB, 0x8000, 0x10EAF, 0x02},
};
/* ACDB IDs (audio DSP path configuration IDs) for each sound device */
@@ -743,6 +763,7 @@
[SND_DEVICE_OUT_VOICE_SPEAKER_2_VBAT] = 14,
[SND_DEVICE_OUT_VOICE_HAC_HANDSET] = 53,
[SND_DEVICE_OUT_VOICE_HEADPHONES] = 10,
+ [SND_DEVICE_OUT_VOICE_HEADSET] = 10,
[SND_DEVICE_OUT_VOICE_LINE] = 10,
[SND_DEVICE_OUT_VOICE_SPEAKER_AND_VOICE_HEADPHONES] = 10,
[SND_DEVICE_OUT_VOICE_SPEAKER_AND_VOICE_ANC_HEADSET] = 10,
@@ -797,6 +818,7 @@
[SND_DEVICE_OUT_VOICE_SPEAKER_STEREO_PROTECTED] = 124,
[SND_DEVICE_OUT_SPEAKER_PROTECTED_RAS] = 134,
[SND_DEVICE_OUT_SPEAKER_PROTECTED_VBAT_RAS] = 134,
+ [SND_DEVICE_OUT_VOICE_HEARING_AID] = 45,
[SND_DEVICE_IN_HANDSET_MIC] = 4,
[SND_DEVICE_IN_HANDSET_MIC_SB] = 163,
[SND_DEVICE_IN_HANDSET_MIC_EXTERNAL] = 4,
@@ -845,7 +867,7 @@
[SND_DEVICE_IN_BT_SCO_MIC_SWB] = 38,
[SND_DEVICE_IN_BT_SCO_MIC_SWB_NREC] = 123,
[SND_DEVICE_IN_BT_A2DP] = 21,
- [SND_DEVICE_IN_CAMCORDER_MIC] = 4,
+ [SND_DEVICE_IN_CAMCORDER_LANDSCAPE] = 4,
[SND_DEVICE_IN_VOICE_DMIC] = 41,
[SND_DEVICE_IN_VOICE_DMIC_SB] = 167,
[SND_DEVICE_IN_VOICE_DMIC_TMUS] = 89,
@@ -918,6 +940,12 @@
[SND_DEVICE_OUT_VOIP_HANDSET] = 133,
[SND_DEVICE_OUT_VOIP_SPEAKER] = 132,
[SND_DEVICE_OUT_VOIP_HEADPHONES] = 134,
+ [SND_DEVICE_IN_CAMCORDER_INVERT_LANDSCAPE] = 4,
+ [SND_DEVICE_IN_CAMCORDER_PORTRAIT] = 4,
+ [SND_DEVICE_IN_CAMCORDER_SELFIE_LANDSCAPE] = 4,
+ [SND_DEVICE_IN_CAMCORDER_SELFIE_INVERT_LANDSCAPE] = 4,
+ [SND_DEVICE_IN_CAMCORDER_SELFIE_PORTRAIT] = 4,
+ [SND_DEVICE_IN_VOICE_HEARING_AID] = 44,
};
struct name_to_index {
@@ -956,6 +984,7 @@
{TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_SPEAKER_2_WSA)},
{TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_SPEAKER_2_VBAT)},
{TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_HEADPHONES)},
+ {TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_HEADSET)},
{TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_LINE)},
{TO_NAME_INDEX(SND_DEVICE_OUT_HDMI)},
{TO_NAME_INDEX(SND_DEVICE_OUT_SPEAKER_AND_HDMI)},
@@ -1012,6 +1041,7 @@
{TO_NAME_INDEX(SND_DEVICE_OUT_VOIP_HANDSET)},
{TO_NAME_INDEX(SND_DEVICE_OUT_VOIP_SPEAKER)},
{TO_NAME_INDEX(SND_DEVICE_OUT_VOIP_HEADPHONES)},
+ {TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_HEARING_AID)},
{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)},
@@ -1061,7 +1091,7 @@
{TO_NAME_INDEX(SND_DEVICE_IN_BT_SCO_MIC_SWB)},
{TO_NAME_INDEX(SND_DEVICE_IN_BT_SCO_MIC_SWB_NREC)},
{TO_NAME_INDEX(SND_DEVICE_IN_BT_A2DP)},
- {TO_NAME_INDEX(SND_DEVICE_IN_CAMCORDER_MIC)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_CAMCORDER_LANDSCAPE)},
{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)},
@@ -1108,6 +1138,7 @@
{TO_NAME_INDEX(SND_DEVICE_IN_HANDSET_QMIC)},
{TO_NAME_INDEX(SND_DEVICE_IN_HANDSET_QMIC_AEC)},
{TO_NAME_INDEX(SND_DEVICE_IN_SPEAKER_QMIC_AEC)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_VOICE_HEARING_AID)},
{TO_NAME_INDEX(SND_DEVICE_IN_SPEAKER_QMIC_NS)},
{TO_NAME_INDEX(SND_DEVICE_IN_SPEAKER_QMIC_AEC_NS)},
{TO_NAME_INDEX(SND_DEVICE_IN_VOICE_REC_QMIC_FLUENCE)},
@@ -1133,6 +1164,13 @@
{TO_NAME_INDEX(SND_DEVICE_IN_INCALL_REC_TX)},
{TO_NAME_INDEX(SND_DEVICE_IN_INCALL_REC_RX_TX)},
{TO_NAME_INDEX(SND_DEVICE_IN_LINE)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_CAMCORDER_INVERT_LANDSCAPE)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_CAMCORDER_PORTRAIT)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_CAMCORDER_SELFIE_LANDSCAPE)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_CAMCORDER_SELFIE_INVERT_LANDSCAPE)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_CAMCORDER_SELFIE_PORTRAIT)},
+ /* For legacy xml file parsing */
+ {TO_NAME_INDEX(SND_DEVICE_IN_CAMCORDER_MIC)},
};
static char * backend_tag_table[SND_DEVICE_MAX] = {0};
@@ -1401,6 +1439,27 @@
static pthread_once_t check_op_once_ctl = PTHREAD_ONCE_INIT;
static bool is_tmus = false;
+static bool is_usb_snd_dev(snd_device_t snd_device)
+{
+ if (snd_device < SND_DEVICE_IN_BEGIN) {
+ if (snd_device == SND_DEVICE_OUT_USB_HEADSET ||\
+ snd_device == SND_DEVICE_OUT_USB_HEADPHONES ||\
+ snd_device == SND_DEVICE_OUT_VOICE_USB_HEADPHONES ||\
+ snd_device == SND_DEVICE_OUT_VOICE_USB_HEADSET ||\
+ snd_device == SND_DEVICE_OUT_VOICE_TTY_FULL_USB ||\
+ snd_device == SND_DEVICE_OUT_VOICE_TTY_VCO_USB)
+ return true;
+ } else {
+ if (snd_device == SND_DEVICE_IN_USB_HEADSET_MIC ||\
+ snd_device == SND_DEVICE_IN_USB_HEADSET_MIC_AEC ||\
+ snd_device == SND_DEVICE_IN_VOICE_USB_HEADSET_MIC ||\
+ snd_device == SND_DEVICE_IN_UNPROCESSED_USB_HEADSET_MIC ||\
+ snd_device == SND_DEVICE_IN_VOICE_RECOG_USB_HEADSET_MIC)
+ return true;
+ }
+ return false;
+}
+
static void check_operator()
{
char value[PROPERTY_VALUE_MAX];
@@ -1489,6 +1548,30 @@
return ret;
}
+static int get_external_specific_device_acdb_id(snd_device_t snd_device)
+{
+ struct external_specific_device *ext_dev;
+ int ret = acdb_device_table[snd_device];
+ char *usbid = NULL;
+ struct listnode *node;
+
+ if (is_usb_snd_dev(snd_device))
+ usbid = audio_extn_usb_usbid();
+
+ if (usbid) {
+ list_for_each(node, external_specific_device_table[snd_device]) {
+ ext_dev = node_to_item(node, struct external_specific_device, list);
+ if (ext_dev->usbid && !strcmp(usbid, ext_dev->usbid)) {
+ ret = ext_dev->acdb_id;
+ break;
+ }
+ }
+
+ free(usbid);
+ }
+ return ret;
+}
+
static const char *get_operator_specific_device_mixer_path(snd_device_t snd_device)
{
struct operator_specific_device *device;
@@ -1608,7 +1691,8 @@
list_for_each(node, &adev->usecase_list) {
usecase = node_to_item(node, struct audio_usecase, list);
- if (usecase != NULL && usecase->type == PCM_PLAYBACK) {
+ if (usecase != NULL && usecase->stream.out &&
+ usecase->type == PCM_PLAYBACK) {
int new_snd_device[2] = {0};
int i, num_devices = 1;
@@ -1906,6 +1990,7 @@
backend_tag_table[dev] = NULL;
hw_interface_table[dev] = NULL;
operator_specific_device_table[dev] = NULL;
+ external_specific_device_table[dev] = NULL;
}
for (dev = 0; dev < SND_DEVICE_MAX; dev++) {
backend_bit_width_table[dev] = CODEC_BACKEND_DEFAULT_BIT_WIDTH;
@@ -1975,6 +2060,7 @@
backend_tag_table[SND_DEVICE_OUT_VOICE_SPEAKER_STEREO_AND_VOICE_HEADPHONES] = strdup("speaker-and-headphones");
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");
hw_interface_table[SND_DEVICE_OUT_HANDSET] = strdup("SLIMBUS_0_RX");
hw_interface_table[SND_DEVICE_OUT_SPEAKER] = strdup("SLIMBUS_0_RX");
@@ -2006,6 +2092,7 @@
hw_interface_table[SND_DEVICE_OUT_VOICE_SPEAKER_2] = strdup("SLIMBUS_0_RX");
hw_interface_table[SND_DEVICE_OUT_VOICE_SPEAKER_2_VBAT] = strdup("SLIMBUS_0_RX");
hw_interface_table[SND_DEVICE_OUT_VOICE_HEADPHONES] = strdup("SLIMBUS_6_RX");
+ hw_interface_table[SND_DEVICE_OUT_VOICE_HEADSET] = strdup("SLIMBUS_6_RX");
hw_interface_table[SND_DEVICE_OUT_VOICE_MUSIC_TX] = strdup("VOICE_PLAYBACK_TX");
hw_interface_table[SND_DEVICE_OUT_VOICE_LINE] = strdup("SLIMBUS_6_RX");
hw_interface_table[SND_DEVICE_OUT_HDMI] = strdup("HDMI");
@@ -2060,6 +2147,10 @@
hw_interface_table[SND_DEVICE_OUT_SPEAKER_WSA] = strdup("SLIMBUS_0_RX");
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");
+ /* So far, primary hal doesn't support hearing aid device.
+ Need snd_device to route voice call and use specific acdb tuning.
+ Also, BT_RX is a virtual port to indicate bluetooth hearing aid. */
+ hw_interface_table[SND_DEVICE_OUT_VOICE_HEARING_AID] = strdup("BT_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");
@@ -2078,6 +2169,7 @@
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_CAMCORDER_LANDSCAPE] = 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");
@@ -2179,7 +2271,12 @@
hw_interface_table[SND_DEVICE_OUT_VOIP_HANDSET] = strdup("SLIMBUS_0_RX");
hw_interface_table[SND_DEVICE_OUT_VOIP_SPEAKER] = strdup("SLIMBUS_0_RX");
hw_interface_table[SND_DEVICE_OUT_VOIP_HEADPHONES] = strdup("SLIMBUS_6_RX");
-
+ hw_interface_table[SND_DEVICE_IN_CAMCORDER_INVERT_LANDSCAPE] = strdup("SLIMBUS_0_TX");
+ hw_interface_table[SND_DEVICE_IN_CAMCORDER_PORTRAIT] = strdup("SLIMBUS_0_TX");
+ hw_interface_table[SND_DEVICE_IN_CAMCORDER_SELFIE_LANDSCAPE] = strdup("SLIMBUS_0_TX");
+ hw_interface_table[SND_DEVICE_IN_CAMCORDER_SELFIE_INVERT_LANDSCAPE] = strdup("SLIMBUS_0_TX");
+ hw_interface_table[SND_DEVICE_IN_CAMCORDER_SELFIE_PORTRAIT] = strdup("SLIMBUS_0_TX");
+ hw_interface_table[SND_DEVICE_IN_VOICE_HEARING_AID] = strdup("SLIMBUS_0_TX");
my_data->max_mic_count = PLATFORM_DEFAULT_MIC_COUNT;
/*remove ALAC & APE from DSP decoder list based on software decoder availability*/
@@ -2426,11 +2523,11 @@
}
snd_card_name = mixer_get_name(my_data->adev->mixer);
+ snd_card_name = platform_get_snd_card_name_for_acdb_loader(snd_card_name);
if (!snd_card_name) {
ALOGE("Failed to get snd_card_name");
goto cleanup;
}
- snd_card_name = platform_get_snd_card_name_for_acdb_loader(snd_card_name);
my_data->acdb_init_data.cvd_version = cvd_version;
my_data->acdb_init_data.snd_card_name = strdup(snd_card_name);
@@ -3264,8 +3361,6 @@
strdup("SLIM_0_RX Format");
my_data->current_backend_cfg[DEFAULT_CODEC_BACKEND].samplerate_mixer_ctl =
strdup("SLIM_0_RX SampleRate");
- my_data->current_backend_cfg[DEFAULT_CODEC_BACKEND].channels_mixer_ctl =
- strdup("SLIM_0_RX Channels");
my_data->current_backend_cfg[DSD_NATIVE_BACKEND].bitwidth_mixer_ctl =
strdup("SLIM_2_RX Format");
@@ -3361,18 +3456,27 @@
my_data->current_backend_cfg[DEFAULT_CODEC_TX_BACKEND].samplerate_mixer_ctl =
strdup("SLIM_0_TX SampleRate");
}
- my_data->current_backend_cfg[HEADPHONE_BACKEND].bitwidth_mixer_ctl =
- strdup("SLIM_6_RX Format");
- my_data->current_backend_cfg[HEADPHONE_BACKEND].samplerate_mixer_ctl =
- strdup("SLIM_6_RX SampleRate");
- //TODO: enable CONCURRENT_CAPTURE_ENABLED flag only if separate backend is defined
+
+ if (strstr(snd_card_name, "intcodec")) {
+ my_data->current_backend_cfg[HEADPHONE_BACKEND].bitwidth_mixer_ctl =
+ strdup("INT0_MI2S_RX Format");
+ my_data->current_backend_cfg[HEADPHONE_BACKEND].samplerate_mixer_ctl =
+ strdup("INT0_MI2S_RX SampleRate");
+ } else {
+ my_data->current_backend_cfg[HEADPHONE_BACKEND].bitwidth_mixer_ctl =
+ strdup("SLIM_6_RX Format");
+ my_data->current_backend_cfg[HEADPHONE_BACKEND].samplerate_mixer_ctl =
+ strdup("SLIM_6_RX SampleRate");
+ }
+
+ //NOTE: enable CONCURRENT_CAPTURE_ENABLED flag only if separate backend is defined
//for headset-mic. This is to capture separate data from headset-mic and handset-mic.
- if(audio_extn_is_concurrent_capture_enabled())
+ if(audio_extn_is_concurrent_capture_enabled()) {
my_data->current_backend_cfg[HEADSET_TX_BACKEND].bitwidth_mixer_ctl =
- strdup("SLIM_1_TX Format");
- else
+ strdup("SLIM_1_TX Format");
my_data->current_backend_cfg[HEADSET_TX_BACKEND].samplerate_mixer_ctl =
- strdup("SLIM_1_TX SampleRate");
+ strdup("SLIM_1_TX SampleRate");
+ }
}
my_data->current_backend_cfg[USB_AUDIO_TX_BACKEND].bitwidth_mixer_ctl =
@@ -3381,8 +3485,6 @@
strdup("USB_AUDIO_TX SampleRate");
my_data->current_backend_cfg[USB_AUDIO_TX_BACKEND].channels_mixer_ctl =
strdup("USB_AUDIO_TX Channels");
- my_data->current_backend_cfg[DEFAULT_CODEC_BACKEND].channels_mixer_ctl =
- strdup("SLIM_0_RX Channels");
my_data->current_backend_cfg[SLIMBUS_0_TX].bitwidth_mixer_ctl =
strdup("SLIM_0_TX Format");
my_data->current_backend_cfg[SLIMBUS_0_TX].samplerate_mixer_ctl =
@@ -3494,7 +3596,7 @@
ALOGD("%s:DSD playback is supported", __func__);
my_data->is_dsd_supported = true;
my_data->is_asrc_supported = true;
- platform_set_native_support(NATIVE_AUDIO_MODE_MULTIPLE_44_1);
+ platform_set_native_support(NATIVE_AUDIO_MODE_MULTIPLE_MIX_IN_CODEC);
}
}
@@ -3594,6 +3696,7 @@
struct platform_data *my_data = (struct platform_data *)platform;
struct operator_info *info_item;
struct operator_specific_device *device_item;
+ struct external_specific_device *ext_dev;
struct app_type_entry *ap;
struct listnode *node;
@@ -3647,6 +3750,17 @@
free(operator_specific_device_table[dev]);
operator_specific_device_table[dev] = NULL;
}
+
+ if (external_specific_device_table[dev]) {
+ while (!list_empty(external_specific_device_table[dev])) {
+ node = list_head(external_specific_device_table[dev]);
+ list_remove(node);
+ ext_dev = node_to_item(node, struct external_specific_device, list);
+ free(ext_dev->usbid);
+ free(ext_dev);
+ }
+ free(external_specific_device_table[dev]);
+ }
}
while (!list_empty(&operator_info_list)) {
@@ -3723,8 +3837,6 @@
/* deinit usb */
audio_extn_usb_deinit();
audio_extn_dap_hal_deinit();
- if (audio_extn_spkr_prot_is_enabled())
- audio_extn_spkr_prot_deinit();
#ifdef DYNAMIC_LOG_ENABLED
log_utils_deinit();
#endif
@@ -3853,7 +3965,12 @@
int platform_get_pcm_device_id(audio_usecase_t usecase, int device_type)
{
- int device_id;
+ int device_id = -1;
+
+ if ((usecase >= AUDIO_USECASE_MAX) || (usecase <= USECASE_INVALID)) {
+ ALOGE("%s: invalid usecase case idx %d", __func__, usecase);
+ return device_id;
+ }
if (device_type == PCM_PLAYBACK)
device_id = pcm_device_table[usecase][0];
else
@@ -3866,6 +3983,188 @@
return HAPTICS_PCM_DEVICE;
}
+uint64_t getQtime()
+{
+ uint64_t qTimerCount = 0;
+
+#if __aarch64__
+ asm volatile("mrs %0, cntvct_el0" : "=r" (qTimerCount));
+#else
+ asm volatile("mrrc p15, 1, %Q0, %R0, c14" : "=r" (qTimerCount));
+#endif
+
+ return qTimerCount;
+}
+
+int platform_get_delay(void *platform, int pcm_device_id)
+{
+ int ctl_len = 0;
+ struct audio_device *adev = NULL;
+ struct mixer_ctl *ctl = NULL;
+ const char *mixer_ctl_name = "ADSP Path Latency";
+ const char *deviceNo = "NN";
+ char *mixer_str = NULL;
+ int path_delay = 0;
+
+ if (NULL == platform) {
+ ALOGE("%s: platform is NULL", __func__);
+ return -EINVAL;
+ }
+ if (pcm_device_id <= 0) {
+ ALOGE("%s: invalid pcm device id: %d", __func__, pcm_device_id);
+ return -EINVAL;
+ }
+
+ adev = ((struct platform_data *)platform)->adev;
+
+ // Mixer control format: "ADSP Path Latency NN"
+ ctl_len = strlen(mixer_ctl_name) + 1 + strlen(deviceNo) + 1;
+
+ mixer_str = (char*) calloc(ctl_len, sizeof(char));
+ if (!mixer_str) {
+ ALOGE("%s: Could not allocate memory", __func__);
+ return -ENOMEM;
+ }
+
+ snprintf(mixer_str, ctl_len, "%s %d", mixer_ctl_name, pcm_device_id);
+
+ ctl = mixer_get_ctl_by_name(adev->mixer, mixer_str);
+ if (!ctl) {
+ ALOGE("%s: Could not get ctl for mixer cmd - %s", __func__, mixer_str);
+ free(mixer_str);
+ return -EINVAL;
+ }
+
+ path_delay = mixer_ctl_get_value(ctl, 0);
+ if (path_delay < 0) {
+ ALOGE("%s: Could not get val for mixer cmd - %s", __func__, mixer_str);
+ }
+ ALOGD("%s: Path Delay: %d", __func__, path_delay);
+
+ free(mixer_str);
+ return path_delay;
+}
+
+int send_qtime(void *platform, uint64_t qtime_value, int pcm_device_id)
+{
+ int ret = 0;
+ int ctl_len = 0;
+ struct audio_device *adev = ((struct platform_data *)platform)->adev;
+ struct mixer_ctl *ctl = NULL;
+ const char *mixer_ctl_name = "QTimer";
+ const char *deviceNo = "NN";
+ char *mixer_str = NULL;
+ uint32_t set_values[2];
+
+ set_values[0] = (uint32_t)qtime_value;
+ set_values[1] = (uint32_t)((qtime_value >> 16) >> 16);
+ ALOGD("%s: Send qtime msw: %u, lsw: %u", __func__, set_values[1],
+ set_values[0]);
+
+ // Mixer control format: "Qtimer NN"
+ ctl_len = strlen(mixer_ctl_name) + 1 + strlen(deviceNo) + 1;
+
+ mixer_str = (char*) calloc(ctl_len, sizeof(char));
+ if (!mixer_str) {
+ ALOGE("%s: Could not allocate memory", __func__);
+ return -ENOMEM;
+ }
+
+ snprintf(mixer_str, ctl_len, "%s %d", mixer_ctl_name, pcm_device_id);
+
+ ctl = mixer_get_ctl_by_name(adev->mixer, mixer_str);
+ if (!ctl) {
+ ALOGE("%s: Could not get ctl for mixer cmd - %s",
+ __func__, mixer_str);
+ free(mixer_str);
+ return -EINVAL;
+ }
+
+ ret = mixer_ctl_set_array(ctl, set_values, ARRAY_SIZE(set_values));
+ if (ret < 0) {
+ ALOGE("%s: Could not set array for mixer cmd - %s",
+ __func__, mixer_str);
+ }
+ free(mixer_str);
+
+ return ret;
+}
+
+int platform_set_qtime(void *platform, int audio_pcm_device_id,
+ int haptic_pcm_device_id)
+{
+ int ret = 0;
+ uint64_t qtime_count = 0;
+ uint64_t qtime_value = 0;
+ uint32_t qtime_remainder = 0;
+ int32_t audio_path_latency = 0;
+ int32_t haptic_path_latency = 0;
+
+ if (NULL == platform) {
+ ALOGE("%s: platform is NULL", __func__);
+ return -EINVAL;
+ }
+ if (audio_pcm_device_id <= 0 || haptic_pcm_device_id <= 0) {
+ ALOGE("%s: Invalid pcm device id - %d", __func__,
+ audio_pcm_device_id <= 0 ? audio_pcm_device_id
+ : haptic_pcm_device_id);
+ return -EINVAL;
+ }
+
+ audio_path_latency = platform_get_delay(platform, audio_pcm_device_id);
+ if (audio_path_latency <= 0) {
+ ALOGE("%s: error getting audio path latency: %d", __func__,
+ audio_path_latency);
+ return -EINVAL;
+ }
+ ALOGD("%s: Audio Path Latency: %d", __func__, audio_path_latency);
+
+ haptic_path_latency = platform_get_delay(platform, haptic_pcm_device_id);
+ if (haptic_path_latency <= 0) {
+ ALOGE("%s: error getting haptic path latency: %d", __func__,
+ haptic_path_latency);
+ return -EINVAL;
+ }
+ ALOGD("%s: Haptic Path Latency: %d", __func__, haptic_path_latency);
+
+ qtime_count = getQtime();
+
+ // Qtime count / Qtime freq (KHZ) = Qtime in milliseconds
+ qtime_value = (uint64_t) (qtime_count / QTIME_FREQ_KHZ);
+
+ // Convert Qtime to microseconds
+ qtime_value *= 1000;
+
+ // Adding max(path_latency)
+ qtime_value += (uint32_t) max(audio_path_latency, haptic_path_latency);
+
+ // Adding IPC delay + error correction ~10ms
+ qtime_value += IPC_ERROR_DELAY;
+
+ // Calculate remainder in microseconds
+ qtime_remainder = ((qtime_count % QTIME_FREQ_KHZ) * 1000) / QTIME_FREQ_KHZ;
+
+ // Add the remainder to qtime
+ qtime_value += qtime_remainder;
+ ALOGD("%s: Set qtime: %llu microsecs\n", __func__,
+ (unsigned long long int)qtime_value);
+
+ ret = send_qtime(platform, qtime_value, haptic_pcm_device_id);
+ if (ret < 0) {
+ ALOGE("%s: Could not send qtime for haptic session - %d",
+ __func__, ret);
+ return ret;
+ }
+
+ ret = send_qtime(platform, qtime_value, audio_pcm_device_id);
+ if (ret < 0) {
+ ALOGE("%s: Could not send qtime for audio session - %d",
+ __func__, ret);
+ }
+
+ return ret;
+}
+
static int find_index(struct name_to_index * table, int32_t len, const char * name)
{
int ret = 0;
@@ -4014,7 +4313,7 @@
goto done;
}
- if(effect_config == NULL) {
+ if (effect_config == NULL) {
ALOGE("%s: Invalid effect_config", __func__);
ret = -EINVAL;
goto done;
@@ -4029,6 +4328,33 @@
return ret;
}
+void platform_add_external_specific_device(snd_device_t snd_device,
+ const char *usbid,
+ unsigned int acdb_id)
+{
+ struct external_specific_device *device;
+
+ if (external_specific_device_table[snd_device] == NULL) {
+ external_specific_device_table[snd_device] =
+ (struct listnode *)calloc(1, sizeof(struct listnode));
+ list_init(external_specific_device_table[snd_device]);
+ }
+
+ device = (struct external_specific_device *)calloc(1, sizeof(struct external_specific_device));
+ if (device == NULL) {
+ ALOGE("%s: memory allocation failed", __func__);
+ return;
+ }
+
+ device->usbid = strdup(usbid);
+ device->acdb_id = acdb_id;
+
+ list_add_tail(external_specific_device_table[snd_device], &device->list);
+
+ ALOGD("%s: device[%s] usbid[%s] -> acdb_id[%d]", __func__,
+ platform_get_snd_device_name(snd_device), usbid, acdb_id);
+}
+
int platform_set_snd_device_acdb_id(snd_device_t snd_device, unsigned int acdb_id)
{
int ret = 0;
@@ -4144,6 +4470,8 @@
if (operator_specific_device_table[snd_device] != NULL)
return get_operator_specific_device_acdb_id(snd_device);
+ else if (external_specific_device_table[snd_device] != NULL)
+ return get_external_specific_device_acdb_id(snd_device);
else
return acdb_device_table[snd_device];
}
@@ -4176,12 +4504,14 @@
int platform_set_native_support(int na_mode)
{
if (NATIVE_AUDIO_MODE_SRC == na_mode || NATIVE_AUDIO_MODE_TRUE_44_1 == na_mode
- || NATIVE_AUDIO_MODE_MULTIPLE_44_1 == na_mode) {
+ || NATIVE_AUDIO_MODE_MULTIPLE_MIX_IN_CODEC == na_mode
+ || NATIVE_AUDIO_MODE_MULTIPLE_MIX_IN_DSP == na_mode) {
na_props.platform_na_prop_enabled = na_props.ui_na_prop_enabled = true;
na_props.na_mode = na_mode;
ALOGD("%s:napb: native audio playback enabled in (%s) mode", __func__,
((na_mode == NATIVE_AUDIO_MODE_SRC)?"SRC":
- (na_mode == NATIVE_AUDIO_MODE_TRUE_44_1)?"True":"Multiple"));
+ (na_mode == NATIVE_AUDIO_MODE_TRUE_44_1)?"True":
+ (na_mode == NATIVE_AUDIO_MODE_MULTIPLE_MIX_IN_CODEC)?"Multiple_Mix_Codec":"Multiple_Mix_DSP"));
}
else {
na_props.platform_na_prop_enabled = false;
@@ -4256,8 +4586,10 @@
mode = NATIVE_AUDIO_MODE_SRC;
else if (value && !strncmp(value, "true", sizeof("true")))
mode = NATIVE_AUDIO_MODE_TRUE_44_1;
- else if (value && !strncmp(value, "multiple", sizeof("multiple")))
- mode = NATIVE_AUDIO_MODE_MULTIPLE_44_1;
+ else if (value && !strncmp(value, "multiple_mix_codec", sizeof("multiple_mix_codec")))
+ mode = NATIVE_AUDIO_MODE_MULTIPLE_MIX_IN_CODEC;
+ else if (value && !strncmp(value, "multiple_mix_dsp", sizeof("multiple_mix_dsp")))
+ mode = NATIVE_AUDIO_MODE_MULTIPLE_MIX_IN_DSP;
else {
mode = NATIVE_AUDIO_MODE_INVALID;
ALOGE("%s:napb:native_audio_mode in platform info xml,invalid mode string",
@@ -4292,7 +4624,7 @@
list_for_each(node, &(platform->adev)->usecase_list) {
usecase = node_to_item(node, struct audio_usecase, list);
- if (is_offload_usecase(usecase->id) &&
+ if (usecase->stream.out && is_offload_usecase(usecase->id) &&
(usecase->stream.out->devices & AUDIO_DEVICE_OUT_WIRED_HEADPHONE ||
usecase->stream.out->devices & AUDIO_DEVICE_OUT_WIRED_HEADSET) &&
OUTPUT_SAMPLING_RATE_44100 == usecase->stream.out->sample_rate) {
@@ -5256,6 +5588,10 @@
snd_device = SND_DEVICE_OUT_VOICE_ANC_FB_HEADSET;
else
snd_device = SND_DEVICE_OUT_VOICE_ANC_HEADSET;
+ } else if (audio_extn_is_concurrent_capture_enabled() &&
+ (devices & AUDIO_DEVICE_OUT_WIRED_HEADSET)) {
+ //Separate backend is added for headset-mic as part of concurrent capture
+ snd_device = SND_DEVICE_OUT_VOICE_HEADSET;
} else {
snd_device = SND_DEVICE_OUT_VOICE_HEADPHONES;
}
@@ -5351,8 +5687,11 @@
snd_device = SND_DEVICE_OUT_ANC_HANDSET;
else
snd_device = SND_DEVICE_OUT_VOICE_HANDSET;
- } else if (devices & AUDIO_DEVICE_OUT_TELEPHONY_TX)
+ } else if (devices & AUDIO_DEVICE_OUT_TELEPHONY_TX) {
snd_device = SND_DEVICE_OUT_VOICE_TX;
+ } else if (devices & AUDIO_DEVICE_OUT_HEARING_AID) {
+ snd_device = SND_DEVICE_OUT_VOICE_HEARING_AID;
+ }
if (snd_device != SND_DEVICE_NONE) {
goto exit;
@@ -5377,7 +5716,7 @@
} else if (NATIVE_AUDIO_MODE_SRC == na_mode &&
OUTPUT_SAMPLING_RATE_44100 == sample_rate) {
snd_device = SND_DEVICE_OUT_HEADPHONES_44_1;
- } else if (NATIVE_AUDIO_MODE_MULTIPLE_44_1 == na_mode &&
+ } else if (NATIVE_AUDIO_MODE_MULTIPLE_MIX_IN_CODEC == na_mode &&
(sample_rate % OUTPUT_SAMPLING_RATE_44100 == 0) &&
(out->format != AUDIO_FORMAT_DSD)) {
snd_device = SND_DEVICE_OUT_HEADPHONES_44_1;
@@ -5888,6 +6227,8 @@
} else {
snd_device = SND_DEVICE_IN_HANDSET_MIC;
}
+ } else if (out_device & AUDIO_DEVICE_OUT_HEARING_AID) {
+ snd_device = SND_DEVICE_IN_VOICE_HEARING_AID;
}
} else if (my_data->use_generic_handset == true && // system prop is enabled
(my_data->source_mic_type & SOURCE_QUAD_MIC) && // AND 4mic is available
@@ -5932,7 +6273,30 @@
} else if (source == AUDIO_SOURCE_CAMCORDER) {
if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC ||
in_device & AUDIO_DEVICE_IN_BACK_MIC) {
-
+ switch (adev->camera_orientation) {
+ case CAMERA_BACK_LANDSCAPE:
+ snd_device = SND_DEVICE_IN_CAMCORDER_LANDSCAPE;
+ break;
+ case CAMERA_BACK_INVERT_LANDSCAPE:
+ snd_device = SND_DEVICE_IN_CAMCORDER_INVERT_LANDSCAPE;
+ break;
+ case CAMERA_BACK_PORTRAIT:
+ snd_device = SND_DEVICE_IN_CAMCORDER_PORTRAIT;
+ break;
+ case CAMERA_FRONT_LANDSCAPE:
+ snd_device = SND_DEVICE_IN_CAMCORDER_SELFIE_LANDSCAPE;
+ break;
+ case CAMERA_FRONT_INVERT_LANDSCAPE:
+ snd_device = SND_DEVICE_IN_CAMCORDER_SELFIE_INVERT_LANDSCAPE;
+ break;
+ case CAMERA_FRONT_PORTRAIT:
+ snd_device = SND_DEVICE_IN_CAMCORDER_SELFIE_PORTRAIT;
+ break;
+ default:
+ ALOGW("%s: invalid camera orientation %08x", __func__, adev->camera_orientation);
+ snd_device = SND_DEVICE_IN_CAMCORDER_LANDSCAPE;
+ break;
+ }
if (str_bitwidth == 16) {
if ((my_data->fluence_type & FLUENCE_DUAL_MIC) &&
(my_data->source_mic_type & SOURCE_DUAL_MIC) &&
@@ -7962,7 +8326,26 @@
ALOGD("%s:becf: afe: true napb active set rate to 44.1 khz",
__func__);
}
- } else if (na_mode != NATIVE_AUDIO_MODE_MULTIPLE_44_1) {
+ } else if (na_mode == NATIVE_AUDIO_MODE_MULTIPLE_MIX_IN_DSP) {
+ struct listnode *node;
+ list_for_each(node, &adev->usecase_list) {
+ struct audio_usecase *uc;
+ uc = node_to_item(node, struct audio_usecase, list);
+ struct stream_out *curr_out =
+ (struct stream_out*) uc->stream.out;
+
+ /*if native audio playback
+ * is active then it will take priority
+ */
+ if (curr_out && PCM_PLAYBACK == uc->type) {
+ if (is_offload_usecase(uc->id) &&
+ (curr_out->sample_rate % OUTPUT_SAMPLING_RATE_44100 == 0)) {
+ ALOGD("%s:napb:native stream detected %d sampling rate", __func__, curr_out->sample_rate);
+ sample_rate = curr_out->sample_rate;
+ }
+ }
+ }
+ } else if (na_mode != NATIVE_AUDIO_MODE_MULTIPLE_MIX_IN_CODEC) {
/*
* Map native sampling rates to upper limit range
* if multiple of native sampling rates are not supported.
@@ -8238,7 +8621,7 @@
} else if (my_data->is_internal_codec && !audio_is_usb_in_device(snd_device)) {
sample_rate = CODEC_BACKEND_DEFAULT_SAMPLE_RATE;
channels = CODEC_BACKEND_DEFAULT_TX_CHANNELS;
- if (adev->active_input->bit_width == 24)
+ if (adev->active_input && adev->active_input->bit_width == 24)
bit_width = platform_get_snd_device_bit_width(snd_device);
} else {
struct listnode *node;
@@ -9884,7 +10267,7 @@
list_for_each(node, &adev->usecase_list) {
usecase = node_to_item(node, struct audio_usecase, list);
- if (usecase->type == PCM_PLAYBACK &&
+ if (usecase->stream.out && usecase->type == PCM_PLAYBACK &&
usecase->stream.out->devices & AUDIO_DEVICE_OUT_SPEAKER) {
/*
* If acdb tuning is different for SPEAKER_REVERSE, it is must
diff --git a/hal/msm8974/platform.h b/hal/msm8974/platform.h
index 6203cf8..5160959 100644
--- a/hal/msm8974/platform.h
+++ b/hal/msm8974/platform.h
@@ -106,6 +106,7 @@
SND_DEVICE_OUT_VOICE_SPEAKER_2,
SND_DEVICE_OUT_VOICE_SPEAKER_2_VBAT,
SND_DEVICE_OUT_VOICE_HEADPHONES,
+ SND_DEVICE_OUT_VOICE_HEADSET,
SND_DEVICE_OUT_VOICE_LINE,
SND_DEVICE_OUT_HDMI,
SND_DEVICE_OUT_SPEAKER_AND_HDMI,
@@ -173,6 +174,7 @@
SND_DEVICE_OUT_VOICE_SPEAKER_STEREO_AND_VOICE_HEADPHONES,
SND_DEVICE_OUT_VOICE_SPEAKER_STEREO_AND_VOICE_ANC_HEADSET,
SND_DEVICE_OUT_VOICE_SPEAKER_STEREO_AND_VOICE_ANC_FB_HEADSET,
+ SND_DEVICE_OUT_VOICE_HEARING_AID,
SND_DEVICE_OUT_END,
/*
@@ -229,7 +231,7 @@
SND_DEVICE_IN_BT_SCO_MIC_SWB,
SND_DEVICE_IN_BT_SCO_MIC_SWB_NREC,
SND_DEVICE_IN_BT_A2DP,
- SND_DEVICE_IN_CAMCORDER_MIC,
+ SND_DEVICE_IN_CAMCORDER_LANDSCAPE,
SND_DEVICE_IN_VOICE_DMIC,
SND_DEVICE_IN_VOICE_DMIC_SB,
SND_DEVICE_IN_VOICE_DMIC_TMUS,
@@ -303,10 +305,17 @@
SND_DEVICE_IN_INCALL_REC_TX,
SND_DEVICE_IN_INCALL_REC_RX_TX,
SND_DEVICE_IN_LINE,
+ SND_DEVICE_IN_CAMCORDER_INVERT_LANDSCAPE,
+ SND_DEVICE_IN_CAMCORDER_PORTRAIT,
+ SND_DEVICE_IN_CAMCORDER_SELFIE_LANDSCAPE,
+ SND_DEVICE_IN_CAMCORDER_SELFIE_INVERT_LANDSCAPE,
+ SND_DEVICE_IN_CAMCORDER_SELFIE_PORTRAIT,
+ SND_DEVICE_IN_VOICE_HEARING_AID,
SND_DEVICE_IN_END,
SND_DEVICE_MAX = SND_DEVICE_IN_END,
-
+ /* For legacy xml file parsing */
+ SND_DEVICE_IN_CAMCORDER_MIC = SND_DEVICE_IN_CAMCORDER_LANDSCAPE,
};
#define INPUT_SAMPLING_RATE_DSD64 2822400
#define INPUT_SAMPLING_RATE_DSD128 5644800
@@ -620,9 +629,9 @@
#define FM_RX_VOLUME "Quat MI2S FM RX Volume"
#elif PLATFORM_MSM8994
#define FM_RX_VOLUME "PRI MI2S LOOPBACK Volume"
-#elif defined (PLATFORM_MSM8996) || defined (PLATFORM_KONA) || defined (PLATFORM_LITO)
+#elif defined (PLATFORM_MSM8996) || defined (PLATFORM_KONA)
#define FM_RX_VOLUME "Tert MI2S LOOPBACK Volume"
-#elif defined (PLATFORM_MSM8998) || defined (PLATFORM_SDM845) || defined (PLATFORM_MSMFALCON) || defined (PLATFORM_SDM710) || defined (PLATFORM_QCS605) || defined (PLATFORM_MSMNILE) || defined (PLATFORM_MSMSTEPPE) || defined (PLATFORM_QCS405) || defined (PLATFORM_TRINKET)
+#elif defined (PLATFORM_MSM8998) || defined (PLATFORM_SDM845) || defined (PLATFORM_MSMFALCON) || defined (PLATFORM_SDM710) || defined (PLATFORM_QCS605) || defined (PLATFORM_MSMNILE) || defined (PLATFORM_MSMSTEPPE) || defined (PLATFORM_QCS405) || defined (PLATFORM_TRINKET) || defined (PLATFORM_LITO)
#define FM_RX_VOLUME "SLIMBUS_8 LOOPBACK Volume"
#else
#define FM_RX_VOLUME "Internal FM RX Volume"
@@ -638,6 +647,8 @@
#define TX_VOICE_FV5ECNS_SM 0x10F09
#define TX_VOICE_SMECNS_V2 0x10F31
#define TX_VOICE_FV5ECNS_DM 0x10F0A
+#define TX_VOICE_FLUENCE_SM_SB 0x10F38
+#define TX_VOICE_FLUENCE_MM_SB 0x10F39
#define LIB_CSD_CLIENT "libcsd-client.so"
diff --git a/hal/platform_api.h b/hal/platform_api.h
index f4acf1f..cae22ac 100644
--- a/hal/platform_api.h
+++ b/hal/platform_api.h
@@ -63,7 +63,8 @@
enum {
NATIVE_AUDIO_MODE_SRC = 1,
NATIVE_AUDIO_MODE_TRUE_44_1,
- NATIVE_AUDIO_MODE_MULTIPLE_44_1,
+ NATIVE_AUDIO_MODE_MULTIPLE_MIX_IN_CODEC,
+ NATIVE_AUDIO_MODE_MULTIPLE_MIX_IN_DSP,
NATIVE_AUDIO_MODE_INVALID
};
@@ -185,6 +186,9 @@
const char *operator,
const char *mixer_path,
unsigned int acdb_id);
+void platform_add_external_specific_device(snd_device_t snd_device,
+ const char *name,
+ unsigned int acdb_id);
void platform_get_parameters(void *platform, struct str_parms *query,
struct str_parms *reply);
int platform_set_parameters(void *platform, struct str_parms *parms);
@@ -344,6 +348,9 @@
int platform_get_license_by_product(void *platform, const char* product_name, int *product_id, char* product_license);
int platform_get_haptics_pcm_device_id();
+int platform_set_qtime(void *platform, int audio_pcm_device_id,
+ int haptic_pcm_device_id);
+int platform_get_delay(void *platform, int pcm_device_id);
struct audio_custom_mtmx_params *
platform_get_custom_mtmx_params(void *platform,
struct audio_custom_mtmx_params_info *info);
diff --git a/hal/platform_info.c b/hal/platform_info.c
index da0223e..05ee9cd 100644
--- a/hal/platform_info.c
+++ b/hal/platform_info.c
@@ -72,6 +72,7 @@
MIC_INFO,
CUSTOM_MTMX_PARAMS,
CUSTOM_MTMX_PARAM_COEFFS,
+ EXTERNAL_DEVICE_SPECIFIC,
} section_t;
typedef void (* section_process_fn)(const XML_Char **attr);
@@ -95,6 +96,7 @@
static void process_mic_info(const XML_Char **attr);
static void process_custom_mtmx_params(const XML_Char **attr);
static void process_custom_mtmx_param_coeffs(const XML_Char **attr);
+static void process_external_dev(const XML_Char **attr);
static section_process_fn section_table[] = {
[ROOT] = process_root,
@@ -115,6 +117,7 @@
[MIC_INFO] = process_mic_info,
[CUSTOM_MTMX_PARAMS] = process_custom_mtmx_params,
[CUSTOM_MTMX_PARAM_COEFFS] = process_custom_mtmx_param_coeffs,
+ [EXTERNAL_DEVICE_SPECIFIC] = process_external_dev,
};
static section_t section;
@@ -460,6 +463,38 @@
return;
}
+static void process_external_dev(const XML_Char **attr)
+{
+ snd_device_t snd_device = SND_DEVICE_NONE;
+
+ if (strcmp(attr[0], "name") != 0) {
+ ALOGE("%s: 'name' not found", __func__);
+ goto done;
+ }
+
+ snd_device = platform_get_snd_device_index((char *)attr[1]);
+ if (snd_device < 0) {
+ ALOGE("%s: Device %s in %s not found, no ACDB ID set!",
+ __func__, (char *)attr[3], PLATFORM_INFO_XML_PATH);
+ goto done;
+ }
+
+ if (strcmp(attr[2], "usbid") != 0) {
+ ALOGE("%s: 'usbid' not found", __func__);
+ goto done;
+ }
+
+ if (strcmp(attr[4], "acdb_id") != 0) {
+ ALOGE("%s: 'acdb_id' not found", __func__);
+ goto done;
+ }
+
+ platform_add_external_specific_device(snd_device, (char *)attr[3], atoi((char *)attr[5]));
+
+done:
+ return;
+}
+
static void process_audio_effect(const XML_Char **attr, effect_type_t effect_type)
{
int index;
@@ -1204,6 +1239,11 @@
section = CUSTOM_MTMX_PARAM_COEFFS;
section_process_fn fn = section_table[section];
fn(attr);
+ } else if (strcmp(tag_name, "external_specific_dev") == 0) {
+ section = EXTERNAL_DEVICE_SPECIFIC;
+ } else if (strcmp(tag_name, "ext_device") == 0) {
+ section_process_fn fn = section_table[section];
+ fn(attr);
}
} else {
if(strcmp(tag_name, "config_params") == 0) {
@@ -1256,6 +1296,8 @@
section = ROOT;
} else if (strcmp(tag_name, "snd_devices") == 0) {
section = ROOT;
+ } else if (strcmp(tag_name, "external_specific_dev") == 0) {
+ section = ROOT;
} else if (strcmp(tag_name, "input_snd_device") == 0) {
section = SND_DEVICES;
} else if (strcmp(tag_name, "input_snd_device_mic_mapping") == 0) {
diff --git a/hal/voice.c b/hal/voice.c
index 847ce92..729ab27 100644
--- a/hal/voice.c
+++ b/hal/voice.c
@@ -73,6 +73,7 @@
strlcpy(mixer_path, "sidetone-handset", MIXER_PATH_MAX_LENGTH);
break;
case SND_DEVICE_OUT_VOICE_HEADPHONES:
+ case SND_DEVICE_OUT_VOICE_HEADSET:
case SND_DEVICE_OUT_VOICE_ANC_HEADSET:
case SND_DEVICE_OUT_VOICE_ANC_FB_HEADSET:
is_sidetone_dev = true;
@@ -289,8 +290,17 @@
if(adev->mic_break_enabled)
platform_set_mic_break_det(adev->platform, true);
- pcm_start(session->pcm_tx);
- pcm_start(session->pcm_rx);
+ ret = pcm_start(session->pcm_tx);
+ if (ret != 0) {
+ ALOGE("%s: %s", __func__, pcm_get_error(session->pcm_tx));
+ goto error_start_voice;
+ }
+
+ ret = pcm_start(session->pcm_rx);
+ if (ret != 0) {
+ ALOGE("%s: %s", __func__, pcm_get_error(session->pcm_rx));
+ goto error_start_voice;
+ }
/* Enable aanc only when no calls are active */
if (!voice_is_call_state_active(adev))
diff --git a/hal/voice_extn/voice_extn.c b/hal/voice_extn/voice_extn.c
index f08c73c..473edc2 100644
--- a/hal/voice_extn/voice_extn.c
+++ b/hal/voice_extn/voice_extn.c
@@ -26,6 +26,7 @@
#include <math.h>
#include <log/log.h>
#include <cutils/str_parms.h>
+#include <cutils/properties.h>
#include <sys/ioctl.h>
#include <time.h>
#include <sound/voice_params.h>
@@ -35,7 +36,6 @@
#include "platform.h"
#include "platform_api.h"
#include "voice_extn.h"
-#include "audio_feature_manager.h"
#ifdef DYNAMIC_LOG_ENABLED
#include <log_xml_parser.h>
@@ -86,7 +86,6 @@
static bool voice_extn_compress_voip_enabled = false;
static bool voice_extn_dynamic_ecns_feature_enabled = false;
-static int voice_extn_is_running_vendor_enhanced_fwk = 1;
static bool voice_extn_incall_music_enabled = false;
int voice_extn_is_call_state_active(struct audio_device *adev, bool *is_call_active);
@@ -396,43 +395,48 @@
{
voice_extn_dynamic_ecns_feature_enabled = is_feature_enabled;
ALOGD(":: %s: ---- Feature DYNAMIC_ECNS is %s ----", __func__,
- is_feature_enabled? "ENABLED": " NOT ENABLED");
+ is_feature_enabled ? "ENABLED" : "NOT ENABLED");
}
-// START: INCALL_MUSIC ===================================================================
-void incall_music_feature_init(bool is_feature_enabled)
-{
- voice_extn_incall_music_enabled = is_feature_enabled;
- ALOGD("%s: ---- Feature INCALL_MUSIC is %s----", __func__,
- is_feature_enabled? "ENABLED": "NOT ENABLED");
-}
-// END: INCALL_MUSIC ===================================================================
-
bool voice_extn_is_dynamic_ecns_enabled()
{
return voice_extn_dynamic_ecns_feature_enabled;
}
-void voice_extn_feature_init(int is_running_with_enhanced_fwk)
+// START: INCALL_MUSIC ===================================================================
+void incall_music_feature_init(bool is_feature_enabled)
{
- voice_extn_is_running_vendor_enhanced_fwk = is_running_with_enhanced_fwk;
- for(int index = VOICE_START; index < MAX_SUPPORTED_FEATURE; index++)
- {
- bool enable = audio_feature_manager_is_feature_enabled(index);
- switch (index) {
- case COMPRESS_VOIP:
- compr_voip_feature_init(enable);
- break;
- case DYNAMIC_ECNS:
- dynamic_ecns_feature_init(enable);
- break;
- case INCALL_MUSIC:
- incall_music_feature_init(enable);
- break;
- default:
- break;
- }
- }
+ voice_extn_incall_music_enabled = is_feature_enabled;
+ ALOGV("%s: ---- Feature INCALL_MUSIC is %s----", __func__,
+ is_feature_enabled ? "ENABLED" : "NOT ENABLED");
+}
+// END: INCALL_MUSIC ===================================================================
+
+void compr_voip_feature_init(bool is_feature_enabled)
+{
+ voice_extn_compress_voip_enabled = is_feature_enabled;
+ ALOGV("%s:: ---- Feature COMPRESS_VOIP is %s ----", __func__,
+ is_feature_enabled ? "ENABLED" : "NOT ENABLED");
+}
+
+bool voice_extn_is_compress_voip_supported()
+{
+ return voice_extn_compress_voip_enabled;
+}
+
+void voice_extn_feature_init()
+{
+ // Register feature function here
+ // every feature should have a feature flag
+ compr_voip_feature_init(
+ property_get_bool("vendor.audio.feature.compr_voip.enable",
+ false));
+ dynamic_ecns_feature_init(
+ property_get_bool("vendor.audio.feature.dynamic_ecns.enable",
+ false));
+ incall_music_feature_init(
+ property_get_bool("vendor.audio.feature.incall_music.enable",
+ true));
}
void voice_extn_init(struct audio_device *adev)
@@ -446,17 +450,6 @@
adev->voice.session[MMODE2_SESS_IDX].vsid = VOICEMMODE2_VSID;
}
-void compr_voip_feature_init(bool is_feature_enabled)
-{
- voice_extn_compress_voip_enabled = is_feature_enabled;
- ALOGD("%s:: ---- Feature COMPRESS_VOIP is %s ----", __func__, is_feature_enabled?"ENABLED":"NOT ENABLED");
-}
-
-bool voice_extn_is_compress_voip_supported()
-{
- return voice_extn_compress_voip_enabled;
-}
-
int voice_extn_get_session_from_use_case(struct audio_device *adev,
const audio_usecase_t usecase_id,
struct voice_session **session)
diff --git a/hal/voice_extn/voice_extn.h b/hal/voice_extn/voice_extn.h
index 7a3b8cd..c4f0d49 100644
--- a/hal/voice_extn/voice_extn.h
+++ b/hal/voice_extn/voice_extn.h
@@ -77,7 +77,7 @@
bool voice_extn_compress_voip_is_format_supported(audio_format_t format);
bool voice_extn_compress_voip_is_config_supported(struct audio_config *config);
bool voice_extn_compress_voip_is_started(struct audio_device *adev);
-void voice_extn_feature_init(int is_running_with_enhanced_fwk);
+void voice_extn_feature_init();
void compr_voip_feature_init(bool is_feature_enabled);
bool voice_extn_is_compress_voip_supported();
void dynamic_ecns_feature_init(bool is_feature_enabled);
diff --git a/post_proc/asphere.c b/post_proc/asphere.c
index 7b35a77..efe07c6 100644
--- a/post_proc/asphere.c
+++ b/post_proc/asphere.c
@@ -33,7 +33,6 @@
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
-#include <dlfcn.h>
#include <stdbool.h>
#include <sys/stat.h>
#include <log/log.h>
@@ -42,7 +41,6 @@
#include <cutils/properties.h>
#include <hardware/audio_effect.h>
#include <pthread.h>
-#include <audio_feature_manager.h>
#include "bundle.h"
#include "equalizer.h"
#include "bass_boost.h"
@@ -58,10 +56,6 @@
#define AUDIO_ASPHERE_EVENT_NODE "/data/misc/audio_pp/event_node"
-#define PRIMARY_HAL_PATH XSTR(LIB_AUDIO_HAL)
-#define XSTR(x) STR(x)
-#define STR(x) #x
-
enum {
ASPHERE_ACTIVE = 0,
ASPHERE_SUSPENDED,
@@ -90,7 +84,6 @@
static struct asphere_module asphere;
pthread_once_t asphere_once = PTHREAD_ONCE_INIT;
-static bool (*is_feature_enabled)(audio_ext_feature);
static int asphere_create_app_notification_node(void)
{
@@ -170,23 +163,14 @@
ALOGD("%s", __func__);
pthread_mutex_init(&asphere.lock, NULL);
- if (access(PRIMARY_HAL_PATH, R_OK) == 0) {
- void *hal_lib_pointer = dlopen(PRIMARY_HAL_PATH, RTLD_NOW);
- if (hal_lib_pointer == NULL)
- ALOGE("%s: DLOPEN failed for %s", __func__, PRIMARY_HAL_PATH);
- else if ((is_feature_enabled = (bool (*)(audio_ext_feature))dlsym(hal_lib_pointer,
- "audio_feature_manager_is_feature_enabled")) != NULL) {
- if (is_feature_enabled(AUDIOSPHERE)) {
- asphere.init_status = 1;
- asphere_get_values_from_mixer();
- asphere_create_app_notification_node();
- return;
- } else
- ALOGW("%s: asphere feature not enabled", __func__);
- } else
- ALOGE("%s: dlsym failed", __func__);
- } else
- ALOGE("%s: not able to acces lib %s ", __func__, PRIMARY_HAL_PATH);
+ if (property_get_bool("vendor.audio.feature.audio_sphere.enable", false)) {
+ asphere.init_status = 1;
+ asphere_get_values_from_mixer();
+ asphere_create_app_notification_node();
+ return;
+ } else {
+ ALOGW("%s: asphere feature not enabled", __func__);
+ }
asphere.init_status = 0;
}
diff --git a/post_proc/effect_api.c b/post_proc/effect_api.c
index cff4be3..4101647 100644
--- a/post_proc/effect_api.c
+++ b/post_proc/effect_api.c
@@ -264,7 +264,10 @@
{
long param_values[128] = {0};
long *p_param_values = param_values;
- int i, *cfg = NULL;
+ int i;
+ int32_t *p_coeffs = NULL;
+ uint32_t lpf_len = 0, hpf_len = 0, bpf_len = 0;
+ uint32_t bsf_len = 0, tsf_len = 0, total_coeffs_len = 0;
ALOGV("%s: enabled=%d", __func__, pbe->enable_flag);
*p_param_values++ = PBE_MODULE;
@@ -283,9 +286,42 @@
*p_param_values++ = CONFIG_SET;
*p_param_values++ = 0; /* start offset if param size if greater than 128 */
*p_param_values++ = pbe->cfg_len;
- cfg = (int *)&pbe->config;
- for (i = 0; i < (int)pbe->cfg_len ; i+= sizeof(*p_param_values))
- *p_param_values++ = *cfg++;
+ *p_param_values++ = pbe->config.real_bass_mix;
+ *p_param_values++ = pbe->config.bass_color_control;
+ *p_param_values++ = pbe->config.main_chain_delay;
+ *p_param_values++ = pbe->config.xover_filter_order;
+ *p_param_values++ = pbe->config.bandpass_filter_order;
+ *p_param_values++ = pbe->config.drc_delay;
+ *p_param_values++ = pbe->config.rms_tav;
+ *p_param_values++ = pbe->config.exp_threshold;
+ *p_param_values++ = pbe->config.exp_slope;
+ *p_param_values++ = pbe->config.comp_threshold;
+ *p_param_values++ = pbe->config.comp_slope;
+ *p_param_values++ = pbe->config.makeup_gain;
+ *p_param_values++ = pbe->config.comp_attack;
+ *p_param_values++ = pbe->config.comp_release;
+ *p_param_values++ = pbe->config.exp_attack;
+ *p_param_values++ = pbe->config.exp_release;
+ *p_param_values++ = pbe->config.limiter_bass_threshold;
+ *p_param_values++ = pbe->config.limiter_high_threshold;
+ *p_param_values++ = pbe->config.limiter_bass_makeup_gain;
+ *p_param_values++ = pbe->config.limiter_high_makeup_gain;
+ *p_param_values++ = pbe->config.limiter_bass_gc;
+ *p_param_values++ = pbe->config.limiter_high_gc;
+ *p_param_values++ = pbe->config.limiter_delay;
+ *p_param_values++ = pbe->config.reserved;
+
+ p_coeffs = &pbe->config.p1LowPassCoeffs[0];
+ lpf_len = (pbe->config.xover_filter_order == 3) ? 10 : 5;
+ hpf_len = (pbe->config.xover_filter_order == 3) ? 10 : 5;
+ bpf_len = pbe->config.bandpass_filter_order * 5;
+ bsf_len = 5;
+ tsf_len = 5;
+ total_coeffs_len = lpf_len + hpf_len + bpf_len + bsf_len + tsf_len;
+
+ for (i = 0; i < total_coeffs_len; i++) {
+ *p_param_values++ = *p_coeffs++;
+ }
param_values[2] += 1;
}
@@ -533,7 +569,7 @@
for (i=0; i<eq->config.num_bands; i++) {
*p_param_values++ = eq->per_band_cfg[i].band_idx;
*p_param_values++ = eq->per_band_cfg[i].filter_type;
- *p_param_values++ = eq->per_band_cfg[i].freq_millihertz;
+ *p_param_values++ = eq->per_band_cfg[i].freq_millihertz;
*p_param_values++ = eq->per_band_cfg[i].gain_millibels;
*p_param_values++ = eq->per_band_cfg[i].quality_factor;
}
diff --git a/post_proc/ma_listener.c b/post_proc/ma_listener.c
index 9271dc7..e462646 100644
--- a/post_proc/ma_listener.c
+++ b/post_proc/ma_listener.c
@@ -28,7 +28,7 @@
#include <audio-base.h>
#define MA_FLAG ( EFFECT_FLAG_TYPE_INSERT | \
- EFFECT_FLAG_VOLUME_IND | \
+ EFFECT_FLAG_VOLUME_MONITOR | \
EFFECT_FLAG_DEVICE_IND | \
EFFECT_FLAG_OFFLOAD_SUPPORTED | \
EFFECT_FLAG_NO_PROCESS)
diff --git a/post_proc/virtualizer.c b/post_proc/virtualizer.c
index 0199a51..6c08bd7 100644
--- a/post_proc/virtualizer.c
+++ b/post_proc/virtualizer.c
@@ -21,25 +21,17 @@
//#define LOG_NDEBUG 0
#include <cutils/list.h>
+#include <cutils/properties.h>
#include <log/log.h>
#include <tinyalsa/asoundlib.h>
#include <sound/audio_effects.h>
#include <audio_effects/effect_virtualizer.h>
-#include <audio_feature_manager.h>
-#include <dlfcn.h>
-#include <unistd.h>
#include "effect_api.h"
#include "virtualizer.h"
#define VIRUALIZER_MAX_LATENCY 30
-#define PRIMARY_HAL_PATH XSTR(LIB_AUDIO_HAL)
-#define XSTR(x) STR(x)
-#define STR(x) #x
-
-static bool (*is_feature_enabled)(audio_ext_feature);
-
#ifdef AUDIO_FEATURE_ENABLED_GCOV
extern void __gcov_flush();
static void enable_gcov()
@@ -113,11 +105,9 @@
* true device is applicable for effect
*/
bool virtualizer_is_device_supported(audio_devices_t device) {
- if (is_feature_enabled != NULL &&
- is_feature_enabled(AFE_PROXY)) {
- if (device == AUDIO_DEVICE_OUT_PROXY)
- return false;
- }
+ if ((property_get_bool("vendor.audio.feature.afe_proxy.enable", false)) &&
+ (device == AUDIO_DEVICE_OUT_PROXY))
+ return false;
switch (device) {
case AUDIO_DEVICE_OUT_SPEAKER:
@@ -482,20 +472,6 @@
ALOGV("%s: ctxt %p", __func__, context);
virtualizer_context_t *virt_ctxt = (virtualizer_context_t *)context;
- if (access(PRIMARY_HAL_PATH, R_OK) == 0) {
- void *hal_lib_pointer = dlopen(PRIMARY_HAL_PATH, RTLD_NOW);
- if (hal_lib_pointer == NULL)
- ALOGE("%s: DLOPEN failed for %s", __func__, PRIMARY_HAL_PATH);
- else {
- is_feature_enabled =
- (bool (*)(audio_ext_feature))dlsym(hal_lib_pointer,
- "audio_feature_manager_is_feature_enabled");
- if (is_feature_enabled == NULL)
- ALOGE("%s: dlsym failed", __func__);
- }
- } else
- ALOGE("%s: not able to acces lib %s ", __func__, PRIMARY_HAL_PATH);
-
context->config.inputCfg.accessMode = EFFECT_BUFFER_ACCESS_READ;
context->config.inputCfg.channels = AUDIO_CHANNEL_OUT_STEREO;
context->config.inputCfg.format = AUDIO_FORMAT_PCM_16_BIT;
diff --git a/qahw/inc/qahw_defs.h b/qahw/inc/qahw_defs.h
index 755553b..e8a7ca7 100644
--- a/qahw/inc/qahw_defs.h
+++ b/qahw/inc/qahw_defs.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved.
* Not a Contribution.
*
* Copyright (C) 2011 The Android Open Source Project *
@@ -332,6 +332,12 @@
int64_t adjust_time;
};
+struct qahw_out_presentation_position_param {
+ struct timespec timestamp;
+ uint64_t frames;
+ int32_t clock_id;
+};
+
#define QAHW_MAX_ADSP_STREAM_CMD_PAYLOAD_LEN 512
typedef enum {
@@ -396,6 +402,7 @@
struct qahw_device_cfg_param device_cfg_params;
struct qahw_mix_matrix_params mix_matrix_params;
struct qahw_license_params license_params;
+ struct qahw_out_presentation_position_param pos_param;
} qahw_param_payload;
typedef enum {
@@ -415,6 +422,7 @@
QAHW_PARAM_OUT_MIX_MATRIX_PARAMS,
QAHW_PARAM_CH_MIX_MATRIX_PARAMS,
QAHW_PARAM_LICENSE_PARAMS,
+ QAHW_PARAM_OUT_PRESENTATION_POSITION,
} qahw_param_id;
typedef union {
diff --git a/qahw_api/inc/qahw_defs.h b/qahw_api/inc/qahw_defs.h
index 7c01c57..7bd5118 100644
--- a/qahw_api/inc/qahw_defs.h
+++ b/qahw_api/inc/qahw_defs.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved.
* Not a Contribution.
*
* Copyright (C) 2011 The Android Open Source Project *
@@ -313,6 +313,12 @@
int64_t adjust_time;
};
+struct qahw_out_presentation_position_param {
+ struct timespec timestamp;
+ uint64_t frames;
+ int32_t clock_id;
+};
+
#define QAHW_MAX_ADSP_STREAM_CMD_PAYLOAD_LEN 512
typedef enum {
@@ -378,6 +384,7 @@
struct qahw_device_cfg_param device_cfg_params;
struct qahw_mix_matrix_params mix_matrix_params;
struct qahw_license_params license_params;
+ struct qahw_out_presentation_position_param pos_param;
} qahw_param_payload;
typedef enum {
@@ -397,6 +404,7 @@
QAHW_PARAM_OUT_MIX_MATRIX_PARAMS,
QAHW_PARAM_CH_MIX_MATRIX_PARAMS,
QAHW_PARAM_LICENSE_PARAMS,
+ QAHW_PARAM_OUT_PRESENTATION_POSITION,
} qahw_param_id;
diff --git a/qahw_api/test/qahw_multi_record_test.c b/qahw_api/test/qahw_multi_record_test.c
index c345509..eccfe76 100644
--- a/qahw_api/test/qahw_multi_record_test.c
+++ b/qahw_api/test/qahw_multi_record_test.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved.
* Not a Contribution.
*
* Copyright (C) 2015 The Android Open Source Project *
@@ -77,6 +77,7 @@
char kvpairs[256];
bool timestamp_mode;
char timestamp_file_in[256];
+ bool bt_wbs;
};
struct timed_params {
@@ -260,7 +261,7 @@
double time_elapsed = 0;
ssize_t bytes_read = -1;
char param[100] = "audio_stream_profile=";
- char file_name[256] = "/data/rec";
+ char file_name[256] = "/data/audio/rec";
int data_sz = 0, name_len = strlen(file_name);
qahw_in_buffer_t in_buf;
static int64_t timestamp = 1;
@@ -347,6 +348,12 @@
strlcat(param, params->profile, sizeof(param));
qahw_in_set_parameters(in_handle, param);
+ if (audio_is_bluetooth_sco_device(params->input_device)) {
+ char param1[50];
+ snprintf(param1, sizeof(param1), "bt_wbs=%s", ((params->bt_wbs == 1) ? "on" : "off"));
+ qahw_set_parameters(qahw_mod_handle, param1);
+ }
+
/* Caution: Below ADL log shouldnt be altered without notifying automation APT since it used for
* automation testing
*/
@@ -548,6 +555,11 @@
scanf(" %d", &thread_param->input_device);
thread_param->input_device |= AUDIO_DEVICE_BIT_IN;
+ if (thread_param->input_device == AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET) {
+ printf(" \n Enable wbs for BT sco?? (1 - Enable 0 - Disable) ::::: ");
+ scanf("%d", &thread_param->bt_wbs);
+ }
+
printf(" \n Enter the format (1 ->16 bit pcm recording, 6 -> 24 bit packed pcm recording) ::::: ");
scanf(" %d", &thread_param->config.format);
@@ -587,6 +599,7 @@
thread_param->record_length = 8 /*sec*/;
thread_param->record_delay = 0 /*sec*/;
thread_param->timestamp_mode = false;
+ thread_param->bt_wbs = false;
thread_param->handle = 0x99A - rec_session;
}
@@ -613,6 +626,7 @@
printf(" All other flags passed would be ignore if this flag is used\n\n");
printf(" -S --source-tracking - Use this flag to show capture source tracking params for recordings\n\n");
printf(" -k --kvpairs - kvpairs to be set globally\n");
+ printf(" -z --bt-wbs - set bt_wbs param\n");
printf(" -h --help - Show this help\n\n");
printf(" \n Examples \n");
printf(" hal_rec_test -> start a recording stream with default configurations\n\n");
@@ -670,6 +684,7 @@
{"source-tracking", no_argument, 0, 'S'},
{"kvpairs", required_argument, 0, 'k'},
{"help", no_argument, 0, 'h'},
+ {"bt-wbs", no_argument, 0, 'z'},
{0, 0, 0, 0}
};
@@ -677,7 +692,7 @@
int option_index = 0;
while ((opt = getopt_long(argc,
argv,
- "-d:f:F:r:c:s:p:t:D:l:m:k:KiSh",
+ "-d:f:F:r:c:s:p:t:D:l:m:k:KiShz",
long_options,
&option_index)) != -1) {
switch (opt) {
@@ -727,6 +742,9 @@
case 'k':
snprintf(params[0].kvpairs, sizeof(params[0].kvpairs), "%s", optarg);
break;
+ case 'z':
+ params[0].bt_wbs = true;
+ break;
case 'h':
usage();
return 0;
diff --git a/qahw_api/test/qahw_playback_test.c b/qahw_api/test/qahw_playback_test.c
index 803242e..9f1489c 100644
--- a/qahw_api/test/qahw_playback_test.c
+++ b/qahw_api/test/qahw_playback_test.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved.
* Not a Contribution.
*
* Copyright (C) 2015 The Android Open Source Project *
@@ -648,6 +648,14 @@
fprintf(log_file, "stream %d: open output stream is success, out_handle %p\n", params->stream_index, params->out_handle);
+ if (audio_is_bluetooth_sco_device(params->output_device)) {
+ char param1[50];
+ int ret = -1;
+ snprintf(param1, sizeof(param1), "bt_wbs=%s", ((params->bt_wbs == 1) ? "on" : "off"));
+ ret = qahw_set_parameters(params->qahw_out_hal_handle, param1);
+ fprintf(log_file, " param %s set to hal with return value %d\n", param1, ret);
+ }
+
if (kpi_mode == true) {
measure_kpi_values(params->out_handle, params->flags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD);
rc = qahw_close_output_stream(params->out_handle);
@@ -1573,6 +1581,7 @@
printf(" -A --bt-addr <bt device addr> - Required to set bt device adress for aptx decoder\n\n");
printf(" -q --drift query - Required for querying avtime vs hdmi drift\n");
printf(" -Q --drift query and correction - Enable Drift query and correction\n");
+ printf(" -z --bt-wbs - Set bt_wbs param\n\n");
printf(" -P - Argument to do multi-stream playback, currently 2 streams are supported to run concurrently\n");
printf(" Put -P and mention required attributes for the next stream\n");
printf(" 0:bassboost 1:virtualizer 2:equalizer 3:visualizer(NA) 4:reverb 5:audiosphere others:null");
@@ -2103,6 +2112,7 @@
{"device-config", required_argument, 0, 'C'},
{"play-list", required_argument, 0, 'g'},
{"help", no_argument, 0, 'h'},
+ {"bt-wbs", no_argument, 0, 'z'},
{0, 0, 0, 0}
};
@@ -2125,7 +2135,7 @@
while ((opt = getopt_long(argc,
argv,
- "-f:r:c:b:d:s:v:V:l:t:a:w:k:PD:KF:Ee:A:u:m:S:C:p::x:y:qQh:i:h:g:O:",
+ "-f:r:c:b:d:s:v:V:l:t:a:w:k:PD:KF:Ee:A:u:m:S:C:p::x:y:qQzh:i:h:g:O:",
long_options,
&option_index)) != -1) {
@@ -2158,6 +2168,9 @@
case 'V':
enable_dump = atof(optarg);
break;
+ case 'z':
+ stream_param[i].bt_wbs = true;
+ break;
case 'l':
log_filename = optarg;
if (strcasecmp(log_filename, "stdout") &&
@@ -2498,10 +2511,19 @@
}
}
- if (stream->output_device != AUDIO_DEVICE_NONE)
- if ((stream->qahw_out_hal_handle = load_hal(stream->output_device)) <= 0)
+ if (stream->output_device != AUDIO_DEVICE_NONE) {
+ if ((stream->qahw_out_hal_handle = load_hal(stream->output_device)) <= 0)
goto exit;
+ /* Turn BT_SCO on if bt_sco recording */
+ if(audio_is_bluetooth_sco_device(stream->output_device)) {
+ int ret = -1;
+ const char * bt_sco_on = "BT_SCO=on";
+ ret = qahw_set_parameters(stream->qahw_out_hal_handle, bt_sco_on);
+ fprintf(log_file, " param %s set to hal with return value %d\n", bt_sco_on, ret);
+ }
+ }
+
if (stream->input_device != AUDIO_DEVICE_NONE)
if ((stream->qahw_in_hal_handle = load_hal(stream->input_device))== 0)
goto exit;
diff --git a/qahw_api/test/qahw_playback_test.h b/qahw_api/test/qahw_playback_test.h
index 0ac51df..6f33338 100644
--- a/qahw_api/test/qahw_playback_test.h
+++ b/qahw_api/test/qahw_playback_test.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-2017,2019, The Linux Foundation. All rights reserved.
* Not a Contribution.
*
* Copyright (C) 2015 The Android Open Source Project *
@@ -145,6 +145,7 @@
pthread_mutex_t input_buffer_available_lock;
uint32_t input_buffer_available_size;
char *set_params;
+ bool bt_wbs;
}stream_config;
qahw_module_handle_t * load_hal(audio_devices_t dev);
diff --git a/visualizer/offload_visualizer.c b/visualizer/offload_visualizer.c
index ccbd8bc..442ef3e 100644
--- a/visualizer/offload_visualizer.c
+++ b/visualizer/offload_visualizer.c
@@ -364,11 +364,11 @@
// Get sound card number from pcm device
int get_snd_card_num(char *device_info)
{
- char *token = NULL;
+ char *token = NULL, *saveptr = NULL;;
int num = -1;
- token = strtok(device_info, ": ");
- token = strtok(token, "-");
+ token = strtok_r(device_info, ": ", &saveptr);
+ token = strtok_r(token, "-", &saveptr);
if (token)
num = atoi(token);
@@ -381,7 +381,7 @@
char *token = NULL, *saveptr = NULL;
int id = -1;
- token = strtok(device_info, ": ");
+ token = strtok_r(device_info, ": ", &saveptr);
token = strtok_r(token, "-", &saveptr);
while (token != NULL) {
token = strtok_r(NULL, "-", &saveptr);
@@ -505,6 +505,7 @@
pcm_close(pcm);
pcm = NULL;
configure_proxy_capture(mixer, 0);
+ pthread_cond_wait(&cond, &lock);
} else {
capture_enabled = true;
ALOGD("%s: capture ENABLED", __func__);
diff --git a/voice_processing/voice_processing.c b/voice_processing/voice_processing.c
index 366adf7..50cb7af 100644
--- a/voice_processing/voice_processing.c
+++ b/voice_processing/voice_processing.c
@@ -414,7 +414,7 @@
list_for_each(node, &session_list) {
session = node_to_item(node, struct session_s, node);
- if (session->io == ioId) {
+ if (session->id == sessionId) {
if (session->created_msk & (1 << id)) {
ALOGV("get_session() effect %d already created", id);
return NULL;