hal : send audio cal using v6 api with fe id

* Since kernel is fetching app type and topo info using fe id,
hal is expected to send fe id as usecase value aligned with kernel.
* V6 api is used and audio cal is sent along with fe id.
* For dynamic modification of fe id, audio_platform_info.xml
can be used.

Change-Id: I6869baf11864907f163b9016ad4c95e8ff305fc7
Signed-off-by: Manoj Kumar N D <quic_mnd@quicinc.com>
diff --git a/configs/msmnile_au/audio_platform_info.xml b/configs/msmnile_au/audio_platform_info.xml
old mode 100755
new mode 100644
index fddf2cd..f5e7fbf
--- a/configs/msmnile_au/audio_platform_info.xml
+++ b/configs/msmnile_au/audio_platform_info.xml
@@ -94,56 +94,56 @@
     </bit_width_configs>
 
     <pcm_ids>
-        <usecase name="USECASE_AUDIO_PLAYBACK_LOW_LATENCY" type="out" id="9"/>
-        <usecase name="USECASE_AUDIO_PLAYBACK_DEEP_BUFFER" type="out" id="0"/>
-        <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD" type="out" id="7"/>
-        <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD2" type="out" id="11"/>
-        <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD3" type="out" id="12"/>
-        <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD4" type="out" id="21"/>
-        <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD5" type="out" id="22"/>
-        <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD6" type="out" id="23"/>
-        <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD7" type="out" id="24"/>
-        <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD8" type="out" id="25"/>
-        <usecase name="USECASE_AUDIO_PLAYBACK_MEDIA" type="out" id="0"/>
-        <usecase name="USECASE_AUDIO_PLAYBACK_SYS_NOTIFICATION" type="out" id="9"/>
-        <usecase name="USECASE_AUDIO_PLAYBACK_NAV_GUIDANCE" type="out" id="1"/>
-        <usecase name="USECASE_AUDIO_PLAYBACK_PHONE" type="out" id="12"/>
-        <usecase name="USECASE_AUDIO_PLAYBACK_ALERTS" type="out" id="59"/>
-        <usecase name="USECASE_AUDIO_PLAYBACK_FRONT_PASSENGER" type="out" id="55"/>
-        <usecase name="USECASE_AUDIO_PLAYBACK_REAR_SEAT" type="out" id="54"/>
-        <usecase name="USECASE_VOICEMMODE1_CALL" type="in" id="2"/>
-        <usecase name="USECASE_VOICEMMODE1_CALL" type="out" id="2"/>
-        <usecase name="USECASE_VOICEMMODE2_CALL" type="in" id="15"/>
-        <usecase name="USECASE_VOICEMMODE2_CALL" type="out" id="15"/>
-        <usecase name="USECASE_VOWLAN_CALL" type="in" id="-1"/>
-        <usecase name="USECASE_VOWLAN_CALL" type="out" id="-1"/>
-        <usecase name="USECASE_AUDIO_PLAYBACK_AFE_PROXY" type="out" id="5"/>
-        <usecase name="USECASE_AUDIO_RECORD_AFE_PROXY" type="in" id="6"/>
-        <usecase name="USECASE_AUDIO_RECORD_LOW_LATENCY" type="in" id="13" />
-        <usecase name="USECASE_AUDIO_PLAYBACK_ULL" type="out" id="13" />
-        <usecase name="USECASE_AUDIO_PLAYBACK_VOIP" type="out" id="12" />
-        <usecase name="USECASE_AUDIO_RECORD_VOIP" type="in" id="12" />
-        <usecase name="USECASE_AUDIO_PLAYBACK_MMAP" type="out" id="28" />
-        <usecase name="USECASE_AUDIO_RECORD_MMAP" type="in" id="28" />
-        <usecase name="USECASE_AUDIO_RECORD" type="in" id="0" />
-        <usecase name="USECASE_AUDIO_RECORD_BUS" type="in" id="0" />
-        <usecase name="USECASE_AUDIO_RECORD_BUS_FRONT_PASSENGER" type="in" id="55" />
-        <usecase name="USECASE_AUDIO_RECORD_BUS_REAR_SEAT" type="in" id="54" />
-        <usecase name="USECASE_AUDIO_HFP_SCO" type="in" id="29" />
-        <usecase name="USECASE_AUDIO_HFP_SCO" type="out" id="29" />
-        <usecase name="USECASE_AUDIO_HFP_SCO_WB" type="in" id="29" />
-        <usecase name="USECASE_AUDIO_HFP_SCO_WB" type="out" id="29" />
-        <usecase name="USECASE_AUDIO_HFP_SCO_DOWNLINK" type="in" id="36" />
-        <usecase name="USECASE_AUDIO_HFP_SCO_DOWNLINK" type="out" id="36" />
-        <usecase name="USECASE_AUDIO_HFP_SCO_WB_DOWNLINK" type="in" id="36" />
-        <usecase name="USECASE_AUDIO_HFP_SCO_WB_DOWNLINK" type="out" id="36" />
-        <usecase name="USECASE_ICC_CALL" type="in" id="33" />
-        <usecase name="USECASE_ICC_CALL" type="out" id="33" />
-        <usecase name="USECASE_AUDIO_PLAYBACK_SYNTHESIZER" type="in" id="33" />
-        <usecase name="USECASE_AUDIO_PLAYBACK_SYNTHESIZER" type="out" id="33" />
-        <usecase name="USECASE_AUDIO_RECORD_COMPRESS2" type="in" id="31" />
-        <usecase name="USECASE_AUDIO_RECORD2" type="in" id="61" />
-        <usecase name="USECASE_AUDIO_RECORD3" type="in" id="62" />
+        <usecase name="USECASE_AUDIO_PLAYBACK_LOW_LATENCY" type="out" id="9" fe="4"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_DEEP_BUFFER" type="out" id="0" fe="0"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD" type="out" id="7" fe="3"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD2" type="out" id="11" fe="6"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD3" type="out" id="12" fe="9"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD4" type="out" id="21" fe="10"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD5" type="out" id="22" fe="11"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD6" type="out" id="23" fe="12"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD7" type="out" id="24" fe="13"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD8" type="out" id="25" fe="14"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_MEDIA" type="out" id="0" fe="0"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_SYS_NOTIFICATION" type="out" id="9" fe="4"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_NAV_GUIDANCE" type="out" id="1" fe="1"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_PHONE" type="out" id="12" fe="9"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_ALERTS" type="out" id="59" fe="30"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_FRONT_PASSENGER" type="out" id="55" fe="22"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_REAR_SEAT" type="out" id="54" fe="21"/>
+        <usecase name="USECASE_VOICEMMODE1_CALL" type="in" id="2" fe="50"/>
+        <usecase name="USECASE_VOICEMMODE1_CALL" type="out" id="2" fe="50"/>
+        <usecase name="USECASE_VOICEMMODE2_CALL" type="in" id="15" fe="51"/>
+        <usecase name="USECASE_VOICEMMODE2_CALL" type="out" id="15" fe="51"/>
+        <usecase name="USECASE_VOWLAN_CALL" type="in" id="-1" fe="-1"/>
+        <usecase name="USECASE_VOWLAN_CALL" type="out" id="-1" fe="-1"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_AFE_PROXY" type="out" id="5" fe="-1"/>
+        <usecase name="USECASE_AUDIO_RECORD_AFE_PROXY" type="in" id="6" fe="-1"/>
+        <usecase name="USECASE_AUDIO_RECORD_LOW_LATENCY" type="in" id="13" fe="7"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_ULL" type="out" id="13" fe="7"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_VOIP" type="out" id="12" fe="9"/>
+        <usecase name="USECASE_AUDIO_RECORD_VOIP" type="in" id="12" fe="9"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_MMAP" type="out" id="28" fe="15"/>
+        <usecase name="USECASE_AUDIO_RECORD_MMAP" type="in" id="28" fe="15"/>
+        <usecase name="USECASE_AUDIO_RECORD" type="in" id="0" fe="0"/>
+        <usecase name="USECASE_AUDIO_RECORD_BUS" type="in" id="0" fe="0"/>
+        <usecase name="USECASE_AUDIO_RECORD_BUS_FRONT_PASSENGER" type="in" id="55" fe="22"/>
+        <usecase name="USECASE_AUDIO_RECORD_BUS_REAR_SEAT" type="in" id="54" fe="21"/>
+        <usecase name="USECASE_AUDIO_HFP_SCO" type="in" id="29" fe="5"/>
+        <usecase name="USECASE_AUDIO_HFP_SCO" type="out" id="29" fe="5"/>
+        <usecase name="USECASE_AUDIO_HFP_SCO_WB" type="in" id="29" fe="5"/>
+        <usecase name="USECASE_AUDIO_HFP_SCO_WB" type="out" id="29" fe="5"/>
+        <usecase name="USECASE_AUDIO_HFP_SCO_DOWNLINK" type="in" id="36" fe="20"/>
+        <usecase name="USECASE_AUDIO_HFP_SCO_DOWNLINK" type="out" id="36" fe="20"/>
+        <usecase name="USECASE_AUDIO_HFP_SCO_WB_DOWNLINK" type="in" id="36" fe="20"/>
+        <usecase name="USECASE_AUDIO_HFP_SCO_WB_DOWNLINK" type="out" id="36" fe="20"/>
+        <usecase name="USECASE_ICC_CALL" type="in" id="33" fe="8"/>
+        <usecase name="USECASE_ICC_CALL" type="out" id="33" fe="8"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_SYNTHESIZER" type="in" id="33" fe="8"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_SYNTHESIZER" type="out" id="33" fe="8"/>
+        <usecase name="USECASE_AUDIO_RECORD_COMPRESS2" type="in" id="31" fe="16"/>
+        <usecase name="USECASE_AUDIO_RECORD2" type="in" id="61" fe="32"/>
+        <usecase name="USECASE_AUDIO_RECORD3" type="in" id="62" fe="33"/>
     </pcm_ids>
 
     <soft_volume_params>
diff --git a/configs/msmsteppe_au/audio_platform_info.xml b/configs/msmsteppe_au/audio_platform_info.xml
index 0960da2..ce989d9 100644
--- a/configs/msmsteppe_au/audio_platform_info.xml
+++ b/configs/msmsteppe_au/audio_platform_info.xml
@@ -94,56 +94,56 @@
     </bit_width_configs>
 
     <pcm_ids>
-        <usecase name="USECASE_AUDIO_PLAYBACK_LOW_LATENCY" type="out" id="9"/>
-        <usecase name="USECASE_AUDIO_PLAYBACK_DEEP_BUFFER" type="out" id="0"/>
-        <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD" type="out" id="7"/>
-        <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD2" type="out" id="11"/>
-        <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD3" type="out" id="12"/>
-        <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD4" type="out" id="21"/>
-        <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD5" type="out" id="22"/>
-        <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD6" type="out" id="23"/>
-        <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD7" type="out" id="24"/>
-        <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD8" type="out" id="25"/>
-        <usecase name="USECASE_AUDIO_PLAYBACK_MEDIA" type="out" id="0"/>
-        <usecase name="USECASE_AUDIO_PLAYBACK_SYS_NOTIFICATION" type="out" id="9"/>
-        <usecase name="USECASE_AUDIO_PLAYBACK_NAV_GUIDANCE" type="out" id="1"/>
-        <usecase name="USECASE_AUDIO_PLAYBACK_PHONE" type="out" id="12"/>
-        <usecase name="USECASE_AUDIO_PLAYBACK_ALERTS" type="out" id="59"/>
-        <usecase name="USECASE_AUDIO_PLAYBACK_FRONT_PASSENGER" type="out" id="55"/>
-        <usecase name="USECASE_AUDIO_PLAYBACK_REAR_SEAT" type="out" id="54"/>
-        <usecase name="USECASE_VOICEMMODE1_CALL" type="in" id="2"/>
-        <usecase name="USECASE_VOICEMMODE1_CALL" type="out" id="2"/>
-        <usecase name="USECASE_VOICEMMODE2_CALL" type="in" id="15"/>
-        <usecase name="USECASE_VOICEMMODE2_CALL" type="out" id="15"/>
-        <usecase name="USECASE_VOWLAN_CALL" type="in" id="-1"/>
-        <usecase name="USECASE_VOWLAN_CALL" type="out" id="-1"/>
-        <usecase name="USECASE_AUDIO_PLAYBACK_AFE_PROXY" type="out" id="5"/>
-        <usecase name="USECASE_AUDIO_RECORD_AFE_PROXY" type="in" id="6"/>
-        <usecase name="USECASE_AUDIO_RECORD_LOW_LATENCY" type="in" id="13" />
-        <usecase name="USECASE_AUDIO_PLAYBACK_ULL" type="out" id="13" />
-        <usecase name="USECASE_AUDIO_PLAYBACK_VOIP" type="out" id="12" />
-        <usecase name="USECASE_AUDIO_RECORD_VOIP" type="in" id="12" />
-        <usecase name="USECASE_AUDIO_PLAYBACK_MMAP" type="out" id="28" />
-        <usecase name="USECASE_AUDIO_RECORD_MMAP" type="in" id="28" />
-        <usecase name="USECASE_AUDIO_RECORD" type="in" id="0" />
-        <usecase name="USECASE_AUDIO_RECORD_BUS" type="in" id="0" />
-        <usecase name="USECASE_AUDIO_RECORD_BUS_FRONT_PASSENGER" type="in" id="55" />
-        <usecase name="USECASE_AUDIO_RECORD_BUS_REAR_SEAT" type="in" id="54" />
-        <usecase name="USECASE_AUDIO_HFP_SCO" type="in" id="29" />
-        <usecase name="USECASE_AUDIO_HFP_SCO" type="out" id="29" />
-        <usecase name="USECASE_AUDIO_HFP_SCO_WB" type="in" id="29" />
-        <usecase name="USECASE_AUDIO_HFP_SCO_WB" type="out" id="29" />
-        <usecase name="USECASE_AUDIO_HFP_SCO_DOWNLINK" type="in" id="36" />
-        <usecase name="USECASE_AUDIO_HFP_SCO_DOWNLINK" type="out" id="36" />
-        <usecase name="USECASE_AUDIO_HFP_SCO_WB_DOWNLINK" type="in" id="36" />
-        <usecase name="USECASE_AUDIO_HFP_SCO_WB_DOWNLINK" type="out" id="36" />
-        <usecase name="USECASE_ICC_CALL" type="in" id="33" />
-        <usecase name="USECASE_ICC_CALL" type="out" id="33" />
-        <usecase name="USECASE_AUDIO_PLAYBACK_SYNTHESIZER" type="in" id="33" />
-        <usecase name="USECASE_AUDIO_PLAYBACK_SYNTHESIZER" type="out" id="33" />
-        <usecase name="USECASE_AUDIO_RECORD_COMPRESS2" type="in" id="31" />
-        <usecase name="USECASE_AUDIO_RECORD2" type="in" id="61" />
-        <usecase name="USECASE_AUDIO_RECORD3" type="in" id="62" />
+        <usecase name="USECASE_AUDIO_PLAYBACK_LOW_LATENCY" type="out" id="9" fe="4"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_DEEP_BUFFER" type="out" id="0" fe="0"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD" type="out" id="7" fe="3"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD2" type="out" id="11" fe="6"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD3" type="out" id="12" fe="9"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD4" type="out" id="21" fe="10"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD5" type="out" id="22" fe="11"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD6" type="out" id="23" fe="12"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD7" type="out" id="24" fe="13"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD8" type="out" id="25" fe="14"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_MEDIA" type="out" id="0" fe="0"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_SYS_NOTIFICATION" type="out" id="9" fe="4"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_NAV_GUIDANCE" type="out" id="1" fe="1"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_PHONE" type="out" id="12" fe="9"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_ALERTS" type="out" id="59" fe="30"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_FRONT_PASSENGER" type="out" id="55" fe="22"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_REAR_SEAT" type="out" id="54" fe="21"/>
+        <usecase name="USECASE_VOICEMMODE1_CALL" type="in" id="2" fe="50"/>
+        <usecase name="USECASE_VOICEMMODE1_CALL" type="out" id="2" fe="50"/>
+        <usecase name="USECASE_VOICEMMODE2_CALL" type="in" id="15" fe="51"/>
+        <usecase name="USECASE_VOICEMMODE2_CALL" type="out" id="15" fe="51"/>
+        <usecase name="USECASE_VOWLAN_CALL" type="in" id="-1" fe="-1"/>
+        <usecase name="USECASE_VOWLAN_CALL" type="out" id="-1" fe="-1"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_AFE_PROXY" type="out" id="5" fe="-1"/>
+        <usecase name="USECASE_AUDIO_RECORD_AFE_PROXY" type="in" id="6" fe="-1"/>
+        <usecase name="USECASE_AUDIO_RECORD_LOW_LATENCY" type="in" id="13" fe="7"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_ULL" type="out" id="13" fe="7"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_VOIP" type="out" id="12" fe="9"/>
+        <usecase name="USECASE_AUDIO_RECORD_VOIP" type="in" id="12" fe="9"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_MMAP" type="out" id="28" fe="15"/>
+        <usecase name="USECASE_AUDIO_RECORD_MMAP" type="in" id="28" fe="15"/>
+        <usecase name="USECASE_AUDIO_RECORD" type="in" id="0" fe="0"/>
+        <usecase name="USECASE_AUDIO_RECORD_BUS" type="in" id="0" fe="0"/>
+        <usecase name="USECASE_AUDIO_RECORD_BUS_FRONT_PASSENGER" type="in" id="55" fe="22"/>
+        <usecase name="USECASE_AUDIO_RECORD_BUS_REAR_SEAT" type="in" id="54" fe="21"/>
+        <usecase name="USECASE_AUDIO_HFP_SCO" type="in" id="29" fe="5"/>
+        <usecase name="USECASE_AUDIO_HFP_SCO" type="out" id="29" fe="5"/>
+        <usecase name="USECASE_AUDIO_HFP_SCO_WB" type="in" id="29" fe="5"/>
+        <usecase name="USECASE_AUDIO_HFP_SCO_WB" type="out" id="29" fe="5"/>
+        <usecase name="USECASE_AUDIO_HFP_SCO_DOWNLINK" type="in" id="36" fe="20"/>
+        <usecase name="USECASE_AUDIO_HFP_SCO_DOWNLINK" type="out" id="36" fe="20"/>
+        <usecase name="USECASE_AUDIO_HFP_SCO_WB_DOWNLINK" type="in" id="36" fe="20"/>
+        <usecase name="USECASE_AUDIO_HFP_SCO_WB_DOWNLINK" type="out" id="36" fe="20"/>
+        <usecase name="USECASE_ICC_CALL" type="in" id="33" fe="8"/>
+        <usecase name="USECASE_ICC_CALL" type="out" id="33" fe="8"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_SYNTHESIZER" type="in" id="33" fe="8"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_SYNTHESIZER" type="out" id="33" fe="8"/>
+        <usecase name="USECASE_AUDIO_RECORD_COMPRESS2" type="in" id="31" fe="16"/>
+        <usecase name="USECASE_AUDIO_RECORD2" type="in" id="61" fe="32"/>
+        <usecase name="USECASE_AUDIO_RECORD3" type="in" id="62" fe="33"/>
     </pcm_ids>
 
     <config_params>
diff --git a/hal/acdb.h b/hal/acdb.h
index 750c9cf..943a303 100644
--- a/hal/acdb.h
+++ b/hal/acdb.h
@@ -55,6 +55,7 @@
 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_audio_cal_v4_t)(int, int, int, int, int, int);
+typedef void (*acdb_send_audio_cal_v6_t)(int, int, int, int, int, int, int, int);
 typedef void (*acdb_send_voice_cal_t)(int, int);
 typedef int (*acdb_reload_vocvoltable_t)(int);
 typedef int  (*acdb_get_default_app_type_t)(void);
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index 52df55c..674601c 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -186,6 +186,7 @@
 #define MAX_CAL_NAME 20
 #define MAX_MIME_TYPE_LENGTH 30
 #define MAX_SND_CARD_NAME_LENGTH 100
+#define FE_ID_TABLE_INDEX 2
 
 #define GET_IN_DEVICE_INDEX(SND_DEVICE) ((SND_DEVICE) - (SND_DEVICE_IN_BEGIN))
 
@@ -248,6 +249,12 @@
     CAL_MODE_RTAC           = 0x4
 };
 
+enum {
+    CAL_OFFSET_NONE       = 0x0,
+    CAL_OFFSET_ASM_TOP    = 0x1,
+    CAL_OFFSET_INDEX_MAX
+};
+
 #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];
@@ -351,6 +358,7 @@
     acdb_send_audio_cal_t      acdb_send_audio_cal;
     acdb_send_audio_cal_v3_t   acdb_send_audio_cal_v3;
     acdb_send_audio_cal_v4_t   acdb_send_audio_cal_v4;
+    acdb_send_audio_cal_v6_t   acdb_send_audio_cal_v6;
     acdb_set_audio_cal_t       acdb_set_audio_cal;
     acdb_get_audio_cal_t       acdb_get_audio_cal;
     acdb_send_voice_cal_t      acdb_send_voice_cal;
@@ -413,149 +421,183 @@
 };
 #endif
 
-static int pcm_device_table[AUDIO_USECASE_MAX][2] = {
+static int pcm_device_table[AUDIO_USECASE_MAX][4] = {
     [USECASE_AUDIO_PLAYBACK_DEEP_BUFFER] = {DEEP_BUFFER_PCM_DEVICE,
-                                            DEEP_BUFFER_PCM_DEVICE},
+                                            DEEP_BUFFER_PCM_DEVICE,
+                                            MSM_FRONTEND_DAI_MULTIMEDIA1,
+                                            MSM_FRONTEND_DAI_MULTIMEDIA1},
     [USECASE_AUDIO_PLAYBACK_WITH_HAPTICS] = {AUDIO_HAPTICS_PCM_DEVICE,
-                                             AUDIO_HAPTICS_PCM_DEVICE},
+                                             AUDIO_HAPTICS_PCM_DEVICE, -1, -1},
     [USECASE_AUDIO_PLAYBACK_HAPTICS] = {HAPTICS_PCM_DEVICE,
-                                             HAPTICS_PCM_DEVICE},
+                                             HAPTICS_PCM_DEVICE, -1, -1},
     [USECASE_AUDIO_PLAYBACK_LOW_LATENCY] = {LOWLATENCY_PCM_DEVICE,
-                                           LOWLATENCY_PCM_DEVICE},
+                                            LOWLATENCY_PCM_DEVICE,
+                                            MSM_FRONTEND_DAI_VOICEMMODE2,
+                                            MSM_FRONTEND_DAI_VOICEMMODE2},
     [USECASE_AUDIO_PLAYBACK_ULL]         = {MULTIMEDIA3_PCM_DEVICE,
-                                            MULTIMEDIA3_PCM_DEVICE},
+                                            MULTIMEDIA3_PCM_DEVICE,
+                                            MSM_FRONTEND_DAI_MULTIMEDIA3,
+                                            MSM_FRONTEND_DAI_MULTIMEDIA3},
     [USECASE_AUDIO_PLAYBACK_MULTI_CH] = {MULTIMEDIA2_PCM_DEVICE,
-                                         MULTIMEDIA2_PCM_DEVICE},
+                                         MULTIMEDIA2_PCM_DEVICE,
+                                         MSM_FRONTEND_DAI_MULTIMEDIA2,
+                                         MSM_FRONTEND_DAI_MULTIMEDIA2},
     [USECASE_AUDIO_PLAYBACK_HIFI] = {MULTIMEDIA2_PCM_DEVICE,
-                                     MULTIMEDIA2_PCM_DEVICE},
+                                     MULTIMEDIA2_PCM_DEVICE,
+                                     MSM_FRONTEND_DAI_MULTIMEDIA2,
+                                     MSM_FRONTEND_DAI_MULTIMEDIA2},
     [USECASE_AUDIO_PLAYBACK_TTS] = {MULTIMEDIA2_PCM_DEVICE,
-                                        MULTIMEDIA2_PCM_DEVICE},
+                                    MULTIMEDIA2_PCM_DEVICE,
+                                    MSM_FRONTEND_DAI_MULTIMEDIA2,
+                                    MSM_FRONTEND_DAI_MULTIMEDIA2},
     [USECASE_AUDIO_PLAYBACK_OFFLOAD] =
-                     {PLAYBACK_OFFLOAD_DEVICE, PLAYBACK_OFFLOAD_DEVICE},
+                     {PLAYBACK_OFFLOAD_DEVICE, PLAYBACK_OFFLOAD_DEVICE,
+                     MSM_FRONTEND_DAI_MULTIMEDIA5, MSM_FRONTEND_DAI_MULTIMEDIA5},
     [USECASE_AUDIO_PLAYBACK_OFFLOAD2] =
-                     {PLAYBACK_OFFLOAD_DEVICE2, PLAYBACK_OFFLOAD_DEVICE2},
+                     {PLAYBACK_OFFLOAD_DEVICE2, PLAYBACK_OFFLOAD_DEVICE2, -1, -1},
     [USECASE_AUDIO_PLAYBACK_OFFLOAD3] =
-                     {PLAYBACK_OFFLOAD_DEVICE3, PLAYBACK_OFFLOAD_DEVICE3},
+                     {PLAYBACK_OFFLOAD_DEVICE3, PLAYBACK_OFFLOAD_DEVICE3, -1, -1},
     [USECASE_AUDIO_PLAYBACK_OFFLOAD4] =
-                     {PLAYBACK_OFFLOAD_DEVICE4, PLAYBACK_OFFLOAD_DEVICE4},
+                     {PLAYBACK_OFFLOAD_DEVICE4, PLAYBACK_OFFLOAD_DEVICE4, -1, -1},
     [USECASE_AUDIO_PLAYBACK_OFFLOAD5] =
-                     {PLAYBACK_OFFLOAD_DEVICE5, PLAYBACK_OFFLOAD_DEVICE5},
+                     {PLAYBACK_OFFLOAD_DEVICE5, PLAYBACK_OFFLOAD_DEVICE5,
+                     MSM_FRONTEND_DAI_MULTIMEDIA20,
+                     MSM_FRONTEND_DAI_MULTIMEDIA20},
     [USECASE_AUDIO_PLAYBACK_OFFLOAD6] =
-                     {PLAYBACK_OFFLOAD_DEVICE6, PLAYBACK_OFFLOAD_DEVICE6},
+                     {PLAYBACK_OFFLOAD_DEVICE6, PLAYBACK_OFFLOAD_DEVICE6,
+                     MSM_FRONTEND_DAI_MULTIMEDIA21, MSM_FRONTEND_DAI_MULTIMEDIA21},
     [USECASE_AUDIO_PLAYBACK_OFFLOAD7] =
-                     {PLAYBACK_OFFLOAD_DEVICE7, PLAYBACK_OFFLOAD_DEVICE7},
+                     {PLAYBACK_OFFLOAD_DEVICE7, PLAYBACK_OFFLOAD_DEVICE7, -1, -1},
     [USECASE_AUDIO_PLAYBACK_OFFLOAD8] =
-                     {PLAYBACK_OFFLOAD_DEVICE8, PLAYBACK_OFFLOAD_DEVICE8},
+                     {PLAYBACK_OFFLOAD_DEVICE8, PLAYBACK_OFFLOAD_DEVICE8, -1, -1},
     [USECASE_AUDIO_PLAYBACK_OFFLOAD9] =
-                     {PLAYBACK_OFFLOAD_DEVICE9, PLAYBACK_OFFLOAD_DEVICE9},
+                     {PLAYBACK_OFFLOAD_DEVICE9, PLAYBACK_OFFLOAD_DEVICE9, -1, -1},
 
 
-    [USECASE_AUDIO_RECORD] = {AUDIO_RECORD_PCM_DEVICE, AUDIO_RECORD_PCM_DEVICE},
-    [USECASE_AUDIO_RECORD2] = {AUDIO_RECORD_PCM_DEVICE, AUDIO_RECORD_PCM_DEVICE},
-    [USECASE_AUDIO_RECORD3] = {AUDIO_RECORD_PCM_DEVICE, AUDIO_RECORD_PCM_DEVICE},
-    [USECASE_AUDIO_RECORD_COMPRESS] = {COMPRESS_CAPTURE_DEVICE, COMPRESS_CAPTURE_DEVICE},
-    [USECASE_AUDIO_RECORD_COMPRESS2] = {COMPRESS_CAPTURE_DEVICE,COMPRESS_CAPTURE_DEVICE},
-    [USECASE_AUDIO_RECORD_COMPRESS3] = {-1, -1},
-    [USECASE_AUDIO_RECORD_COMPRESS4] = {-1, -1},
-    [USECASE_AUDIO_RECORD_COMPRESS5] = {-1, -1},
-    [USECASE_AUDIO_RECORD_COMPRESS6] = {-1, -1},
-    [USECASE_AUDIO_RECORD_LOW_LATENCY] = {LOWLATENCY_PCM_DEVICE,
-                                          LOWLATENCY_PCM_DEVICE},
-    [USECASE_AUDIO_RECORD_FM_VIRTUAL] = {MULTIMEDIA2_PCM_DEVICE,
-                                  MULTIMEDIA2_PCM_DEVICE},
-    [USECASE_AUDIO_RECORD_HIFI] = {MULTIMEDIA2_PCM_DEVICE,
-                                   MULTIMEDIA2_PCM_DEVICE},
-    [USECASE_AUDIO_PLAYBACK_FM] = {FM_PLAYBACK_PCM_DEVICE, FM_CAPTURE_PCM_DEVICE},
-    [USECASE_AUDIO_HFP_SCO] = {HFP_PCM_RX, HFP_SCO_RX},
-    [USECASE_AUDIO_HFP_SCO_WB] = {HFP_PCM_RX, HFP_SCO_RX},
-    [USECASE_AUDIO_HFP_SCO_DOWNLINK] = {HFP_ASM_RX_TX, HFP_ASM_RX_TX},
-    [USECASE_AUDIO_HFP_SCO_WB_DOWNLINK] = {HFP_ASM_RX_TX, HFP_ASM_RX_TX},
-    [USECASE_VOICE_CALL] = {VOICE_CALL_PCM_DEVICE, VOICE_CALL_PCM_DEVICE},
+    [USECASE_AUDIO_RECORD] = {AUDIO_RECORD_PCM_DEVICE, AUDIO_RECORD_PCM_DEVICE,
+                             MSM_FRONTEND_DAI_MULTIMEDIA1, MSM_FRONTEND_DAI_MULTIMEDIA1},
+    [USECASE_AUDIO_RECORD2] = {AUDIO_RECORD_PCM_DEVICE, AUDIO_RECORD_PCM_DEVICE,
+                              MSM_FRONTEND_DAI_MULTIMEDIA1, MSM_FRONTEND_DAI_MULTIMEDIA1},
+    [USECASE_AUDIO_RECORD3] = {AUDIO_RECORD_PCM_DEVICE, AUDIO_RECORD_PCM_DEVICE,
+                              MSM_FRONTEND_DAI_MULTIMEDIA1, MSM_FRONTEND_DAI_MULTIMEDIA1},
+    [USECASE_AUDIO_RECORD_COMPRESS] = {COMPRESS_CAPTURE_DEVICE, COMPRESS_CAPTURE_DEVICE, -1, -1},
+    [USECASE_AUDIO_RECORD_COMPRESS2] = {COMPRESS_CAPTURE_DEVICE, COMPRESS_CAPTURE_DEVICE, -1, -1},
+    [USECASE_AUDIO_RECORD_COMPRESS3] = {-1, -1, -1, -1},
+    [USECASE_AUDIO_RECORD_COMPRESS4] = {-1, -1, -1, -1},
+    [USECASE_AUDIO_RECORD_COMPRESS5] = {-1, -1, -1, -1},
+    [USECASE_AUDIO_RECORD_COMPRESS6] = {-1, -1, -1, -1},
+    [USECASE_AUDIO_RECORD_LOW_LATENCY] = {LOWLATENCY_PCM_DEVICE, LOWLATENCY_PCM_DEVICE,
+                                         MSM_FRONTEND_DAI_VOICEMMODE2, MSM_FRONTEND_DAI_VOICEMMODE2},
+    [USECASE_AUDIO_RECORD_FM_VIRTUAL] = {MULTIMEDIA2_PCM_DEVICE, MULTIMEDIA2_PCM_DEVICE,
+                                        MSM_FRONTEND_DAI_MULTIMEDIA2, MSM_FRONTEND_DAI_MULTIMEDIA2},
+    [USECASE_AUDIO_RECORD_HIFI] = {MULTIMEDIA2_PCM_DEVICE, MULTIMEDIA2_PCM_DEVICE,
+                                  MSM_FRONTEND_DAI_MULTIMEDIA2, MSM_FRONTEND_DAI_MULTIMEDIA2},
+    [USECASE_AUDIO_PLAYBACK_FM] = {FM_PLAYBACK_PCM_DEVICE, FM_CAPTURE_PCM_DEVICE, -1, -1},
+    [USECASE_AUDIO_HFP_SCO] = {HFP_PCM_RX, HFP_SCO_RX,
+                              MSM_FRONTEND_DAI_MULTIMEDIA6, MSM_FRONTEND_DAI_MULTIMEDIA6},
+    [USECASE_AUDIO_HFP_SCO_WB] = {HFP_PCM_RX, HFP_SCO_RX,
+                                 MSM_FRONTEND_DAI_MULTIMEDIA6, MSM_FRONTEND_DAI_MULTIMEDIA6},
+    [USECASE_AUDIO_HFP_SCO_DOWNLINK] = {HFP_ASM_RX_TX, HFP_ASM_RX_TX,
+                                       MSM_FRONTEND_DAI_MULTIMEDIA21, MSM_FRONTEND_DAI_MULTIMEDIA21},
+    [USECASE_AUDIO_HFP_SCO_WB_DOWNLINK] = {HFP_ASM_RX_TX, HFP_ASM_RX_TX,
+                                          MSM_FRONTEND_DAI_MULTIMEDIA21, MSM_FRONTEND_DAI_MULTIMEDIA21},
+    [USECASE_VOICE_CALL] = {VOICE_CALL_PCM_DEVICE, VOICE_CALL_PCM_DEVICE, -1, -1},
     [USECASE_AUDIO_PLAYBACK_MMAP] = {MMAP_PLAYBACK_PCM_DEVICE,
-            MMAP_PLAYBACK_PCM_DEVICE},
+            MMAP_PLAYBACK_PCM_DEVICE, -1, -1},
     [USECASE_AUDIO_RECORD_MMAP] = {MMAP_RECORD_PCM_DEVICE,
-            MMAP_RECORD_PCM_DEVICE},
-    [USECASE_VOICE2_CALL] = {VOICE2_CALL_PCM_DEVICE, VOICE2_CALL_PCM_DEVICE},
-    [USECASE_VOLTE_CALL] = {VOLTE_CALL_PCM_DEVICE, VOLTE_CALL_PCM_DEVICE},
-    [USECASE_QCHAT_CALL] = {QCHAT_CALL_PCM_DEVICE, QCHAT_CALL_PCM_DEVICE},
-    [USECASE_VOWLAN_CALL] = {VOWLAN_CALL_PCM_DEVICE, VOWLAN_CALL_PCM_DEVICE},
+            MMAP_RECORD_PCM_DEVICE, -1, -1},
+    [USECASE_VOICE2_CALL] = {VOICE2_CALL_PCM_DEVICE, VOICE2_CALL_PCM_DEVICE, -1, -1},
+    [USECASE_VOLTE_CALL] = {VOLTE_CALL_PCM_DEVICE, VOLTE_CALL_PCM_DEVICE, -1, -1},
+    [USECASE_QCHAT_CALL] = {QCHAT_CALL_PCM_DEVICE, QCHAT_CALL_PCM_DEVICE, -1, -1},
+    [USECASE_VOWLAN_CALL] = {VOWLAN_CALL_PCM_DEVICE, VOWLAN_CALL_PCM_DEVICE, -1, -1},
     [USECASE_VOICEMMODE1_CALL] = {VOICEMMODE1_CALL_PCM_DEVICE,
-                                  VOICEMMODE1_CALL_PCM_DEVICE},
+                                  VOICEMMODE1_CALL_PCM_DEVICE, -1, -1},
     [USECASE_VOICEMMODE2_CALL] = {VOICEMMODE2_CALL_PCM_DEVICE,
-                                  VOICEMMODE2_CALL_PCM_DEVICE},
-    [USECASE_COMPRESS_VOIP_CALL] = {COMPRESS_VOIP_CALL_PCM_DEVICE, COMPRESS_VOIP_CALL_PCM_DEVICE},
-    [USECASE_INCALL_REC_UPLINK] = {AUDIO_RECORD_PCM_DEVICE,
-                                   AUDIO_RECORD_PCM_DEVICE},
-    [USECASE_INCALL_REC_DOWNLINK] = {AUDIO_RECORD_PCM_DEVICE,
-                                     AUDIO_RECORD_PCM_DEVICE},
-    [USECASE_INCALL_REC_UPLINK_AND_DOWNLINK] = {AUDIO_RECORD_PCM_DEVICE,
-                                                AUDIO_RECORD_PCM_DEVICE},
+                                  VOICEMMODE2_CALL_PCM_DEVICE, -1, -1},
+    [USECASE_COMPRESS_VOIP_CALL] = {COMPRESS_VOIP_CALL_PCM_DEVICE, COMPRESS_VOIP_CALL_PCM_DEVICE, -1, -1},
+    [USECASE_INCALL_REC_UPLINK] = {AUDIO_RECORD_PCM_DEVICE, AUDIO_RECORD_PCM_DEVICE,
+                                  MSM_FRONTEND_DAI_MULTIMEDIA1, MSM_FRONTEND_DAI_MULTIMEDIA1},
+    [USECASE_INCALL_REC_DOWNLINK] = {AUDIO_RECORD_PCM_DEVICE, AUDIO_RECORD_PCM_DEVICE,
+                                    MSM_FRONTEND_DAI_MULTIMEDIA1, MSM_FRONTEND_DAI_MULTIMEDIA1},
+    [USECASE_INCALL_REC_UPLINK_AND_DOWNLINK] = {AUDIO_RECORD_PCM_DEVICE, AUDIO_RECORD_PCM_DEVICE,
+                                               MSM_FRONTEND_DAI_MULTIMEDIA1, MSM_FRONTEND_DAI_MULTIMEDIA1},
     [USECASE_INCALL_REC_UPLINK_COMPRESS] = {COMPRESS_CAPTURE_DEVICE,
-                                            COMPRESS_CAPTURE_DEVICE},
+                                            COMPRESS_CAPTURE_DEVICE, -1, -1},
     [USECASE_INCALL_REC_DOWNLINK_COMPRESS] = {COMPRESS_CAPTURE_DEVICE,
-                                              COMPRESS_CAPTURE_DEVICE},
+                                              COMPRESS_CAPTURE_DEVICE, -1, -1},
     [USECASE_INCALL_REC_UPLINK_AND_DOWNLINK_COMPRESS] = {COMPRESS_CAPTURE_DEVICE,
-                                                         COMPRESS_CAPTURE_DEVICE},
+                                                         COMPRESS_CAPTURE_DEVICE, -1, -1},
     [USECASE_INCALL_MUSIC_UPLINK] = {INCALL_MUSIC_UPLINK_PCM_DEVICE,
-                                     INCALL_MUSIC_UPLINK_PCM_DEVICE},
+                                     INCALL_MUSIC_UPLINK_PCM_DEVICE,
+                                     MSM_FRONTEND_DAI_MULTIMEDIA2,
+                                     MSM_FRONTEND_DAI_MULTIMEDIA2},
     [USECASE_INCALL_MUSIC_UPLINK2] = {INCALL_MUSIC_UPLINK2_PCM_DEVICE,
-                                      INCALL_MUSIC_UPLINK2_PCM_DEVICE},
-    [USECASE_AUDIO_SPKR_CALIB_RX] = {SPKR_PROT_CALIB_RX_PCM_DEVICE, -1},
-    [USECASE_AUDIO_SPKR_CALIB_TX] = {-1, SPKR_PROT_CALIB_TX_PCM_DEVICE},
+                                      INCALL_MUSIC_UPLINK2_PCM_DEVICE, -1, -1},
+    [USECASE_AUDIO_SPKR_CALIB_RX] = {SPKR_PROT_CALIB_RX_PCM_DEVICE, -1, -1, -1},
+    [USECASE_AUDIO_SPKR_CALIB_TX] = {-1, SPKR_PROT_CALIB_TX_PCM_DEVICE, -1, -1},
 
     [USECASE_AUDIO_PLAYBACK_AFE_PROXY] = {AFE_PROXY_PLAYBACK_PCM_DEVICE,
-                                          AFE_PROXY_RECORD_PCM_DEVICE},
+                                          AFE_PROXY_RECORD_PCM_DEVICE, -1, -1},
     [USECASE_AUDIO_RECORD_AFE_PROXY] = {AFE_PROXY_PLAYBACK_PCM_DEVICE,
-                                        AFE_PROXY_RECORD_PCM_DEVICE},
+                                        AFE_PROXY_RECORD_PCM_DEVICE, -1, -1},
     [USECASE_AUDIO_RECORD_AFE_PROXY2] = {AFE_PROXY_RECORD2_PCM_DEVICE,
-                                        AFE_PROXY_RECORD2_PCM_DEVICE},
-    [USECASE_AUDIO_DSM_FEEDBACK] = {QUAT_MI2S_PCM_DEVICE, QUAT_MI2S_PCM_DEVICE},
-    [USECASE_AUDIO_PLAYBACK_SILENCE] = {MULTIMEDIA9_PCM_DEVICE, -1},
-    [USECASE_AUDIO_TRANSCODE_LOOPBACK_RX] = {TRANSCODE_LOOPBACK_RX_DEV_ID, -1},
-    [USECASE_AUDIO_TRANSCODE_LOOPBACK_TX] = {-1, TRANSCODE_LOOPBACK_TX_DEV_ID},
+                                        AFE_PROXY_RECORD2_PCM_DEVICE, -1, -1},
+    [USECASE_AUDIO_DSM_FEEDBACK] = {QUAT_MI2S_PCM_DEVICE, QUAT_MI2S_PCM_DEVICE, -1, -1},
+    [USECASE_AUDIO_PLAYBACK_SILENCE] = {MULTIMEDIA9_PCM_DEVICE, -1, -1, -1},
+    [USECASE_AUDIO_TRANSCODE_LOOPBACK_RX] = {TRANSCODE_LOOPBACK_RX_DEV_ID, -1, -1, -1},
+    [USECASE_AUDIO_TRANSCODE_LOOPBACK_TX] = {-1, TRANSCODE_LOOPBACK_TX_DEV_ID, -1, -1},
 
-    [USECASE_AUDIO_PLAYBACK_VOIP] = {AUDIO_PLAYBACK_VOIP_PCM_DEVICE, AUDIO_PLAYBACK_VOIP_PCM_DEVICE},
-    [USECASE_AUDIO_RECORD_VOIP] = {AUDIO_RECORD_VOIP_PCM_DEVICE, AUDIO_RECORD_VOIP_PCM_DEVICE},
-    [USECASE_AUDIO_RECORD_VOIP_LOW_LATENCY] = {LOWLATENCY_PCM_DEVICE, LOWLATENCY_PCM_DEVICE},
+    [USECASE_AUDIO_PLAYBACK_VOIP] = {AUDIO_PLAYBACK_VOIP_PCM_DEVICE, AUDIO_PLAYBACK_VOIP_PCM_DEVICE, -1, -1},
+    [USECASE_AUDIO_RECORD_VOIP] = {AUDIO_RECORD_VOIP_PCM_DEVICE, AUDIO_RECORD_VOIP_PCM_DEVICE, -1, -1},
+    [USECASE_AUDIO_RECORD_VOIP_LOW_LATENCY] = {LOWLATENCY_PCM_DEVICE, LOWLATENCY_PCM_DEVICE,
+                                              MSM_FRONTEND_DAI_VOICEMMODE2,
+                                              MSM_FRONTEND_DAI_VOICEMMODE2},
     [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM1] =
-                     {PLAYBACK_INTERACTIVE_STRM_DEVICE1, PLAYBACK_INTERACTIVE_STRM_DEVICE1},
+                     {PLAYBACK_INTERACTIVE_STRM_DEVICE1, PLAYBACK_INTERACTIVE_STRM_DEVICE1,
+                     MSM_FRONTEND_DAI_MULTIMEDIA1, MSM_FRONTEND_DAI_MULTIMEDIA1},
     [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM2] =
-                     {PLAYBACK_INTERACTIVE_STRM_DEVICE2, PLAYBACK_INTERACTIVE_STRM_DEVICE2},
+                     {PLAYBACK_INTERACTIVE_STRM_DEVICE2, PLAYBACK_INTERACTIVE_STRM_DEVICE2,
+                     MSM_FRONTEND_DAI_MULTIMEDIA2, MSM_FRONTEND_DAI_MULTIMEDIA2},
     [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM3] =
-                     {PLAYBACK_INTERACTIVE_STRM_DEVICE3, PLAYBACK_INTERACTIVE_STRM_DEVICE3},
+                     {PLAYBACK_INTERACTIVE_STRM_DEVICE3, PLAYBACK_INTERACTIVE_STRM_DEVICE3, -1, -1},
     [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM4] =
-                     {PLAYBACK_INTERACTIVE_STRM_DEVICE4, PLAYBACK_INTERACTIVE_STRM_DEVICE4},
+                     {PLAYBACK_INTERACTIVE_STRM_DEVICE4, PLAYBACK_INTERACTIVE_STRM_DEVICE4, -1, -1},
     [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM5] =
-                     {PLAYBACK_INTERACTIVE_STRM_DEVICE5, PLAYBACK_INTERACTIVE_STRM_DEVICE5},
+                     {PLAYBACK_INTERACTIVE_STRM_DEVICE5, PLAYBACK_INTERACTIVE_STRM_DEVICE5, -1, -1},
     [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM6] =
-                     {PLAYBACK_INTERACTIVE_STRM_DEVICE6, PLAYBACK_INTERACTIVE_STRM_DEVICE6},
+                     {PLAYBACK_INTERACTIVE_STRM_DEVICE6, PLAYBACK_INTERACTIVE_STRM_DEVICE6, -1, -1},
     [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM7] =
-                     {PLAYBACK_INTERACTIVE_STRM_DEVICE7, PLAYBACK_INTERACTIVE_STRM_DEVICE7},
+                     {PLAYBACK_INTERACTIVE_STRM_DEVICE7, PLAYBACK_INTERACTIVE_STRM_DEVICE7, -1, -1},
     [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM8] =
-                     {PLAYBACK_INTERACTIVE_STRM_DEVICE8, PLAYBACK_INTERACTIVE_STRM_DEVICE8},
+                     {PLAYBACK_INTERACTIVE_STRM_DEVICE8, PLAYBACK_INTERACTIVE_STRM_DEVICE8, -1, -1},
     [USECASE_AUDIO_EC_REF_LOOPBACK] = {-1, -1}, /* pcm id updated from platform info file */
-    [USECASE_AUDIO_PLAYBACK_MEDIA] = {MEDIA_PCM_DEVICE,
-                                      MEDIA_PCM_DEVICE},
-    [USECASE_AUDIO_PLAYBACK_SYS_NOTIFICATION] = {SYS_NOTIFICATION_PCM_DEVICE,
-                                                 SYS_NOTIFICATION_PCM_DEVICE},
-    [USECASE_AUDIO_PLAYBACK_NAV_GUIDANCE] = {NAV_GUIDANCE_PCM_DEVICE,
-                                             NAV_GUIDANCE_PCM_DEVICE},
-    [USECASE_AUDIO_PLAYBACK_PHONE] = {PHONE_PCM_DEVICE,
-                                      PHONE_PCM_DEVICE},
-    [USECASE_AUDIO_PLAYBACK_ALERTS] = {ALERTS_PCM_DEVICE,
-                                      ALERTS_PCM_DEVICE},
-    [USECASE_AUDIO_PLAYBACK_FRONT_PASSENGER] = {FRONT_PASSENGER_PCM_DEVICE,
-                                                FRONT_PASSENGER_PCM_DEVICE},
-    [USECASE_AUDIO_PLAYBACK_REAR_SEAT] = {REAR_SEAT_PCM_DEVICE,
-                                          REAR_SEAT_PCM_DEVICE},
-    [USECASE_AUDIO_FM_TUNER_EXT] = {-1, -1},
-    [USECASE_ICC_CALL] = {ICC_PCM_DEVICE, ICC_PCM_DEVICE},
+    [USECASE_AUDIO_PLAYBACK_MEDIA] = {MEDIA_PCM_DEVICE, MEDIA_PCM_DEVICE,
+                                     MSM_FRONTEND_DAI_MULTIMEDIA1, MSM_FRONTEND_DAI_MULTIMEDIA1},
+    [USECASE_AUDIO_PLAYBACK_SYS_NOTIFICATION] = {SYS_NOTIFICATION_PCM_DEVICE, SYS_NOTIFICATION_PCM_DEVICE,
+                                                MSM_FRONTEND_DAI_MULTIMEDIA5, MSM_FRONTEND_DAI_MULTIMEDIA5},
+    [USECASE_AUDIO_PLAYBACK_NAV_GUIDANCE] = {NAV_GUIDANCE_PCM_DEVICE, NAV_GUIDANCE_PCM_DEVICE,
+                                            MSM_FRONTEND_DAI_MULTIMEDIA2, MSM_FRONTEND_DAI_MULTIMEDIA2},
+    [USECASE_AUDIO_PLAYBACK_PHONE] = {PHONE_PCM_DEVICE, PHONE_PCM_DEVICE,
+                                     MSM_FRONTEND_DAI_MULTIMEDIA10, MSM_FRONTEND_DAI_MULTIMEDIA10},
+    [USECASE_AUDIO_PLAYBACK_ALERTS] = {ALERTS_PCM_DEVICE, ALERTS_PCM_DEVICE,
+                                      MSM_FRONTEND_DAI_MULTIMEDIA31, MSM_FRONTEND_DAI_MULTIMEDIA31},
+    [USECASE_AUDIO_PLAYBACK_FRONT_PASSENGER] = {FRONT_PASSENGER_PCM_DEVICE, FRONT_PASSENGER_PCM_DEVICE,
+                                               MSM_FRONTEND_DAI_MULTIMEDIA23, MSM_FRONTEND_DAI_MULTIMEDIA23},
+    [USECASE_AUDIO_PLAYBACK_REAR_SEAT] = {REAR_SEAT_PCM_DEVICE, REAR_SEAT_PCM_DEVICE,
+                                         MSM_FRONTEND_DAI_MULTIMEDIA22, MSM_FRONTEND_DAI_MULTIMEDIA22},
+    [USECASE_AUDIO_FM_TUNER_EXT] = {-1, -1, -1, -1},
+    [USECASE_ICC_CALL] = {ICC_PCM_DEVICE, ICC_PCM_DEVICE,
+                         MSM_FRONTEND_DAI_MULTIMEDIA9, MSM_FRONTEND_DAI_MULTIMEDIA9},
 
-    [USECASE_AUDIO_RECORD_BUS] = {AUDIO_RECORD_PCM_DEVICE, AUDIO_RECORD_PCM_DEVICE},
-    [USECASE_AUDIO_RECORD_BUS_FRONT_PASSENGER] = {FRONT_PASSENGER_PCM_DEVICE, FRONT_PASSENGER_PCM_DEVICE},
-    [USECASE_AUDIO_RECORD_BUS_REAR_SEAT] = {REAR_SEAT_PCM_DEVICE, REAR_SEAT_PCM_DEVICE},
-    [USECASE_AUDIO_PLAYBACK_SYNTHESIZER] = {-1, -1},
-    [USECASE_AUDIO_RECORD_ECHO_REF_EXT] = {MULTIMEDIA2_PCM_DEVICE, MULTIMEDIA2_PCM_DEVICE},
+    [USECASE_AUDIO_RECORD_BUS] = {AUDIO_RECORD_PCM_DEVICE, AUDIO_RECORD_PCM_DEVICE,
+                                 MSM_FRONTEND_DAI_MULTIMEDIA1, MSM_FRONTEND_DAI_MULTIMEDIA1},
+    [USECASE_AUDIO_RECORD_BUS_FRONT_PASSENGER] = {FRONT_PASSENGER_PCM_DEVICE, FRONT_PASSENGER_PCM_DEVICE,
+                                                 MSM_FRONTEND_DAI_MULTIMEDIA23, MSM_FRONTEND_DAI_MULTIMEDIA23},
+    [USECASE_AUDIO_RECORD_BUS_REAR_SEAT] = {REAR_SEAT_PCM_DEVICE, REAR_SEAT_PCM_DEVICE,
+                                           MSM_FRONTEND_DAI_MULTIMEDIA22, MSM_FRONTEND_DAI_MULTIMEDIA22},
+    [USECASE_AUDIO_PLAYBACK_SYNTHESIZER] = {-1, -1, -1, -1},
+    [USECASE_AUDIO_RECORD_ECHO_REF_EXT] = {MULTIMEDIA2_PCM_DEVICE, MULTIMEDIA2_PCM_DEVICE,
+                                          MSM_FRONTEND_DAI_MULTIMEDIA2, MSM_FRONTEND_DAI_MULTIMEDIA2},
 };
 
 /* Array to store sound devices */
@@ -3726,6 +3768,12 @@
             ALOGE("%s: Could not find the symbol acdb_send_audio_cal_v4 from %s",
                   __func__, LIB_ACDB_LOADER);
 
+        my_data->acdb_send_audio_cal_v6 = (acdb_send_audio_cal_v6_t)dlsym(my_data->acdb_handle,
+                                                    "acdb_loader_send_audio_cal_v6");
+        if (!my_data->acdb_send_audio_cal_v6)
+            ALOGE("%s: Could not find the symbol acdb_send_audio_cal_v6 from %s",
+                  __func__, LIB_ACDB_LOADER);
+
         my_data->acdb_set_audio_cal = (acdb_set_audio_cal_t)dlsym(my_data->acdb_handle,
                                                     "acdb_loader_set_audio_cal_v2");
         if (!my_data->acdb_set_audio_cal)
@@ -4746,6 +4794,20 @@
     return device_id;
 }
 
+int platform_get_fe_id(audio_usecase_t usecase, int device_type)
+{
+    int fe_id = -1;
+
+    if ((usecase >= AUDIO_USECASE_MAX) || (usecase <= USECASE_INVALID)) {
+        ALOGE("%s: invalid usecase case idx %d", __func__, usecase);
+        return fe_id;
+    }
+
+    fe_id = pcm_device_table[usecase][device_type+FE_ID_TABLE_INDEX];
+
+    return fe_id;
+}
+
 uint64_t getQtime()
 {
     uint64_t qTimerCount = 0;
@@ -5583,10 +5645,10 @@
                                     int app_type)
 {
     struct platform_data *my_data = (struct platform_data *)platform;
-    int acdb_dev_id, acdb_dev_type;
+    int acdb_dev_id, acdb_dev_type, path;
     int snd_device = SND_DEVICE_OUT_SPEAKER;
     int new_snd_device[SND_DEVICE_OUT_END] = {0};
-    int i, num_devices = 1;
+    int i, num_devices = 1, fe_id = -1;
     bool is_incall_rec_usecase = false;
     snd_device_t incall_rec_device;
     int sample_rate = DEFAULT_OUTPUT_SAMPLING_RATE;
@@ -5699,9 +5761,16 @@
         else
             acdb_dev_type = ACDB_DEV_TYPE_IN;
 
-        if (my_data->acdb_send_audio_cal_v4) {
+        path = acdb_dev_type-1;
+        fe_id = platform_get_fe_id(usecase->id, path);
+
+        if (my_data->acdb_send_audio_cal_v6 && (fe_id != -1) ) {
+            my_data->acdb_send_audio_cal_v6(acdb_dev_id, acdb_dev_type,
+                                            app_type, sample_rate, fe_id,
+                                            backend_cfg.sample_rate, CAL_MODE_SEND, CAL_OFFSET_ASM_TOP);
+        } else if (my_data->acdb_send_audio_cal_v4) {
             my_data->acdb_send_audio_cal_v4(acdb_dev_id, acdb_dev_type,
-                                            app_type, sample_rate, i,
+                                            app_type, sample_rate, path,
                                             backend_cfg.sample_rate);
         } else if (my_data->acdb_send_audio_cal_v3) {
             my_data->acdb_send_audio_cal_v3(acdb_dev_id, acdb_dev_type,
@@ -10916,7 +10985,7 @@
     return be_dai_id;
 }
 
-int platform_set_usecase_pcm_id(audio_usecase_t usecase, int32_t type, int32_t pcm_id)
+int platform_set_usecase_pcm_id(audio_usecase_t usecase, int32_t type, int32_t pcm_id, int32_t fe_id)
 {
     int ret = 0;
     if ((usecase <= USECASE_INVALID) || (usecase >= AUDIO_USECASE_MAX)) {
@@ -10931,6 +11000,10 @@
     }
     ALOGV("%s: pcm_device_table[%d][%d] = %d", __func__, usecase, type, pcm_id);
     pcm_device_table[usecase][type] = pcm_id;
+
+    ALOGV("%s: pcm_device_table[%d][%d] = %d", __func__, usecase, type+2, fe_id);
+    pcm_device_table[usecase][type+FE_ID_TABLE_INDEX] = fe_id;
+
 done:
     return ret;
 }
diff --git a/hal/msm8974/platform.h b/hal/msm8974/platform.h
index 089e437..2b4191f 100644
--- a/hal/msm8974/platform.h
+++ b/hal/msm8974/platform.h
@@ -864,4 +864,60 @@
     char interface_name[100];
 };
 
+enum {
+    MSM_FRONTEND_DAI_MULTIMEDIA1 = 0,
+    MSM_FRONTEND_DAI_MULTIMEDIA2,
+    MSM_FRONTEND_DAI_MULTIMEDIA3,
+    MSM_FRONTEND_DAI_MULTIMEDIA4,
+    MSM_FRONTEND_DAI_MULTIMEDIA5,
+    MSM_FRONTEND_DAI_MULTIMEDIA6,
+    MSM_FRONTEND_DAI_MULTIMEDIA7,
+    MSM_FRONTEND_DAI_MULTIMEDIA8,
+    MSM_FRONTEND_DAI_MULTIMEDIA9,
+    MSM_FRONTEND_DAI_MULTIMEDIA10,
+    MSM_FRONTEND_DAI_MULTIMEDIA11,
+    MSM_FRONTEND_DAI_MULTIMEDIA12,
+    MSM_FRONTEND_DAI_MULTIMEDIA13,
+    MSM_FRONTEND_DAI_MULTIMEDIA14,
+    MSM_FRONTEND_DAI_MULTIMEDIA15,
+    MSM_FRONTEND_DAI_MULTIMEDIA16,
+    MSM_FRONTEND_DAI_MULTIMEDIA17,
+    MSM_FRONTEND_DAI_MULTIMEDIA18,
+    MSM_FRONTEND_DAI_MULTIMEDIA19,
+    MSM_FRONTEND_DAI_MULTIMEDIA20,
+    MSM_FRONTEND_DAI_MULTIMEDIA21,
+    MSM_FRONTEND_DAI_MULTIMEDIA22,
+    MSM_FRONTEND_DAI_MULTIMEDIA23,
+    MSM_FRONTEND_DAI_MULTIMEDIA24,
+    MSM_FRONTEND_DAI_MULTIMEDIA25,
+    MSM_FRONTEND_DAI_MULTIMEDIA26,
+    MSM_FRONTEND_DAI_MULTIMEDIA27,
+    MSM_FRONTEND_DAI_MULTIMEDIA28,
+    MSM_FRONTEND_DAI_MULTIMEDIA29,
+    MSM_FRONTEND_DAI_MULTIMEDIA30,
+    MSM_FRONTEND_DAI_MULTIMEDIA31,
+    MSM_FRONTEND_DAI_MULTIMEDIA32,
+    MSM_FRONTEND_DAI_MULTIMEDIA33,
+    MSM_FRONTEND_DAI_MULTIMEDIA34,
+    MSM_FRONTEND_DAI_VOIP,
+    MSM_FRONTEND_DAI_AFE_RX,
+    MSM_FRONTEND_DAI_AFE_TX,
+    MSM_FRONTEND_DAI_VOICE_STUB,
+    MSM_FRONTEND_DAI_DTMF_RX,
+    MSM_FRONTEND_DAI_QCHAT,
+    MSM_FRONTEND_DAI_VOLTE_STUB,
+    MSM_FRONTEND_DAI_LSM1,
+    MSM_FRONTEND_DAI_LSM2,
+    MSM_FRONTEND_DAI_LSM3,
+    MSM_FRONTEND_DAI_LSM4,
+    MSM_FRONTEND_DAI_LSM5,
+    MSM_FRONTEND_DAI_LSM6,
+    MSM_FRONTEND_DAI_LSM7,
+    MSM_FRONTEND_DAI_LSM8,
+    MSM_FRONTEND_DAI_VOICE2_STUB,
+    MSM_FRONTEND_DAI_VOICEMMODE1,
+    MSM_FRONTEND_DAI_VOICEMMODE2,
+    MSM_FRONTEND_DAI_MAX,
+};
+
 #endif // QCOM_AUDIO_PLATFORM_H
diff --git a/hal/platform_api.h b/hal/platform_api.h
old mode 100755
new mode 100644
index 1d40a86..d789494
--- a/hal/platform_api.h
+++ b/hal/platform_api.h
@@ -307,7 +307,7 @@
 bool platform_check_and_set_capture_codec_backend_cfg(struct audio_device* adev,
                    struct audio_usecase *usecase, snd_device_t snd_device);
 int platform_get_usecase_index(const char * usecase);
-int platform_set_usecase_pcm_id(audio_usecase_t usecase, int32_t type, int32_t pcm_id);
+int platform_set_usecase_pcm_id(audio_usecase_t usecase, int32_t type, int32_t pcm_id, int32_t fe_id);
 void platform_set_echo_reference(struct audio_device *adev, bool enable,
                                  struct listnode *out_devices);
 int platform_check_and_set_swap_lr_channels(struct audio_device *adev, bool swap_channels);
diff --git a/hal/platform_info.c b/hal/platform_info.c
index de7f187..d9aabbf 100644
--- a/hal/platform_info.c
+++ b/hal/platform_info.c
@@ -389,11 +389,18 @@
         goto done;
     }
 
-    int id = atoi((char *)attr[5]);
+    int pcm_id = atoi((char *)attr[5]);
 
-    if (platform_set_usecase_pcm_id(index, type, id) < 0) {
-        ALOGE("%s: usecase %s type %d id %d was not set!",
-              __func__, attr[1], type, id);
+    if (strcmp(attr[6], "fe") != 0) {
+        ALOGE("%s: fe id not mentioned", __func__);
+        goto done;
+    }
+
+    int fe_id = atoi((char *)attr[7]);
+
+    if (platform_set_usecase_pcm_id(index, type, pcm_id, fe_id) < 0) {
+        ALOGE("%s: usecase %s type %d pcm_id %d fe_id %d was not set!",
+              __func__, attr[1], type, pcm_id, fe_id);
         goto done;
     }