audio: Add Quad mic mixer controls and EC reference changes for FFV

- Add quad mic mixer controls in audio and sound trigger xmls files.
- Add changes to set EC reference device for FFV.

CRs-Fixed: 2225936
Change-Id: Ife05d9069db2880473f8e6d06ab284c011f935ae
diff --git a/hal/audio_extn/ffv.c b/hal/audio_extn/ffv.c
index 82140b1..e0f3312 100755
--- a/hal/audio_extn/ffv.c
+++ b/hal/audio_extn/ffv.c
@@ -828,7 +828,7 @@
     bytes_to_copy = (bytes <= out_buf_size) ? bytes : out_buf_size;
     memcpy(buffer, process_out_ptr, bytes_to_copy);
     if (bytes_to_copy != out_buf_size)
-        ALOGD("%s: out buffer data dropped, copied %d bytes",
+        ALOGD("%s: out buffer data dropped, copied %zd bytes",
                __func__, bytes_to_copy);
 
 #ifdef FFV_PCM_DUMP
@@ -893,18 +893,30 @@
                 ALOGE("%s: Invalid ec ref", __func__);
             }
         }
-
-        ret = str_parms_get_int(parms, AUDIO_PARAMETER_FFV_EC_REF_DEVICE, &val);
-        if (ret >= 0) {
+        ret = -1;
+        if (str_parms_get_int(parms, AUDIO_PARAMETER_FFV_EC_REF_DEVICE, &val) >= 0) {
+            ret = 1;
             str_parms_del(parms, AUDIO_PARAMETER_FFV_EC_REF_DEVICE);
+        } else if (str_parms_get_int(parms, AUDIO_PARAMETER_DEVICE_CONNECT, &val) >= 0) {
+            ret = 1;
+            str_parms_del(parms, AUDIO_PARAMETER_DEVICE_CONNECT);
+        }
+        if (ret == 1) {
             if (val & AUDIO_DEVICE_OUT_SPEAKER) {
                 ALOGD("%s: capture ec ref from speaker", __func__);
                 ffvmod.ec_ref_dev = AUDIO_DEVICE_OUT_SPEAKER;
             } else if (val & AUDIO_DEVICE_OUT_LINE) {
                 ALOGD("%s: capture ec ref from line out", __func__);
                 ffvmod.ec_ref_dev = AUDIO_DEVICE_OUT_LINE;
-            } else {
-                ALOGE("%s: Invalid ec ref out device", __func__);
+            }
+        }
+
+        ret = str_parms_get_int(parms, AUDIO_PARAMETER_DEVICE_DISCONNECT, &val);
+        if (ret >= 0) {
+            str_parms_del(parms, AUDIO_PARAMETER_DEVICE_DISCONNECT);
+            if (val & AUDIO_DEVICE_OUT_LINE) {
+                ALOGD("%s: capture ec ref from speaker", __func__);
+                ffvmod.ec_ref_dev = AUDIO_DEVICE_OUT_SPEAKER;
             }
         }
 
diff --git a/hal/audio_extn/soundtrigger.c b/hal/audio_extn/soundtrigger.c
index 061616c..909ef8f 100644
--- a/hal/audio_extn/soundtrigger.c
+++ b/hal/audio_extn/soundtrigger.c
@@ -585,13 +585,15 @@
     }
 
     ret = str_parms_get_int(params, AUDIO_PARAMETER_DEVICE_CONNECT, &val);
-    if ((ret >= 0) && audio_is_input_device(val)) {
+    if ((ret >= 0) && (audio_is_input_device(val) ||
+           (val == AUDIO_DEVICE_OUT_LINE))) {
         event.u.value = val;
         st_dev->st_callback(AUDIO_EVENT_DEVICE_CONNECT, &event);
     }
 
     ret = str_parms_get_int(params, AUDIO_PARAMETER_DEVICE_DISCONNECT, &val);
-    if ((ret >= 0) && audio_is_input_device(val)) {
+    if ((ret >= 0) && (audio_is_input_device(val) ||
+            (val == AUDIO_DEVICE_OUT_LINE))) {
         event.u.value = val;
         st_dev->st_callback(AUDIO_EVENT_DEVICE_DISCONNECT, &event);
     }
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index fc84562..9993c33 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -1099,7 +1099,8 @@
                                               "true-native-mode");
             adev->native_playback_enabled = true;
         }
-        if ((snd_device == SND_DEVICE_IN_HANDSET_6MIC) &&
+        if (((snd_device == SND_DEVICE_IN_HANDSET_6MIC) ||
+            (snd_device == SND_DEVICE_IN_HANDSET_QMIC)) &&
             (audio_extn_ffv_get_stream() == adev->active_input)) {
             ALOGD("%s: init ec ref loopback", __func__);
             audio_extn_ffv_init_ec_ref_loopback(adev, snd_device);