hal : Support for another instance of fm recording

   -Added support for one more instance of fm recording
    to play fm over a2dp.

Change-Id: I0c796c5acdc045327a8d43754e7530aab10097d9
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index c00b067..b53892f 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -105,6 +105,7 @@
     [USECASE_AUDIO_PLAYBACK_OFFLOAD] = "compress-offload-playback",
     [USECASE_AUDIO_RECORD] = "audio-record",
     [USECASE_AUDIO_RECORD_LOW_LATENCY] = "low-latency-record",
+    [USECASE_AUDIO_RECORD_FM_VIRTUAL] = "fm-virtual-record",
     [USECASE_AUDIO_PLAYBACK_FM] = "play-fm",
     [USECASE_VOICE_CALL] = "voice-call",
     
@@ -707,6 +708,7 @@
     struct audio_usecase *uc_info;
     struct audio_device *adev = in->dev;
 
+    in->usecase = platform_get_usecase_from_source(in->source);
     ALOGV("%s: enter: usecase(%d)", __func__, in->usecase);
 
     /* Check if source matches incall recording usecase criteria */
diff --git a/hal/audio_hw.h b/hal/audio_hw.h
index 965ac62..07fd027 100644
--- a/hal/audio_hw.h
+++ b/hal/audio_hw.h
@@ -65,6 +65,7 @@
     /* Capture usecases */
     USECASE_AUDIO_RECORD,
     USECASE_AUDIO_RECORD_LOW_LATENCY,
+    USECASE_AUDIO_RECORD_FM_VIRTUAL,
 
     /* Voice usecase */
     USECASE_VOICE_CALL,
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index 44842b5..691a833 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -98,14 +98,16 @@
     [USECASE_AUDIO_PLAYBACK_DEEP_BUFFER] = {DEEP_BUFFER_PCM_DEVICE,
                                             DEEP_BUFFER_PCM_DEVICE},
     [USECASE_AUDIO_PLAYBACK_LOW_LATENCY] = {LOWLATENCY_PCM_DEVICE,
-                                            LOWLATENCY_PCM_DEVICE},
-    [USECASE_AUDIO_PLAYBACK_MULTI_CH] = {MULTI_CHANNEL_PCM_DEVICE,
-                                         MULTI_CHANNEL_PCM_DEVICE},
+                                           LOWLATENCY_PCM_DEVICE},
+    [USECASE_AUDIO_PLAYBACK_MULTI_CH] = {MULTIMEDIA2_PCM_DEVICE,
+                                        MULTIMEDIA2_PCM_DEVICE},
     [USECASE_AUDIO_PLAYBACK_OFFLOAD] =
                      {PLAYBACK_OFFLOAD_DEVICE, PLAYBACK_OFFLOAD_DEVICE},
     [USECASE_AUDIO_RECORD] = {AUDIO_RECORD_PCM_DEVICE, AUDIO_RECORD_PCM_DEVICE},
     [USECASE_AUDIO_RECORD_LOW_LATENCY] = {LOWLATENCY_PCM_DEVICE,
                                           LOWLATENCY_PCM_DEVICE},
+    [USECASE_AUDIO_RECORD_FM_VIRTUAL] = {MULTIMEDIA2_PCM_DEVICE,
+                                  MULTIMEDIA2_PCM_DEVICE},
     [USECASE_AUDIO_PLAYBACK_FM] = {FM_PLAYBACK_PCM_DEVICE, FM_CAPTURE_PCM_DEVICE},
     [USECASE_VOICE_CALL] = {VOICE_CALL_PCM_DEVICE, VOICE_CALL_PCM_DEVICE},
     [USECASE_VOICE2_CALL] = {VOICE2_CALL_PCM_DEVICE, VOICE2_CALL_PCM_DEVICE},
@@ -834,10 +836,8 @@
             } else
                 set_echo_reference(adev->mixer, "NONE");
         }
-    } else if (source == AUDIO_SOURCE_FM_RX) {
-        if (in_device & AUDIO_DEVICE_IN_FM_RX) {
-            snd_device = SND_DEVICE_IN_CAPTURE_FM;
-        }
+    } else if (source == AUDIO_SOURCE_FM_RX || AUDIO_SOURCE_FM_RX_A2DP) {
+        snd_device = SND_DEVICE_IN_CAPTURE_FM;
     } else if (source == AUDIO_SOURCE_DEFAULT) {
         goto exit;
     }
@@ -1127,3 +1127,12 @@
             return 0;
     }
 }
+
+int platform_get_usecase_from_source(int source)
+{
+    ALOGV("%s: input source ", __func__, source);
+    if(AUDIO_SOURCE_FM_RX_A2DP)
+        return USECASE_AUDIO_RECORD_FM_VIRTUAL;
+    else
+        return USECASE_AUDIO_RECORD;
+}
diff --git a/hal/msm8974/platform.h b/hal/msm8974/platform.h
index 444832f..6ad392b 100644
--- a/hal/msm8974/platform.h
+++ b/hal/msm8974/platform.h
@@ -146,7 +146,7 @@
 
 #define DEEP_BUFFER_PCM_DEVICE 0
 #define AUDIO_RECORD_PCM_DEVICE 0
-#define MULTI_CHANNEL_PCM_DEVICE 1
+#define MULTIMEDIA2_PCM_DEVICE 1
 #define VOICE_CALL_PCM_DEVICE 2
 #define FM_PLAYBACK_PCM_DEVICE 5
 #define FM_CAPTURE_PCM_DEVICE  6
diff --git a/hal/platform_api.h b/hal/platform_api.h
index 256bb76..856444d 100644
--- a/hal/platform_api.h
+++ b/hal/platform_api.h
@@ -47,5 +47,6 @@
 
 /* returns the latency for a usecase in Us */
 int64_t platform_render_latency(audio_usecase_t usecase);
+int platform_get_usecase_from_source(int source);
 
 #endif // QCOM_AUDIO_PLATFORM_API_H