mm-audio: Fix delay with first voice call after bootup.

- Add csd init and deinit to HAL constructor and
  destructor
- Add conditional check for voice acdb loader

Bug-id: 7612431
Change-Id: I4165e659fa300abb184e2438a5d730bb2158c094
diff --git a/alsa_sound/AudioHardwareALSA.cpp b/alsa_sound/AudioHardwareALSA.cpp
index a53f161..4050777 100644
--- a/alsa_sound/AudioHardwareALSA.cpp
+++ b/alsa_sound/AudioHardwareALSA.cpp
@@ -57,6 +57,8 @@
     static void (*acdb_deallocate)();
 #endif
 #ifdef QCOM_CSDCLIENT_ENABLED
+    static int (*csd_client_init)();
+    static int (*csd_client_deinit)();
     static int (*csd_start_playback)();
     static int (*csd_stop_playback)();
 #endif
@@ -128,8 +130,16 @@
                  ALOGE("AudioHardware: DLOPEN not successful for CSD CLIENT");
              } else {
                  ALOGD("AudioHardware: DLOPEN successful for CSD CLIENT");
+                 csd_client_init = (int (*)())::dlsym(mCsdHandle,"csd_client_init");
+                 csd_client_deinit = (int (*)())::dlsym(mCsdHandle,"csd_client_deinit");
                  csd_start_playback = (int (*)())::dlsym(mCsdHandle,"csd_client_start_playback");
                  csd_stop_playback = (int (*)())::dlsym(mCsdHandle,"csd_client_stop_playback");
+
+                 if (csd_client_init == NULL) {
+                    ALOGE("dlsym: Error:%s Loading csd_client_init", dlerror());
+                 } else {
+                    csd_client_init();
+                 }
              }
              mALSADevice->setCsdHandle(mCsdHandle);
 #endif
@@ -179,6 +189,10 @@
 #ifdef QCOM_ACDB_ENABLED
                 if (mAcdbHandle) {
                     mUcMgr->acdb_handle = static_cast<void*> (mAcdbHandle);
+                    if (mFusion3Platform)
+                        mUcMgr->isFusion3Platform = true;
+                    else
+                        mUcMgr->isFusion3Platform = false;
                 }
 #endif
             }
@@ -221,8 +235,13 @@
 
 #ifdef QCOM_CSDCLEINT_ENABLED
      if (mCsdHandle) {
-        ::dlclose(mCsdHandle);
-        mCsdHandle = NULL;
+         if (csd_client_deinit == NULL) {
+             ALOGE("dlsym: Error:%s Loading csd_client_deinit", dlerror());
+         } else {
+             csd_client_deinit();
+         }
+         ::dlclose(mCsdHandle);
+         mCsdHandle = NULL;
      }
 #endif
 }