hal: use correct voice call use case id

The use case ID is different for different voice call types
such as CS call, IMS call etc.

Change-Id: I6e12730ebb81c2c7a5ea11a9b4e4881e5df1261b
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index f627772..6445131 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -437,6 +437,21 @@
     return ret;
 }
 
+static audio_usecase_t get_voice_usecase_id_from_list(struct audio_device *adev)
+{
+    struct audio_usecase *usecase;
+    struct listnode *node;
+
+    list_for_each(node, &adev->usecase_list) {
+        usecase = node_to_item(node, struct audio_usecase, list);
+        if (usecase->type == VOICE_CALL) {
+            ALOGV("%s: usecase id %d", __func__, usecase->id);
+            return usecase->id;
+        }
+    }
+    return USECASE_INVALID;
+}
+
 struct audio_usecase *get_usecase_from_list(struct audio_device *adev,
                                             audio_usecase_t uc_id)
 {
@@ -484,9 +499,11 @@
          * check_usecases_codec_backend() is called below.
          */
         if (voice_is_in_call(adev)) {
-            vc_usecase = get_usecase_from_list(adev, USECASE_VOICE_CALL);
-            if ((vc_usecase->devices & AUDIO_DEVICE_OUT_ALL_CODEC_BACKEND) ||
-                (usecase->devices == AUDIO_DEVICE_IN_VOICE_CALL)) {
+            vc_usecase = get_usecase_from_list(adev,
+                                               get_voice_usecase_id_from_list(adev));
+            if ((vc_usecase != NULL) &&
+                ((vc_usecase->devices & AUDIO_DEVICE_OUT_ALL_CODEC_BACKEND) ||
+                (usecase->devices == AUDIO_DEVICE_IN_VOICE_CALL))) {
                 in_snd_device = vc_usecase->in_snd_device;
                 out_snd_device = vc_usecase->out_snd_device;
             }