hal: Add change to dynamically load audio config file

Add change to load audio config file at runtime from
different locations

Change-Id: I38512a5ab812f76df7c817c076044124d44f555e
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index f8f0d69..2f675ea 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -60,33 +60,17 @@
 #define MIXER_XML_BASE_STRING "mixer_paths"
 #define MIXER_XML_DEFAULT_PATH "mixer_paths.xml"
 
-#ifdef LINUX_ENABLED
-#define PLATFORM_INFO_XML_PATH_INTCODEC  "/etc/audio_platform_info_intcodec.xml"
-#define PLATFORM_INFO_XML_PATH_SKUSH  "/etc/audio_platform_info_skush.xml"
-#define PLATFORM_INFO_XML_PATH_SKUW  "/etc/audio_platform_info_skuw.xml"
-#define PLATFORM_INFO_XML_PATH_QRD  "/etc/audio_platform_info_qrd.xml"
-#define PLATFORM_INFO_XML_PATH_LAGOON_QRD  "/etc/audio_platform_info_lagoon_qrd.xml"
-#define PLATFORM_INFO_XML_PATH "/etc/audio_platform_info.xml"
-#define MIXER_XML_PATH_AUXPCM "/etc/mixer_paths_auxpcm.xml"
-#define MIXER_XML_PATH_I2S "/etc/mixer_paths_i2s.xml"
-#define PLATFORM_INFO_XML_PATH_I2S "/etc/audio_platform_info_extcodec.xml"
-#define PLATFORM_INFO_XML_PATH_WSA  "/etc/audio_platform_info_wsa.xml"
-#define PLATFORM_INFO_XML_PATH_TDM  "/etc/audio_platform_info_tdm.xml"
-#define PLATFORM_INFO_XML_PATH_SCUBA_IDP "/etc/audio_platform_info_scubaidp.xml"
-#else
-#define PLATFORM_INFO_XML_PATH_INTCODEC  "/vendor/etc/audio_platform_info_intcodec.xml"
-#define PLATFORM_INFO_XML_PATH_SKUSH "/vendor/etc/audio_platform_info_skush.xml"
-#define PLATFORM_INFO_XML_PATH_SKUW "/vendor/etc/audio_platform_info_skuw.xml"
-#define PLATFORM_INFO_XML_PATH_QRD "/vendor/etc/audio_platform_info_qrd.xml"
-#define PLATFORM_INFO_XML_PATH_LAGOON_QRD  "/vendor/etc/audio_platform_info_lagoon_qrd.xml"
-#define PLATFORM_INFO_XML_PATH "/vendor/etc/audio_platform_info.xml"
-#define MIXER_XML_PATH_AUXPCM "/vendor/etc/mixer_paths_auxpcm.xml"
-#define MIXER_XML_PATH_I2S "/vendor/etc/mixer_paths_i2s.xml"
-#define PLATFORM_INFO_XML_PATH_I2S "/vendor/etc/audio_platform_info_i2s.xml"
-#define PLATFORM_INFO_XML_PATH_WSA  "/vendor/etc/audio_platform_info_wsa.xml"
-#define PLATFORM_INFO_XML_PATH_TDM  "/vendor/etc/audio_platform_info_tdm.xml"
-#define PLATFORM_INFO_XML_PATH_SCUBA_IDP "/vendor/etc/audio_platform_info_scubaidp.xml"
-#endif
+#define PLATFORM_INFO_XML_PATH_INTCODEC_NAME  "audio_platform_info_intcodec.xml"
+#define PLATFORM_INFO_XML_PATH_SKUSH_NAME  "audio_platform_info_skush.xml"
+#define PLATFORM_INFO_XML_PATH_SKUW_NAME  "audio_platform_info_skuw.xml"
+#define PLATFORM_INFO_XML_PATH_QRD_NAME  "audio_platform_info_qrd.xml"
+#define PLATFORM_INFO_XML_PATH_LAGOON_QRD_NAME  "audio_platform_info_lagoon_qrd.xml"
+#define PLATFORM_INFO_XML_PATH_NAME "audio_platform_info.xml"
+#define MIXER_XML_PATH_AUXPCM_NAME "mixer_paths_auxpcm.xml"
+#define MIXER_XML_PATH_I2S_NAME "mixer_paths_i2s.xml"
+#define PLATFORM_INFO_XML_PATH_I2S_NAME "audio_platform_info_extcodec.xml"
+#define PLATFORM_INFO_XML_PATH_WSA_NAME  "audio_platform_info_wsa.xml"
+#define PLATFORM_INFO_XML_PATH_TDM_NAME  "audio_platform_info_tdm.xml"
 
 #include <linux/msm_audio.h>
 #if defined (PLATFORM_MSM8998) || (PLATFORM_SDM845) || (PLATFORM_SDM710) || \
@@ -251,6 +235,8 @@
 };
 
 #define PLATFORM_CONFIG_KEY_OPERATOR_INFO "operator_info"
+char vendor_config_path[VENDOR_CONFIG_PATH_MAX_LENGTH];
+char xml_file_path[VENDOR_CONFIG_FILE_MAX_LENGTH];
 
 struct operator_info {
     struct listnode list;
@@ -1651,6 +1637,14 @@
     }
 }
 
+const char* get_xml_file_path(const char* file_name)
+{
+    audio_get_vendor_config_path(vendor_config_path, sizeof(vendor_config_path));
+    snprintf(xml_file_path, sizeof(xml_file_path),
+        "%s/%s", vendor_config_path, file_name);
+    return xml_file_path;
+}
+
 static char *get_current_operator()
 {
     struct listnode *node;
@@ -3319,54 +3313,66 @@
     if (ret || !my_data->is_internal_codec)
         my_data->hifi_audio = true;
     set_platform_defaults(my_data);
-
     /* Initialize ACDB ID's */
-    if (my_data->is_i2s_ext_modem && !is_auto_snd_card(snd_card_name))
-        platform_info_init(PLATFORM_INFO_XML_PATH_I2S, my_data, PLATFORM);
-    else if (!strncmp(snd_card_name, "sdm660-snd-card-skush",
-               sizeof("sdm660-snd-card-skush")))
-        platform_info_init(PLATFORM_INFO_XML_PATH_SKUSH, my_data, PLATFORM);
-    else if (!strncmp(snd_card_name, "sdm670-skuw-snd-card",
-               sizeof("sdm670-skuw-snd-card")))
-        platform_info_init(PLATFORM_INFO_XML_PATH_SKUW, my_data, PLATFORM);
-    else if (!strncmp(snd_card_name, "sm6150-qrd-snd-card",
-               sizeof("sm6150-qrd-snd-card")))
-        platform_info_init(PLATFORM_INFO_XML_PATH_QRD, my_data, PLATFORM);
-    else if (!strncmp(snd_card_name, "sm6150-wcd9375qrd-snd-card",
-               sizeof("sm6150-wcd9375qrd-snd-card")))
-        platform_info_init(PLATFORM_INFO_XML_PATH_QRD, my_data, PLATFORM);
-    else if (!strncmp(snd_card_name, "lahaina-qrd-snd-card",
-               sizeof("lahaina-qrd-snd-card")))
-        platform_info_init(PLATFORM_INFO_XML_PATH_QRD, my_data, PLATFORM);
-    else if (!strncmp(snd_card_name, "kona-qrd-snd-card",
-               sizeof("kona-qrd-snd-card")))
-        platform_info_init(PLATFORM_INFO_XML_PATH_QRD, my_data, PLATFORM);
-    else if (!strncmp(snd_card_name, "sm8150-tavil-qrd-snd-card",
-               sizeof("sm8150-tavil-qrd-snd-card")))
-        platform_info_init(PLATFORM_INFO_XML_PATH_QRD, my_data, PLATFORM);
-    else if (!strncmp(snd_card_name, "lito-qrd-snd-card",
-               sizeof("lito-qrd-snd-card")))
-        platform_info_init(PLATFORM_INFO_XML_PATH_QRD, my_data, PLATFORM);
-    else if (!strncmp(snd_card_name, "lito-lagoonqrd-snd-card",
-               sizeof("lito-lagoonqrd-snd-card")))
-        platform_info_init(PLATFORM_INFO_XML_PATH_LAGOON_QRD, my_data, PLATFORM);
-    else if (!strncmp(snd_card_name, "atoll-qrd-snd-card",
-               sizeof("atoll-qrd-snd-card")))
-        platform_info_init(PLATFORM_INFO_XML_PATH_QRD, my_data, PLATFORM);
-    else if (!strncmp(snd_card_name, "bengal-qrd-snd-card",
-               sizeof("bengal-qrd-snd-card")))
-        platform_info_init(PLATFORM_INFO_XML_PATH_QRD, my_data, PLATFORM);
-    else if (!strncmp(snd_card_name, "bengal-scubaidp-snd-card",
-               sizeof("bengal-scubaidp-snd-card")))
-        platform_info_init(PLATFORM_INFO_XML_PATH_SCUBA_IDP, my_data, PLATFORM);
-    else if (!strncmp(snd_card_name, "qcs405-wsa-snd-card",
-               sizeof("qcs405-wsa-snd-card")))
-        platform_info_init(PLATFORM_INFO_XML_PATH_WSA, my_data, PLATFORM);
-    else if (!strncmp(snd_card_name, "qcs405-tdm-snd-card",
-               sizeof("qcs405-tdm-snd-card")))
-        platform_info_init(PLATFORM_INFO_XML_PATH_TDM, my_data, PLATFORM);
-    else if (my_data->is_internal_codec)
-        platform_info_init(PLATFORM_INFO_XML_PATH_INTCODEC, my_data, PLATFORM);
+    if (my_data->is_i2s_ext_modem && !is_auto_snd_card(snd_card_name)) {
+        platform_info_init(get_xml_file_path(PLATFORM_INFO_XML_PATH_I2S_NAME),
+            my_data, PLATFORM);
+    } else if (!strncmp(snd_card_name, "sdm660-snd-card-skush",
+               sizeof("sdm660-snd-card-skush"))) {
+        platform_info_init(get_xml_file_path(PLATFORM_INFO_XML_PATH_SKUSH_NAME),
+            my_data, PLATFORM);
+    } else if (!strncmp(snd_card_name, "sdm670-skuw-snd-card",
+               sizeof("sdm670-skuw-snd-card"))) {
+        platform_info_init(get_xml_file_path(PLATFORM_INFO_XML_PATH_SKUW_NAME),
+            my_data, PLATFORM);
+    } else if (!strncmp(snd_card_name, "sm6150-qrd-snd-card",
+               sizeof("sm6150-qrd-snd-card"))) {
+        platform_info_init(get_xml_file_path(PLATFORM_INFO_XML_PATH_QRD_NAME),
+            my_data, PLATFORM);
+    } else if (!strncmp(snd_card_name, "sm6150-wcd9375qrd-snd-card",
+               sizeof("sm6150-wcd9375qrd-snd-card"))) {
+        platform_info_init(get_xml_file_path(PLATFORM_INFO_XML_PATH_QRD_NAME),
+            my_data, PLATFORM);
+    } else if (!strncmp(snd_card_name, "lahaina-qrd-snd-card",
+               sizeof("lahaina-qrd-snd-card"))) {
+        platform_info_init(get_xml_file_path(PLATFORM_INFO_XML_PATH_QRD_NAME),
+            my_data, PLATFORM);
+    } else if (!strncmp(snd_card_name, "kona-qrd-snd-card",
+               sizeof("kona-qrd-snd-card"))) {
+        platform_info_init(get_xml_file_path(PLATFORM_INFO_XML_PATH_QRD_NAME),
+            my_data, PLATFORM);
+    } else if (!strncmp(snd_card_name, "sm8150-tavil-qrd-snd-card",
+               sizeof("sm8150-tavil-qrd-snd-card"))) {
+        platform_info_init(get_xml_file_path(PLATFORM_INFO_XML_PATH_QRD_NAME),
+            my_data, PLATFORM);
+    } else if (!strncmp(snd_card_name, "lito-qrd-snd-card",
+               sizeof("lito-qrd-snd-card"))) {
+        platform_info_init(get_xml_file_path(PLATFORM_INFO_XML_PATH_QRD_NAME),
+            my_data, PLATFORM);
+    } else if (!strncmp(snd_card_name, "lito-lagoonqrd-snd-card",
+               sizeof("lito-lagoonqrd-snd-card"))) {
+        platform_info_init(get_xml_file_path(PLATFORM_INFO_XML_PATH_LAGOON_QRD_NAME),
+            my_data, PLATFORM);
+    } else if (!strncmp(snd_card_name, "atoll-qrd-snd-card",
+               sizeof("atoll-qrd-snd-card"))){
+        platform_info_init(get_xml_file_path(PLATFORM_INFO_XML_PATH_QRD_NAME),
+            my_data, PLATFORM);
+    } else if (!strncmp(snd_card_name, "bengal-qrd-snd-card",
+               sizeof("bengal-qrd-snd-card"))) {
+        platform_info_init(get_xml_file_path(PLATFORM_INFO_XML_PATH_QRD_NAME),
+            my_data, PLATFORM);
+    } else if (!strncmp(snd_card_name, "qcs405-wsa-snd-card",
+               sizeof("qcs405-wsa-snd-card"))) {
+        platform_info_init(get_xml_file_path(PLATFORM_INFO_XML_PATH_WSA_NAME),
+            my_data, PLATFORM);
+    } else if (!strncmp(snd_card_name, "qcs405-tdm-snd-card",
+               sizeof("qcs405-tdm-snd-card"))) {
+        platform_info_init(get_xml_file_path(PLATFORM_INFO_XML_PATH_TDM_NAME),
+            my_data, PLATFORM);
+    } else if (my_data->is_internal_codec) {
+        platform_info_init(get_xml_file_path(PLATFORM_INFO_XML_PATH_INTCODEC_NAME),
+            my_data, PLATFORM);
+    }
     else {
         // Try to load pixel or default
         audio_extn_utils_get_platform_info(snd_card_name, platform_info_file);
@@ -3380,9 +3386,8 @@
     if (platform_is_i2s_ext_modem(snd_card_name, my_data) &&
         !is_auto_snd_card(snd_card_name)) {
         ALOGD("%s: Call MIXER_XML_PATH_I2S", __func__);
-
         adev->audio_route = audio_route_init(adev->snd_card,
-                                             MIXER_XML_PATH_I2S);
+            get_xml_file_path(MIXER_XML_PATH_I2S_NAME));
     } else {
         /* Get the codec internal name from the sound card name
          * and form the mixer paths file name dynamically. This
@@ -3419,7 +3424,7 @@
 
         ALOGD("%s: Loading mixer file: %s", __func__, mixer_xml_file);
         if (audio_extn_read_xml(adev, adev->snd_card, mixer_xml_file,
-                                MIXER_XML_PATH_AUXPCM) == -ENOSYS) {
+            get_xml_file_path(MIXER_XML_PATH_AUXPCM_NAME)) == -ENOSYS) {
             adev->audio_route = audio_route_init(adev->snd_card, mixer_xml_file);
         }
     }
diff --git a/hal/msm8974/platform.h b/hal/msm8974/platform.h
index c89fee0..88c035b 100644
--- a/hal/msm8974/platform.h
+++ b/hal/msm8974/platform.h
@@ -372,7 +372,7 @@
 #define ALL_SESSION_VSID                0xFFFFFFFF
 #define DEFAULT_MUTE_RAMP_DURATION_MS   20
 #define DEFAULT_VOLUME_RAMP_DURATION_MS 20
-#define MIXER_PATH_MAX_LENGTH 100
+#define MIXER_PATH_MAX_LENGTH 128
 #define CODEC_VERSION_MAX_LENGTH 100
 #define CODEC_VARIANT_MAX_LENGTH 100