Merge "configs: kalama: add more echo combinations for VOIP usecase"
diff --git a/configs/crow/mixer_paths_crow_idp_wcd9395_wcd_dmic.xml b/configs/crow/mixer_paths_crow_idp_wcd9395_wcd_dmic.xml
old mode 100644
new mode 100755
index de9e43c..5a4d18d
--- a/configs/crow/mixer_paths_crow_idp_wcd9395_wcd_dmic.xml
+++ b/configs/crow/mixer_paths_crow_idp_wcd9395_wcd_dmic.xml
@@ -834,9 +834,9 @@
<ctl name="VA DEC1 MUX" value="SWR_MIC" />
<ctl name="VA SMIC MUX0" value="SWR_MIC3" />
<ctl name="VA SMIC MUX1" value="SWR_MIC0" />
- <ctl name="DMIC0 ChMap" value="SWRM_TX1_CH2" />
+ <ctl name="DMIC1 ChMap" value="SWRM_TX1_CH4" />
<ctl name="DMIC3 ChMap" value="SWRM_TX1_CH1" />
- <ctl name="DMIC0_MIXER Switch" value="1" />
+ <ctl name="DMIC1_MIXER Switch" value="1" />
<ctl name="DMIC3_MIXER Switch" value="1" />
</path>
@@ -851,10 +851,10 @@
<ctl name="VA SMIC MUX1" value="SWR_MIC8" />
<ctl name="VA SMIC MUX0" value="SWR_MIC10" />
<ctl name="DMIC0 ChMap" value="SWRM_TX2_CH2" />
- <ctl name="DMIC2 ChMap" value="SWRM_TX3_CH1" />
+ <ctl name="DMIC1 ChMap" value="SWRM_TX3_CH1" />
<ctl name="DMIC3 ChMap" value="SWRM_TX3_CH3" />
<ctl name="DMIC0_MIXER Switch" value="1" />
- <ctl name="DMIC2_MIXER Switch" value="1" />
+ <ctl name="DMIC1_MIXER Switch" value="1" />
<ctl name="DMIC3_MIXER Switch" value="1" />
</path>
@@ -871,14 +871,14 @@
<ctl name="VA SMIC MUX2" value="SWR_MIC7" />
<ctl name="VA SMIC MUX3" value="SWR_MIC9" />
<ctl name="VA SMIC MUX0" value="SWR_MIC11" />
- <ctl name="DMIC2 ChMap" value="SWRM_TX3_CH1" />
- <ctl name="DMIC4 ChMap" value="SWRM_TX2_CH4" />
+ <ctl name="DMIC0 ChMap" value="SWRM_TX2_CH4" />
<ctl name="DMIC1 ChMap" value="SWRM_TX3_CH2" />
<ctl name="DMIC3 ChMap" value="SWRM_TX3_CH4" />
- <ctl name="DMIC2_MIXER Switch" value="1" />
- <ctl name="DMIC4_MIXER Switch" value="1" />
+ <ctl name="DMIC2 ChMap" value="SWRM_TX3_CH1" />
+ <ctl name="DMIC0_MIXER Switch" value="1" />
<ctl name="DMIC1_MIXER Switch" value="1" />
<ctl name="DMIC3_MIXER Switch" value="1" />
+ <ctl name="DMIC2_MIXER Switch" value="1" />
</path>
<path name="va-mic">
@@ -902,9 +902,9 @@
<ctl name="VA DEC1 MUX" value="SWR_MIC" />
<ctl name="VA SMIC MUX0" value="SWR_MIC3" />
<ctl name="VA SMIC MUX1" value="SWR_MIC0" />
- <ctl name="DMIC0 ChMap" value="SWRM_TX1_CH2" />
+ <ctl name="DMIC1 ChMap" value="SWRM_TX1_CH4" />
<ctl name="DMIC3 ChMap" value="SWRM_TX1_CH1" />
- <ctl name="DMIC0_MIXER Switch" value="1" />
+ <ctl name="DMIC1_MIXER Switch" value="1" />
<ctl name="DMIC3_MIXER Switch" value="1" />
</path>
@@ -924,10 +924,10 @@
<ctl name="VA SMIC MUX2" value="SWR_MIC5" />
<ctl name="DMIC2 ChMap" value="SWRM_TX2_CH1" />
<ctl name="DMIC0 ChMap" value="SWRM_TX2_CH2" />
- <ctl name="DMIC3 ChMap" value="SWRM_TX3_CH1" />
+ <ctl name="DMIC4 ChMap" value="SWRM_TX3_CH1" />
<ctl name="DMIC2_MIXER Switch" value="1" />
<ctl name="DMIC0_MIXER Switch" value="1" />
- <ctl name="DMIC3_MIXER Switch" value="1" />
+ <ctl name="DMIC4_MIXER Switch" value="1" />
</path>
<path name="va-mic-qmic-lpi">
@@ -1000,9 +1000,9 @@
<ctl name="TX DEC1 MUX" value="SWR_MIC" />
<ctl name="TX SMIC MUX0" value="SWR_MIC3" />
<ctl name="TX SMIC MUX1" value="SWR_MIC0" />
- <ctl name="DMIC0 ChMap" value="SWRM_TX1_CH2" />
+ <ctl name="DMIC1 ChMap" value="SWRM_TX1_CH4" />
<ctl name="DMIC3 ChMap" value="SWRM_TX1_CH1" />
- <ctl name="DMIC0_MIXER Switch" value="1" />
+ <ctl name="DMIC1_MIXER Switch" value="1" />
<ctl name="DMIC3_MIXER Switch" value="1" />
<ctl name="TX_DEC0 Volume" value="102" />
<ctl name="TX_DEC1 Volume" value="102" />
@@ -1015,9 +1015,9 @@
<ctl name="TX DEC1 MUX" value="SWR_MIC" />
<ctl name="TX SMIC MUX0" value="SWR_MIC3" />
<ctl name="TX SMIC MUX1" value="SWR_MIC0" />
- <ctl name="DMIC0 ChMap" value="SWRM_TX1_CH2" />
+ <ctl name="DMIC1 ChMap" value="SWRM_TX1_CH4" />
<ctl name="DMIC3 ChMap" value="SWRM_TX1_CH1" />
- <ctl name="DMIC0_MIXER Switch" value="1" />
+ <ctl name="DMIC1_MIXER Switch" value="1" />
<ctl name="DMIC3_MIXER Switch" value="1" />
<ctl name="TX_DEC0 Volume" value="102" />
<ctl name="TX_DEC1 Volume" value="102" />
@@ -1098,10 +1098,10 @@
<ctl name="TX_DEC1 MODE" value="ADC_LOW_PWR" />
<ctl name="TX SMIC MUX0" value="SWR_MIC4" />
<ctl name="TX SMIC MUX1" value="SWR_MIC8" />
- <ctl name="DMIC0 ChMap" value="SWRM_TX2_CH1" />
+ <ctl name="DMIC1 ChMap" value="SWRM_TX2_CH1" />
<ctl name="DMIC3 ChMap" value="SWRM_TX3_CH1" />
- <ctl name="TX_DMIC0_MIXER Switch" value="1" />
- <ctl name="TX_DMIC4_MIXER Switch" value="1" />
+ <ctl name="TX_DMIC1_MIXER Switch" value="1" />
+ <ctl name="TX_DMIC3_MIXER Switch" value="1" />
</path>
<path name="dmic-broadside">
@@ -1126,10 +1126,10 @@
<ctl name="VA SMIC MUX1" value="SWR_MIC8" />
<ctl name="VA SMIC MUX0" value="SWR_MIC10" />
<ctl name="DMIC0 ChMap" value="SWRM_TX2_CH2" />
- <ctl name="DMIC2 ChMap" value="SWRM_TX3_CH1" />
+ <ctl name="DMIC1 ChMap" value="SWRM_TX3_CH1" />
<ctl name="DMIC3 ChMap" value="SWRM_TX3_CH3" />
<ctl name="DMIC0_MIXER Switch" value="1" />
- <ctl name="DMIC2_MIXER Switch" value="1" />
+ <ctl name="DMIC1_MIXER Switch" value="1" />
<ctl name="DMIC3_MIXER Switch" value="1" />
</path>
@@ -1144,10 +1144,10 @@
<ctl name="VA SMIC MUX1" value="SWR_MIC8" />
<ctl name="VA SMIC MUX0" value="SWR_MIC10" />
<ctl name="DMIC0 ChMap" value="SWRM_TX2_CH2" />
- <ctl name="DMIC2 ChMap" value="SWRM_TX3_CH1" />
+ <ctl name="DMIC1 ChMap" value="SWRM_TX3_CH1" />
<ctl name="DMIC3 ChMap" value="SWRM_TX3_CH3" />
<ctl name="DMIC0_MIXER Switch" value="1" />
- <ctl name="DMIC2_MIXER Switch" value="1" />
+ <ctl name="DMIC1_MIXER Switch" value="1" />
<ctl name="DMIC3_MIXER Switch" value="1" />
</path>
@@ -1170,14 +1170,14 @@
<ctl name="TX SMIC MUX2" value="SWR_MIC7" />
<ctl name="TX SMIC MUX3" value="SWR_MIC9" />
<ctl name="TX SMIC MUX0" value="SWR_MIC11" />
- <ctl name="DMIC2 ChMap" value="SWRM_TX3_CH1" />
- <ctl name="DMIC4 ChMap" value="SWRM_TX2_CH4" />
- <ctl name="DMIC1 ChMap" value="SWRM_TX3_CH2" />
- <ctl name="DMIC3 ChMap" value="SWRM_TX3_CH4" />
- <ctl name="DMIC2_MIXER Switch" value="1" />
- <ctl name="DMIC4_MIXER Switch" value="1" />
+ <ctl name="DMIC0 ChMap" value="SWRM_TX2_CH2" />
+ <ctl name="DMIC1 ChMap" value="SWRM_TX3_CH1" />
+ <ctl name="DMIC3 ChMap" value="SWRM_TX3_CH3" />
+ <ctl name="DMIC2 ChMap" value="SWRM_TX3_CH4" />
+ <ctl name="DMIC0_MIXER Switch" value="1" />
<ctl name="DMIC1_MIXER Switch" value="1" />
<ctl name="DMIC3_MIXER Switch" value="1" />
+ <ctl name="DMIC2_MIXER Switch" value="1" />
<ctl name="TX_DEC0 Volume" value="102" />
<ctl name="TX_DEC1 Volume" value="102" />
<ctl name="TX_DEC2 Volume" value="102" />
@@ -1209,9 +1209,9 @@
<ctl name="TX_AIF1_CAP Mixer DEC2" value="1" />
<ctl name="TX DMIC MUX2" value="DMIC0" />
<ctl name="TX_AIF1_CAP Mixer DEC3" value="1" />
- <ctl name="TX DMIC MUX3" value="DMIC2" />
+ <ctl name="TX DMIC MUX3" value="DMIC1" />
<ctl name="TX_AIF1_CAP Mixer DEC4" value="1" />
- <ctl name="TX DMIC MUX4" value="DMIC2" />
+ <ctl name="TX DMIC MUX4" value="DMIC1" />
</path>
<path name="handset-dual-dmic-quad-dec-reverse">
diff --git a/configs/crow/mixer_paths_crow_qrd.xml b/configs/crow/mixer_paths_crow_qrd.xml
index 28520e2..587416c 100644
--- a/configs/crow/mixer_paths_crow_qrd.xml
+++ b/configs/crow/mixer_paths_crow_qrd.xml
@@ -288,9 +288,9 @@
<path name="amic3">
<ctl name="TX DEC2 MUX" value="SWR_MIC" />
- <ctl name="TX SMIC MUX2" value="SWR_MIC5" />
+ <ctl name="TX SMIC MUX2" value="SWR_MIC6" />
<ctl name="TX_AIF1_CAP Mixer DEC2" value="1" />
- <ctl name="ADC2 ChMap" value="SWRM_TX2_CH2" />
+ <ctl name="ADC2 ChMap" value="SWRM_TX2_CH3" />
<ctl name="ADC2 MUX" value="INP3" />
<ctl name="ADC2_MIXER Switch" value="1" />
</path>
@@ -479,11 +479,11 @@
</path>
<path name="speaker-mic">
- <path name="amic3" />
+ <path name="amic1" />
</path>
<path name="speaker-mic-liquid">
- <path name="amic3" />
+ <path name="amic1" />
</path>
<path name="speaker-mic-sbc">
@@ -559,7 +559,6 @@
<ctl name="WSA RX0 MUX" value="AIF1_PB" />
<ctl name="WSA_RX0 INP0" value="RX0" />
<ctl name="WSA_COMP1 Switch" value="1" />
- <ctl name="Idle Detect" value="1" />
<ctl name="SpkrLeft COMP Switch" value="1" />
<ctl name="SpkrLeft VISENSE Switch" value="1" />
<ctl name="SpkrLeft SWR DAC_Port Switch" value="1" />
diff --git a/device/src/Bluetooth.cpp b/device/src/Bluetooth.cpp
index cb67a90..f002ef4 100644
--- a/device/src/Bluetooth.cpp
+++ b/device/src/Bluetooth.cpp
@@ -1227,6 +1227,7 @@
if ((fbDev->deviceStartStopCount > 0) &&
(--fbDev->deviceStartStopCount == 0)) {
fbDev->isConfigured = false;
+ fbDev->isAbrEnabled = false;
}
if (fbDev->deviceCount > 0)
fbDev->deviceCount--;
@@ -1241,6 +1242,7 @@
if ((fbDev->deviceStartStopCount > 0) &&
(--fbDev->deviceStartStopCount == 0)) {
fbDev->isConfigured = false;
+ fbDev->isAbrEnabled = false;
}
if (fbDev->deviceCount > 0)
fbDev->deviceCount--;
diff --git a/resource_manager/src/ResourceManager.cpp b/resource_manager/src/ResourceManager.cpp
index 91d1061..133e387 100644
--- a/resource_manager/src/ResourceManager.cpp
+++ b/resource_manager/src/ResourceManager.cpp
@@ -9057,8 +9057,10 @@
param_bt_a2dp.dev_id = PAL_DEVICE_OUT_BLUETOOTH_A2DP;
param_bt_a2dp.a2dp_suspended = true;
PAL_DBG(LOG_TAG, "Applying cached a2dp_suspended true param");
+ mResourceManagerMutex.unlock();
status = dev->setDeviceParameter(PAL_PARAM_ID_BT_A2DP_SUSPENDED,
¶m_bt_a2dp);
+ mResourceManagerMutex.lock();
} else {
a2dp_suspended = false;
}
diff --git a/stream/src/Stream.cpp b/stream/src/Stream.cpp
index 355d35e..02ea578 100644
--- a/stream/src/Stream.cpp
+++ b/stream/src/Stream.cpp
@@ -866,6 +866,16 @@
a2dpSuspend = false;
+ /* Check for BT device connected state */
+ for (int32_t i = 0; i < mDevices.size(); i++) {
+ pal_device_id_t dev_id = (pal_device_id_t)mDevices[i]->getSndDeviceId();
+ if (rm->isBtDevice(dev_id) && !(rm->isDeviceAvailable(dev_id))) {
+ PAL_ERR(LOG_TAG, "BT device %d not connected", dev_id);
+ status = -ENODEV;
+ goto exit;
+ }
+ }
+
/* SCO device is not ready */
if (rm->isDeviceAvailable(mDevices, PAL_DEVICE_OUT_BLUETOOTH_SCO) &&
!rm->isDeviceReady(PAL_DEVICE_OUT_BLUETOOTH_SCO)) {
@@ -1373,6 +1383,7 @@
int32_t connectCount = 0, disconnectCount = 0;
bool isNewDeviceA2dp = false;
bool isCurDeviceA2dp = false;
+ bool isCurDeviceSco = false;
bool isCurrentDeviceProxyOut = false;
bool isCurrentDeviceDpOut = false;
bool matchFound = false;
@@ -1425,6 +1436,11 @@
curBtDevId = curDevId;
}
+ if (curDevId == PAL_DEVICE_OUT_BLUETOOTH_SCO) {
+ isCurDeviceSco = true;
+ curBtDevId = curDevId;
+ }
+
if (curDevId == PAL_DEVICE_OUT_PROXY)
isCurrentDeviceProxyOut = true;
@@ -1497,11 +1513,19 @@
* But the audioflinger continues to write data until standby time
* (3sec). As BT is turned off, the write gets blocked.
* Avoid this by routing audio to speaker until standby.
+ *
+ * If a stream is active on SCO and playback has ended, APM will send
+ * routing=0. Stream will be closed in PAL after standby time. If SCO
+ * device gets disconnected, this stream will not receive new routing
+ * and stream will remain with SCO for the time being. If SCO device
+ * gets connected again with different config in the meantime and
+ * capture stream tries to start ABR path, it will lead to error due to
+ * config mismatch. Added OUT_SCO device handling to resolve this.
*/
// This assumes that PAL_DEVICE_NONE comes as single device
if ((newDevices[i].id == PAL_DEVICE_NONE) &&
- (((isCurDeviceA2dp == true) && (!rm->isDeviceReady(curBtDevId))) ||
- (isCurrentDeviceProxyOut) || (isCurrentDeviceDpOut))) {
+ ((isCurrentDeviceProxyOut) || (isCurrentDeviceDpOut) ||
+ ((isCurDeviceA2dp || isCurDeviceSco) && (!rm->isDeviceReady(curBtDevId))))) {
newDevices[i].id = PAL_DEVICE_OUT_SPEAKER;
if (rm->getDeviceConfig(&newDevices[i], mStreamAttr)) {
@@ -1756,7 +1780,9 @@
/* Add device associated with current stream to streamDevDisconnect/StreamDevConnect list */
for (int j = 0; j < disconnectCount; j++) {
// check to make sure device direction is the same
- if (rm->matchDevDir(mDevices[curDeviceSlots[j]]->getSndDeviceId(), newDeviceId)) {
+ // for shared BE, new device on the slot may change in compareSharedBEStreamDevAttr()
+ if (rm->matchDevDir(mDevices[curDeviceSlots[j]]->getSndDeviceId(), newDeviceId) &&
+ newDeviceId == newDevices[newDeviceSlots[i]].id) {
streamDevDisconnect.push_back({streamHandle, mDevices[curDeviceSlots[j]]->getSndDeviceId()});
// if something disconnected incoming device and current dev diff so push on a switchwe need to add the deivce
matchFound = true;
diff --git a/stream/src/StreamCompress.cpp b/stream/src/StreamCompress.cpp
index a0d4a1c..9fe128e 100644
--- a/stream/src/StreamCompress.cpp
+++ b/stream/src/StreamCompress.cpp
@@ -1,6 +1,5 @@
/*
* Copyright (c) 2019-2021, The Linux Foundation. All rights reserved.
- * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -26,6 +25,10 @@
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Changes from Qualcomm Innovation Center are provided under the following license:
+ * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear
*/
#define LOG_TAG "PAL: StreamCompress"
@@ -187,7 +190,9 @@
}
}
+ rm->lockGraph();
status = session->open(this);
+ rm->unlockGraph();
if (0 != status) {
PAL_ERR(LOG_TAG,"session open failed with status %d", status);
goto exit;
diff --git a/stream/src/StreamPCM.cpp b/stream/src/StreamPCM.cpp
index deff268..e001253 100644
--- a/stream/src/StreamPCM.cpp
+++ b/stream/src/StreamPCM.cpp
@@ -1,6 +1,5 @@
/*
* Copyright (c) 2019-2021, The Linux Foundation. All rights reserved.
- * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -26,6 +25,10 @@
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Changes from Qualcomm Innovation Center are provided under the following license:
+ * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear
*/
#define LOG_TAG "PAL: StreamPCM"
@@ -226,7 +229,9 @@
}
}
+ rm->lockGraph();
status = session->open(this);
+ rm->unlockGraph();
if (0 != status) {
PAL_ERR(LOG_TAG, "session open failed with status %d", status);
goto exit;