diff --git a/configs/msmnile/msmnile.mk b/configs/msmnile/msmnile.mk
index 9bb0ab7..ec22826 100644
--- a/configs/msmnile/msmnile.mk
+++ b/configs/msmnile/msmnile.mk
@@ -38,6 +38,7 @@
 
 USE_XML_AUDIO_POLICY_CONF := 1
 BOARD_SUPPORTS_SOUND_TRIGGER := true
+AUDIO_FEATURE_ENABLED_INSTANCE_ID := true
 AUDIO_USE_LL_AS_PRIMARY_OUTPUT := true
 AUDIO_FEATURE_ENABLED_VBAT_MONITOR := true
 AUDIO_FEATURE_ENABLED_ANC_HEADSET := true
diff --git a/hal/Android.mk b/hal/Android.mk
index d2cf596..c8f68fc 100644
--- a/hal/Android.mk
+++ b/hal/Android.mk
@@ -391,6 +391,10 @@
     LOCAL_CFLAGS += -DDYNAMIC_ECNS_ENABLED
 endif
 
+ifeq ($(strip $(AUDIO_FEATURE_ENABLED_INSTANCE_ID)), true)
+    LOCAL_CFLAGS += -DINSTANCE_ID_ENABLED
+endif
+
 LOCAL_CFLAGS += -Wall -Werror
 
 LOCAL_COPY_HEADERS_TO   := mm-audio
diff --git a/hal/acdb.c b/hal/acdb.c
index ad67d61..4cc674d 100644
--- a/hal/acdb.c
+++ b/hal/acdb.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013-2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2018, The Linux Foundation. All rights reserved.
  * Not a Contribution.
  *
  * Copyright (C) 2013 The Android Open Source Project
@@ -28,6 +28,34 @@
 #include "acdb.h"
 #include "platform_api.h"
 
+#ifdef INSTANCE_ID_ENABLED
+int check_and_set_instance_id_support(struct mixer* mixer, bool acdb_support)
+{
+    const char *mixer_ctl_name = "Instance ID Support";
+    struct mixer_ctl* ctl;
+
+    ALOGV("%s", __func__);
+
+    /* Check for ACDB and property instance ID support and issue mixer control */
+    ctl = mixer_get_ctl_by_name(mixer, mixer_ctl_name);
+    if (!ctl) {
+        ALOGE("%s: Could not get ctl for mixer cmd - %s",
+                               __func__, mixer_ctl_name);
+        return -EINVAL;
+    }
+
+    ALOGD("%s: Final Instance ID support:%d\n", __func__, acdb_support);
+    if (mixer_ctl_set_value(ctl, 0, acdb_support) < 0) {
+        ALOGE("%s: Could not set Instance ID support %d", __func__,
+              acdb_support);
+        return -EINVAL;
+    }
+    return 0;
+}
+#else
+#define check_and_set_instance_id_support(x, y) -ENOSYS
+#endif
+
 int acdb_init(int snd_card_num)
 {
 
@@ -69,6 +97,11 @@
 
     ALOGV("%s: DLOPEN successful for %s", __func__, LIB_ACDB_LOADER);
 
+    my_data->acdb_init_v4 = (acdb_init_v4_t)dlsym(my_data->acdb_handle,
+                                                     "acdb_loader_init_v4");
+    if (my_data->acdb_init_v4 == NULL)
+        ALOGE("%s: dlsym error %s for acdb_loader_init_v4", __func__, dlerror());
+
     my_data->acdb_init_v3 = (acdb_init_v3_t)dlsym(my_data->acdb_handle,
                                                      "acdb_loader_init_v3");
     if (my_data->acdb_init_v3 == NULL)
@@ -82,7 +115,7 @@
     my_data->acdb_init = (acdb_init_t)dlsym(my_data->acdb_handle,
                                                  "acdb_loader_init_ACDB");
     if (my_data->acdb_init == NULL && my_data->acdb_init_v2 == NULL
-                                                 && my_data->acdb_init_v3 == NULL) {
+        && my_data->acdb_init_v3 == NULL && my_data->acdb_init_v4 == NULL) {
         ALOGE("%s: dlsym error %s for acdb_loader_init_ACDB", __func__, dlerror());
         goto cleanup;
     }
@@ -126,8 +159,16 @@
     int key = 0;
     struct listnode *node = NULL;
     struct meta_key_list *key_info = NULL;
+    static bool acdb_instance_id_support = false;
 
-    if (my_data->acdb_init_v3) {
+    my_data->acdb_init_data.cvd_version = cvd_version;
+    my_data->acdb_init_data.snd_card_name = strdup(snd_card_name);
+    my_data->acdb_init_data.meta_key_list = &my_data->acdb_meta_key_list;
+    my_data->acdb_init_data.is_instance_id_supported = &acdb_instance_id_support;
+
+    if (my_data->acdb_init_v4) {
+        result = my_data->acdb_init_v4(&my_data->acdb_init_data, ACDB_LOADER_INIT_V4);
+    } else 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) {
@@ -138,6 +179,9 @@
     } else {
         result = my_data->acdb_init();
     }
+    ALOGD("%s: ACDB Instance ID support after ACDB init:%d\n",
+          __func__, acdb_instance_id_support);
+    check_and_set_instance_id_support(mixer, acdb_instance_id_support);
 
 cleanup:
     if (NULL != my_data) {
diff --git a/hal/acdb.h b/hal/acdb.h
index d1f863b..b019e4f 100644
--- a/hal/acdb.h
+++ b/hal/acdb.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013-2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2018, The Linux Foundation. All rights reserved.
  * Not a Contribution.
  *
  * Copyright (C) 2013 The Android Open Source Project
@@ -20,6 +20,7 @@
 #ifndef ACDB_H
 #define ACDB_H
 
+#include <stdbool.h>
 #include <linux/msm_audio_calibration.h>
 
 #define MAX_CVD_VERSION_STRING_SIZE 100
@@ -33,11 +34,19 @@
 #define PLATFORM_INFO_XML_PATH "/vendor/etc/audio_platform_info.xml"
 #endif
 
+enum {
+        ACDB_LOADER_INIT_V1 = 1,
+        ACDB_LOADER_INIT_V2,
+        ACDB_LOADER_INIT_V3,
+        ACDB_LOADER_INIT_V4,
+};
+
 /* Audio calibration related functions */
 typedef void (*acdb_deallocate_t)();
 typedef int  (*acdb_init_t)();
 typedef int  (*acdb_init_v2_t)(const char *, char *, int);
 typedef int  (*acdb_init_v3_t)(const char *, char *, struct listnode *);
+typedef int  (*acdb_init_v4_t)(void *, int);
 typedef void (*acdb_send_audio_cal_t)(int, int, int , int);
 typedef void (*acdb_send_audio_cal_v3_t)(int, int, int, int, int);
 typedef void (*acdb_send_voice_cal_t)(int, int);
@@ -58,13 +67,22 @@
     char name[ACDB_METAINFO_KEY_MODULE_NAME_LEN];
 };
 
+struct acdb_init_data_v4 {
+        char                   *cvd_version;
+        char                   *snd_card_name;
+        struct listnode        *meta_key_list;
+        bool                   *is_instance_id_supported;
+};
+
 struct acdb_platform_data {
     /* Audio calibration related functions */
     void                       *acdb_handle;
     acdb_init_t                acdb_init;
     acdb_init_v2_t             acdb_init_v2;
     acdb_init_v3_t             acdb_init_v3;
+    acdb_init_v4_t             acdb_init_v4;
     struct listnode acdb_meta_key_list;
+    struct acdb_init_data_v4   acdb_init_data;
 };
 
 int acdb_init(int);
diff --git a/hal/audio_extn/audio_extn.h b/hal/audio_extn/audio_extn.h
index f1f45c0..9a9bc90 100755
--- a/hal/audio_extn/audio_extn.h
+++ b/hal/audio_extn/audio_extn.h
@@ -792,6 +792,8 @@
 #define audio_extn_gef_init(adev) (0)
 #define audio_extn_gef_deinit() (0)
 #define audio_extn_gef_notify_device_config(devices, cmask, sample_rate, acdb_id) (0)
+
+#ifndef INSTANCE_ID_ENABLED
 #define audio_extn_gef_send_audio_cal(dev, acdb_dev_id, acdb_device_type,\
     app_type, topology_id, sample_rate, module_id, param_id, data, length, persist) (0)
 #define audio_extn_gef_get_audio_cal(adev, acdb_dev_id, acdb_device_type,\
@@ -800,6 +802,20 @@
     app_type, topology_id, sample_rate, module_id, param_id, data, length) (0)
 #define audio_extn_gef_retrieve_audio_cal(adev, acdb_dev_id, acdb_device_type,\
     app_type, topology_id, sample_rate, module_id, param_id, data, length) (0)
+#else
+#define audio_extn_gef_send_audio_cal(dev, acdb_dev_id, acdb_device_type,\
+    app_type, topology_id, sample_rate, module_id, instance_id, param_id, data,\
+    length, persist) (0)
+#define audio_extn_gef_get_audio_cal(adev, acdb_dev_id, acdb_device_type,\
+    app_type, topology_id, sample_rate, module_id, instance_id, param_id, data,\
+    length, persist) (0)
+#define audio_extn_gef_store_audio_cal(adev, acdb_dev_id, acdb_device_type,\
+    app_type, topology_id, sample_rate, module_id, instance_id, param_id, data,\
+    length) (0)
+#define audio_extn_gef_retrieve_audio_cal(adev, acdb_dev_id, acdb_device_type,\
+    app_type, topology_id, sample_rate, module_id, instance_id, param_id, data,\
+    length) (0)
+#endif
 
 #else
 
@@ -808,18 +824,33 @@
 
 void audio_extn_gef_notify_device_config(audio_devices_t audio_device,
     audio_channel_mask_t channel_mask, int sample_rate, int acdb_id);
+#ifndef INSTANCE_ID_ENABLED
 int audio_extn_gef_send_audio_cal(void* adev, int acdb_dev_id, int acdb_device_type,
-    int app_type, int topology_id, int sample_rate, uint32_t module_id, uint32_t param_id,
-    void* data, int length, bool persist);
+    int app_type, int topology_id, int sample_rate, uint32_t module_id,
+    uint32_t param_id, void* data, int length, bool persist);
 int audio_extn_gef_get_audio_cal(void* adev, int acdb_dev_id, int acdb_device_type,
-    int app_type, int topology_id, int sample_rate, uint32_t module_id, uint32_t param_id,
-    void* data, int* length, bool persist);
+    int app_type, int topology_id, int sample_rate, uint32_t module_id,
+    uint32_t param_id, void* data, int* length, bool persist);
 int audio_extn_gef_store_audio_cal(void* adev, int acdb_dev_id, int acdb_device_type,
-    int app_type, int topology_id, int sample_rate, uint32_t module_id, uint32_t param_id,
-    void* data, int length);
+    int app_type, int topology_id, int sample_rate, uint32_t module_id,
+    uint32_t param_id, void* data, int length);
 int audio_extn_gef_retrieve_audio_cal(void* adev, int acdb_dev_id, int acdb_device_type,
-    int app_type, int topology_id, int sample_rate, uint32_t module_id, uint32_t param_id,
-    void* data, int* length);
+    int app_type, int topology_id, int sample_rate, uint32_t module_id,
+    uint32_t param_id, void* data, int* length);
+#else
+int audio_extn_gef_send_audio_cal(void* adev, int acdb_dev_id, int acdb_device_type,
+    int app_type, int topology_id, int sample_rate, uint32_t module_id,
+    uint16_t instance_id, uint32_t param_id, void* data, int length, bool persist);
+int audio_extn_gef_get_audio_cal(void* adev, int acdb_dev_id, int acdb_device_type,
+    int app_type, int topology_id, int sample_rate, uint32_t module_id,
+    uint16_t instance_id, uint32_t param_id, void* data, int* length, bool persist);
+int audio_extn_gef_store_audio_cal(void* adev, int acdb_dev_id, int acdb_device_type,
+    int app_type, int topology_id, int sample_rate, uint32_t module_id,
+    uint16_t instance_id, uint32_t param_id, void* data, int length);
+int audio_extn_gef_retrieve_audio_cal(void* adev, int acdb_dev_id, int acdb_device_type,
+    int app_type, int topology_id, int sample_rate, uint32_t module_id,
+    uint16_t instance_id, uint32_t param_id, void* data, int* length);
+#endif
 
 #endif /* AUDIO_GENERIC_EFFECT_FRAMEWORK_ENABLED */
 
diff --git a/hal/audio_extn/gef.c b/hal/audio_extn/gef.c
index 4525f08..7f82a8a 100644
--- a/hal/audio_extn/gef.c
+++ b/hal/audio_extn/gef.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are
@@ -170,25 +170,31 @@
 }
 
 
+#ifdef INSTANCE_ID_ENABLED
 //this will be called from GEF to exchange calibration using acdb
 int audio_extn_gef_send_audio_cal(void* dev, int acdb_dev_id,
     int gef_cal_type, int app_type, int topology_id, int sample_rate,
-    uint32_t module_id, uint32_t param_id, void* data, int length, bool persist)
+    uint32_t module_id, uint16_t instance_id, uint32_t param_id,
+    void* data, int length, bool persist)
 {
     int ret = 0;
     struct audio_device *adev = (struct audio_device*)dev;
+    acdb_audio_cal_cfg_t cal;
     int acdb_device_type =
         make_acdb_device_type_from_gef_cal_type(gef_cal_type);
 
     ALOGV("%s: Enter", __func__);
+    memset(&cal, 0, sizeof(acdb_audio_cal_cfg_t));
 
     //lock adev
     pthread_mutex_lock(&adev->lock);
 
-    //send cal
-    ret = platform_send_audio_cal(adev->platform, acdb_dev_id,
+    //pack cal
+    platform_make_cal_cfg(&cal, acdb_dev_id,
         acdb_device_type, app_type, topology_id, sample_rate,
-        module_id, param_id, data, length, persist);
+        module_id, instance_id, param_id, true);
+
+    ret = platform_send_audio_cal(adev->platform, &cal, data, length, persist);
 
     pthread_mutex_unlock(&adev->lock);
 
@@ -200,21 +206,154 @@
 //this will be called from GEF to exchange calibration using acdb
 int audio_extn_gef_get_audio_cal(void* dev, int acdb_dev_id,
     int gef_cal_type, int app_type, int topology_id, int sample_rate,
-    uint32_t module_id, uint32_t param_id, void* data, int* length, bool persist)
+    uint32_t module_id, uint16_t instance_id, uint32_t param_id,
+    void* data, int* length, bool persist)
 {
     int ret = 0;
     struct audio_device *adev = (struct audio_device*)dev;
+    acdb_audio_cal_cfg_t cal;
     int acdb_device_type =
         make_acdb_device_type_from_gef_cal_type(gef_cal_type);
 
     ALOGV("%s: Enter", __func__);
+    memset(&cal, 0, sizeof(acdb_audio_cal_cfg_t));
 
     //lock adev
     pthread_mutex_lock(&adev->lock);
 
-    ret = platform_get_audio_cal(adev->platform, acdb_dev_id,
+    //pack cal
+    platform_make_cal_cfg(&cal, acdb_dev_id,
         acdb_device_type, app_type, topology_id, sample_rate,
-        module_id, param_id, data, length, persist);
+        module_id, instance_id, param_id, false);
+
+    ret = platform_get_audio_cal(adev->platform, &cal, data, length, persist);
+
+    pthread_mutex_unlock(&adev->lock);
+
+    ALOGV("%s: Exit with error %d", __func__, ret);
+
+    return ret;
+}
+
+//this will be called from GEF to store into acdb
+int audio_extn_gef_store_audio_cal(void* dev, int acdb_dev_id,
+    int gef_cal_type, int app_type, int topology_id, int sample_rate,
+    uint32_t module_id, uint16_t instance_id,
+    uint32_t param_id, void* data, int length)
+{
+    int ret = 0;
+    struct audio_device *adev = (struct audio_device*)dev;
+    acdb_audio_cal_cfg_t cal;
+    int acdb_device_type =
+        make_acdb_device_type_from_gef_cal_type(gef_cal_type);
+
+    ALOGV("%s: Enter", __func__);
+    memset(&cal, 0, sizeof(acdb_audio_cal_cfg_t));
+
+    //lock adev
+    pthread_mutex_lock(&adev->lock);
+
+    //pack cal
+    platform_make_cal_cfg(&cal, acdb_dev_id,
+        acdb_device_type, app_type, topology_id, sample_rate,
+        module_id, instance_id, param_id, true);
+
+    ret = platform_store_audio_cal(adev->platform, &cal, data, length);
+
+    pthread_mutex_unlock(&adev->lock);
+
+    ALOGV("%s: Exit with error %d", __func__, ret);
+
+    return ret;
+}
+
+//this will be called from GEF to retrieve calibration using acdb
+int audio_extn_gef_retrieve_audio_cal(void* dev, int acdb_dev_id,
+    int gef_cal_type, int app_type, int topology_id, int sample_rate,
+    uint32_t module_id, uint16_t instance_id, uint32_t param_id, void* data, int* length)
+{
+    int ret = 0;
+    struct audio_device *adev = (struct audio_device*)dev;
+    acdb_audio_cal_cfg_t cal;
+    int acdb_device_type =
+        make_acdb_device_type_from_gef_cal_type(gef_cal_type);
+
+    ALOGV("%s: Enter", __func__);
+    memset(&cal, 0, sizeof(acdb_audio_cal_cfg_t));
+
+    //lock adev
+    pthread_mutex_lock(&adev->lock);
+
+    //pack cal
+    platform_make_cal_cfg(&cal, acdb_dev_id,
+        acdb_device_type, app_type, topology_id, sample_rate,
+        module_id, instance_id, param_id, true);
+
+    ret = platform_retrieve_audio_cal(adev->platform, &cal, data, length);
+
+    pthread_mutex_unlock(&adev->lock);
+
+    ALOGV("%s: Exit with error %d", __func__, ret);
+
+    return ret;
+}
+#else
+//this will be called from GEF to exchange calibration using acdb
+int audio_extn_gef_send_audio_cal(void* dev, int acdb_dev_id,
+    int gef_cal_type, int app_type, int topology_id, int sample_rate,
+    uint32_t module_id, uint32_t param_id, void* data, int length,
+    bool persist)
+{
+    int ret = 0;
+    struct audio_device *adev = (struct audio_device*)dev;
+    acdb_audio_cal_cfg_t cal;
+    int acdb_device_type =
+        make_acdb_device_type_from_gef_cal_type(gef_cal_type);
+
+    ALOGV("%s: Enter", __func__);
+    memset(&cal, 0, sizeof(acdb_audio_cal_cfg_t));
+
+    //lock adev
+    pthread_mutex_lock(&adev->lock);
+
+    //pack cal
+    platform_make_cal_cfg(&cal, acdb_dev_id,
+        acdb_device_type, app_type, topology_id, sample_rate,
+        module_id, param_id, true);
+
+    ret = platform_send_audio_cal(adev->platform, &cal, data, length, persist);
+
+    pthread_mutex_unlock(&adev->lock);
+
+    ALOGV("%s: Exit with error %d", __func__, ret);
+
+    return ret;
+}
+
+//this will be called from GEF to exchange calibration using acdb
+int audio_extn_gef_get_audio_cal(void* dev, int acdb_dev_id,
+    int gef_cal_type, int app_type, int topology_id, int sample_rate,
+    uint32_t module_id, uint32_t param_id, void* data, int* length,
+    bool persist)
+{
+    int ret = 0;
+    struct audio_device *adev = (struct audio_device*)dev;
+    acdb_audio_cal_cfg_t cal;
+    int acdb_device_type =
+        make_acdb_device_type_from_gef_cal_type(gef_cal_type);
+
+    ALOGV("%s: Enter", __func__);
+    memset(&cal, 0, sizeof(acdb_audio_cal_cfg_t));
+
+    //lock adev
+    pthread_mutex_lock(&adev->lock);
+
+    //pack cal
+    platform_make_cal_cfg(&cal, acdb_dev_id,
+        acdb_device_type, app_type, topology_id, sample_rate,
+        module_id, param_id, false);
+
+    ret = platform_get_audio_cal(adev->platform, &cal, data, length, persist);
 
     pthread_mutex_unlock(&adev->lock);
 
@@ -230,17 +369,22 @@
 {
     int ret = 0;
     struct audio_device *adev = (struct audio_device*)dev;
+    acdb_audio_cal_cfg_t cal;
     int acdb_device_type =
         make_acdb_device_type_from_gef_cal_type(gef_cal_type);
 
     ALOGV("%s: Enter", __func__);
+    memset(&cal, 0, sizeof(acdb_audio_cal_cfg_t));
 
     //lock adev
     pthread_mutex_lock(&adev->lock);
 
-    ret = platform_store_audio_cal(adev->platform, acdb_dev_id,
+    //pack cal
+    platform_make_cal_cfg(&cal, acdb_dev_id,
         acdb_device_type, app_type, topology_id, sample_rate,
-        module_id, param_id, data, length);
+        module_id, param_id, true);
+
+    ret = platform_store_audio_cal(adev->platform, &cal, data, length);
 
     pthread_mutex_unlock(&adev->lock);
 
@@ -256,17 +400,22 @@
 {
     int ret = 0;
     struct audio_device *adev = (struct audio_device*)dev;
+    acdb_audio_cal_cfg_t cal;
     int acdb_device_type =
         make_acdb_device_type_from_gef_cal_type(gef_cal_type);
 
     ALOGV("%s: Enter", __func__);
+    memset(&cal, 0, sizeof(acdb_audio_cal_cfg_t));
 
     //lock adev
     pthread_mutex_lock(&adev->lock);
 
-    ret = platform_retrieve_audio_cal(adev->platform, acdb_dev_id,
+    //pack cal
+    platform_make_cal_cfg(&cal, acdb_dev_id,
         acdb_device_type, app_type, topology_id, sample_rate,
-        module_id, param_id, data, length);
+        module_id, param_id, true);
+
+    ret = platform_retrieve_audio_cal(adev->platform, &cal, data, length);
 
     pthread_mutex_unlock(&adev->lock);
 
@@ -274,6 +423,7 @@
 
     return ret;
 }
+#endif
 
 //this will be called from HAL to notify GEF of new device configuration
 void audio_extn_gef_notify_device_config(audio_devices_t audio_device,
diff --git a/hal/msm8916/platform.c b/hal/msm8916/platform.c
index 6cca1bb..c4708a1 100644
--- a/hal/msm8916/platform.c
+++ b/hal/msm8916/platform.c
@@ -206,19 +206,6 @@
     int length;
 };
 
-typedef struct acdb_audio_cal_cfg {
-    uint32_t             persist;
-    uint32_t             snd_dev_id;
-    audio_devices_t      dev_id;
-    int32_t              acdb_dev_id;
-    uint32_t             app_type;
-    uint32_t             topo_id;
-    uint32_t             sampling_rate;
-    uint32_t             cal_type;
-    uint32_t             module_id;
-    uint32_t             param_id;
-} acdb_audio_cal_cfg_t;
-
 enum {
     CAL_MODE_SEND           = 0x1,
     CAL_MODE_PERSIST        = 0x2,
@@ -272,6 +259,7 @@
     int                        voice_feature_set;
     acdb_init_t                acdb_init;
     acdb_init_v3_t             acdb_init_v3;
+    acdb_init_v4_t             acdb_init_v4;
     acdb_deallocate_t          acdb_deallocate;
     acdb_send_audio_cal_t      acdb_send_audio_cal;
     acdb_send_audio_cal_v3_t   acdb_send_audio_cal_v3;
@@ -305,6 +293,7 @@
     bool is_asrc_supported;
     struct listnode acdb_meta_key_list;
     bool use_generic_handset;
+    struct acdb_init_data_v4 acdb_init_data;
 };
 
 static bool is_external_codec = false;
@@ -1935,7 +1924,12 @@
     snd_card_name = mixer_get_name(my_data->adev->mixer);
     snd_card_name = platform_get_snd_card_name_for_acdb_loader(snd_card_name);
 
-    if (my_data->acdb_init_v3) {
+    my_data->acdb_init_data.cvd_version = cvd_version;
+    my_data->acdb_init_data.snd_card_name = strdup(snd_card_name);
+    my_data->acdb_init_data.meta_key_list = &my_data->acdb_meta_key_list;
+    if (my_data->acdb_init_v4) {
+        result = my_data->acdb_init_v4(&my_data->acdb_init_data, ACDB_LOADER_INIT_V4);
+    } else 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) {
@@ -2418,6 +2412,12 @@
             ALOGV("%s: Could not find the symbol acdb_loader_send_gain_dep_cal from %s",
                   __func__, LIB_ACDB_LOADER);
 
+        my_data->acdb_init_v4 = (acdb_init_v4_t)dlsym(my_data->acdb_handle,
+                                                     "acdb_loader_init_v4");
+        if (my_data->acdb_init_v4 == NULL) {
+            ALOGE("%s: dlsym error %s for acdb_loader_init_v4", __func__, dlerror());
+        }
+
         my_data->acdb_init_v3 = (acdb_init_v3_t)dlsym(my_data->acdb_handle,
                                                     "acdb_loader_init_v3");
         if (my_data->acdb_init_v3 == NULL) {
@@ -4838,11 +4838,19 @@
         cal->module_id = (uint32_t) strtoul(value, NULL, 0);
         ret = ret | 0x80;
     }
+#ifdef INSTANCE_ID_ENABLED
+    err = str_parms_get_str(parms, "cal_instanceid", value, sizeof(value));
+    if (err >= 0) {
+        str_parms_del(parms, "cal_instanceid");
+        cal->instance_id = (uint32_t) strtoul(value, NULL, 0);
+        ret = ret | 0x100;
+    }
+#endif
     err = str_parms_get_str(parms, "cal_paramid", value, sizeof(value));
     if (err >= 0) {
         str_parms_del(parms, "cal_paramid");
         cal->param_id = (uint32_t) strtoul(value, NULL, 0);
-        ret = ret | 0x100;
+        ret = ret | 0x200;
     }
     return ret;
 }
@@ -7597,7 +7605,37 @@
    return;
 }
 
-static void make_cal_cfg(acdb_audio_cal_cfg_t* cal, int acdb_dev_id,
+#ifdef INSTANCE_ID_ENABLED
+void platform_make_cal_cfg(acdb_audio_cal_cfg_t* cal, int acdb_dev_id,
+        int acdb_device_type, int app_type, int topology_id,
+        int sample_rate, uint32_t module_id, uint16_t instance_id,
+        uint32_t param_id, bool persist)
+{
+    int persist_send_flags = 1;
+
+    if (!cal) {
+        return;
+    }
+
+    if (persist)
+        persist_send_flags |= 0x2;
+
+    memset(cal, 0, sizeof(acdb_audio_cal_cfg_t));
+
+    cal->persist = persist;
+    cal->app_type = app_type;
+    cal->acdb_dev_id = acdb_dev_id;
+    cal->sampling_rate = sample_rate;
+    cal->topo_id = topology_id;
+    //if module and param id is set to 0, the whole blob will be stored
+    //or sent to the DSP
+    cal->module_id = module_id;
+    cal->instance_id = instance_id;
+    cal->param_id = param_id;
+    cal->cal_type = acdb_device_type;
+}
+#else
+void platform_make_cal_cfg(acdb_audio_cal_cfg_t* cal, int acdb_dev_id,
         int acdb_device_type, int app_type, int topology_id,
         int sample_rate, uint32_t module_id, uint32_t param_id, bool persist)
 {
@@ -7622,27 +7660,20 @@
     cal->module_id = module_id;
     cal->param_id = param_id;
     cal->cal_type = acdb_device_type;
-    cal->persist = persist;
-
 }
+#endif
 
-int platform_send_audio_cal(void* platform, int acdb_dev_id,
-       int acdb_device_type, int app_type, int topology_id, int sample_rate,
-       uint32_t module_id, uint32_t param_id, void* data, int length, bool persist)
+int platform_send_audio_cal(void* platform, acdb_audio_cal_cfg_t* cal,
+       void* data, int length, bool persist)
 {
     int ret = 0;
     struct platform_data *my_data = (struct platform_data *)platform;
-    acdb_audio_cal_cfg_t cal;
-    memset(&cal, 0, sizeof(acdb_audio_cal_cfg_t));
 
     if (!my_data) {
         ret = -EINVAL;
         goto ERROR_RETURN;
     }
 
-    make_cal_cfg(&cal, acdb_dev_id, acdb_device_type, app_type, topology_id,
-        sample_rate, module_id, param_id, true);
-
     if (my_data->acdb_set_audio_cal) {
         // persist audio cal in local cache
         if (persist) {
@@ -7650,7 +7681,7 @@
         }
         // send audio cal to dsp
         if (ret == 0) {
-            cal.persist = false;
+            cal->persist = false;
             ret = my_data->acdb_set_audio_cal((void*)&cal, data, (uint32_t)length);
             if (persist && (ret != 0)) {
                 ALOGV("[%s] audio cal stored with success, ignore set cal failure", __func__);
@@ -7663,30 +7694,23 @@
     return ret;
 }
 
-int platform_get_audio_cal(void* platform, int acdb_dev_id,
-       int acdb_device_type, int app_type, int topology_id,
-       int sample_rate, uint32_t module_id, uint32_t param_id,
+int platform_get_audio_cal(void* platform, acdb_audio_cal_cfg_t* cal,
        void* data, int* length, bool persist)
 {
     int ret = 0;
     struct platform_data *my_data = (struct platform_data *)platform;
-    acdb_audio_cal_cfg_t cal;
-    memset(&cal, 0, sizeof(acdb_audio_cal_cfg_t));
 
     if (!my_data) {
         ret = -EINVAL;
         goto ERROR_RETURN;
     }
 
-    make_cal_cfg(&cal, acdb_dev_id, acdb_device_type, app_type, topology_id,
-        sample_rate, module_id, param_id, false);
-
     if (my_data->acdb_get_audio_cal) {
         // get cal from dsp
         ret = my_data->acdb_get_audio_cal((void*)&cal, data, (uint32_t*)length);
         // get cached cal if prevoius attempt fails and persist flag is set
         if ((ret != 0) && persist) {
-            cal.persist = true;
+            cal->persist = true;
             ret = my_data->acdb_get_audio_cal((void*)&cal, data, (uint32_t*)length);
         }
     }
@@ -7695,24 +7719,17 @@
     return ret;
 }
 
-int platform_store_audio_cal(void* platform, int acdb_dev_id,
-       int acdb_device_type, int app_type, int topology_id,
-       int sample_rate, uint32_t module_id, uint32_t param_id,
+int platform_store_audio_cal(void* platform, acdb_audio_cal_cfg_t* cal,
        void* data, int length)
 {
     int ret = 0;
     struct platform_data *my_data = (struct platform_data *)platform;
-    acdb_audio_cal_cfg_t cal;
-    memset(&cal, 0, sizeof(acdb_audio_cal_cfg_t));
 
     if (!my_data) {
         ret = -EINVAL;
         goto ERROR_RETURN;
     }
 
-    make_cal_cfg(&cal, acdb_dev_id, acdb_device_type, app_type, topology_id,
-        sample_rate, module_id, param_id, true);
-
     if (my_data->acdb_set_audio_cal) {
         ret = my_data->acdb_set_audio_cal((void*)&cal, data, (uint32_t)length);
     }
@@ -7721,24 +7738,17 @@
     return ret;
 }
 
-int platform_retrieve_audio_cal(void* platform, int acdb_dev_id,
-        int acdb_device_type, int app_type, int topology_id,
-        int sample_rate, uint32_t module_id, uint32_t param_id,
+int platform_retrieve_audio_cal(void* platform, acdb_audio_cal_cfg_t* cal,
         void* data, int* length)
 {
     int ret = 0;
     struct platform_data *my_data = (struct platform_data *)platform;
-    acdb_audio_cal_cfg_t cal;
-    memset(&cal, 0, sizeof(acdb_audio_cal_cfg_t));
 
     if (!my_data) {
         ret = -EINVAL;
         goto ERROR_RETURN;
     }
 
-    make_cal_cfg(&cal, acdb_dev_id, acdb_device_type, app_type, topology_id,
-        sample_rate, module_id, param_id, true);
-
     if (my_data->acdb_get_audio_cal) {
         ret = my_data->acdb_get_audio_cal((void*)&cal, data, (uint32_t*)length);
     }
diff --git a/hal/msm8960/platform.c b/hal/msm8960/platform.c
index 43aeaed..7f33967 100644
--- a/hal/msm8960/platform.c
+++ b/hal/msm8960/platform.c
@@ -1260,30 +1260,21 @@
 }
 
 int platform_send_audio_cal(void* platform __unused,
-        int acdb_dev_id __unused, int acdb_device_type __unused,
-        int app_type __unused, int topology_id __unused,
-        int sample_rate __unused, uint32_t module_id,
-        uint32_t param_id, void* data __unused,
+        acdb_audio_cal_cfg_t* cal __unused, void* data __unused,
         int length __unused, bool persist __unused)
 {
     return -ENOSYS;
 }
 
 int platform_get_audio_cal(void* platform __unused,
-        int acdb_dev_id __unused, int acdb_device_type __unused,
-        int app_type __unused, int topology_id __unused,
-        int sample_rate __unused, uint32_t module_id,
-        uint32_t param_id, void* data __unused,
+        acdb_audio_cal_cfg_t* cal __unused, void* data __unused,
         int* length __unused, bool persist __unused)
 {
     return -ENOSYS;
 }
 
 int platform_store_audio_cal(void* platform __unused,
-        int acdb_dev_id __unused, int acdb_device_type __unused,
-        int app_type __unused, int topology_id __unused,
-        int sample_rate __unused,  uint32_t module_id,
-        uint32_t param_id, void* data __unused,
+        acdb_audio_cal_cfg_t* cal __unused, void* data __unused,
         int length __unused)
 {
      return -ENOSYS;
@@ -1291,10 +1282,7 @@
 
 
 int platform_retrieve_audio_cal(void* platform __unused,
-        int acdb_dev_id __unused, int acdb_device_type __unused,
-        int app_type __unused, int topology_id __unused,
-        int sample_rate __unused, uint32_t module_id,
-        uint32_t param_id, void* data __unused,
+        acdb_audio_cal_cfg_t* cal __unused, void* data __unused,
         int* length __unused)
 {
     return -ENOSYS;
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index 65eb11b..66f6b18 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -184,19 +184,6 @@
     int length;
 };
 
-typedef struct acdb_audio_cal_cfg {
-    uint32_t             persist;
-    uint32_t             snd_dev_id;
-    audio_devices_t      dev_id;
-    int32_t              acdb_dev_id;
-    uint32_t             app_type;
-    uint32_t             topo_id;
-    uint32_t             sampling_rate;
-    uint32_t             cal_type;
-    uint32_t             module_id;
-    uint32_t             param_id;
-} acdb_audio_cal_cfg_t;
-
 enum {
     CAL_MODE_SEND           = 0x1,
     CAL_MODE_PERSIST        = 0x2,
@@ -251,6 +238,7 @@
     int                        voice_feature_set;
     acdb_init_t                acdb_init;
     acdb_init_v3_t             acdb_init_v3;
+    acdb_init_v4_t             acdb_init_v4;
     acdb_deallocate_t          acdb_deallocate;
     acdb_send_audio_cal_t      acdb_send_audio_cal;
     acdb_send_audio_cal_v3_t   acdb_send_audio_cal_v3;
@@ -281,6 +269,7 @@
     bool is_asrc_supported;
     struct listnode acdb_meta_key_list;
     bool use_generic_handset;
+    struct acdb_init_data_v4 acdb_init_data;
 };
 
 static int pcm_device_table[AUDIO_USECASE_MAX][2] = {
@@ -1773,7 +1762,12 @@
     snd_card_name = mixer_get_name(my_data->adev->mixer);
     snd_card_name = platform_get_snd_card_name_for_acdb_loader(snd_card_name);
 
-    if (my_data->acdb_init_v3) {
+    my_data->acdb_init_data.cvd_version = cvd_version;
+    my_data->acdb_init_data.snd_card_name = strdup(snd_card_name);
+    my_data->acdb_init_data.meta_key_list = &my_data->acdb_meta_key_list;
+    if (my_data->acdb_init_v4) {
+        result = my_data->acdb_init_v4(&my_data->acdb_init_data, ACDB_LOADER_INIT_V4);
+    } else 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) {
@@ -2218,6 +2212,12 @@
                   __func__, LIB_ACDB_LOADER);
 
 
+        my_data->acdb_init_v4 = (acdb_init_v4_t)dlsym(my_data->acdb_handle,
+                                                     "acdb_loader_init_v4");
+        if (my_data->acdb_init_v4 == NULL) {
+            ALOGE("%s: dlsym error %s for acdb_loader_init_v4", __func__, dlerror());
+        }
+
         my_data->acdb_init_v3 = (acdb_init_v3_t)dlsym(my_data->acdb_handle,
                                                      "acdb_loader_init_v3");
         if (my_data->acdb_init_v3 == NULL) {
@@ -4715,11 +4715,19 @@
         cal->module_id = (uint32_t) strtoul(value, NULL, 0);
         ret = ret | 0x80;
     }
+#ifdef INSTANCE_ID_ENABLED
+    err = str_parms_get_str(parms, "cal_instanceid", value, sizeof(value));
+    if (err >= 0) {
+        str_parms_del(parms, "cal_instanceid");
+        cal->instance_id = (uint32_t) strtoul(value, NULL, 0);
+        ret = ret | 0x100;
+    }
+#endif
     err = str_parms_get_str(parms, "cal_paramid", value, sizeof(value));
     if (err >= 0) {
         str_parms_del(parms, "cal_paramid");
         cal->param_id = (uint32_t) strtoul(value, NULL, 0);
-        ret = ret | 0x100;
+        ret = ret | 0x200;
     }
     return ret;
 }
@@ -7408,7 +7416,37 @@
     return;
 }
 
-static void make_cal_cfg(acdb_audio_cal_cfg_t* cal, int acdb_dev_id,
+#ifdef INSTANCE_ID_ENABLED
+void platform_make_cal_cfg(acdb_audio_cal_cfg_t* cal, int acdb_dev_id,
+        int acdb_device_type, int app_type, int topology_id,
+        int sample_rate, uint32_t module_id, uint16_t instance_id,
+        uint32_t param_id, bool persist)
+{
+    int persist_send_flags = 1;
+
+    if (!cal) {
+        return;
+    }
+
+    if (persist)
+        persist_send_flags |= 0x2;
+
+    memset(cal, 0, sizeof(acdb_audio_cal_cfg_t));
+
+    cal->persist = persist;
+    cal->app_type = app_type;
+    cal->acdb_dev_id = acdb_dev_id;
+    cal->sampling_rate = sample_rate;
+    cal->topo_id = topology_id;
+    //if module and param id is set to 0, the whole blob will be stored
+    //or sent to the DSP
+    cal->module_id = module_id;
+    cal->instance_id = instance_id;
+    cal->param_id = param_id;
+    cal->cal_type = acdb_device_type;
+}
+#else
+void platform_make_cal_cfg(acdb_audio_cal_cfg_t* cal, int acdb_dev_id,
         int acdb_device_type, int app_type, int topology_id,
         int sample_rate, uint32_t module_id, uint32_t param_id, bool persist)
 {
@@ -7433,27 +7471,20 @@
     cal->module_id = module_id;
     cal->param_id = param_id;
     cal->cal_type = acdb_device_type;
-    cal->persist = persist;
-
 }
+#endif
 
-int platform_send_audio_cal(void* platform, int acdb_dev_id,
-       int acdb_device_type, int app_type, int topology_id, int sample_rate,
-       uint32_t module_id, uint32_t param_id, void* data, int length, bool persist)
+int platform_send_audio_cal(void* platform, acdb_audio_cal_cfg_t* cal,
+       void* data, int length, bool persist)
 {
     int ret = 0;
     struct platform_data *my_data = (struct platform_data *)platform;
-    acdb_audio_cal_cfg_t cal;
-    memset(&cal, 0, sizeof(acdb_audio_cal_cfg_t));
 
     if (!my_data) {
         ret = -EINVAL;
         goto ERROR_RETURN;
     }
 
-    make_cal_cfg(&cal, acdb_dev_id, acdb_device_type, app_type, topology_id,
-        sample_rate, module_id, param_id, true);
-
     if (my_data->acdb_set_audio_cal) {
         // persist audio cal in local cache
         if (persist) {
@@ -7461,7 +7492,7 @@
         }
         // send audio cal to dsp
         if (ret == 0) {
-            cal.persist = false;
+            cal->persist = false;
             ret = my_data->acdb_set_audio_cal((void*)&cal, data, (uint32_t)length);
             if (persist && (ret != 0)) {
                 ALOGV("[%s] audio cal stored with success, ignore set cal failure", __func__);
@@ -7474,30 +7505,23 @@
     return ret;
 }
 
-int platform_get_audio_cal(void* platform, int acdb_dev_id,
-       int acdb_device_type, int app_type, int topology_id,
-       int sample_rate, uint32_t module_id, uint32_t param_id,
+int platform_get_audio_cal(void* platform, acdb_audio_cal_cfg_t* cal,
        void* data, int* length, bool persist)
 {
     int ret = 0;
     struct platform_data *my_data = (struct platform_data *)platform;
-    acdb_audio_cal_cfg_t cal;
-    memset(&cal, 0, sizeof(acdb_audio_cal_cfg_t));
 
     if (!my_data) {
         ret = -EINVAL;
         goto ERROR_RETURN;
     }
 
-    make_cal_cfg(&cal, acdb_dev_id, acdb_device_type, app_type, topology_id,
-        sample_rate, module_id, param_id, false);
-
     if (my_data->acdb_get_audio_cal) {
         // get cal from dsp
         ret = my_data->acdb_get_audio_cal((void*)&cal, data, (uint32_t*)length);
         // get cached cal if prevoius attempt fails and persist flag is set
         if ((ret != 0) && persist) {
-            cal.persist = true;
+            cal->persist = true;
             ret = my_data->acdb_get_audio_cal((void*)&cal, data, (uint32_t*)length);
         }
     }
@@ -7506,24 +7530,17 @@
     return ret;
 }
 
-int platform_store_audio_cal(void* platform, int acdb_dev_id,
-       int acdb_device_type, int app_type, int topology_id,
-       int sample_rate, uint32_t module_id, uint32_t param_id,
+int platform_store_audio_cal(void* platform, acdb_audio_cal_cfg_t* cal,
        void* data, int length)
 {
     int ret = 0;
     struct platform_data *my_data = (struct platform_data *)platform;
-    acdb_audio_cal_cfg_t cal;
-    memset(&cal, 0, sizeof(acdb_audio_cal_cfg_t));
 
     if (!my_data) {
         ret = -EINVAL;
         goto ERROR_RETURN;
     }
 
-    make_cal_cfg(&cal, acdb_dev_id, acdb_device_type, app_type, topology_id,
-        sample_rate, module_id, param_id, true);
-
     if (my_data->acdb_set_audio_cal) {
         ret = my_data->acdb_set_audio_cal((void*)&cal, data, (uint32_t)length);
     }
@@ -7532,24 +7549,17 @@
     return ret;
 }
 
-int platform_retrieve_audio_cal(void* platform, int acdb_dev_id,
-        int acdb_device_type, int app_type, int topology_id,
-        int sample_rate, uint32_t module_id, uint32_t param_id,
+int platform_retrieve_audio_cal(void* platform, acdb_audio_cal_cfg_t* cal,
         void* data, int* length)
 {
     int ret = 0;
     struct platform_data *my_data = (struct platform_data *)platform;
-    acdb_audio_cal_cfg_t cal;
-    memset(&cal, 0, sizeof(acdb_audio_cal_cfg_t));
 
     if (!my_data) {
         ret = -EINVAL;
         goto ERROR_RETURN;
     }
 
-    make_cal_cfg(&cal, acdb_dev_id, acdb_device_type, app_type, topology_id,
-        sample_rate, module_id, param_id, true);
-
     if (my_data->acdb_get_audio_cal) {
         ret = my_data->acdb_get_audio_cal((void*)&cal, data, (uint32_t*)length);
     }
diff --git a/hal/platform_api.h b/hal/platform_api.h
index 0fec452..d487525 100644
--- a/hal/platform_api.h
+++ b/hal/platform_api.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013-2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2018, The Linux Foundation. All rights reserved.
  * Not a contribution.
  *
  * Copyright (C) 2013 The Android Open Source Project
@@ -70,6 +70,23 @@
     char be_name[BE_DAI_NAME_MAX_LENGTH];
 };
 
+typedef struct acdb_audio_cal_cfg {
+    uint32_t             persist;
+    uint32_t             snd_dev_id;
+    audio_devices_t      dev_id;
+    int32_t              acdb_dev_id;
+    uint32_t             app_type;
+    uint32_t             topo_id;
+    uint32_t             sampling_rate;
+    uint32_t             cal_type;
+    uint32_t             module_id;
+#ifdef INSTANCE_ID_ENABLED
+    uint16_t             instance_id;
+    uint16_t             reserved;
+#endif
+    uint32_t             param_id;
+} acdb_audio_cal_cfg_t;
+
 enum card_status_t;
 
 void *platform_init(struct audio_device *adev);
@@ -236,20 +253,27 @@
 void platform_invalidate_hdmi_config(void *platform);
 void platform_invalidate_backend_config(void * platform,snd_device_t snd_device);
 
-int platform_send_audio_cal(void* platform, int acdb_dev_id, int acdb_device_type,
-    int app_type, int topology_id, int sample_rate, uint32_t module_id, uint32_t param_id,
+#ifdef INSTANCE_ID_ENABLED
+void platform_make_cal_cfg(acdb_audio_cal_cfg_t* cal, int acdb_dev_id,
+        int acdb_device_type, int app_type, int topology_id,
+        int sample_rate, uint32_t module_id, uint16_t instance_id,
+        uint32_t param_id, bool persist);
+#else
+void platform_make_cal_cfg(acdb_audio_cal_cfg_t* cal, int acdb_dev_id,
+        int acdb_device_type, int app_type, int topology_id,
+        int sample_rate, uint32_t module_id, uint32_t param_id, bool persist);
+#endif
+
+int platform_send_audio_cal(void* platform, acdb_audio_cal_cfg_t* cal,
     void* data, int length, bool persist);
 
-int platform_get_audio_cal(void* platform, int acdb_dev_id, int acdb_device_type,
-    int app_type, int topology_id, int sample_rate, uint32_t module_id, uint32_t param_id,
+int platform_get_audio_cal(void* platform, acdb_audio_cal_cfg_t* cal,
     void* data, int* length, bool persist);
 
-int platform_store_audio_cal(void* platform, int acdb_dev_id, int acdb_device_type,
-    int app_type, int topology_id, int sample_rate, uint32_t module_id, uint32_t param_id,
+int platform_store_audio_cal(void* platform, acdb_audio_cal_cfg_t* cal,
     void* data, int length);
 
-int platform_retrieve_audio_cal(void* platform, int acdb_dev_id, int acdb_device_type,
-    int app_type, int topology_id, int sample_rate, uint32_t module_id, uint32_t param_id,
+int platform_retrieve_audio_cal(void* platform, acdb_audio_cal_cfg_t* cal,
     void* data, int* length);
 
 unsigned char* platform_get_license(void* platform, int* size);
