diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index 88e214f..a84f310 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -94,6 +94,7 @@
 #define SAD_BLOCK_SIZE      3
 
 #define MAX_CVD_VERSION_STRING_SIZE    100
+#define MAX_SND_CARD_STRING_SIZE    100
 
 /* EDID format ID for LPCM audio */
 #define EDID_FORMAT_LPCM    1
@@ -121,6 +122,9 @@
 
 #define AUDIO_PARAMETER_KEY_PERF_LOCK_OPTS "perf_lock_opts"
 
+/* Reload ACDB files from specified path */
+#define AUDIO_PARAMETER_KEY_RELOAD_ACDB "reload_acdb"
+
 /* Query external audio device connection status */
 #define AUDIO_PARAMETER_KEY_EXT_AUDIO_DEVICE "ext_audio_device"
 
@@ -191,6 +195,7 @@
 typedef int (*acdb_get_audio_cal_t) (void *, void *, uint32_t*);
 typedef int (*acdb_send_common_top_t) (void);
 typedef int (*acdb_set_codec_data_t) (void *, char *);
+typedef int (*acdb_reload_t) (char *, char *, char *, int);
 
 typedef struct codec_backend_cfg {
     uint32_t sample_rate;
@@ -235,7 +240,7 @@
     acdb_get_default_app_type_t acdb_get_default_app_type;
     acdb_send_common_top_t     acdb_send_common_top;
     acdb_set_codec_data_t      acdb_set_codec_data;
-
+    acdb_reload_t              acdb_reload;
     void *hw_info;
     acdb_send_gain_dep_cal_t   acdb_send_gain_dep_cal;
     struct csd_data *csd;
@@ -246,6 +251,9 @@
     codec_backend_cfg_t current_tx_backend_cfg[MAX_CODEC_TX_BACKENDS];
     char codec_version[CODEC_VERSION_MAX_LENGTH];
     int hw_dep_fd;
+    char cvd_version[MAX_CVD_VERSION_STRING_SIZE];
+    char snd_card_name[MAX_SND_CARD_STRING_SIZE];
+    int metainfo_key;
 };
 
 static int pcm_device_table[AUDIO_USECASE_MAX][2] = {
@@ -1290,6 +1298,14 @@
     key = atoi(value);
     snd_card_name = mixer_get_name(my_data->adev->mixer);
     result = my_data->acdb_init(snd_card_name, cvd_version, key);
+
+    /* Save these variables in platform_data. These will be used
+       while reloading ACDB files during run time. */
+    strlcpy(my_data->cvd_version, cvd_version, MAX_CVD_VERSION_STRING_SIZE);
+    strlcpy(my_data->snd_card_name, snd_card_name,
+                                               MAX_SND_CARD_STRING_SIZE);
+    my_data->metainfo_key = key;
+
     if (cvd_version)
         free(cvd_version);
     if (!result) {
@@ -1572,6 +1588,12 @@
             goto acdb_init_fail;
         }
 
+        my_data->acdb_reload = (acdb_reload_t)dlsym(my_data->acdb_handle,
+                                                    "acdb_loader_reload_acdb_files");
+        if (my_data->acdb_reload == NULL) {
+            ALOGE("%s: dlsym error %s for acdb_loader_reload_acdb_files", __func__, dlerror());
+            goto acdb_init_fail;
+        }
         platform_acdb_init(my_data);
     }
 
@@ -3372,6 +3394,16 @@
         }
     }
 
+    err = str_parms_get_str(parms, AUDIO_PARAMETER_KEY_RELOAD_ACDB,
+                            value, len);
+    if (err >= 0) {
+        str_parms_del(parms, AUDIO_PARAMETER_KEY_RELOAD_ACDB);
+
+        my_data->acdb_reload(value, my_data->snd_card_name,
+                              my_data->cvd_version, my_data->metainfo_key);
+
+    }
+
     err = str_parms_get_str(parms, AUDIO_PARAMETER_KEY_EXT_AUDIO_DEVICE,
                             value, len);
     if (err >= 0) {
