Merge "audio: Fix compilation issue" into audio-hal.lnx.4.0
diff --git a/configs/msm8937/audio_platform_info.xml b/configs/msm8937/audio_platform_info.xml
index a23dcfe..457d902 100644
--- a/configs/msm8937/audio_platform_info.xml
+++ b/configs/msm8937/audio_platform_info.xml
@@ -59,5 +59,102 @@
<device name="SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED_VBAT" acdb_id="136"/>
<device name="SND_DEVICE_IN_CAPTURE_VI_FEEDBACK" acdb_id="137"/>
</acdb_ids>
+
+ <backend_names>
+ <device name="SND_DEVICE_OUT_HEADPHONES" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_BT_SCO_WB" interface="INTERNAL_BT_SCO_RX"/>
+ <device name="SND_DEVICE_OUT_BT_SCO" interface="INTERNAL_BT_SCO_RX"/>
+ <device name="SND_DEVICE_OUT_LINE" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_ANC_HEADSET" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_LINE" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_ANC_HEADSET" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_HEADPHONES" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_ANC_HEADSET" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_LINE" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_TTY_FULL_HEADPHONES" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_TTY_VCO_HEADPHONES" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_HANDSET" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_SPEAKER" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_REVERSE" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_VBAT" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_HANDSET" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_VBAT" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_2" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_2_VBAT" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_TTY_HCO_HANDSET" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_ANC_FB_HEADSET" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_ANC_FB_HEADSET" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_ANC_HANDSET" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_PROTECTED" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_PROTECTED_VBAT" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED_VBAT" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED_VBAT" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_WSA" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_WSA" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_2_WSA" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_IN_HANDSET_MIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_HANDSET_MIC_EXTERNAL" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_HANDSET_MIC_AEC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_HANDSET_MIC_NS" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_HANDSET_MIC_AEC_NS" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_HANDSET_DMIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_HANDSET_DMIC_AEC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_HANDSET_DMIC_NS" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_HANDSET_DMIC_AEC_NS" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_SPEAKER_MIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_SPEAKER_MIC_AEC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_SPEAKER_MIC_NS" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_SPEAKER_MIC_AEC_NS" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_NS" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_HEADSET_MIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_HEADSET_MIC_FLUENCE" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_VOICE_SPEAKER_MIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_VOICE_HEADSET_MIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_CAMCORDER_MIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_VOICE_DMIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_VOICE_SPEAKER_DMIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_VOICE_SPEAKER_QMIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_VOICE_TTY_VCO_HANDSET_MIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_VOICE_TTY_HCO_HEADSET_MIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_VOICE_REC_MIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_VOICE_REC_MIC_NS" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_VOICE_REC_DMIC_STEREO" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_AANC_HANDSET_MIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_QUAD_MIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_HANDSET_STEREO_DMIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_SPEAKER_STEREO_DMIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_CAPTURE_VI_FEEDBACK" interface="SENARY_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_CAPTURE_VI_FEEDBACK_MONO_1" interface="SENARY_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_CAPTURE_VI_FEEDBACK_MONO_2" interface="SENARY_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_VOICE_SPEAKER_DMIC_BROADSIDE" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_BROADSIDE" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_BROADSIDE" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_NS_BROADSIDE" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_BROADSIDE" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_VOICE_FLUENCE_DMIC_AANC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_HANDSET_QMIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_SPEAKER_QMIC_AEC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_SPEAKER_QMIC_NS" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_SPEAKER_QMIC_AEC_NS" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_THREE_MIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_HANDSET_TMIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_VOICE_REC_TMIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_MIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_STEREO_MIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_THREE_MIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_QUAD_MIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_AND_VOICE_HEADPHONES" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_AND_VOICE_ANC_HEADSET" interface="PRI_MI2S_RX"/>
+ </backend_names>
</audio_platform_info>
diff --git a/configs/msm8937/mixer_paths_mtp.xml b/configs/msm8937/mixer_paths_mtp.xml
index 5bf3053..d84f99b 100644
--- a/configs/msm8937/mixer_paths_mtp.xml
+++ b/configs/msm8937/mixer_paths_mtp.xml
@@ -94,6 +94,7 @@
<ctl name="DEC3 MUX" value="ZERO" />
<ctl name="DEC4 MUX" value="ZERO" />
<ctl name="SpkrMono VISENSE Switch" value="0" />
+ <ctl name="ADC1_INP1 Switch" value="0" />
<ctl name="PRI_MI2S_RX Audio Mixer MultiMedia1" value="0" />
<ctl name="INTERNAL_BT_SCO_RX Audio Mixer MultiMedia1" value="0" />
@@ -963,6 +964,7 @@
<path name="adc1">
<ctl name="ADC1 Volume" value="6" />
<ctl name="DEC1 MUX" value="ADC1" />
+ <ctl name="ADC1_INP1 Switch" value="1" />
</path>
<path name="adc2">
diff --git a/configs/msm8953/audio_platform_info.xml b/configs/msm8953/audio_platform_info.xml
index a23dcfe..1d8193b 100644
--- a/configs/msm8953/audio_platform_info.xml
+++ b/configs/msm8953/audio_platform_info.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
-<!-- Copyright (c) 2015 - 2016, The Linux Foundation. All rights reserved. -->
+<!-- Copyright (c) 2015 - 2016, 2018, The Linux Foundation. All rights reserved. -->
<!-- -->
<!-- Redistribution and use in source and binary forms, with or without -->
<!-- modification, are permitted provided that the following conditions are -->
@@ -59,5 +59,102 @@
<device name="SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED_VBAT" acdb_id="136"/>
<device name="SND_DEVICE_IN_CAPTURE_VI_FEEDBACK" acdb_id="137"/>
</acdb_ids>
+
+ <backend_names>
+ <device name="SND_DEVICE_OUT_HEADPHONES" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_BT_SCO_WB" interface="INTERNAL_BT_SCO_RX"/>
+ <device name="SND_DEVICE_OUT_BT_SCO" interface="INTERNAL_BT_SCO_RX"/>
+ <device name="SND_DEVICE_OUT_LINE" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_ANC_HEADSET" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_LINE" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_ANC_HEADSET" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_HEADPHONES" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_ANC_HEADSET" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_LINE" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_TTY_FULL_HEADPHONES" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_TTY_VCO_HEADPHONES" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_HANDSET" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_SPEAKER" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_REVERSE" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_VBAT" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_HANDSET" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_VBAT" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_2" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_2_VBAT" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_TTY_HCO_HANDSET" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_ANC_FB_HEADSET" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_ANC_FB_HEADSET" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_ANC_HANDSET" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_PROTECTED" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_PROTECTED_VBAT" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED_VBAT" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED_VBAT" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_WSA" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_WSA" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_2_WSA" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_IN_HANDSET_MIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_HANDSET_MIC_EXTERNAL" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_HANDSET_MIC_AEC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_HANDSET_MIC_NS" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_HANDSET_MIC_AEC_NS" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_HANDSET_DMIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_HANDSET_DMIC_AEC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_HANDSET_DMIC_NS" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_HANDSET_DMIC_AEC_NS" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_SPEAKER_MIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_SPEAKER_MIC_AEC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_SPEAKER_MIC_NS" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_SPEAKER_MIC_AEC_NS" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_NS" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_HEADSET_MIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_HEADSET_MIC_FLUENCE" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_VOICE_SPEAKER_MIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_VOICE_HEADSET_MIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_CAMCORDER_MIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_VOICE_DMIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_VOICE_SPEAKER_DMIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_VOICE_SPEAKER_QMIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_VOICE_TTY_VCO_HANDSET_MIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_VOICE_TTY_HCO_HEADSET_MIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_VOICE_REC_MIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_VOICE_REC_MIC_NS" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_VOICE_REC_DMIC_STEREO" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_AANC_HANDSET_MIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_QUAD_MIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_HANDSET_STEREO_DMIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_SPEAKER_STEREO_DMIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_CAPTURE_VI_FEEDBACK" interface="SENARY_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_CAPTURE_VI_FEEDBACK_MONO_1" interface="SENARY_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_CAPTURE_VI_FEEDBACK_MONO_2" interface="SENARY_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_VOICE_SPEAKER_DMIC_BROADSIDE" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_BROADSIDE" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_BROADSIDE" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_NS_BROADSIDE" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_BROADSIDE" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_VOICE_FLUENCE_DMIC_AANC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_HANDSET_QMIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_SPEAKER_QMIC_AEC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_SPEAKER_QMIC_NS" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_SPEAKER_QMIC_AEC_NS" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_THREE_MIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_HANDSET_TMIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_VOICE_REC_TMIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_MIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_STEREO_MIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_THREE_MIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_QUAD_MIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC" interface="TERT_MI2S_TX"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_AND_VOICE_HEADPHONES" interface="PRI_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_AND_VOICE_ANC_HEADSET" interface="PRI_MI2S_RX"/>
+ </backend_names>
</audio_platform_info>
diff --git a/configs/msm8953/mixer_paths_mtp.xml b/configs/msm8953/mixer_paths_mtp.xml
index d618169..c66821e 100644
--- a/configs/msm8953/mixer_paths_mtp.xml
+++ b/configs/msm8953/mixer_paths_mtp.xml
@@ -97,6 +97,7 @@
<ctl name="DEC3 MUX" value="ZERO" />
<ctl name="DEC4 MUX" value="ZERO" />
<ctl name="SpkrMono VISENSE Switch" value="0" />
+ <ctl name="ADC1_INP1 Switch" value="0" />
<ctl name="PRI_MI2S_RX Audio Mixer MultiMedia1" value="0" />
<ctl name="INTERNAL_BT_SCO_RX Audio Mixer MultiMedia1" value="0" />
@@ -975,6 +976,7 @@
<path name="adc1">
<ctl name="ADC1 Volume" value="6" />
<ctl name="DEC1 MUX" value="ADC1" />
+ <ctl name="ADC1_INP1 Switch" value="1" />
</path>
<path name="adc2">
@@ -1027,6 +1029,11 @@
<ctl name="SpkrMono VISENSE Switch" value="1" />
</path>
+
+ <path name="voice-speaker-protected">
+ <path name="speaker-protected" />
+ </path>
+
<path name="speaker-mic">
<path name="adc1" />
<ctl name="IIR1 INP1 MUX" value="DEC1" />
diff --git a/configs/sdm670/audio_output_policy.conf b/configs/sdm670/audio_output_policy.conf
index d66782e..f3dc620 100644
--- a/configs/sdm670/audio_output_policy.conf
+++ b/configs/sdm670/audio_output_policy.conf
@@ -115,4 +115,20 @@
bit_width 16
app_type 69944
}
+ record_ambisonic_16 {
+ profile record_ambisonic
+ flags AUDIO_INPUT_FLAG_NONE
+ formats AUDIO_FORMAT_PCM_16_BIT
+ sampling_rates 48000
+ bit_width 16
+ app_type 69949
+ }
+ record_ambisonic_24 {
+ profile record_ambisonic
+ flags AUDIO_INPUT_FLAG_NONE
+ formats AUDIO_FORMAT_PCM_24_BIT_PACKED
+ sampling_rates 48000
+ bit_width 24
+ app_type 69950
+ }
}
diff --git a/configs/sdm670/mixer_paths_skuw.xml b/configs/sdm670/mixer_paths_skuw.xml
index bced57c..b799532 100644
--- a/configs/sdm670/mixer_paths_skuw.xml
+++ b/configs/sdm670/mixer_paths_skuw.xml
@@ -2429,8 +2429,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/sdm670/sdm670.mk b/configs/sdm670/sdm670.mk
index b939b09..6c35eec 100644
--- a/configs/sdm670/sdm670.mk
+++ b/configs/sdm670/sdm670.mk
@@ -33,7 +33,7 @@
AUDIO_FEATURE_ENABLED_AUDIOSPHERE := true
AUDIO_FEATURE_ENABLED_USB_TUNNEL_AUDIO := true
AUDIO_FEATURE_ENABLED_SPLIT_A2DP := true
-AUDIO_FEATURE_ENABLED_3D_AUDIO := false
+AUDIO_FEATURE_ENABLED_3D_AUDIO := true
AUDIO_FEATURE_ENABLED_VOICE_PRINT := false
USE_LEGACY_AUDIO_DAEMON := false
USE_LEGACY_AUDIO_MEASUREMENT := false
@@ -135,6 +135,11 @@
PRODUCT_PROPERTY_OVERRIDES += \
vendor.audio_hal.period_size=192
+##Ambisonic Capture
+PRODUCT_PROPERTY_OVERRIDES += \
+persist.vendor.audio.ambisonic.capture=false \
+persist.vendor.audio.ambisonic.auto.profile=false
+
##fluencetype can be "fluence" or "fluencepro" or "none"
PRODUCT_PROPERTY_OVERRIDES += \
ro.vendor.audio.sdk.fluencetype=none\
diff --git a/configs/sdm845/mixer_paths_i2s.xml b/configs/sdm845/mixer_paths_i2s.xml
index 75d984f..86dd74e 100644
--- a/configs/sdm845/mixer_paths_i2s.xml
+++ b/configs/sdm845/mixer_paths_i2s.xml
@@ -144,9 +144,9 @@
</path>
<path name="adc2">
- <ctl name="AIF1_CAP Mixer SLIM TX6" value="1"/>
- <ctl name="MI2S_TX Channels" value="One" />
- <ctl name="SLIM TX6 MUX" value="DEC6" />
+ <ctl name="AIF1_CAP Mixer I2S TX6" value="1"/>
+ <ctl name="CDC_IF TX6 MUX" value="DEC6" />
+ <ctl name="PRI_MI2S_TX Channels" value="One" />
<ctl name="ADC MUX6" value="AMIC" />
<ctl name="AMIC MUX6" value="ADC2" />
</path>
@@ -208,6 +208,7 @@
<path name="handset-mic">
<path name="adc2" />
+ <ctl name="DEC6 Volume" value="84" />
</path>
<path name="headphones">
@@ -226,11 +227,11 @@
<path name="headset-mic">
<path name="adc2" />
- <ctl name="DEC8 Volume" value="84" />
+ <ctl name="DEC6 Volume" value="84" />
</path>
<path name="voice-handset">
- <path name="handset" />
+ <path name="headphones" />
</path>
<path name="voice-handset-tmus">
diff --git a/hal/Android.mk b/hal/Android.mk
index d2cf596..ccd8f2d 100644
--- a/hal/Android.mk
+++ b/hal/Android.mk
@@ -73,8 +73,10 @@
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
-ifneq ($(filter sdm670 qcs605 msmnile,$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter msmnile,$(TARGET_BOARD_PLATFORM)),)
LOCAL_HEADER_LIBRARIES := audio_kernel_headers
+endif
+ifneq ($(filter sdm670 msm8953 msm8937 qcs605 msmnile,$(TARGET_BOARD_PLATFORM)),)
LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/vendor/qcom/opensource/audio-kernel/include
LOCAL_ADDITIONAL_DEPENDENCIES += $(BOARD_VENDOR_KERNEL_MODULES)
endif
diff --git a/hal/audio_extn/qaf.c b/hal/audio_extn/qaf.c
old mode 100755
new mode 100644
diff --git a/hal/audio_extn/spkr_protection.c b/hal/audio_extn/spkr_protection.c
index 589a391..abbdc8e 100644
--- a/hal/audio_extn/spkr_protection.c
+++ b/hal/audio_extn/spkr_protection.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013 - 2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013 - 2018, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -69,11 +69,11 @@
/* Min and max resistance value in lookup table. */
#define MIN_RESISTANCE_LOOKUP (3.2)
#define MAX_RESISTANCE_LOOKUP (8)
-#define SPV3_LOOKUP_TABLE_ROWS (49)
+#define SPKR_PROT_LOOKUP_TABLE_ROWS (49)
/* default limiter threshold is 0dB(0x7FFFFFF in natural value) */
#define DEFAULT_LIMITER_TH (0x07FFFFFF)
#define AFE_API_VERSION_SUPPORT_SPV3 (0x2)
-enum spv3_boost_max_state {
+enum wcd_boost_max_state {
BOOST_NO_MAX_STATE,
BOOST_MAX_STATE_1,
BOOST_MAX_STATE_2,
@@ -205,65 +205,65 @@
char *spkr_2_name;
};
-struct spv3_boost {
+struct spkr_prot_boost {
/* bit7-4: first stage; bit 3-0: second stage */
int boost_value;
int max_state;
};
-#define SPV3_BOOST_VALUE_STATE(value, state) \
+#define SPKR_PROT_BOOST_VALUE_STATE(value, state) \
{ .boost_value = (value), .max_state = (state) }
-static struct spv3_boost spv3_boost_lookup_table[SPV3_LOOKUP_TABLE_ROWS] = {
- SPV3_BOOST_VALUE_STATE(0xc7, BOOST_MAX_STATE_1),
- SPV3_BOOST_VALUE_STATE(0xd7, BOOST_MAX_STATE_1),
- SPV3_BOOST_VALUE_STATE(0xd7, BOOST_MAX_STATE_1),
- SPV3_BOOST_VALUE_STATE(0xe7, BOOST_MAX_STATE_1),
- SPV3_BOOST_VALUE_STATE(0xe7, BOOST_MAX_STATE_1),
- SPV3_BOOST_VALUE_STATE(0xf7, BOOST_MAX_STATE_1),
- SPV3_BOOST_VALUE_STATE(0x70, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x70, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x71, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x71, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x72, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x72, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x73, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x73, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x74, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x75, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x75, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x76, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x76, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x77, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x77, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x78, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x78, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x79, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x79, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x7a, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x7a, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x7a, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x7b, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x7b, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x7c, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x7c, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x7d, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x7d, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x7e, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x7e, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x7f, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x7f, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x7f, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x7f, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x7f, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x7f, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x7f, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x7f, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x7f, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x7f, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x7f, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x7f, BOOST_MAX_STATE_2),
- SPV3_BOOST_VALUE_STATE(0x7f, BOOST_MAX_STATE_2),
+static struct spkr_prot_boost spkr_prot_boost_lookup_table[SPKR_PROT_LOOKUP_TABLE_ROWS] = {
+ SPKR_PROT_BOOST_VALUE_STATE(0xc7, BOOST_MAX_STATE_1),
+ SPKR_PROT_BOOST_VALUE_STATE(0xd7, BOOST_MAX_STATE_1),
+ SPKR_PROT_BOOST_VALUE_STATE(0xd7, BOOST_MAX_STATE_1),
+ SPKR_PROT_BOOST_VALUE_STATE(0xe7, BOOST_MAX_STATE_1),
+ SPKR_PROT_BOOST_VALUE_STATE(0xe7, BOOST_MAX_STATE_1),
+ SPKR_PROT_BOOST_VALUE_STATE(0xf7, BOOST_MAX_STATE_1),
+ SPKR_PROT_BOOST_VALUE_STATE(0x70, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x70, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x71, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x71, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x72, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x72, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x73, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x73, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x74, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x75, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x75, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x76, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x76, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x77, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x77, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x78, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x78, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x79, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x79, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x7a, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x7a, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x7a, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x7b, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x7b, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x7c, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x7c, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x7d, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x7d, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x7e, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x7e, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x7f, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x7f, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x7f, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x7f, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x7f, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x7f, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x7f, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x7f, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x7f, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x7f, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x7f, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x7f, BOOST_MAX_STATE_2),
+ SPKR_PROT_BOOST_VALUE_STATE(0x7f, BOOST_MAX_STATE_2),
};
/* 3.2 ohm in q24 format: (3.2 * (1 << 24)) */
@@ -274,7 +274,7 @@
#define LOOKUP_RESISTANCE_GAP_SPKR_Q24 (1677722)
/* 3.2ohm : 0.1ohm : 8ohm lookup table */
-static int spv3_limiter_th_q27_table[SPV3_LOOKUP_TABLE_ROWS] = {
+static int spv3_limiter_th_q27_table[SPKR_PROT_LOOKUP_TABLE_ROWS] = {
85469248, 86758070, 88066327, 89394311, 90637910, 91898809,
93070036, 94364769, 95567425, 96674043, 97906130, 99039829,
100186656, 101346763, 102402340, 103588104, 104667026, 105757185,
@@ -310,7 +310,7 @@
char name[MAX_PATH] = {0};
char cwd[MAX_PATH] = {0};
- if (!sensor_name)
+ if (!sensor_name || (strlen(sensor_name) == 0))
return found;
if (!getcwd(cwd, sizeof(cwd)))
@@ -566,14 +566,14 @@
return handle.wsa_found;
}
-static void audio_extn_check_wsa_support_sp_v3(struct audio_device *adev,
- unsigned int num_of_spkrs, bool *wsa_support_spv3)
+static void audio_extn_check_wsa(struct audio_device *adev,
+ unsigned int num_of_spkrs, bool *wsa_is_8815)
{
unsigned int i = 0;
if (!is_wsa_present() ||
platform_spkr_prot_is_wsa_analog_mode(adev)){
for (i = 0; i < num_of_spkrs; i++)
- wsa_support_spv3[i] = false;
+ wsa_is_8815[i] = false;
return;
}
@@ -582,9 +582,9 @@
sizeof(WSA8815_NAME_LEFT)) ||
!strncmp(WSA8815_NAME_RIGHT, tz_names.spkr_1_name,
sizeof(WSA8815_NAME_RIGHT))) {
- wsa_support_spv3[SP_V2_SPKR_1] = true;
+ wsa_is_8815[SP_V2_SPKR_1] = true;
} else {
- wsa_support_spv3[SP_V2_SPKR_1] = false;
+ wsa_is_8815[SP_V2_SPKR_1] = false;
ALOGI("%s: Speaker1(%s) is not wsa8815.", __func__, tz_names.spkr_1_name);
}
@@ -593,9 +593,9 @@
sizeof(WSA8815_NAME_RIGHT)) ||
!strncmp(WSA8815_NAME_LEFT, tz_names.spkr_2_name,
sizeof(WSA8815_NAME_LEFT)))) {
- wsa_support_spv3[SP_V2_SPKR_2] = true;
+ wsa_is_8815[SP_V2_SPKR_2] = true;
} else {
- wsa_support_spv3[SP_V2_SPKR_2] = false;
+ wsa_is_8815[SP_V2_SPKR_2] = false;
ALOGI("%s: Speaker2(%s) is not wsa8815.", __func__, tz_names.spkr_2_name);
}
@@ -646,7 +646,7 @@
}
status = mixer_ctl_set_value(ctl, 0,
- spv3_boost_lookup_table[boost_table_index].boost_value);
+ spkr_prot_boost_lookup_table[boost_table_index].boost_value);
if (status < 0) {
ALOGE("%s: Could not set ctl for mixer %s\n", __func__,
@@ -657,7 +657,8 @@
return 0;
}
-static int audio_extn_config_spv3(struct audio_device *adev, unsigned int wsa_num)
+static int audio_extn_spkr_boost_update(struct audio_device *adev,
+ unsigned int wsa_num, unsigned int *index )
{
float dcr = 0;
unsigned int r0_index = 0;
@@ -679,12 +680,12 @@
}
r0_index = (int)((dcr - MIN_RESISTANCE_LOOKUP) * 10);
- if (r0_index >= SPV3_LOOKUP_TABLE_ROWS) {
+ if (r0_index >= SPKR_PROT_LOOKUP_TABLE_ROWS) {
ALOGE("%s: r0_index=%d overflows.", __func__, r0_index);
return -EINVAL;
}
- boost_max_state = spv3_boost_lookup_table[r0_index].max_state;
+ boost_max_state = spkr_prot_boost_lookup_table[r0_index].max_state;
ret = audio_extn_set_wcd_boost_max_state(adev, boost_max_state, wsa_num);
if (ret < 0) {
ALOGE("%s: failed to set wcd max boost state.",
@@ -699,32 +700,47 @@
return -EINVAL;
}
- handle.limiter_th[wsa_num] = spv3_limiter_th_q27_table[r0_index];
+ *index = r0_index;
return 0;
}
-static void audio_extn_check_config_sp_v3(struct audio_device *adev,
+static void audio_extn_set_boost_and_limiter(struct audio_device *adev,
bool spv3_enable, unsigned int afe_api_version)
{
int chn = 0;
- bool wsa_support_spv3[SP_V2_NUM_MAX_SPKRS] = {false, false};
+ bool wsa_is_8815[SP_V2_NUM_MAX_SPKRS] = {false, false};
+ unsigned int r0_index = 0;
- if (spv3_enable && afe_api_version >= AFE_API_VERSION_SUPPORT_SPV3) {
- handle.sp_version = SP_V2;
- audio_extn_check_wsa_support_sp_v3(adev, vi_feed_no_channels, wsa_support_spv3);
- /*
- * In case of WSA8815+8810, invalid limiter threshold is sent to DSP
- * for WSA8810 speaker. DSP ignores the invalid value and use default one.
- * The approach let spv3 apply on 8815 and spv2 on 8810 respectively.
- */
- for (chn = 0; chn < vi_feed_no_channels; chn++) {
- if (wsa_support_spv3[chn] && !audio_extn_config_spv3(adev, chn))
- handle.sp_version = SP_V3;
- else
- handle.limiter_th[chn] = DEFAULT_LIMITER_TH;
+ handle.sp_version = SP_V2;
+
+ /*
+ * As long as speaker protection is enabled, WCD and WSA
+ * follow lookup table based on R0 impediance regardless
+ * of spv2 or spv3.
+ */
+ audio_extn_check_wsa(adev, vi_feed_no_channels, wsa_is_8815);
+ /*
+ * In case of WSA8815+8810, invalid limiter threshold is sent to DSP
+ * for WSA8810 speaker. DSP ignores the invalid value and use default one.
+ * The approach let spv3 apply on 8815 and spv2 on 8810 respectively.
+ */
+ for (chn = 0; chn < vi_feed_no_channels; chn++) {
+ if (wsa_is_8815[chn] && !audio_extn_spkr_boost_update(adev, chn, &r0_index)) {
+ handle.limiter_th[chn] = spv3_limiter_th_q27_table[r0_index];
+ handle.sp_version = SP_V3;
+ }
+ else {
+ handle.limiter_th[chn] = DEFAULT_LIMITER_TH;
}
}
+
+ /*
+ * If spv3 is disabld or ADSP version doesn't comply,
+ * ADSP works with SP_V2 version.
+ */
+ if (!spv3_enable || afe_api_version < AFE_API_VERSION_SUPPORT_SPV3)
+ handle.sp_version = SP_V2;
}
static int spkr_calibrate(int t0_spk_1, int t0_spk_2)
@@ -1059,7 +1075,7 @@
handle.spkr_prot_mode = MSM_SPKR_PROT_CALIBRATED;
close(acdb_fd);
- audio_extn_check_config_sp_v3(adev, spv3_enable, vi_feed_no_channels);
+ audio_extn_set_boost_and_limiter(adev, spv3_enable, vi_feed_no_channels);
pthread_exit(0);
return NULL;
@@ -1213,7 +1229,7 @@
dlclose(handle.thermal_handle);
handle.thermal_handle = NULL;
- audio_extn_check_config_sp_v3(adev, spv3_enable, vi_feed_no_channels);
+ audio_extn_set_boost_and_limiter(adev, spv3_enable, vi_feed_no_channels);
pthread_exit(0);
return NULL;
diff --git a/hal/audio_hw.h b/hal/audio_hw.h
index 0dc9115..b70f66f 100755
--- a/hal/audio_hw.h
+++ b/hal/audio_hw.h
@@ -50,9 +50,15 @@
#include "audio_hw_extn_api.h"
#if LINUX_ENABLED
-#define VISUALIZER_LIBRARY_PATH "libqcomvisualizer.so"
-#define OFFLOAD_EFFECTS_BUNDLE_LIBRARY_PATH "libqcompostprocbundle.so"
-#define ADM_LIBRARY_PATH "libadm.so"
+#if defined(__LP64__)
+#define VISUALIZER_LIBRARY_PATH "/usr/lib64/libqcomvisualizer.so"
+#define OFFLOAD_EFFECTS_BUNDLE_LIBRARY_PATH "/usr/lib64/libqcompostprocbundle.so"
+#define ADM_LIBRARY_PATH "/usr/lib64/libadm.so"
+#else
+#define VISUALIZER_LIBRARY_PATH "/usr/lib/libqcomvisualizer.so"
+#define OFFLOAD_EFFECTS_BUNDLE_LIBRARY_PATH "/usr/lib/libqcompostprocbundle.so"
+#define ADM_LIBRARY_PATH "/usr/lib/libadm.so"
+#endif
#else
#define VISUALIZER_LIBRARY_PATH "/vendor/lib/soundfx/libqcomvisualizer.so"
#define OFFLOAD_EFFECTS_BUNDLE_LIBRARY_PATH "/vendor/lib/soundfx/libqcompostprocbundle.so"
diff --git a/hal/msm8916/hw_info.c b/hal/msm8916/hw_info.c
index a384827..26c6eaa 100644
--- a/hal/msm8916/hw_info.c
+++ b/hal/msm8916/hw_info.c
@@ -158,6 +158,9 @@
strlcpy(hw_info->name, "msm8917", sizeof(hw_info->name));
} else if (!strcmp(snd_card_name, "msm8940-sku6-snd-card")) {
strlcpy(hw_info->name, "msm8940", sizeof(hw_info->name));
+ } else if (!strcmp(snd_card_name, "msm8953-sku4-snd-card")) {
+ hw_info->is_stereo_spkr = false;
+ strlcpy(hw_info->name, "msm8953", sizeof(hw_info->name));
} else if (!strcmp(snd_card_name, "sdm660-snd-card")) {
strlcpy(hw_info->name, "sdm660", sizeof(hw_info->name));
} else if (!strcmp(snd_card_name, "sdm660-snd-card-mtp")) {
diff --git a/hal/msm8916/platform.c b/hal/msm8916/platform.c
index de5093e..21b6bce 100644
--- a/hal/msm8916/platform.c
+++ b/hal/msm8916/platform.c
@@ -1344,6 +1344,13 @@
msm_device_to_be_id = msm_device_to_be_id_internal_codec;
msm_be_id_array_len =
sizeof(msm_device_to_be_id_internal_codec) / sizeof(msm_device_to_be_id_internal_codec[0]);
+ } else if (!strncmp(snd_card_name, "msm8953-sku4-snd-card",
+ sizeof("msm8953-sku4-snd-card"))) {
+ strlcpy(mixer_xml_path, MIXER_XML_PATH_MTP,
+ sizeof(MIXER_XML_PATH_MTP));
+ msm_device_to_be_id = msm_device_to_be_id_internal_codec;
+ msm_be_id_array_len =
+ sizeof(msm_device_to_be_id_internal_codec) / sizeof(msm_device_to_be_id_internal_codec[0]);
} else if (!strncmp(snd_card_name, "sdm660-snd-card",
sizeof("sdm660-snd-card"))) {
strlcpy(mixer_xml_path, MIXER_XML_PATH,
@@ -2033,6 +2040,8 @@
if(snd_card_name) {
if ((!strncmp(snd_card_name, "msm8953-snd-card-mtp",
sizeof("msm8953-snd-card-mtp")) ||
+ (!strncmp(snd_card_name, "msm8953-sku4-snd-card",
+ sizeof("msm8953-sku4-snd-card"))) ||
(!strncmp(snd_card_name, "msm8952-skum-snd-card",
sizeof("msm8952-skum-snd-card"))))) {
*is_wsa_combo_supported = true;
@@ -7342,7 +7351,8 @@
(!strcmp(snd_card_name, "msm8952-snd-card")) ||
(!strcmp(snd_card_name, "msm8952-snd-card-mtp")) ||
(!strcmp(snd_card_name, "msm8976-skun-snd-card")) ||
- (!strcmp(snd_card_name, "msm8953-snd-card-mtp")))
+ (!strcmp(snd_card_name, "msm8953-snd-card-mtp")) ||
+ (!strcmp(snd_card_name, "msm8953-sku4-snd-card")))
return 1;
else
return 0;
diff --git a/hal/msm8974/hw_info.c b/hal/msm8974/hw_info.c
index 4b70fb7..26c92ec 100644
--- a/hal/msm8974/hw_info.c
+++ b/hal/msm8974/hw_info.c
@@ -425,6 +425,20 @@
ALOGW("%s: Not a msmnile device", __func__);
}
+static void update_hardware_info_sda845(struct hardware_info *hw_info, const char *snd_card_name)
+{
+ if (!strncmp(snd_card_name, "sda845-tavil-i2s-snd-card", sizeof("sda845-tavil-i2s-snd-card"))) {
+ strlcpy(hw_info->type, " mtp", sizeof(hw_info->type));
+ strlcpy(hw_info->name, "sda845", sizeof(hw_info->name));
+ hw_info->snd_devices = NULL;
+ hw_info->num_snd_devices = 0;
+ hw_info->is_stereo_spkr = false;
+ strlcpy(hw_info->dev_extn, "", sizeof(hw_info->dev_extn));
+ } else {
+ ALOGW("%s: Not a sda845 device", __func__);
+ }
+}
+
static void update_hardware_info_sdx(struct hardware_info *hw_info __unused, const char *snd_card_name __unused)
{
ALOGW("%s: Not a sdx device", __func__);
@@ -592,6 +606,9 @@
} else if (strstr(snd_card_name, "pahu")) {
ALOGV("MSMNILE - variant soundcard");
update_hardware_info_msmnile(hw_info, snd_card_name);
+ } else if (strstr(snd_card_name, "sda845")) {
+ ALOGV("SDA845 - variant soundcard");
+ update_hardware_info_sda845(hw_info, snd_card_name);
} else {
ALOGE("%s: Unsupported target %s:",__func__, snd_card_name);
free(hw_info);
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index bcc1351..475e438 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -235,6 +235,8 @@
int fluence_type;
int fluence_mode;
char fluence_cap[PROPERTY_VALUE_MAX];
+ bool ambisonic_capture;
+ bool ambisonic_profile;
bool slowtalk;
bool hd_voice;
bool ec_ref_enabled;
@@ -1335,7 +1337,9 @@
!strncmp(snd_card_name, "apq8096-tasha-i2c-snd-card",
sizeof("apq8096-tasha-i2c-snd-card")) ||
!strncmp(snd_card_name, "sdx-tavil-i2s-snd-card",
- sizeof("sdx-tavil-i2s-snd-card"))){
+ sizeof("sdx-tavil-i2s-snd-card")) ||
+ !strncmp(snd_card_name, "sda845-tavil-i2s-snd-card",
+ sizeof("sda845-tavil-i2s-snd-card"))) {
plat_data->is_i2s_ext_modem = true;
}
ALOGV("%s, is_i2s_ext_modem:%d soundcard name is %s",__func__,
@@ -2059,6 +2063,8 @@
my_data->external_mic = false;
my_data->fluence_type = FLUENCE_NONE;
my_data->fluence_mode = FLUENCE_ENDFIRE;
+ my_data->ambisonic_capture = false;
+ my_data->ambisonic_profile = false;
my_data->slowtalk = false;
my_data->hd_voice = false;
my_data->edid_info = NULL;
@@ -2117,6 +2123,13 @@
my_data->fluence_in_hfp_call = true;
}
}
+ /* Check for Ambisonic Capture Enablement */
+ if (property_get_bool("persist.vendor.audio.ambisonic.capture",false))
+ my_data->ambisonic_capture = true;
+
+ /* Check for Ambisonic Profile Assignment*/
+ if (property_get_bool("persist.vendor.audio.ambisonic.auto.profile",false))
+ my_data->ambisonic_profile = true;
/* Check if Vbat speaker enabled property is set, this should be done before acdb init */
bool ret = false;
@@ -2288,8 +2301,10 @@
property_get("ro.baseband", baseband, "");
if ((!strncmp("apq8084", platform, sizeof("apq8084")) ||
!strncmp("msm8996", platform, sizeof("msm8996")) ||
- !strncmp("sdx", platform, sizeof("sdx"))) &&
- !strncmp("mdm", baseband, (sizeof("mdm")-1))) {
+ !strncmp("sdx", platform, sizeof("sdx")) ||
+ !strncmp("sdm845", platform, sizeof("sdm845"))) &&
+ ( !strncmp("mdm", baseband, (sizeof("mdm")-1)) ||
+ !strncmp("sdx", baseband, (sizeof("sdx")-1)))) {
my_data->csd = open_csd_client(my_data->is_i2s_ext_modem);
} else {
my_data->csd = NULL;
@@ -4278,6 +4293,35 @@
source == AUDIO_SOURCE_MIC)) {
snd_device = SND_DEVICE_IN_HANDSET_GENERIC_QMIC;
platform_set_echo_reference(adev, true, out_device);
+ } else if (my_data->use_generic_handset == true && // System prop is enabled
+ (my_data->ambisonic_capture == true) && // Enable Ambisonic capture
+ (my_data->source_mic_type & SOURCE_QUAD_MIC) && // AND 4mic is available
+ ((in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) || // AND device is Built-in
+ (in_device & AUDIO_DEVICE_IN_BACK_MIC)) && // OR Back-mic
+ (source == AUDIO_SOURCE_MIC || // AND source is MIC for 16bit
+ source == AUDIO_SOURCE_UNPROCESSED || // OR unprocessed for 24bit
+ source == AUDIO_SOURCE_CAMCORDER)) { // OR camera usecase
+ snd_device = SND_DEVICE_IN_HANDSET_GENERIC_QMIC;
+ /* Below check is true only in LA build to set
+ ambisonic profile. In LE hal client will set profile
+ */
+ if (my_data->ambisonic_profile == true) {
+ strlcpy(adev->active_input->profile, "record_ambisonic",
+ sizeof(adev->active_input->profile));
+ }
+
+ if (!strncmp(adev->active_input->profile, "record_ambisonic",
+ strlen("record_ambisonic"))) {
+ /* Validate input stream configuration for
+ Ambisonic capture.
+ */
+ if (((int)channel_mask != (int)AUDIO_CHANNEL_INDEX_MASK_4) ||
+ (adev->active_input->sample_rate != 48000)) {
+ snd_device = SND_DEVICE_NONE;
+ ALOGW("Unsupported Input configuration for ambisonic capture");
+ goto exit;
+ }
+ }
} else if (source == AUDIO_SOURCE_CAMCORDER) {
if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC ||
in_device & AUDIO_DEVICE_IN_BACK_MIC) {
diff --git a/mm-audio/aenc-aac/qdsp6/Android.mk b/mm-audio/aenc-aac/qdsp6/Android.mk
index 37797c7..f4f5013 100644
--- a/mm-audio/aenc-aac/qdsp6/Android.mk
+++ b/mm-audio/aenc-aac/qdsp6/Android.mk
@@ -40,8 +40,10 @@
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
-ifneq ($(filter sdm670 qcs605 msmnile,$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter msmnile,$(TARGET_BOARD_PLATFORM)),)
LOCAL_HEADER_LIBRARIES := audio_kernel_headers
+endif
+ifneq ($(filter sdm670 msm8953 msm8937 qcs605 msmnile,$(TARGET_BOARD_PLATFORM)),)
LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/vendor/qcom/opensource/audio-kernel/include
LOCAL_ADDITIONAL_DEPENDENCIES += $(BOARD_VENDOR_KERNEL_MODULES)
endif
diff --git a/mm-audio/aenc-amrnb/qdsp6/Android.mk b/mm-audio/aenc-amrnb/qdsp6/Android.mk
index 5b1c2b9..cc11f2e 100644
--- a/mm-audio/aenc-amrnb/qdsp6/Android.mk
+++ b/mm-audio/aenc-amrnb/qdsp6/Android.mk
@@ -42,8 +42,10 @@
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
-ifneq ($(filter sdm670 qcs605 msmnile,$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter msmnile,$(TARGET_BOARD_PLATFORM)),)
LOCAL_HEADER_LIBRARIES := audio_kernel_headers
+endif
+ifneq ($(filter sdm670 msm8953 msm8937 qcs605 msmnile,$(TARGET_BOARD_PLATFORM)),)
LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/vendor/qcom/opensource/audio-kernel/include
LOCAL_ADDITIONAL_DEPENDENCIES += $(BOARD_VENDOR_KERNEL_MODULES)
endif
diff --git a/mm-audio/aenc-evrc/qdsp6/Android.mk b/mm-audio/aenc-evrc/qdsp6/Android.mk
index ec8ae44..5bbee54 100644
--- a/mm-audio/aenc-evrc/qdsp6/Android.mk
+++ b/mm-audio/aenc-evrc/qdsp6/Android.mk
@@ -42,8 +42,10 @@
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
-ifneq ($(filter sdm670 qcs605 msmnile,$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter msmnile,$(TARGET_BOARD_PLATFORM)),)
LOCAL_HEADER_LIBRARIES := audio_kernel_headers
+endif
+ifneq ($(filter sdm670 msm8953 msm8937 qcs605 msmnile,$(TARGET_BOARD_PLATFORM)),)
LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/vendor/qcom/opensource/audio-kernel/include
LOCAL_ADDITIONAL_DEPENDENCIES += $(BOARD_VENDOR_KERNEL_MODULES)
endif
diff --git a/mm-audio/aenc-g711/qdsp6/Android.mk b/mm-audio/aenc-g711/qdsp6/Android.mk
index a9ae89b..367f4de 100644
--- a/mm-audio/aenc-g711/qdsp6/Android.mk
+++ b/mm-audio/aenc-g711/qdsp6/Android.mk
@@ -43,8 +43,10 @@
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
-ifneq ($(filter sdm670 qcs605 msmnile,$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter msmnile,$(TARGET_BOARD_PLATFORM)),)
LOCAL_HEADER_LIBRARIES := audio_kernel_headers
+endif
+ifneq ($(filter sdm670 msm8953 msm8937 qcs605 msmnile,$(TARGET_BOARD_PLATFORM)),)
LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/vendor/qcom/opensource/audio-kernel/include
LOCAL_ADDITIONAL_DEPENDENCIES += $(BOARD_VENDOR_KERNEL_MODULES)
endif
diff --git a/mm-audio/aenc-g711/qdsp6/inc/omx_log.h b/mm-audio/aenc-g711/qdsp6/inc/omx_log.h
index 0080ccc..070d485 100644
--- a/mm-audio/aenc-g711/qdsp6/inc/omx_log.h
+++ b/mm-audio/aenc-g711/qdsp6/inc/omx_log.h
@@ -1,5 +1,5 @@
/*--------------------------------------------------------------------------
-Copyright (c) 2016, The Linux Foundation. All rights reserved.
+Copyright (c) 2016, 2018, The Linux Foundation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
@@ -35,7 +35,7 @@
using namespace std;
/*
- * Change logging-level at runtime with "persist.debug.omx.logs.level"
+ * Change logging-level at runtime with "persist.vendor.debug.omx.logs.level"
*
* level OMX_LOGV OMX_LOGD
* ----------------------------------
diff --git a/mm-audio/aenc-g711/qdsp6/src/omx_log.cpp b/mm-audio/aenc-g711/qdsp6/src/omx_log.cpp
index 39498be..bc0f330 100644
--- a/mm-audio/aenc-g711/qdsp6/src/omx_log.cpp
+++ b/mm-audio/aenc-g711/qdsp6/src/omx_log.cpp
@@ -1,5 +1,5 @@
/*--------------------------------------------------------------------------
-Copyright (c) 2016 The Linux Foundation. All rights reserved.
+Copyright (c) 2016, 2018, The Linux Foundation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
@@ -40,7 +40,7 @@
void updateLogLevel() {
char level[PROPERTY_VALUE_MAX];
#ifdef ANDROID
- property_get("persist.debug.omx.logs.level", level, "0");
+ property_get("persist.vendor.debug.omx.logs.level", level, "0");
gOmxLogLevel = atoi(level);
#else
gOmxLogLevel = atoi("0");
diff --git a/mm-audio/aenc-qcelp13/qdsp6/Android.mk b/mm-audio/aenc-qcelp13/qdsp6/Android.mk
index 89069da..1d99822 100644
--- a/mm-audio/aenc-qcelp13/qdsp6/Android.mk
+++ b/mm-audio/aenc-qcelp13/qdsp6/Android.mk
@@ -42,8 +42,10 @@
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
-ifneq ($(filter sdm670 qcs605 msmnile,$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter msmnile,$(TARGET_BOARD_PLATFORM)),)
LOCAL_HEADER_LIBRARIES := audio_kernel_headers
+endif
+ifneq ($(filter sdm670 msm8953 msm8937 qcs605 msmnile,$(TARGET_BOARD_PLATFORM)),)
LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/vendor/qcom/opensource/audio-kernel/include
LOCAL_ADDITIONAL_DEPENDENCIES += $(BOARD_VENDOR_KERNEL_MODULES)
endif
diff --git a/post_proc/Android.mk b/post_proc/Android.mk
index 3165209..f2c9deb 100644
--- a/post_proc/Android.mk
+++ b/post_proc/Android.mk
@@ -65,8 +65,10 @@
$(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/techpack/audio/include \
$(call include-path-for, audio-effects)
-ifneq ($(filter sdm670 qcs605 msmnile,$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter msmnile,$(TARGET_BOARD_PLATFORM)),)
LOCAL_HEADER_LIBRARIES := audio_kernel_headers
+endif
+ifneq ($(filter sdm670 msm8953 msm8937 qcs605 msmnile,$(TARGET_BOARD_PLATFORM)),)
LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/vendor/qcom/opensource/audio-kernel/include
LOCAL_ADDITIONAL_DEPENDENCIES += $(BOARD_VENDOR_KERNEL_MODULES)
endif
@@ -120,7 +122,7 @@
################################################################################
-ifneq ($(filter msm8992 msm8994 msm8996 msm8998 sdm660 sdm845 apq8098_latv sdm670 qcs605 msmnile,$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter msm8992 msm8994 msm8996 msm8998 sdm660 sdm845 apq8098_latv sdm670 msm8953 msm8937 qcs605 msmnile,$(TARGET_BOARD_PLATFORM)),)
include $(CLEAR_VARS)
@@ -163,8 +165,10 @@
hardware/qcom/audio/hal/audio_extn \
external/tinycompress/include
-ifneq ($(filter sdm670 qcs605 msmnile,$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter msmnile,$(TARGET_BOARD_PLATFORM)),)
LOCAL_HEADER_LIBRARIES := audio_kernel_headers
+endif
+ifneq ($(filter sdm670 msm8953 msm8937 qcs605 msmnile,$(TARGET_BOARD_PLATFORM)),)
LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/vendor/qcom/opensource/audio-kernel/include
LOCAL_ADDITIONAL_DEPENDENCIES += $(BOARD_VENDOR_KERNEL_MODULES)
endif
diff --git a/qahw/Makefile.am b/qahw/Makefile.am
index 1375157..b78c9b7 100644
--- a/qahw/Makefile.am
+++ b/qahw/Makefile.am
@@ -13,6 +13,10 @@
libqahwwrapper_la_SOURCES = src/qahw.c \
src/qahw_effect.c
+if SVA_AUDIO_CONCURRENCY
+AM_CFLAGS += -DSVA_AUDIO_CONC
+endif
+
libqahwwrapper_la_CFLAGS = $(AM_CFLAGS)
libqahwwrapper_la_CFLAGS += -include stddef.h
libqahwwrapper_la_CFLAGS += -Dstrlcpy=g_strlcpy $(GLIB_CFLAGS) -include glib.h
diff --git a/qahw/configure.ac b/qahw/configure.ac
index 04fde19..5bd3a22 100644
--- a/qahw/configure.ac
+++ b/qahw/configure.ac
@@ -29,6 +29,7 @@
AC_PROG_MAKE_SET
PKG_PROG_PKG_CONFIG
+AM_CONDITIONAL([SVA_AUDIO_CONCURRENCY],[test x$BOARD_SUPPORTS_SVA_AUDIO_CONCURRENCY = xtrue])
AC_ARG_WITH([glib],
AC_HELP_STRING([--with-glib],
[enable glib, Build against glib. Use this when building for HLOS systems which use glib]))
diff --git a/qahw/src/qahw.c b/qahw/src/qahw.c
index 91fc5bf..d03a570 100644
--- a/qahw/src/qahw.c
+++ b/qahw/src/qahw.c
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
+* Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -37,6 +37,7 @@
#include <cutils/list.h>
#include <hardware/audio.h>
+#include <hardware/sound_trigger.h>
#include "qahw.h"
#define NO_ERROR 0
@@ -113,6 +114,7 @@
static struct listnode qahw_module_list;
static int qahw_list_count;
static pthread_mutex_t qahw_module_init_lock = PTHREAD_MUTEX_INITIALIZER;
+sound_trigger_hw_device_t *st_hw_device = NULL;
/** Start of internal functions */
@@ -1776,6 +1778,45 @@
return QAHW_MODULE_API_VERSION_CURRENT;
}
+/* Load AHAL module to run audio and sva concurrency */
+static void load_st_hal()
+{
+#ifdef SVA_AUDIO_CONC
+ int rc = -EINVAL;
+ const hw_module_t* module = NULL;
+
+ rc = hw_get_module_by_class(SOUND_TRIGGER_HARDWARE_MODULE_ID, "primary", &module);
+ if (rc) {
+ ALOGE("%s: AHAL Loading failed %d", __func__, rc);
+ goto error;
+ }
+
+ rc = sound_trigger_hw_device_open(module, &st_hw_device);
+ if (rc) {
+ ALOGE("%s: AHAL Device open failed %d", __func__, rc);
+ st_hw_device = NULL;
+ }
+error:
+ return;
+#else
+ return;
+#endif /*SVA_AUDIO_CONC*/
+}
+
+static void unload_st_hal()
+{
+#ifdef SVA_AUDIO_CONC
+ if (st_hw_device == NULL) {
+ ALOGE("%s: audio device is NULL",__func__);
+ return;
+ }
+ sound_trigger_hw_device_close(st_hw_device);
+ st_hw_device = NULL;
+#else
+ return;
+#endif /*SVA_AUDIO_CONC*/
+}
+
/* convenience API for opening and closing an audio HAL module */
qahw_module_handle_t *qahw_load_module_l(const char *hw_module_id)
@@ -1867,7 +1908,7 @@
/* Add module list to global module list */
list_add_tail(&qahw_module_list, &qahw_module->module_list);
-
+ load_st_hal();
error_exit:
pthread_mutex_unlock(&qahw_module_init_lock);
@@ -1924,6 +1965,7 @@
"is not closed", __func__);
rc = -EINVAL;
}
+ unload_st_hal();
error_exit:
pthread_mutex_unlock(&qahw_module_init_lock);
diff --git a/qahw_api/test/qahw_playback_test.c b/qahw_api/test/qahw_playback_test.c
index ba7f4bf..bbad92c 100644
--- a/qahw_api/test/qahw_playback_test.c
+++ b/qahw_api/test/qahw_playback_test.c
@@ -204,7 +204,7 @@
}
#ifndef AUDIO_FORMAT_AAC_LATM
-#define AUDIO_FORMAT_AAC_LATM 0x23000000UL
+#define AUDIO_FORMAT_AAC_LATM 0x80000000UL
#define AUDIO_FORMAT_AAC_LATM_LC (AUDIO_FORMAT_AAC_LATM | AUDIO_FORMAT_AAC_SUB_LC)
#define AUDIO_FORMAT_AAC_LATM_HE_V1 (AUDIO_FORMAT_AAC_LATM | AUDIO_FORMAT_AAC_SUB_HE_V1)
#define AUDIO_FORMAT_AAC_LATM_HE_V2 (AUDIO_FORMAT_AAC_LATM | AUDIO_FORMAT_AAC_SUB_HE_V2)