Merge "config: remove USB devices in policy config file"
diff --git a/configs/kona/kona.mk b/configs/kona/kona.mk
index a8efc6c..ef11052 100644
--- a/configs/kona/kona.mk
+++ b/configs/kona/kona.mk
@@ -77,8 +77,10 @@
AUDIO_FEATURE_ENABLED_BATTERY_LISTENER := true
##AUDIO_FEATURE_FLAGS
+ifneq ($(strip $(TARGET_USES_RRO)), true)
#Audio Specific device overlays
DEVICE_PACKAGE_OVERLAYS += vendor/qcom/opensource/audio-hal/primary-hal/configs/common/overlay
+endif
PRODUCT_COPY_FILES += \
vendor/qcom/opensource/audio-hal/primary-hal/configs/kona/audio_io_policy.conf:$(TARGET_COPY_OUT_VENDOR)/etc/audio_io_policy.conf \
diff --git a/configs/kona/mixer_paths_mtp.xml b/configs/kona/mixer_paths_mtp.xml
index fbde6bf..6aedccf 100644
--- a/configs/kona/mixer_paths_mtp.xml
+++ b/configs/kona/mixer_paths_mtp.xml
@@ -301,7 +301,9 @@
<ctl name="EAR_RDAC Switch" value="0" />
<ctl name="HPHL_RDAC Switch" value="0" />
<ctl name="HPHR_RDAC Switch" value="0" />
+ <ctl name="AUX_RDAC Switch" value="0" />
<ctl name="RDAC3_MUX" value="ZERO" />
+ <ctl name="RX_EAR Mode" value="OFF" />
<!-- TX Controls -->
<ctl name="TX_CDC_DMA_TX_3 Channels" value="One" />
@@ -370,8 +372,13 @@
<ctl name="COMP7 Switch" value="0" />
<ctl name="COMP8 Switch" value="0" />
- <!-- Headphone Default mode - AB -->
- <ctl name="RX HPH Mode" value="CLS_AB" />
+ <!-- Headphone class-H mode -->
+ <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" />
@@ -1655,7 +1662,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" />
@@ -1780,11 +1787,11 @@
</path>
<path name="speaker-mic">
- <path name="dmic3" />
+ <path name="dmic5" />
</path>
<path name="speaker-mic-liquid">
- <path name="dmic3" />
+ <path name="dmic5" />
</path>
<path name="speaker-mic-sbc">
@@ -1842,7 +1849,7 @@
</path>
<path name="handset-mic">
- <path name="dmic3" />
+ <path name="dmic1" />
</path>
<path name="headphones">
@@ -1853,6 +1860,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" />
@@ -2015,17 +2024,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="DMIC2" />
+ <ctl name="TX DMIC MUX0" value="DMIC0" />
<ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
- <ctl name="TX DMIC MUX1" value="DMIC3" />
+ <ctl name="TX DMIC MUX1" value="DMIC2" />
</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="DMIC2" />
+ <ctl name="TX DMIC MUX0" value="DMIC0" />
<ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
- <ctl name="TX DMIC MUX1" value="DMIC3" />
+ <ctl name="TX DMIC MUX1" value="DMIC4" />
</path>
<path name="dmic-endfire">
@@ -2094,7 +2103,7 @@
<ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
<ctl name="TX DMIC MUX0" value="DMIC0" />
<ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
- <ctl name="TX DMIC MUX1" value="DMIC2" />
+ <ctl name="TX DMIC MUX1" value="DMIC4" />
</path>
<path name="dmic-broadside">
@@ -2110,11 +2119,11 @@
<path name="three-mic">
<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 DMIC MUX0" value="DMIC3" />
<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="TX DMIC MUX2" value="DMIC2" />
</path>
<path name="speaker-tmic">
@@ -2137,11 +2146,11 @@
<ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
<ctl name="TX DMIC MUX0" value="DMIC0" />
<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" />
+ <ctl name="TX DMIC MUX2" value="DMIC2" />
<ctl name="TX_AIF1_CAP Mixer DEC3" value="1" />
- <ctl name="TX DMIC MUX3" value="DMIC1" />
+ <ctl name="TX DMIC MUX3" value="DMIC4" />
</path>
<path name="speaker-qmic-liquid">
diff --git a/configs/kona/mixer_paths_qrd.xml b/configs/kona/mixer_paths_qrd.xml
index a888aab..f6c2eeb 100644
--- a/configs/kona/mixer_paths_qrd.xml
+++ b/configs/kona/mixer_paths_qrd.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
-<!-- Copyright (c) 2015-2018, The Linux Foundation. All rights reserved. -->
+<!-- Copyright (c) 2015-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 -->
@@ -301,7 +301,9 @@
<ctl name="EAR_RDAC Switch" value="0" />
<ctl name="HPHL_RDAC Switch" value="0" />
<ctl name="HPHR_RDAC Switch" value="0" />
+ <ctl name="AUX_RDAC Switch" value="0" />
<ctl name="RDAC3_MUX" value="ZERO" />
+ <ctl name="RX_EAR Mode" value="OFF" />
<!-- TX Controls -->
<ctl name="TX_CDC_DMA_TX_3 Channels" value="One" />
@@ -370,8 +372,13 @@
<ctl name="COMP7 Switch" value="0" />
<ctl name="COMP8 Switch" value="0" />
- <!-- Headphone Default mode - AB -->
- <ctl name="RX HPH Mode" value="CLS_AB" />
+ <!-- Headphone class-H mode -->
+ <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" />
@@ -1979,7 +1986,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" />
@@ -2034,24 +2041,24 @@
<path name="speaker">
<ctl name="WSA_CDC_DMA_RX_0 Channels" value="One" />
- <ctl name="WSA RX0 MUX" value="AIF1_PB" />
- <ctl name="WSA_RX0 INP0" value="RX0" />
- <ctl name="WSA_COMP1 Switch" value="1" />
- <ctl name="SpkrLeft COMP Switch" value="1" />
- <ctl name="SpkrLeft BOOST Switch" value="1" />
- <ctl name="SpkrLeft VISENSE Switch" value="1" />
- <ctl name="SpkrLeft SWR DAC_Port Switch" value="1" />
+ <ctl name="WSA RX1 MUX" value="AIF1_PB" />
+ <ctl name="WSA_RX1 INP0" value="RX1" />
+ <ctl name="WSA_COMP2 Switch" value="1" />
+ <ctl name="SpkrRight COMP Switch" value="1" />
+ <ctl name="SpkrRight BOOST Switch" value="1" />
+ <ctl name="SpkrRight VISENSE Switch" value="1" />
+ <ctl name="SpkrRight SWR DAC_Port Switch" value="1" />
</path>
<path name="speaker-mono">
<ctl name="WSA_CDC_DMA_RX_0 Channels" value="One" />
- <ctl name="WSA RX0 MUX" value="AIF1_PB" />
- <ctl name="WSA_RX0 INP0" value="RX0" />
- <ctl name="WSA_COMP1 Switch" value="1" />
- <ctl name="SpkrLeft COMP Switch" value="1" />
- <ctl name="SpkrLeft BOOST Switch" value="1" />
- <ctl name="SpkrLeft VISENSE Switch" value="1" />
- <ctl name="SpkrLeft SWR DAC_Port Switch" value="1" />
+ <ctl name="WSA RX1 MUX" value="AIF1_PB" />
+ <ctl name="WSA_RX1 INP0" value="RX1" />
+ <ctl name="WSA_COMP2 Switch" value="1" />
+ <ctl name="SpkrRight COMP Switch" value="1" />
+ <ctl name="SpkrRight BOOST Switch" value="1" />
+ <ctl name="SpkrRight VISENSE Switch" value="1" />
+ <ctl name="SpkrRight SWR DAC_Port Switch" value="1" />
</path>
<path name="speaker-mono-2">
@@ -2086,7 +2093,7 @@
</path>
<path name="speaker-mic">
- <path name="amic3" />
+ <path name="dmic2" />
</path>
<path name="speaker-protected">
@@ -2106,7 +2113,11 @@
</path>
<path name="voice-speaker-2-protected">
- <path name="voice-speaker-protected" />
+ <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-2" />
+ <ctl name="VI_FEED_TX Channels" value="One" />
+ <ctl name="WSA_RX_0_VI_FB_RCH_MUX" value="WSA_CDC_DMA_TX_0" />
</path>
<path name="voice-speaker-stereo-protected">
@@ -2129,10 +2140,11 @@
<ctl name="RX INT0 DEM MUX" value="CLSH_DSM_OUT" />
<ctl name="EAR_RDAC Switch" value="1" />
<ctl name="RDAC3_MUX" value="RX1" />
+ <ctl name="RX_EAR Mode" value="ON" />
</path>
<path name="handset-mic">
- <path name="amic1" />
+ <path name="dmic2" />
</path>
<path name="headphones">
@@ -2143,6 +2155,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" />
@@ -2157,9 +2171,13 @@
</path>
<path name="hph-highquality-mode">
+ <ctl name="RX_HPH_PWR_MODE" value="LOHIFI" />
+ <ctl name="RX HPH Mode" value="CLS_H_LOHIFI" />
</path>
<path name="hph-lowpower-mode">
+ <ctl name="RX_HPH_PWR_MODE" value="ULP" />
+ <ctl name="RX HPH Mode" value="CLS_H_ULP" />
</path>
<path name="true-native-mode">
@@ -2265,15 +2283,10 @@
<!-- Dual MIC devices -->
<path name="handset-dmic-endfire">
<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 DMIC MUX0" value="DMIC1" />
<ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
- <ctl name="ADC2_MIXER Switch" value="1" />
- <ctl name="ADC2 MUX" value="INP3" />
+ <ctl name="TX DMIC MUX0" value="DMIC3" />
</path>
<path name="speaker-dmic-endfire">
@@ -2333,6 +2346,7 @@
<ctl name="RX INT0_1 MIX1 INP0" value="RX0" />
<ctl name="RX INT0 DEM MUX" value="CLSH_DSM_OUT" />
<ctl name="RX_COMP1 Switch" value="1" />
+ <ctl name="HPHL_COMP Switch" value="1" />
<ctl name="HPHL_RDAC Switch" value="1" />
</path>
@@ -2356,7 +2370,7 @@
</path>
<path name="voice-tty-vco-handset-mic">
- <path name="amic3" />
+ <path name="dmic3" />
</path>
<path name="unprocessed-handset-mic">
diff --git a/configs/kona/sound_trigger_mixer_paths.xml b/configs/kona/sound_trigger_mixer_paths.xml
index 10488c2..d0dbd38 100644
--- a/configs/kona/sound_trigger_mixer_paths.xml
+++ b/configs/kona/sound_trigger_mixer_paths.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--- Copyright (c) 2014-2018, The Linux Foundation. All rights reserved. -->
+<!--- Copyright (c) 2014-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 -->
@@ -262,7 +262,10 @@
<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/kona/sound_trigger_platform_info.xml b/configs/kona/sound_trigger_platform_info.xml
index 18f15ff..09ebdce 100644
--- a/configs/kona/sound_trigger_platform_info.xml
+++ b/configs/kona/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" />
@@ -50,6 +48,7 @@
<param backend_dai_name="VA_CDC_DMA_TX_0" />
<!-- Param used to indicate if SVA has dedicated SLIM ports -->
<param dedicated_sva_path="true" />
+ <param disable_lpi_budget="true" />
</common_config>
<acdb_ids>
<param DEVICE_HANDSET_MIC_APE="100" />
@@ -212,6 +211,7 @@
<param sample_rate="16000" />
<param bit_width="16" />
<param out_channels="1"/> <!-- Module output channels -->
+ <param lpi_enable="true" />
<lsm_usecase>
<param capture_device="HANDSET" />
<!-- adm_cfg_profile should match with the one defined under adm_config -->
@@ -259,9 +259,52 @@
<param vendor_uuid="9f6ad62a-1f0b-11e7-87c5-40a8f03d3f15" />
<param execution_type="ADSP" /> <!-- value: "ADSP" "DYNAMIC" -->
<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 -->
+ <param lpi_enable="true" />
+ <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/msmnile_au/audio_platform_info.xml b/configs/msmnile_au/audio_platform_info.xml
index d74e1a3..1dbaac1 100644
--- a/configs/msmnile_au/audio_platform_info.xml
+++ b/configs/msmnile_au/audio_platform_info.xml
@@ -26,12 +26,12 @@
<!-- IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -->
<audio_platform_info>
<acdb_ids>
- <device name="SND_DEVICE_OUT_HANDSET" acdb_id="60"/>
- <device name="SND_DEVICE_OUT_SPEAKER" acdb_id="60"/>
- <device name="SND_DEVICE_OUT_HEADPHONES" acdb_id="60"/>
+ <device name="SND_DEVICE_OUT_HANDSET" acdb_id="78"/>
+ <device name="SND_DEVICE_OUT_SPEAKER" acdb_id="78"/>
+ <device name="SND_DEVICE_OUT_HEADPHONES" acdb_id="78"/>
<device name="SND_DEVICE_OUT_BT_SCO" acdb_id="94"/>
<device name="SND_DEVICE_OUT_BT_SCO_WB" acdb_id="94"/>
- <device name="SND_DEVICE_OUT_BT_A2DP" acdb_id="60"/>
+ <device name="SND_DEVICE_OUT_BT_A2DP" acdb_id="78"/>
<device name="SND_DEVICE_OUT_VOICE_HANDSET" acdb_id="94"/>
<device name="SND_DEVICE_OUT_VOICE_SPEAKER" acdb_id="94"/>
<device name="SND_DEVICE_IN_HANDSET_MIC" acdb_id="11"/>
diff --git a/configs/msmnile_au/mixer_paths_adp.xml b/configs/msmnile_au/mixer_paths_adp.xml
index e8f2540..78f815a 100644
--- a/configs/msmnile_au/mixer_paths_adp.xml
+++ b/configs/msmnile_au/mixer_paths_adp.xml
@@ -1616,9 +1616,11 @@
<path name="hfp-sco headphones">
</path>
- <path name="hfp-sco-wb">
+ <path name="hfp-sco-wb">
+ <ctl name="PRIM_AUX_PCM_TX SampleRate" value="KHZ_16" />
+ <ctl name="PRIM_AUX_PCM_RX SampleRate" value="KHZ_16" />
<path name="hfp-sco" />
- </path>
+ </path>
<path name="hfp-sco-wb headphones">
<path name="hfp-sco headphones" />
diff --git a/configs/msmnile_au/mixer_paths_custom.xml b/configs/msmnile_au/mixer_paths_custom.xml
index 3376223..774ec65 100644
--- a/configs/msmnile_au/mixer_paths_custom.xml
+++ b/configs/msmnile_au/mixer_paths_custom.xml
@@ -576,7 +576,7 @@
</path>
<path name="deep-buffer-playback">
- <ctl name="TERT_TDM_RX_0 Channels" value="Two" />
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia1" value="1" />
</path>
@@ -639,7 +639,7 @@
</path>
<path name="low-latency-playback">
- <ctl name="TERT_TDM_RX_0 Channels" value="Two" />
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia5" value="1" />
</path>
@@ -706,7 +706,7 @@
</path>
<path name="audio-ull-playback">
- <ctl name="TERT_TDM_RX_0 Channels" value="Two" />
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia8" value="1" />
</path>
@@ -772,7 +772,7 @@
</path>
<path name="compress-offload-playback">
- <ctl name="TERT_TDM_RX_0 Channels" value="Two" />
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia4" value="1" />
</path>
@@ -847,7 +847,7 @@
</path>
<path name="compress-offload-playback2">
- <ctl name="TERT_TDM_RX_0 Channels" value="Two" />
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia7" value="1" />
</path>
@@ -914,7 +914,7 @@
</path>
<path name="compress-offload-playback3">
- <ctl name="TERT_TDM_RX_0 Channels" value="Two" />
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia10" value="1" />
</path>
@@ -981,7 +981,7 @@
</path>
<path name="compress-offload-playback4">
- <ctl name="TERT_TDM_RX_0 Channels" value="Two" />
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia11" value="1" />
</path>
@@ -1049,7 +1049,7 @@
</path>
<path name="compress-offload-playback5">
- <ctl name="TERT_TDM_RX_0 Channels" value="Two" />
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia12" value="1" />
</path>
@@ -1116,7 +1116,7 @@
</path>
<path name="compress-offload-playback6">
- <ctl name="TERT_TDM_RX_0 Channels" value="Two" />
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia13" value="1" />
</path>
@@ -1183,7 +1183,7 @@
</path>
<path name="compress-offload-playback7">
- <ctl name="TERT_TDM_RX_0 Channels" value="Two" />
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia14" value="1" />
</path>
@@ -1250,7 +1250,7 @@
</path>
<path name="compress-offload-playback8">
- <ctl name="TERT_TDM_RX_0 Channels" value="Two" />
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia15" value="1" />
</path>
@@ -1317,7 +1317,7 @@
</path>
<path name="compress-offload-playback9">
- <ctl name="TERT_TDM_RX_0 Channels" value="Two" />
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia16" value="1" />
</path>
@@ -1612,9 +1612,11 @@
<path name="hfp-sco headphones">
</path>
- <path name="hfp-sco-wb">
+ <path name="hfp-sco-wb">
+ <ctl name="PRIM_AUX_PCM_TX SampleRate" value="KHZ_16" />
+ <ctl name="PRIM_AUX_PCM_RX SampleRate" value="KHZ_16" />
<path name="hfp-sco" />
- </path>
+ </path>
<path name="hfp-sco-wb headphones">
<path name="hfp-sco headphones" />
@@ -1753,6 +1755,7 @@
<!-- VoIP Rx settings -->
<path name="audio-playback-voip">
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia10" value="1" />
</path>
@@ -2611,8 +2614,6 @@
</path>
<path name="bt-a2dp">
- <ctl name="BT SampleRate" value="KHZ_48" />
- <ctl name="AFE Input Channels" value="Two" />
<ctl name="SLIM7_RX ADM Channels" value="Two" />
</path>
diff --git a/configs/msmsteppe_au/audio_platform_info.xml b/configs/msmsteppe_au/audio_platform_info.xml
index 590b697..1b49031 100644
--- a/configs/msmsteppe_au/audio_platform_info.xml
+++ b/configs/msmsteppe_au/audio_platform_info.xml
@@ -27,12 +27,12 @@
<!-- IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -->
<audio_platform_info>
<acdb_ids>
- <device name="SND_DEVICE_OUT_HANDSET" acdb_id="41"/>
- <device name="SND_DEVICE_OUT_SPEAKER" acdb_id="41"/>
- <device name="SND_DEVICE_OUT_HEADPHONES" acdb_id="41"/>
+ <device name="SND_DEVICE_OUT_HANDSET" acdb_id="78"/>
+ <device name="SND_DEVICE_OUT_SPEAKER" acdb_id="78"/>
+ <device name="SND_DEVICE_OUT_HEADPHONES" acdb_id="78"/>
<device name="SND_DEVICE_OUT_BT_SCO" acdb_id="94"/>
<device name="SND_DEVICE_OUT_BT_SCO_WB" acdb_id="94"/>
- <device name="SND_DEVICE_OUT_BT_A2DP" acdb_id="41"/>
+ <device name="SND_DEVICE_OUT_BT_A2DP" acdb_id="78"/>
<device name="SND_DEVICE_OUT_VOICE_HANDSET" acdb_id="94"/>
<device name="SND_DEVICE_OUT_VOICE_SPEAKER" acdb_id="94"/>
<device name="SND_DEVICE_IN_HANDSET_MIC" acdb_id="11"/>
diff --git a/configs/msmsteppe_au/mixer_paths_adp.xml b/configs/msmsteppe_au/mixer_paths_adp.xml
index 2e47684..432f50c 100644
--- a/configs/msmsteppe_au/mixer_paths_adp.xml
+++ b/configs/msmsteppe_au/mixer_paths_adp.xml
@@ -319,6 +319,10 @@
<ctl name="SEC_TDM_RX_0 Audio Mixer MultiMedia9" value="0" />
<ctl name="MultiMedia9 Mixer TERT_TDM_TX_0" value="0" />
+ <path name="dummy-hostless">
+ <ctl name="SEC_TDM_RX_7 Port Mixer TERT_TDM_TX_7" value="1" />
+ </path>
+
<!-- Codec controls -->
<!-- WSA controls -->
<ctl name="SpkrLeft COMP Switch" value="0" />
@@ -577,7 +581,7 @@
</path>
<path name="deep-buffer-playback">
- <ctl name="TERT_TDM_RX_0 Channels" value="Two" />
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia1" value="1" />
</path>
@@ -640,7 +644,7 @@
</path>
<path name="low-latency-playback">
- <ctl name="TERT_TDM_RX_0 Channels" value="Two" />
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia5" value="1" />
</path>
@@ -707,7 +711,7 @@
</path>
<path name="audio-ull-playback">
- <ctl name="TERT_TDM_RX_0 Channels" value="Two" />
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia8" value="1" />
</path>
@@ -773,7 +777,7 @@
</path>
<path name="compress-offload-playback">
- <ctl name="TERT_TDM_RX_0 Channels" value="Two" />
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia4" value="1" />
</path>
@@ -848,7 +852,7 @@
</path>
<path name="compress-offload-playback2">
- <ctl name="TERT_TDM_RX_0 Channels" value="Two" />
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia7" value="1" />
</path>
@@ -915,7 +919,7 @@
</path>
<path name="compress-offload-playback3">
- <ctl name="TERT_TDM_RX_0 Channels" value="Two" />
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia10" value="1" />
</path>
@@ -982,7 +986,7 @@
</path>
<path name="compress-offload-playback4">
- <ctl name="TERT_TDM_RX_0 Channels" value="Two" />
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia11" value="1" />
</path>
@@ -1050,7 +1054,7 @@
</path>
<path name="compress-offload-playback5">
- <ctl name="TERT_TDM_RX_0 Channels" value="Two" />
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia12" value="1" />
</path>
@@ -1117,7 +1121,7 @@
</path>
<path name="compress-offload-playback6">
- <ctl name="TERT_TDM_RX_0 Channels" value="Two" />
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia13" value="1" />
</path>
@@ -1184,7 +1188,7 @@
</path>
<path name="compress-offload-playback7">
- <ctl name="TERT_TDM_RX_0 Channels" value="Two" />
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia14" value="1" />
</path>
@@ -1251,7 +1255,7 @@
</path>
<path name="compress-offload-playback8">
- <ctl name="TERT_TDM_RX_0 Channels" value="Two" />
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia15" value="1" />
</path>
@@ -1318,7 +1322,7 @@
</path>
<path name="compress-offload-playback9">
- <ctl name="TERT_TDM_RX_0 Channels" value="Two" />
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia16" value="1" />
</path>
@@ -1613,9 +1617,11 @@
<path name="hfp-sco headphones">
</path>
- <path name="hfp-sco-wb">
+ <path name="hfp-sco-wb">
+ <ctl name="PRIM_AUX_PCM_TX SampleRate" value="KHZ_16" />
+ <ctl name="PRIM_AUX_PCM_RX SampleRate" value="KHZ_16" />
<path name="hfp-sco" />
- </path>
+ </path>
<path name="hfp-sco-wb headphones">
<path name="hfp-sco headphones" />
@@ -1754,6 +1760,7 @@
<!-- VoIP Rx settings -->
<path name="audio-playback-voip">
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia10" value="1" />
</path>
diff --git a/configs/msmsteppe_au/mixer_paths_custom.xml b/configs/msmsteppe_au/mixer_paths_custom.xml
index d701121..f9257d2 100644
--- a/configs/msmsteppe_au/mixer_paths_custom.xml
+++ b/configs/msmsteppe_au/mixer_paths_custom.xml
@@ -577,7 +577,7 @@
</path>
<path name="deep-buffer-playback">
- <ctl name="TERT_TDM_RX_0 Channels" value="Two" />
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia1" value="1" />
</path>
@@ -640,7 +640,7 @@
</path>
<path name="low-latency-playback">
- <ctl name="TERT_TDM_RX_0 Channels" value="Two" />
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia5" value="1" />
</path>
@@ -707,7 +707,7 @@
</path>
<path name="audio-ull-playback">
- <ctl name="TERT_TDM_RX_0 Channels" value="Two" />
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia8" value="1" />
</path>
@@ -773,7 +773,7 @@
</path>
<path name="compress-offload-playback">
- <ctl name="TERT_TDM_RX_0 Channels" value="Two" />
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia4" value="1" />
</path>
@@ -848,7 +848,7 @@
</path>
<path name="compress-offload-playback2">
- <ctl name="TERT_TDM_RX_0 Channels" value="Two" />
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia7" value="1" />
</path>
@@ -915,7 +915,7 @@
</path>
<path name="compress-offload-playback3">
- <ctl name="TERT_TDM_RX_0 Channels" value="Two" />
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia10" value="1" />
</path>
@@ -982,7 +982,7 @@
</path>
<path name="compress-offload-playback4">
- <ctl name="TERT_TDM_RX_0 Channels" value="Two" />
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia11" value="1" />
</path>
@@ -1050,7 +1050,7 @@
</path>
<path name="compress-offload-playback5">
- <ctl name="TERT_TDM_RX_0 Channels" value="Two" />
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia12" value="1" />
</path>
@@ -1117,7 +1117,7 @@
</path>
<path name="compress-offload-playback6">
- <ctl name="TERT_TDM_RX_0 Channels" value="Two" />
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia13" value="1" />
</path>
@@ -1184,7 +1184,7 @@
</path>
<path name="compress-offload-playback7">
- <ctl name="TERT_TDM_RX_0 Channels" value="Two" />
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia14" value="1" />
</path>
@@ -1251,7 +1251,7 @@
</path>
<path name="compress-offload-playback8">
- <ctl name="TERT_TDM_RX_0 Channels" value="Two" />
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia15" value="1" />
</path>
@@ -1318,7 +1318,7 @@
</path>
<path name="compress-offload-playback9">
- <ctl name="TERT_TDM_RX_0 Channels" value="Two" />
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia16" value="1" />
</path>
@@ -1613,9 +1613,11 @@
<path name="hfp-sco headphones">
</path>
- <path name="hfp-sco-wb">
+ <path name="hfp-sco-wb">
+ <ctl name="PRIM_AUX_PCM_TX SampleRate" value="KHZ_16" />
+ <ctl name="PRIM_AUX_PCM_RX SampleRate" value="KHZ_16" />
<path name="hfp-sco" />
- </path>
+ </path>
<path name="hfp-sco-wb headphones">
<path name="hfp-sco headphones" />
@@ -1754,6 +1756,7 @@
<!-- VoIP Rx settings -->
<path name="audio-playback-voip">
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia10" value="1" />
</path>
@@ -2612,8 +2615,6 @@
</path>
<path name="bt-a2dp">
- <ctl name="BT SampleRate" value="KHZ_48" />
- <ctl name="AFE Input Channels" value="Two" />
<ctl name="SLIM7_RX ADM Channels" value="Two" />
</path>
diff --git a/hal/Android.mk b/hal/Android.mk
index 53a2247..7cab96f 100644
--- a/hal/Android.mk
+++ b/hal/Android.mk
@@ -72,6 +72,7 @@
endif
ifneq ($(filter kona,$(TARGET_BOARD_PLATFORM)),)
LOCAL_CFLAGS := -DPLATFORM_KONA
+ LOCAL_CFLAGS += -DMAX_TARGET_SPECIFIC_CHANNEL_CNT="4"
endif
ifneq ($(filter $(MSMSTEPPE) ,$(TARGET_BOARD_PLATFORM)),)
LOCAL_CFLAGS := -DPLATFORM_MSMSTEPPE
@@ -358,7 +359,6 @@
libdl \
libaudioutils \
libexpat \
- libqti_vndfwk_detect \
libhwbinder \
libhidlbase \
libhidltransport \
diff --git a/hal/ahal_config_helper.cpp b/hal/ahal_config_helper.cpp
index 92bb520..63f44ab 100644
--- a/hal/ahal_config_helper.cpp
+++ b/hal/ahal_config_helper.cpp
@@ -74,6 +74,12 @@
true, /* FLUENCE */
true, /* CUSTOM_STEREO */
true, /* ANC_HEADSET */
+ true, /* SPKR_PROT */
+ true, /* FM_POWER_OPT */
+ false, /* EXTERNAL_QDSP */
+ false, /* EXTERNAL_SPEAKER */
+ false, /* EXTERNAL_SPEAKER_TFA */
+ false, /* HWDEP_CAL */
false, /* DSM_FEEDBACK */
true, /* USB_OFFLOAD */
false, /* USB_OFFLOAD_BURST_MODE */
@@ -102,6 +108,12 @@
false, /* FLUENCE */
false, /* CUSTOM_STEREO */
false, /* ANC_HEADSET */
+ true, /* SPKR_PROT */
+ false, /* FM_POWER_OPT */
+ true, /* EXTERNAL_QDSP */
+ true, /* EXTERNAL_SPEAKER */
+ false, /* EXTERNAL_SPEAKER_TFA */
+ true, /* HWDEP_CAL */
false, /* DSM_FEEDBACK */
true, /* USB_OFFLOAD */
false, /* USB_OFFLOAD_BURST_MODE */
diff --git a/hal/ahal_config_helper.h b/hal/ahal_config_helper.h
index 6e19bfa..32f575c 100644
--- a/hal/ahal_config_helper.h
+++ b/hal/ahal_config_helper.h
@@ -46,6 +46,12 @@
bool fluence_enabled;
bool custom_stereo_enabled;
bool anc_headset_enabled;
+ bool spkr_prot_enabled;
+ bool fm_power_opt_enabled;
+ bool ext_qdsp_enabled;
+ bool ext_spkr_enabled;
+ bool ext_spkr_tfa_enabled;
+ bool hwdep_cal_enabled;
bool dsm_feedback_enabled;
bool usb_offload_enabled;
bool usb_offload_burst_mode;
diff --git a/hal/audio_extn/Android.mk b/hal/audio_extn/Android.mk
index 57ce7a1..3f341b1 100644
--- a/hal/audio_extn/Android.mk
+++ b/hal/audio_extn/Android.mk
@@ -373,8 +373,7 @@
libtinycompress \
libaudioroute \
libdl \
- libexpat \
- libqti_vndfwk_detect
+ libexpat
LOCAL_C_INCLUDES := \
$(PRIMARY_HAL_PATH) \
diff --git a/hal/audio_extn/a2dp.c b/hal/audio_extn/a2dp.c
index e1f902e..90199cf 100644
--- a/hal/audio_extn/a2dp.c
+++ b/hal/audio_extn/a2dp.c
@@ -33,7 +33,6 @@
#include <log/log.h>
#include <dlfcn.h>
#include <pthread.h>
-#include <vndfwk-detect.h>
#include "audio_hw.h"
#include "platform.h"
#include "platform_api.h"
@@ -142,6 +141,19 @@
#define CH_MONO 1
#define SOURCE 0
#define SINK 1
+#define UNINITIALIZED -1
+
+#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;
+static int is_running_with_enhanced_fwk = UNINITIALIZED;
+
+typedef int (*vndk_fwk_isVendorEnhancedFwk_t)();
+static vndk_fwk_isVendorEnhancedFwk_t vndk_fwk_isVendorEnhancedFwk;
/*
* Below enum values are extended from audio_base.h to
@@ -810,6 +822,26 @@
return -ENOSYS;
}
+static int check_if_enhanced_fwk() {
+
+ int is_enhanced_fwk = 1;
+ //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_enhanced_fwk = 1;
+ } else {
+ is_enhanced_fwk = vndk_fwk_isVendorEnhancedFwk();
+ }
+ }
+ ALOGV("%s: vndk_fwk_isVendorEnhancedFwk=%d", __func__, is_enhanced_fwk);
+ return is_enhanced_fwk;
+}
+
/* API to open BT IPC library to start IPC communication for BT Source*/
static void open_a2dp_source()
{
@@ -817,7 +849,9 @@
ALOGD(" Open A2DP source start ");
if (a2dp.bt_lib_source_handle == NULL) {
- if(!isRunningWithVendorEnhancedFramework()) {
+ if (is_running_with_enhanced_fwk == UNINITIALIZED)
+ is_running_with_enhanced_fwk = check_if_enhanced_fwk();
+ if (!is_running_with_enhanced_fwk) {
ALOGD(" Requesting for BT lib handle");
a2dp.bt_lib_source_handle = dlopen(BT_IPC_SOURCE_LIB_NAME, RTLD_NOW);
if (a2dp.bt_lib_source_handle == NULL) {
@@ -865,7 +899,7 @@
if (a2dp.bt_state_source == A2DP_STATE_DISCONNECTED) {
ALOGD("calling BT stream open");
ret = a2dp.audio_source_open();
- if(ret != 0) {
+ if (ret != 0) {
ALOGE("Failed to open source stream for a2dp: status %d", ret);
goto init_fail;
}
@@ -880,10 +914,14 @@
}
init_fail:
- if(ret != 0 && (a2dp.bt_lib_source_handle != NULL)) {
+ if (ret != 0 && (a2dp.bt_lib_source_handle != NULL)) {
dlclose(a2dp.bt_lib_source_handle);
a2dp.bt_lib_source_handle = NULL;
}
+ if (vndk_fwk_lib_handle != NULL) {
+ dlclose(vndk_fwk_lib_handle);
+ vndk_fwk_lib_handle = NULL;
+ }
}
/* API to open BT IPC library to start IPC communication for BT Sink*/
@@ -922,7 +960,7 @@
if (a2dp.bt_state_source != A2DP_STATE_DISCONNECTED) {
ALOGD("calling BT source stream close");
- if(a2dp.audio_source_close() == false)
+ if (a2dp.audio_source_close() == false)
ALOGE("failed close a2dp source control path from BT library");
}
a2dp.a2dp_source_started = false;
@@ -954,7 +992,7 @@
if (a2dp.bt_state_sink != A2DP_STATE_DISCONNECTED) {
ALOGD("calling BT sink stream close");
- if(a2dp.audio_source_close() == false)
+ if (a2dp.audio_source_close() == false)
ALOGE("failed close a2dp sink control path from BT library");
}
a2dp.a2dp_sink_started = false;
@@ -1140,7 +1178,7 @@
bool is_configured = false;
int ret = 0;
- if(aac_bt_cfg == NULL)
+ if (aac_bt_cfg == NULL)
return false;
ctl_dec_data = mixer_get_ctl_by_name(a2dp.adev->mixer, MIXER_SINK_DEC_CONFIG_BLOCK);
@@ -1342,7 +1380,7 @@
bool is_configured = false;
int ret = 0;
- if(sbc_bt_cfg == NULL)
+ if (sbc_bt_cfg == NULL)
goto fail;
ctl_dec_data = mixer_get_ctl_by_name(a2dp.adev->mixer, MIXER_SINK_DEC_CONFIG_BLOCK);
@@ -1437,7 +1475,7 @@
bool is_configured = false;
int ret = 0;
- if(sbc_bt_cfg == NULL)
+ if (sbc_bt_cfg == NULL)
return false;
ctl_enc_data = mixer_get_ctl_by_name(a2dp.adev->mixer, MIXER_ENC_CONFIG_BLOCK);
@@ -1504,7 +1542,7 @@
{
int ret = 0;
- if(aptx_dsp_cfg == NULL || aptx_bt_cfg == NULL) {
+ 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;
@@ -1592,7 +1630,7 @@
{
int ret = 0;
- if(aptx_dsp_cfg == NULL || aptx_bt_cfg == NULL) {
+ 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;
@@ -1648,7 +1686,7 @@
{
int ret = 0;
- if(aptx_dsp_cfg == NULL || aptx_bt_cfg == NULL) {
+ 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;
@@ -1685,7 +1723,7 @@
int ret = 0;
int sample_rate_backup;
- if(aptx_bt_cfg == NULL)
+ if (aptx_bt_cfg == NULL)
return false;
ctl_enc_data = mixer_get_ctl_by_name(a2dp.adev->mixer, MIXER_ENC_CONFIG_BLOCK);
@@ -1697,7 +1735,7 @@
#ifndef LINUX_ENABLED
struct aptx_enc_cfg_t aptx_dsp_cfg;
struct aptx_ad_enc_cfg_t aptx_ad_dsp_cfg;
- if(a2dp.is_aptx_adaptive) {
+ 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);
sample_rate_backup = aptx_ad_dsp_cfg.custom_cfg.sample_rate;
@@ -1711,7 +1749,7 @@
goto fail;
}
- if(a2dp.is_aptx_adaptive) {
+ if (a2dp.is_aptx_adaptive) {
ret = mixer_ctl_set_array(ctl_enc_data, (void *)&aptx_ad_dsp_cfg,
mixer_size);
} else {
@@ -1736,9 +1774,9 @@
goto fail;
}
#ifndef LINUX_ENABLED //Temporarily disabled for LE, need to take care while doing VT FR
- if(a2dp.is_aptx_adaptive)
+ if (a2dp.is_aptx_adaptive)
ret = a2dp_set_bit_format(aptx_bt_cfg->ad_cfg->bits_per_sample);
- else if(a2dp.is_aptx_dual_mono_supported)
+ else if (a2dp.is_aptx_dual_mono_supported)
ret = a2dp_set_bit_format(aptx_bt_cfg->dual_mono_cfg->bits_per_sample);
else
ret = a2dp_set_bit_format(aptx_bt_cfg->default_cfg->bits_per_sample);
@@ -1754,7 +1792,7 @@
a2dp.bt_encoder_format = CODEC_TYPE_APTX;
fail:
/*restore sample rate */
- if(!is_configured)
+ if (!is_configured)
a2dp.enc_sampling_rate = sample_rate_backup;
return is_configured;
}
@@ -1772,7 +1810,7 @@
bool is_configured = false;
int ret = 0;
- if(aptx_bt_cfg == NULL)
+ if (aptx_bt_cfg == NULL)
return false;
ctl_enc_data = mixer_get_ctl_by_name(a2dp.adev->mixer, MIXER_ENC_CONFIG_BLOCK);
@@ -1941,7 +1979,7 @@
struct celt_enc_cfg_t celt_dsp_cfg;
bool is_configured = false;
int ret = 0;
- if(celt_bt_cfg == NULL)
+ if (celt_bt_cfg == NULL)
return false;
ctl_enc_data = mixer_get_ctl_by_name(a2dp.adev->mixer, MIXER_ENC_CONFIG_BLOCK);
@@ -2002,7 +2040,7 @@
struct ldac_enc_cfg_t ldac_dsp_cfg;
bool is_configured = false;
int ret = 0;
- if(ldac_bt_cfg == NULL)
+ if (ldac_bt_cfg == NULL)
return false;
ldac_enc_data = mixer_get_ctl_by_name(a2dp.adev->mixer, MIXER_ENC_CONFIG_BLOCK);
@@ -2176,13 +2214,13 @@
ALOGD("a2dp_start_playback start");
- if(!(a2dp.bt_lib_source_handle && a2dp.audio_source_start
+ if (!(a2dp.bt_lib_source_handle && a2dp.audio_source_start
&& a2dp.audio_get_enc_config)) {
ALOGE("a2dp handle is not identified, Ignoring start playback request");
return -ENOSYS;
}
- if(a2dp.a2dp_source_suspended == true) {
+ if (a2dp.a2dp_source_suspended == true) {
//session will be restarted after suspend completion
ALOGD("a2dp start requested during suspend state");
return -ENOSYS;
@@ -2197,7 +2235,7 @@
ALOGE("BT controller start failed");
a2dp.a2dp_source_started = false;
} else {
- if(configure_a2dp_encoder_format() == true) {
+ if (configure_a2dp_encoder_format() == true) {
a2dp.a2dp_source_started = true;
ret = 0;
ALOGD("Start playback successful to BT library");
@@ -2271,7 +2309,7 @@
ALOGD("a2dp_start_capture start");
- if(!(a2dp.bt_lib_sink_handle && a2dp.audio_sink_start
+ if (!(a2dp.bt_lib_sink_handle && a2dp.audio_sink_start
&& a2dp.audio_get_dec_config)) {
ALOGE("a2dp handle is not identified, Ignoring start capture request");
return -ENOSYS;
@@ -2287,12 +2325,12 @@
a2dp.a2dp_sink_started = false;
} else {
- if(!a2dp_sink_is_ready()) {
+ if (!a2dp_sink_is_ready()) {
ALOGD("Wait for capture ready not successful");
ret = -ETIMEDOUT;
}
- if(configure_a2dp_sink_decoder_format() == true) {
+ if (configure_a2dp_sink_decoder_format() == true) {
a2dp.a2dp_sink_started = true;
ret = 0;
ALOGD("Start capture successful to BT library");
@@ -2311,7 +2349,7 @@
if (a2dp.a2dp_sink_started) {
if (a2dp_set_backend_cfg(SINK) == true) {
- a2dp.a2dp_sink_total_active_session_requests++;
+ a2dp.a2dp_sink_total_active_session_requests++;
}
}
@@ -2412,7 +2450,7 @@
int ret =0;
ALOGV("a2dp_stop_playback start");
- if(!(a2dp.bt_lib_source_handle && a2dp.audio_source_stop)) {
+ if (!(a2dp.bt_lib_source_handle && a2dp.audio_source_stop)) {
ALOGE("a2dp handle is not identified, Ignoring stop request");
return -ENOSYS;
}
@@ -2438,7 +2476,7 @@
a2dp.a2dp_source_started = false;
a2dp_reset_backend_cfg(SOURCE);
}
- if(!a2dp.a2dp_source_total_active_session_requests)
+ if (!a2dp.a2dp_source_total_active_session_requests)
a2dp.a2dp_source_started = false;
ALOGD("Stop A2DP playback, total active sessions :%d",
a2dp.a2dp_source_total_active_session_requests);
@@ -2450,7 +2488,7 @@
int ret =0;
ALOGV("a2dp_stop_capture start");
- if(!(a2dp.bt_lib_sink_handle && a2dp.audio_sink_stop)) {
+ if (!(a2dp.bt_lib_sink_handle && a2dp.audio_sink_stop)) {
ALOGE("a2dp handle is not identified, Ignoring stop request");
return -ENOSYS;
}
@@ -2468,7 +2506,7 @@
reset_a2dp_sink_dec_config_params();
a2dp_reset_backend_cfg(SINK);
}
- if(!a2dp.a2dp_sink_total_active_session_requests)
+ if (!a2dp.a2dp_sink_total_active_session_requests)
a2dp.a2dp_source_started = false;
ALOGD("Stop A2DP capture, total active sessions :%d",
a2dp.a2dp_sink_total_active_session_requests);
@@ -2482,7 +2520,7 @@
struct audio_usecase *uc_info;
struct listnode *node;
- if(a2dp.is_a2dp_offload_supported == false) {
+ if (a2dp.is_a2dp_offload_supported == false) {
ALOGV("no supported encoders identified,ignoring a2dp setparam");
status = -EINVAL;
goto param_handled;
@@ -2522,9 +2560,9 @@
ret = str_parms_get_str(parms, "TwsChannelConfig", value, sizeof(value));
if (ret>=0) {
ALOGD("Setting tws channel mode to %s",value);
- if(!(strncmp(value,"mono",strlen(value))))
+ if (!(strncmp(value,"mono",strlen(value))))
a2dp.is_tws_mono_mode_on = true;
- else if(!(strncmp(value,"dual-mono",strlen(value))))
+ else if (!(strncmp(value,"dual-mono",strlen(value))))
a2dp.is_tws_mono_mode_on = false;
audio_a2dp_update_tws_channel_mode();
goto param_handled;
@@ -2553,13 +2591,13 @@
}
reset_a2dp_enc_config_params();
reset_a2dp_source_dec_config_params();
- if(a2dp.audio_source_suspend)
+ if (a2dp.audio_source_suspend)
a2dp.audio_source_suspend();
} else if (a2dp.a2dp_source_suspended == true) {
ALOGD("Resetting a2dp suspend state");
struct audio_usecase *uc_info;
struct listnode *node;
- if(a2dp.clear_source_a2dpsuspend_flag)
+ if (a2dp.clear_source_a2dpsuspend_flag)
a2dp.clear_source_a2dpsuspend_flag();
a2dp.a2dp_source_suspended = false;
/*
@@ -2575,7 +2613,7 @@
*/
if (a2dp.a2dp_source_total_active_session_requests > 0) {
ALOGD(" Calling IPC lib start post suspend state");
- if(a2dp.audio_source_start) {
+ if (a2dp.audio_source_start) {
ret = a2dp.audio_source_start();
if (ret != 0) {
ALOGE("BT controller start failed");
@@ -2687,7 +2725,10 @@
a2dp.a2dp_sink_started = false;
a2dp.bt_state_sink = A2DP_STATE_DISCONNECTED;
a2dp.a2dp_sink_total_active_session_requests = 0;
- if (isRunningWithVendorEnhancedFramework())
+
+ if (is_running_with_enhanced_fwk == UNINITIALIZED)
+ is_running_with_enhanced_fwk = check_if_enhanced_fwk();
+ if (is_running_with_enhanced_fwk)
open_a2dp_sink();
a2dp.is_a2dp_offload_supported = false;
diff --git a/hal/audio_extn/audio_extn.c b/hal/audio_extn/audio_extn.c
index 8e52e11..440f1d8 100644
--- a/hal/audio_extn/audio_extn.c
+++ b/hal/audio_extn/audio_extn.c
@@ -67,7 +67,7 @@
#define MAX_NUM_CHANNELS 8
#define Q14_GAIN_UNITY 0x4000
-static bool is_running_on_stock_version = true;
+static int is_running_vendor_enhanced_fwk = 1;
static bool is_compress_meta_data_enabled = false;
struct snd_card_split cur_snd_card_split = {
@@ -1130,13 +1130,14 @@
void spkr_prot_feature_init(bool is_feature_enabled)
{
- ALOGD("%s: Called with feature %s", __func__, is_feature_enabled?"Enabled":"NOT Enabled");
+ ALOGD("%s: Called with feature %s, is_running_with_enhanced_fwk %d", __func__,
+ is_feature_enabled?"Enabled":"NOT Enabled", is_running_vendor_enhanced_fwk);
if (is_feature_enabled) {
//dlopen lib
- if (is_running_on_stock_version)
- spkr_prot_lib_handle = dlopen(CIRRUS_SPKR_PROT_LIB_PATH, RTLD_NOW);
- else
+ if (is_running_vendor_enhanced_fwk)
spkr_prot_lib_handle = dlopen(SPKR_PROT_LIB_PATH, RTLD_NOW);
+ else
+ spkr_prot_lib_handle = dlopen(CIRRUS_SPKR_PROT_LIB_PATH, RTLD_NOW);
if (spkr_prot_lib_handle == NULL) {
ALOGE("%s: dlopen failed", __func__);
@@ -2328,8 +2329,6 @@
void audio_extn_init(struct audio_device *adev)
{
- //fix-me: check running on vendor enhanced build
- //is_running_on_stock_version = !isRunningWithVendorEnhancedFramework();
aextnmod.anc_enabled = 0;
aextnmod.aanc_enabled = 0;
aextnmod.custom_stereo_enabled = 0;
@@ -3699,8 +3698,9 @@
}
// END: A2DP_OFFLOAD =====================================================================
-void audio_extn_feature_init()
+void audio_extn_feature_init(int is_running_with_enhanced_fwk)
{
+ 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);
@@ -3733,6 +3733,7 @@
break;
case KPI_OPTIMIZE:
kpi_optimize_feature_init(enable);
+ break;
case USB_OFFLOAD:
usb_offload_feature_init(enable);
break;
@@ -3763,6 +3764,24 @@
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;
default:
break;
}
diff --git a/hal/audio_extn/audio_extn.h b/hal/audio_extn/audio_extn.h
index 158370a..3503fd6 100644
--- a/hal/audio_extn/audio_extn.h
+++ b/hal/audio_extn/audio_extn.h
@@ -228,7 +228,7 @@
// call at adev init
void audio_extn_init(struct audio_device *adev);
-void audio_extn_feature_init();
+void audio_extn_feature_init(int is_running_with_enhanced_fwk);
//START: SND_MONITOR_FEATURE ===========================================
void snd_mon_feature_init (bool is_feature_enabled);
typedef void (* snd_mon_cb)(void * stream, struct str_parms * parms);
diff --git a/hal/audio_extn/audio_feature_manager.c b/hal/audio_extn/audio_feature_manager.c
index bf92bd6..bc996a2 100644
--- a/hal/audio_extn/audio_feature_manager.c
+++ b/hal/audio_extn/audio_feature_manager.c
@@ -33,10 +33,10 @@
#include <stdlib.h>
#include <errno.h>
#include <fcntl.h>
+#include <dlfcn.h>
#include <cutils/properties.h>
#include <log/log.h>
#include <unistd.h>
-#include <vndfwk-detect.h>
#include "audio_hw.h"
#include "audio_extn.h"
#include "voice_extn.h"
@@ -44,14 +44,48 @@
extern AHalValues* confValues;
+#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;
+
+
+
void audio_feature_manager_init()
{
- ALOGV("%s: Enter", __func__);
- audio_extn_ahal_config_helper_init(
- isRunningWithVendorEnhancedFramework());
+ 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);
+ audio_extn_ahal_config_helper_init(is_running_with_enhanced_fwk);
confValues = audio_extn_get_feature_values();
- audio_extn_feature_init();
- voice_extn_feature_init();
+ 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)
@@ -99,6 +133,18 @@
return confValues->custom_stereo_enabled;
case ANC_HEADSET:
return confValues->anc_headset_enabled;
+ case SPKR_PROT:
+ return confValues->spkr_prot_enabled;
+ case FM_POWER_OPT_FEATURE:
+ return confValues->fm_power_opt_enabled;
+ case EXTERNAL_QDSP:
+ return confValues->ext_qdsp_enabled;
+ case EXTERNAL_SPEAKER:
+ return confValues->ext_spkr_enabled;
+ case EXTERNAL_SPEAKER_TFA:
+ return confValues->ext_spkr_tfa_enabled;
+ case HWDEP_CAL:
+ return confValues->hwdep_cal_enabled;
case DSM_FEEDBACK:
return confValues->dsm_feedback_enabled;
case USB_OFFLOAD:
diff --git a/hal/audio_extn/audio_feature_manager.h b/hal/audio_extn/audio_feature_manager.h
index 8433db0..5e84db0 100644
--- a/hal/audio_extn/audio_feature_manager.h
+++ b/hal/audio_extn/audio_feature_manager.h
@@ -55,6 +55,12 @@
USB_OFFLOAD_SIDETONE_VOLM,
A2DP_OFFLOAD,
VBAT,
+ SPKR_PROT,
+ FM_POWER_OPT_FEATURE,
+ EXTERNAL_QDSP,
+ EXTERNAL_SPEAKER,
+ EXTERNAL_SPEAKER_TFA,
+ HWDEP_CAL,
COMPRESS_METADATA_NEEDED,
VOICE_START = COMPRESS_METADATA_NEEDED,
COMPRESS_VOIP,
diff --git a/hal/audio_extn/ext_hw_plugin.c b/hal/audio_extn/ext_hw_plugin.c
index 1336ae8..a24f5c6 100644
--- a/hal/audio_extn/ext_hw_plugin.c
+++ b/hal/audio_extn/ext_hw_plugin.c
@@ -47,6 +47,11 @@
typedef int32_t (*audio_hal_plugin_send_msg_t)(audio_hal_plugin_msg_type_t,
void *, uint32_t);
+struct hostless_module {
+ struct pcm *pcm_tx;
+ struct pcm *pcm_rx;
+};
+
struct ext_hw_plugin_data {
struct audio_device *adev;
void *plugin_handle;
@@ -57,23 +62,32 @@
snd_device_t out_snd_dev[AUDIO_HAL_PLUGIN_USECASE_MAX];
snd_device_t in_snd_dev[AUDIO_HAL_PLUGIN_USECASE_MAX];
bool mic_mute;
+ struct hostless_module adev_hostless;
};
/* This can be defined in platform specific file or use compile flag */
#define LIB_PLUGIN_DRIVER "libaudiohalplugin.so"
-/* Note: Due to ADP H/W design, SoC TERT/SEC TDM CLK and FSYNC lines are both connected
- * with CODEC and a single master is needed to provide consistent CLK and FSYNC to slaves,
- * hence configuring SoC TERT TDM as single master and bring up a dummy hostless from TERT
- * to SEC to ensure both slave SoC SEC TDM and CODEC are driven upon system boot. */
-static void audio_extn_ext_hw_plugin_enable_adev_hostless(struct audio_device *adev)
+/* Note: Due to ADP H/W design, SoC TERT/SEC TDM CLK and FSYNC lines are
+ * both connected with CODEC and a single master is needed to provide
+ * consistent CLK and FSYNC to slaves, hence configuring SoC TERT TDM as
+ * single master and bring up a dummy hostless from TERT to SEC to ensure
+ * both slave SoC SEC TDM and CODEC are driven upon system boot. */
+static void audio_extn_ext_hw_plugin_enable_adev_hostless(void *plugin)
{
+ struct ext_hw_plugin_data *my_plugin =
+ (struct ext_hw_plugin_data *)plugin;
+ char mixer_path[MIXER_PATH_MAX_LENGTH];
+
ALOGI("%s: Enable TERT -> SEC Hostless", __func__);
- char mixer_path[MIXER_PATH_MAX_LENGTH];
strlcpy(mixer_path, "dummy-hostless", MIXER_PATH_MAX_LENGTH);
ALOGD("%s: apply mixer and update path: %s", __func__, mixer_path);
- audio_route_apply_and_update_path(adev->audio_route, mixer_path);
+ if (audio_route_apply_and_update_path(my_plugin->adev->audio_route,
+ mixer_path)) {
+ ALOGE("%s: %s not supported, continue", __func__, mixer_path);
+ return;
+ }
/* TERT TDM TX 7 HOSTLESS to SEC TDM RX 7 HOSTLESS */
int pcm_dev_rx = 48, pcm_dev_tx = 49;
@@ -88,31 +102,51 @@
.avail_min = 0,
};
- struct pcm *pcm_tx = pcm_open(adev->snd_card,
+ my_plugin->adev_hostless.pcm_tx = pcm_open(my_plugin->adev->snd_card,
pcm_dev_tx,
PCM_IN, &pcm_config_lb);
- if (pcm_tx && !pcm_is_ready(pcm_tx)) {
- ALOGE("%s: %s", __func__, pcm_get_error(pcm_tx));
+ if (my_plugin->adev_hostless.pcm_tx &&
+ !pcm_is_ready(my_plugin->adev_hostless.pcm_tx)) {
+ ALOGE("%s: %s", __func__,
+ pcm_get_error(my_plugin->adev_hostless.pcm_tx));
return;
}
- struct pcm *pcm_rx = pcm_open(adev->snd_card,
+ my_plugin->adev_hostless.pcm_rx = pcm_open(my_plugin->adev->snd_card,
pcm_dev_rx,
PCM_OUT, &pcm_config_lb);
- if (pcm_rx && !pcm_is_ready(pcm_rx)) {
- ALOGE("%s: %s", __func__, pcm_get_error(pcm_rx));
+ if (my_plugin->adev_hostless.pcm_rx &&
+ !pcm_is_ready(my_plugin->adev_hostless.pcm_rx)) {
+ ALOGE("%s: %s", __func__,
+ pcm_get_error(my_plugin->adev_hostless.pcm_rx));
return;
}
- if (pcm_start(pcm_tx) < 0) {
+ if (pcm_start(my_plugin->adev_hostless.pcm_tx) < 0) {
ALOGE("%s: pcm start for pcm tx failed", __func__);
return;
}
- if (pcm_start(pcm_rx) < 0) {
+ if (pcm_start(my_plugin->adev_hostless.pcm_rx) < 0) {
ALOGE("%s: pcm start for pcm rx failed", __func__);
return;
}
}
+static void audio_extn_ext_hw_plugin_disable_adev_hostless(void *plugin)
+{
+ struct ext_hw_plugin_data *my_plugin = (struct ext_hw_plugin_data *)plugin;
+
+ ALOGI("%s: Disable TERT -> SEC Hostless", __func__);
+
+ if (my_plugin->adev_hostless.pcm_tx) {
+ pcm_close(my_plugin->adev_hostless.pcm_tx);
+ my_plugin->adev_hostless.pcm_tx = NULL;
+ }
+ if (my_plugin->adev_hostless.pcm_rx) {
+ pcm_close(my_plugin->adev_hostless.pcm_rx);
+ my_plugin->adev_hostless.pcm_rx = NULL;
+ }
+}
+
void* audio_extn_ext_hw_plugin_init(struct audio_device *adev)
{
int32_t ret = 0;
@@ -165,7 +199,7 @@
}
}
- audio_extn_ext_hw_plugin_enable_adev_hostless(adev);
+ audio_extn_ext_hw_plugin_enable_adev_hostless(my_plugin);
my_plugin->mic_mute = false;
return my_plugin;
@@ -187,6 +221,8 @@
return -EINVAL;
}
+ audio_extn_ext_hw_plugin_disable_adev_hostless(my_plugin);
+
if (my_plugin->audio_hal_plugin_deinit) {
ret = my_plugin->audio_hal_plugin_deinit();
if (ret) {
diff --git a/hal/audio_extn/spkr_protection.c b/hal/audio_extn/spkr_protection.c
index 7a6e1c1..1e394a4 100644
--- a/hal/audio_extn/spkr_protection.c
+++ b/hal/audio_extn/spkr_protection.c
@@ -935,6 +935,10 @@
total_time = (handle.v_vali_wait_time + handle.v_vali_vali_time);
ts.tv_sec += (total_time/1000);
ts.tv_nsec += ((total_time%1000) * 1000000);
+ if (ts.tv_nsec >= 1000000000) {
+ ts.tv_nsec -= 1000000000;
+ ts.tv_sec += 1;
+ }
}
pthread_mutex_lock(&handle.mutex_spkr_prot);
pthread_mutex_unlock(&adev->lock);
@@ -1748,12 +1752,14 @@
if (!handle.v_vali_vali_time)
handle.v_vali_vali_time = SPKR_V_VALI_DEFAULT_VALI_TIME;/*set default if not setparam */
set_spkr_prot_v_vali_cfg(handle.v_vali_wait_time, handle.v_vali_vali_time);
+ pthread_mutex_lock(&adev->lock);
ret = spkr_calibrate(SPKR_V_VALI_TEMP_MASK,
SPKR_V_VALI_TEMP_MASK);/*use 0xfffe as temp to initiate v_vali*/
+ pthread_mutex_unlock(&adev->lock);
if (ret)
ALOGE("%s: failed, retry again\n", __func__);
- pthread_exit(0);
handle.trigger_v_vali = false;
+ pthread_exit(0);
return NULL;
}
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 9fb93d5..cf7c9f5 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -1255,7 +1255,8 @@
disable_asrc_mode(adev);
audio_route_apply_and_update_path(adev->audio_route, "hph-lowpower-mode");
}
- if ((snd_device == SND_DEVICE_IN_HANDSET_6MIC) &&
+ if (((snd_device == SND_DEVICE_IN_HANDSET_6MIC) ||
+ (snd_device == SND_DEVICE_IN_HANDSET_QMIC)) &&
(audio_extn_ffv_get_stream() == adev->active_input)) {
ALOGD("%s: deinit ec ref loopback", __func__);
audio_extn_ffv_deinit_ec_ref_loopback(adev, snd_device);
@@ -3847,6 +3848,12 @@
if (out->flags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD) {
send_offload_cmd_l(out, OFFLOAD_CMD_ERROR);
}
+
+ if (is_offload_usecase(out->usecase) && out->card_status == CARD_STATUS_OFFLINE) {
+ ALOGD("Setting previous card status if offline");
+ out->prev_card_status_offline = true;
+ }
+
pthread_mutex_unlock(&out->lock);
return status;
@@ -5142,6 +5149,9 @@
*/
ALOGE(" ERROR: sound card not active, return error");
ret = -EINVAL;
+ } else if (out->prev_card_status_offline) {
+ ALOGE("ERROR: previously sound card was offline,return error");
+ ret = -EINVAL;
} else {
ret = 0;
adjust_frames_for_device_delay(out, dsp_frames);
@@ -5244,7 +5254,10 @@
} else if (out->card_status == CARD_STATUS_OFFLINE) {
*frames = out->written;
clock_gettime(CLOCK_MONOTONIC, timestamp);
- ret = 0;
+ if (is_offload_usecase(out->usecase))
+ ret = -EINVAL;
+ else
+ ret = 0;
}
}
pthread_mutex_unlock(&out->lock);
@@ -6379,6 +6392,7 @@
out->hal_output_suspend_supported = 0;
out->dynamic_pm_qos_config_supported = 0;
out->set_dual_mono = false;
+ out->prev_card_status_offline = false;
if ((flags & AUDIO_OUTPUT_FLAG_BD) &&
(property_get_bool("vendor.audio.matrix.limiter.enable", false)))
diff --git a/hal/audio_hw.h b/hal/audio_hw.h
index 23306de..fa7a325 100644
--- a/hal/audio_hw.h
+++ b/hal/audio_hw.h
@@ -371,6 +371,7 @@
mix_matrix_params_t pan_scale_params;
mix_matrix_params_t downmix_params;
bool set_dual_mono;
+ bool prev_card_status_offline;
error_log_t *error_log;
};
diff --git a/hal/msm8916/platform.c b/hal/msm8916/platform.c
index 9bb3ce5..164dc5a 100644
--- a/hal/msm8916/platform.c
+++ b/hal/msm8916/platform.c
@@ -6396,7 +6396,7 @@
* Handset and speaker may have diffrent backend. Check if the device is speaker or handset,
* and these devices are restricited to 48kHz.
*/
- if ((platform_get_backend_index(snd_device) == DEFAULT_CODEC_BACKEND) &&
+ if (!codec_device_supports_native_playback(usecase->devices) &&
(platform_check_backends_match(SND_DEVICE_OUT_SPEAKER, snd_device) ||
platform_check_backends_match(SND_DEVICE_OUT_HANDSET, snd_device))) {
sample_rate = CODEC_BACKEND_DEFAULT_SAMPLE_RATE;
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index a609de1..2ce1d6d 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -7370,7 +7370,9 @@
* Handset and speaker may have diffrent backend. Check if the device is speaker or handset,
* and these devices are restricited to 48kHz.
*/
- if (platform_check_backends_match(SND_DEVICE_OUT_SPEAKER, snd_device)) {
+ if (!codec_device_supports_native_playback(usecase->devices) &&
+ (platform_check_backends_match(SND_DEVICE_OUT_SPEAKER, snd_device) ||
+ platform_check_backends_match(SND_DEVICE_OUT_HANDSET, snd_device))) {
int bw = platform_get_snd_device_bit_width(SND_DEVICE_OUT_SPEAKER);
if ((-ENOSYS != bw) && (bit_width > (uint32_t)bw)) {
bit_width = (uint32_t)bw;
diff --git a/hal/voice_extn/voice_extn.c b/hal/voice_extn/voice_extn.c
index 8ab7b1e..aaed913 100644
--- a/hal/voice_extn/voice_extn.c
+++ b/hal/voice_extn/voice_extn.c
@@ -86,6 +86,7 @@
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;
int voice_extn_is_call_state_active(struct audio_device *adev, bool *is_call_active);
@@ -402,8 +403,9 @@
return voice_extn_dynamic_ecns_feature_enabled;
}
-void voice_extn_feature_init()
+void voice_extn_feature_init(int is_running_with_enhanced_fwk)
{
+ 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);
diff --git a/hal/voice_extn/voice_extn.h b/hal/voice_extn/voice_extn.h
index 51afe47..d45114b 100644
--- a/hal/voice_extn/voice_extn.h
+++ b/hal/voice_extn/voice_extn.h
@@ -88,7 +88,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();
+void voice_extn_feature_init(int is_running_with_enhanced_fwk);
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);