hal: Add support for voip record low-latency

Add support for voip record low-latency path if app requests
for audio record with fast flag.

Change-Id: I2152a796cdb8c29142315c23cad7ec32f771f6b3
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 0594b7b..374e9f8 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -399,6 +399,7 @@
 
     [USECASE_AUDIO_PLAYBACK_VOIP] = "audio-playback-voip",
     [USECASE_AUDIO_RECORD_VOIP] = "audio-record-voip",
+    [USECASE_AUDIO_RECORD_VOIP_LOW_LATENCY] = "audio-record-voip-low-latency",
     /* For Interactive Audio Streams */
     [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM1] = "audio-interactive-stream1",
     [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM2] = "audio-interactive-stream2",
@@ -549,6 +550,7 @@
     int dir = 0;
     switch (uc_id) {
         case USECASE_AUDIO_RECORD_LOW_LATENCY:
+        case USECASE_AUDIO_RECORD_VOIP_LOW_LATENCY:
             dir = 1;
         case USECASE_AUDIO_PLAYBACK_ULL:
             break;
@@ -3735,7 +3737,8 @@
         list_for_each(node, &adev->usecase_list) {
             usecase = node_to_item(node, struct audio_usecase, list);
             if ((usecase->type == PCM_CAPTURE &&
-                     usecase->id != USECASE_AUDIO_RECORD_VOIP)
+                     usecase->id != USECASE_AUDIO_RECORD_VOIP &&
+                          usecase->id != USECASE_AUDIO_RECORD_VOIP_LOW_LATENCY)
                 || usecase == uc_info)
                 continue;
 
@@ -9428,7 +9431,10 @@
             (flags & AUDIO_INPUT_FLAG_FAST) != 0) {
         is_low_latency = true;
 #if LOW_LATENCY_CAPTURE_USE_CASE
-        in->usecase = USECASE_AUDIO_RECORD_LOW_LATENCY;
+        if ((flags & AUDIO_INPUT_FLAG_VOIP_TX) != 0)
+            in->usecase = USECASE_AUDIO_RECORD_VOIP_LOW_LATENCY;
+        else
+            in->usecase = USECASE_AUDIO_RECORD_LOW_LATENCY;
 #endif
         in->realtime = may_use_noirq_mode(adev, in->usecase, in->flags);
         if (!in->realtime) {
@@ -9509,6 +9515,10 @@
         in->config = pcm_config_afe_proxy_record;
         in->config.rate = config->sample_rate;
         in->af_period_multiplier = 1;
+    } else if (in->realtime) {
+        in->config = pcm_config_audio_capture_rt;
+        in->config.format = pcm_format_from_audio_format(config->format);
+        in->af_period_multiplier = af_period_multiplier;
     } else if (in->source == AUDIO_SOURCE_VOICE_COMMUNICATION &&
                in->flags & AUDIO_INPUT_FLAG_VOIP_TX &&
                (config->sample_rate == 8000 ||