alsa_sound: Fix Echo reference logic
-During Skype call , there is Echo hearing at far end device.
-This is happening because Echo reference is setting after enabling
the devices, so a wrong EC reference id is sending to DSP.
-Echo reference should be set even before enabling the devices.
Change-Id: Ibd23dd9be11c7b1ae882a633be3d55779bc72c7c
CRs-Fixed: 536541
(cherry picked from commit d0dd74fbaff448194f49057fe3e16c16debc8f02)
diff --git a/alsa_sound/ALSADevice.cpp b/alsa_sound/ALSADevice.cpp
index d9eace8..f4c5690 100644
--- a/alsa_sound/ALSADevice.cpp
+++ b/alsa_sound/ALSADevice.cpp
@@ -689,27 +689,10 @@
}
}
#endif
- for(ALSAUseCaseList::iterator it = mUseCaseList.begin(); it != mUseCaseList.end(); ++it) {
- ALOGD("Route use case %s\n", it->useCase);
- if ((use_case != NULL) && (strncmp(use_case, SND_USE_CASE_VERB_INACTIVE,
- strlen(SND_USE_CASE_VERB_INACTIVE))) && (!strncmp(use_case, it->useCase, MAX_UC_LEN))) {
- snd_use_case_set(handle->ucMgr, "_verb", it->useCase);
- } else {
- snd_use_case_set(handle->ucMgr, "_enamod", it->useCase);
- }
- }
- if (!mUseCaseList.empty())
- mUseCaseList.clear();
- if (use_case != NULL) {
- free(use_case);
- use_case = NULL;
- }
-#ifdef QCOM_FM_ENABLED
- if (rxDevice != NULL) {
- setFmVolume(mFmVolume, handle);
- }
-#endif
- ALOGD("switchDevice: mCurTxUCMDevivce %s mCurRxDevDevice %s", mCurTxUCMDevice, mCurRxUCMDevice);
+
+ALOGD("switchDevice: mCurTxUCMDevivce %s mCurRxDevDevice %s", mCurTxUCMDevice, mCurRxUCMDevice);
+ /* Enable the EC ref device before enabling the Rx/Tx devices */
+ /* Enabling the Rx/Tx devices is being happened while enabling _verb/_enamod usecases */
#ifdef QCOM_ACDB_ENABLED
if (((devices & AudioSystem::DEVICE_IN_BUILTIN_MIC) || (devices & AudioSystem::DEVICE_IN_BACK_MIC))
&& (mInChannels == 1)) {
@@ -740,6 +723,27 @@
}
}
#endif
+ for(ALSAUseCaseList::iterator it = mUseCaseList.begin(); it != mUseCaseList.end(); ++it) {
+ ALOGD("Route use case %s\n", it->useCase);
+ if ((use_case != NULL) && (strncmp(use_case, SND_USE_CASE_VERB_INACTIVE,
+ strlen(SND_USE_CASE_VERB_INACTIVE))) && (!strncmp(use_case, it->useCase, MAX_UC_LEN))) {
+ snd_use_case_set(handle->ucMgr, "_verb", it->useCase);
+ } else {
+ snd_use_case_set(handle->ucMgr, "_enamod", it->useCase);
+ }
+ }
+ if (!mUseCaseList.empty())
+ mUseCaseList.clear();
+ if (use_case != NULL) {
+ free(use_case);
+ use_case = NULL;
+ }
+#ifdef QCOM_FM_ENABLED
+ if (rxDevice != NULL) {
+ setFmVolume(mFmVolume, handle);
+ }
+#endif
+
#ifdef QCOM_CSDCLIENT_ENABLED
if (isPlatformFusion3() && (inCallDevSwitch == true)) {
if (rx_dev_id == DEVICE_SPEAKER_RX_ACDB_ID && tx_dev_id == DEVICE_HANDSET_TX_ACDB_ID) {