HAL: Add synth enablement control

Add synth enablement control, create hostless loopback for synth playback case

Change-Id: I0d4da24975e2fe7f28f30adba1a604c85451eeaa
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
old mode 100644
new mode 100755
index 7f4e2b4..041d1aa
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -528,6 +528,7 @@
     [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},
 };
 
 /* Array to store sound devices */
@@ -640,6 +641,7 @@
     [SND_DEVICE_OUT_CALL_PROXY] = "call-proxy",
     [SND_DEVICE_OUT_HAPTICS] = "haptics",
     [SND_DEVICE_OUT_ICC] = "bus-speaker",
+    [SND_DEVICE_OUT_SYNTH_SPKR] = "bus-speaker",
 
     /* Capture sound devices */
     [SND_DEVICE_IN_HANDSET_MIC] = "handset-mic",
@@ -792,6 +794,7 @@
     [SND_DEVICE_IN_HANDSET_8MIC_AND_EC_REF_LOOPBACK] = "handset-8mic-and-ec-ref-loopback",
     [SND_DEVICE_IN_CALL_PROXY] = "call-proxy-in",
     [SND_DEVICE_IN_ICC] = "speaker-mic",
+    [SND_DEVICE_IN_SYNTH_MIC] = "speaker-mic",
 };
 
 // Platform specific backend bit width table
@@ -938,6 +941,7 @@
     [SND_DEVICE_OUT_CALL_PROXY] = 32,
     [SND_DEVICE_OUT_HAPTICS] = 200,
     [SND_DEVICE_OUT_ICC] = 16,
+    [SND_DEVICE_OUT_SYNTH_SPKR] = 134,
     [SND_DEVICE_IN_HANDSET_MIC] = 4,
     [SND_DEVICE_IN_HANDSET_MIC_SB] = 163,
     [SND_DEVICE_IN_HANDSET_MIC_NN] = 183,
@@ -1080,6 +1084,7 @@
     [SND_DEVICE_IN_BUS_RSE] = 11,
     [SND_DEVICE_IN_CALL_PROXY] = 33,
     [SND_DEVICE_IN_ICC] = 46,
+    [SND_DEVICE_IN_SYNTH_MIC] = 11,
 };
 
 struct name_to_index {
@@ -1342,6 +1347,8 @@
     /* ICC */
     {TO_NAME_INDEX(SND_DEVICE_IN_ICC)},
     {TO_NAME_INDEX(SND_DEVICE_OUT_ICC)},
+    {TO_NAME_INDEX(SND_DEVICE_OUT_SYNTH_SPKR)},
+    {TO_NAME_INDEX(SND_DEVICE_IN_SYNTH_MIC)},
 };
 
 static char * backend_tag_table[SND_DEVICE_MAX] = {0};
@@ -1417,6 +1424,7 @@
     {TO_NAME_INDEX(USECASE_AUDIO_RECORD_BUS)},
     {TO_NAME_INDEX(USECASE_AUDIO_RECORD_BUS_FRONT_PASSENGER)},
     {TO_NAME_INDEX(USECASE_AUDIO_RECORD_BUS_REAR_SEAT)},
+    {TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_SYNTHESIZER)},
 };
 
 static const struct name_to_index usecase_type_index[USECASE_TYPE_MAX] = {
@@ -2637,6 +2645,8 @@
     hw_interface_table[SND_DEVICE_IN_CALL_PROXY] = strdup("CALL_PROXY_TX");
     hw_interface_table[SND_DEVICE_IN_ICC] = strdup("TERT_TDM_TX_0");
     hw_interface_table[SND_DEVICE_OUT_ICC] = strdup("TERT_TDM_RX_0");
+    hw_interface_table[SND_DEVICE_OUT_SYNTH_SPKR] = strdup("TERT_TDM_RX_0");
+    hw_interface_table[SND_DEVICE_IN_SYNTH_MIC] = strdup("TERT_TDM_TX_0");
     my_data->max_mic_count = PLATFORM_DEFAULT_MIC_COUNT;
 
      /*remove ALAC & APE from DSP decoder list based on software decoder availability*/
@@ -5426,7 +5436,7 @@
     else if ((usecase->type == PCM_CAPTURE) && is_incall_rec_usecase)
         snd_device = voice_get_incall_rec_snd_device(usecase->in_snd_device);
     else if ((usecase->type == PCM_HFP_CALL) || (usecase->type == PCM_CAPTURE)||
-            (usecase->type == ICC_CALL))
+            (usecase->type == ICC_CALL) || (usecase->type == SYNTH_LOOPBACK))
         snd_device = usecase->in_snd_device;
     else if (usecase->type == TRANSCODE_LOOPBACK_RX)
         snd_device = usecase->out_snd_device;
@@ -5450,7 +5460,8 @@
             new_snd_device[0] = snd_device;
         }
     }
-    if (((usecase->type == PCM_HFP_CALL) || (usecase->type == ICC_CALL)) &&
+    if (((usecase->type == PCM_HFP_CALL) || (usecase->type == ICC_CALL) ||
+         (usecase->type == SYNTH_LOOPBACK)) &&
           is_bus_dev_usecase) {
         num_devices = 2;
         new_snd_device[0] = usecase->in_snd_device;
@@ -5475,7 +5486,8 @@
         if ((usecase->type == PCM_CAPTURE) && (app_type == DEFAULT_APP_TYPE_RX_PATH)) {
             ALOGD("Resetting app type for Tx path to default");
             app_type  = DEFAULT_APP_TYPE_TX_PATH;
-        } else if (((usecase->type == PCM_HFP_CALL) || (usecase->type == ICC_CALL)) &&
+        } else if (((usecase->type == PCM_HFP_CALL) || (usecase->type == ICC_CALL) ||
+                    (usecase->type == SYNTH_LOOPBACK)) &&
                      is_bus_dev_usecase) {
             if (new_snd_device[i] >= SND_DEVICE_OUT_BEGIN &&
                 new_snd_device[i] < SND_DEVICE_OUT_END) {