release-request-80d7cd88-53c4-4e65-952a-f34bc86a0841-for-git_oc-mr1-release-4050000 snap-temp-L22200000068540971

Change-Id: I3f2d6043b5c70d337f352fe05b9d702d9b80d234
diff --git a/hal/acdb.c b/hal/acdb.c
index 1614cc9..99599b8 100644
--- a/hal/acdb.c
+++ b/hal/acdb.c
@@ -29,7 +29,6 @@
 #include <platform_api.h>
 
 #define PLATFORM_CONFIG_KEY_SOUNDCARD_NAME "snd_card_name"
-#define PLATFORM_INFO_XML_PATH          "audio_platform_info.xml"
 
 int acdb_init(int snd_card_num)
 {
@@ -61,9 +60,6 @@
 
     list_init(&my_data->acdb_meta_key_list);
 
-    /* Extract META KEY LIST INFO */
-    //platform_info_init(PLATFORM_INFO_XML_PATH, my_data);
-
     my_data->acdb_handle = dlopen(LIB_ACDB_LOADER, RTLD_NOW);
     if (my_data->acdb_handle == NULL) {
         ALOGE("%s: DLOPEN failed for %s", __func__, LIB_ACDB_LOADER);
@@ -125,21 +121,13 @@
         goto cleanup;
     }
 
-    int key = 0;
-    struct listnode *node = NULL;
-    struct meta_key_list *key_info = NULL;
-
-    if (my_data->acdb_init_v3) {
+    if (my_data->acdb_init_v3)
         result = my_data->acdb_init_v3(snd_card_name, cvd_version,
                                        &my_data->acdb_meta_key_list);
-    } else if (my_data->acdb_init_v2) {
-        node = list_head(&my_data->acdb_meta_key_list);
-        key_info = node_to_item(node, struct meta_key_list, list);
-        key = key_info->cal_info.nKey;
-        result = my_data->acdb_init_v2(snd_card_name, cvd_version, key);
-    } else {
+    else if (my_data->acdb_init_v2)
+        result = my_data->acdb_init_v2(snd_card_name, cvd_version, 0);
+    else
         result = my_data->acdb_init();
-    }
 
 cleanup:
     if (NULL != my_data) {
@@ -162,26 +150,6 @@
     return result;
 }
 
-int acdb_set_metainfo_key(void *platform, char *name, int key) {
-
-    struct meta_key_list *key_info = (struct meta_key_list *)
-                                        calloc(1, sizeof(struct meta_key_list));
-    struct acdb_platform_data *pdata = (struct acdb_platform_data *)platform;
-    if (!key_info) {
-        ALOGE("%s: Could not allocate memory for key %d", __func__, key);
-        return -ENOMEM;
-    }
-
-    key_info->cal_info.nKey = key;
-    strlcpy(key_info->name, name, sizeof(key_info->name));
-    list_add_tail(&pdata->acdb_meta_key_list, &key_info->list);
-
-    ALOGD("%s: successfully added module %s and key %d to the list", __func__,
-               key_info->name, key_info->cal_info.nKey);
-
-    return 0;
-}
-
 int acdb_set_parameters(void *platform, struct str_parms *parms)
 {
     struct acdb_platform_data *my_data = (struct acdb_platform_data *)platform;
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 9fad3fd..3318cc1 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -801,7 +801,9 @@
     bool switch_device[AUDIO_USECASE_MAX];
     int i, num_uc_to_switch = 0;
 
-    platform_check_and_set_playback_backend_cfg(adev, uc_info, snd_device);
+    bool force_routing =  platform_check_and_set_playback_backend_cfg(adev,
+                                                                      uc_info,
+                                                                      snd_device);
 
     /*
      * This function is to make sure that all the usecases that are active on
@@ -820,11 +822,13 @@
 
     list_for_each(node, &adev->usecase_list) {
         usecase = node_to_item(node, struct audio_usecase, list);
-        if (usecase->type != PCM_CAPTURE &&
-                usecase != uc_info &&
-                usecase->out_snd_device != snd_device &&
-                usecase->devices & AUDIO_DEVICE_OUT_ALL_CODEC_BACKEND &&
-                platform_check_backends_match(snd_device, usecase->out_snd_device)) {
+        if (usecase->type == PCM_CAPTURE || usecase == uc_info)
+            continue;
+
+        if (force_routing ||
+            (usecase->out_snd_device != snd_device &&
+             usecase->devices & AUDIO_DEVICE_OUT_ALL_CODEC_BACKEND &&
+             platform_check_backends_match(snd_device, usecase->out_snd_device))) {
             ALOGV("%s: Usecase (%s) is active on (%s) - disabling ..",
                   __func__, use_case_table[usecase->id],
                   platform_get_snd_device_name(usecase->out_snd_device));