hal: start keep alive session to feed EC with silence data

FFV EC reference signal is fed from AFE RX port.
Start the keep alive session to write silence data to
RX port and feed the silence data to FFV EC.

Change-Id: I38b0396ef853493c9a176444dc803744be1c45bb
Signed-off-by: Surendar karka <sukark@codeaurora.org>
diff --git a/configure.ac b/configure.ac
index 6e03717..fd184b4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -118,6 +118,7 @@
 AM_CONDITIONAL([QAP], [test x$AUDIO_FEATURE_ENABLED_QAP = xtrue])
 AM_CONDITIONAL([AUDIO_HW_FFV], [test x$AUDIO_FEATURE_ENABLED_FFV = xtrue])
 AM_CONDITIONAL([CUSTOM_STEREO], [test x$AUDIO_FEATURE_ENABLED_CUSTOM_STEREO = xtrue])
+AM_CONDITIONAL([RUN_KEEP_ALIVE_IN_ARM_FFV], [test x$AUDIO_FEATURE_ENABLED_KEEP_ALIVE_ARM_FFV = xtrue])
 
 AC_CONFIG_FILES([ \
         Makefile \
diff --git a/hal/Makefile.am b/hal/Makefile.am
index 4f01efc..95224d0 100644
--- a/hal/Makefile.am
+++ b/hal/Makefile.am
@@ -189,6 +189,10 @@
 c_sources += audio_extn/hw_loopback.c
 endif
 
+if RUN_KEEP_ALIVE_IN_ARM_FFV
+AM_CFLAGS += -DRUN_KEEP_ALIVE_IN_ARM_FFV
+endif
+
 if AUDIO_HW_FFV
 AM_CFLAGS += -DFFV_ENABLED \
              -I $(PKG_CONFIG_SYSROOT_DIR)/usr/include/ffv/
diff --git a/hal/audio_extn/ffv.c b/hal/audio_extn/ffv.c
index 50b776b..511179a 100644
--- a/hal/audio_extn/ffv.c
+++ b/hal/audio_extn/ffv.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2017-2018, The Linux Foundation. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are
@@ -47,6 +47,7 @@
 #include <sys/resource.h>
 
 #include "audio_hw.h"
+#include "audio_extn.h"
 #include "platform.h"
 #include "platform_api.h"
 
@@ -497,7 +498,9 @@
     }
 
     ffvmod.in = in;
-
+#ifdef RUN_KEEP_ALIVE_IN_ARM_FFV
+    audio_extn_keep_alive_start(KEEP_ALIVE_OUT_PRIMARY);
+#endif
 #ifdef FFV_PCM_DUMP
     if (!ffvmod.fp_input) {
         ALOGD("%s: Opening input dump file \n", __func__);
@@ -547,7 +550,9 @@
 
     if (ffvmod.buffers_allocated)
         deallocate_buffers();
-
+#ifdef RUN_KEEP_ALIVE_IN_ARM_FFV
+    audio_extn_keep_alive_stop(KEEP_ALIVE_OUT_PRIMARY);
+#endif
     ffvmod.handle = NULL;
     ffvmod.in = NULL;
     ALOGV("%s: exit", __func__);
diff --git a/hal/audio_extn/soundtrigger.c b/hal/audio_extn/soundtrigger.c
index c2dee84..7ad8e9f 100644
--- a/hal/audio_extn/soundtrigger.c
+++ b/hal/audio_extn/soundtrigger.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013-2014, 2016-2017 The Linux Foundation. All rights reserved.
+/* Copyright (c) 2013-2014, 2016-2018 The Linux Foundation. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are
@@ -135,6 +135,13 @@
         list_add_tail(&st_dev->st_ses_list, &st_ses_info->list);
         break;
 
+    case ST_EVENT_START_KEEP_ALIVE:
+        pthread_mutex_unlock(&st_dev->lock);
+        pthread_mutex_lock(&st_dev->adev->lock);
+        audio_extn_keep_alive_start(KEEP_ALIVE_OUT_PRIMARY);
+        pthread_mutex_unlock(&st_dev->adev->lock);
+        goto done;
+
     case ST_EVENT_SESSION_DEREGISTER:
         if (!config) {
             ALOGE("%s: NULL config", __func__);
@@ -152,11 +159,20 @@
         list_remove(&st_ses_info->list);
         free(st_ses_info);
         break;
+
+    case ST_EVENT_STOP_KEEP_ALIVE:
+        pthread_mutex_unlock(&st_dev->lock);
+        pthread_mutex_lock(&st_dev->adev->lock);
+        audio_extn_keep_alive_stop(KEEP_ALIVE_OUT_PRIMARY);
+        pthread_mutex_unlock(&st_dev->adev->lock);
+        goto done;
+
     default:
         ALOGW("%s: Unknown event %d", __func__, event);
         break;
     }
     pthread_mutex_unlock(&st_dev->lock);
+done:
     return status;
 }