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) {