hal: Add support for QCHAT call

Define PCM device IDs and mixer controls for
QCHAT call for both internal and external
codec target.

CRs-Fixed: 1033324
Change-Id: I6ee6ce04e076377d31b9182905d28d4ea46ba229
diff --git a/configs/msm8937/audio_platform_info_extcodec.xml b/configs/msm8937/audio_platform_info_extcodec.xml
index 1fceb8e..fa38c4f 100644
--- a/configs/msm8937/audio_platform_info_extcodec.xml
+++ b/configs/msm8937/audio_platform_info_extcodec.xml
@@ -48,6 +48,8 @@
         <usecase name="USECASE_VOICEMMODE2_CALL" type="in" id="36"/>
         <usecase name="USECASE_VOICEMMODE2_CALL" type="out" id="36"/>
         <usecase name="USECASE_AUDIO_SPKR_CALIB_TX" type="in" id="37"/>
+        <usecase name="USECASE_QCHAT_CALL" type="in" id="42"/>
+        <usecase name="USECASE_QCHAT_CALL" type="out" id="42"/>
     </pcm_ids>
     <config_params>
         <param key="spkr_1_tz_name" value="wsatz.11"/>
diff --git a/configs/msm8937/mixer_paths_wcd9326.xml b/configs/msm8937/mixer_paths_wcd9326.xml
index 963dfea..8bd3ef6 100644
--- a/configs/msm8937/mixer_paths_wcd9326.xml
+++ b/configs/msm8937/mixer_paths_wcd9326.xml
@@ -455,6 +455,9 @@
     <ctl name="QCHAT_Tx Mixer SLIM_0_TX_QCHAT" value="0" />
     <ctl name="INTERNAL_BT_SCO_RX_Voice Mixer QCHAT" value="0" />
     <ctl name="QCHAT_Tx Mixer INTERNAL_BT_SCO_TX_QCHAT" value="0" />
+    <ctl name="HDMI_RX_Voice Mixer QCHAT" value="0" />
+    <ctl name="AFE_PCM_RX_Voice Mixer QCHAT" value="0" />
+    <ctl name="QCHAT_Tx Mixer AFE_PCM_TX_QCHAT" value="0" />
     <!-- QCHAT end-->
 
     <!-- VoWLAN start -->
@@ -1567,6 +1570,46 @@
         <path name="compress-voip-call"/>
     </path>
 
+    <path name="qchat-call">
+        <ctl name="SLIM_0_RX_Voice Mixer QCHAT" value="1" />
+        <ctl name="QCHAT_Tx Mixer SLIM_0_TX_QCHAT" value="1" />
+    </path>
+
+    <path name="qchat-call bt-sco">
+        <ctl name="INTERNAL_BT_SCO_RX_Voice Mixer QCHAT" value="1" />
+        <ctl name="QCHAT_Tx Mixer INTERNAL_BT_SCO_TX_QCHAT" value="1" />
+    </path>
+
+    <path name="qchat-call bt-sco-wb">
+        <ctl name="Internal BTSCO SampleRate" value="BTSCO_RATE_16KHZ" />
+        <path name="qchat-call bt-sco" />
+    </path>
+
+    <path name="qchat-call headphones">
+        <ctl name="SLIM_6_RX_Voice Mixer QCHAT" value="1" />
+        <ctl name="QCHAT_Tx Mixer SLIM_0_TX_QCHAT" value="1" />
+    </path>
+
+    <path name="qchat-call hdmi">
+        <ctl name="HDMI_RX_Voice Mixer QCHAT" value="1" />
+        <ctl name="QCHAT_Tx Mixer SLIM_0_TX_QCHAT" value="1" />
+    </path>
+
+    <path name="qchat-call afe-proxy">
+        <ctl name="AFE_PCM_RX_Voice Mixer QCHAT" value="1" />
+        <ctl name="QCHAT_Tx Mixer AFE_PCM_TX_QCHAT" value="1" />
+    </path>
+
+    <path name="qchat-call usb-headphones">
+        <ctl name="AFE_PCM_RX_Voice Mixer QCHAT" value="1" />
+        <ctl name="QCHAT_Tx Mixer AFE_PCM_TX_QCHAT" value="1" />
+    </path>
+
+    <path name="qchat-call vbat-voice-speaker">
+        <path name="echo-reference vbat-speaker-mono" />
+        <path name="qchat-call"/>
+    </path>
+
     <path name="vowlan-call">
         <ctl name="SLIM_0_RX_Voice Mixer VoWLAN" value="1" />
         <ctl name="VoWLAN_Tx Mixer SLIM_0_TX_VoWLAN" value="1" />
diff --git a/configs/msm8937/mixer_paths_wcd9335.xml b/configs/msm8937/mixer_paths_wcd9335.xml
index e579d40..95e1f41 100644
--- a/configs/msm8937/mixer_paths_wcd9335.xml
+++ b/configs/msm8937/mixer_paths_wcd9335.xml
@@ -460,6 +460,9 @@
     <ctl name="QCHAT_Tx Mixer SLIM_0_TX_QCHAT" value="0" />
     <ctl name="INTERNAL_BT_SCO_RX_Voice Mixer QCHAT" value="0" />
     <ctl name="QCHAT_Tx Mixer INTERNAL_BT_SCO_TX_QCHAT" value="0" />
+    <ctl name="HDMI_RX_Voice Mixer QCHAT" value="0" />
+    <ctl name="AFE_PCM_RX_Voice Mixer QCHAT" value="0" />
+    <ctl name="QCHAT_Tx Mixer AFE_PCM_TX_QCHAT" value="0" />
     <!-- QCHAT end-->
 
     <!-- VoWLAN start -->
@@ -1586,6 +1589,46 @@
         <path name="compress-voip-call"/>
     </path>
 
+    <path name="qchat-call">
+        <ctl name="SLIM_0_RX_Voice Mixer QCHAT" value="1" />
+        <ctl name="QCHAT_Tx Mixer SLIM_0_TX_QCHAT" value="1" />
+    </path>
+
+    <path name="qchat-call bt-sco">
+        <ctl name="INTERNAL_BT_SCO_RX_Voice Mixer QCHAT" value="1" />
+        <ctl name="QCHAT_Tx Mixer INTERNAL_BT_SCO_TX_QCHAT" value="1" />
+    </path>
+
+    <path name="qchat-call bt-sco-wb">
+        <ctl name="Internal BTSCO SampleRate" value="BTSCO_RATE_16KHZ" />
+        <path name="qchat-call bt-sco" />
+    </path>
+
+    <path name="qchat-call headphones">
+        <ctl name="SLIM_6_RX_Voice Mixer QCHAT" value="1" />
+        <ctl name="QCHAT_Tx Mixer SLIM_0_TX_QCHAT" value="1" />
+    </path>
+
+    <path name="qchat-call hdmi">
+        <ctl name="HDMI_RX_Voice Mixer QCHAT" value="1" />
+        <ctl name="QCHAT_Tx Mixer SLIM_0_TX_QCHAT" value="1" />
+    </path>
+
+    <path name="qchat-call afe-proxy">
+        <ctl name="AFE_PCM_RX_Voice Mixer QCHAT" value="1" />
+        <ctl name="QCHAT_Tx Mixer AFE_PCM_TX_QCHAT" value="1" />
+    </path>
+
+    <path name="qchat-call usb-headphones">
+        <ctl name="AFE_PCM_RX_Voice Mixer QCHAT" value="1" />
+        <ctl name="QCHAT_Tx Mixer AFE_PCM_TX_QCHAT" value="1" />
+    </path>
+
+    <path name="qchat-call vbat-voice-speaker">
+        <path name="echo-reference vbat-speaker-mono" />
+        <path name="qchat-call"/>
+    </path>
+
     <path name="vowlan-call">
         <ctl name="SLIM_0_RX_Voice Mixer VoWLAN" value="1" />
         <ctl name="VoWLAN_Tx Mixer SLIM_0_TX_VoWLAN" value="1" />
diff --git a/configs/msm8953/audio_platform_info_extcodec.xml b/configs/msm8953/audio_platform_info_extcodec.xml
index d06c6be..cf68190 100644
--- a/configs/msm8953/audio_platform_info_extcodec.xml
+++ b/configs/msm8953/audio_platform_info_extcodec.xml
@@ -47,6 +47,8 @@
         <usecase name="USECASE_VOICEMMODE1_CALL" type="out" id="35"/>
         <usecase name="USECASE_VOICEMMODE2_CALL" type="in" id="36"/>
         <usecase name="USECASE_VOICEMMODE2_CALL" type="out" id="36"/>
+        <usecase name="USECASE_QCHAT_CALL" type="in" id="42"/>
+        <usecase name="USECASE_QCHAT_CALL" type="out" id="42"/>
     </pcm_ids>
     <config_params>
         <param key="native_audio_mode" value="src"/>
diff --git a/configs/msm8953/mixer_paths_wcd9326.xml b/configs/msm8953/mixer_paths_wcd9326.xml
index 836610b..bf974cb 100644
--- a/configs/msm8953/mixer_paths_wcd9326.xml
+++ b/configs/msm8953/mixer_paths_wcd9326.xml
@@ -458,6 +458,9 @@
     <ctl name="QCHAT_Tx Mixer SLIM_0_TX_QCHAT" value="0" />
     <ctl name="INTERNAL_BT_SCO_RX_Voice Mixer QCHAT" value="0" />
     <ctl name="QCHAT_Tx Mixer INTERNAL_BT_SCO_TX_QCHAT" value="0" />
+    <ctl name="HDMI_RX_Voice Mixer QCHAT" value="0" />
+    <ctl name="AFE_PCM_RX_Voice Mixer QCHAT" value="0" />
+    <ctl name="QCHAT_Tx Mixer AFE_PCM_TX_QCHAT" value="0" />
     <!-- QCHAT end-->
 
     <!-- VoWLAN start -->
@@ -1570,6 +1573,46 @@
         <path name="compress-voip-call"/>
     </path>
 
+    <path name="qchat-call">
+        <ctl name="SLIM_0_RX_Voice Mixer QCHAT" value="1" />
+        <ctl name="QCHAT_Tx Mixer SLIM_0_TX_QCHAT" value="1" />
+    </path>
+
+    <path name="qchat-call bt-sco">
+        <ctl name="INTERNAL_BT_SCO_RX_Voice Mixer QCHAT" value="1" />
+        <ctl name="QCHAT_Tx Mixer INTERNAL_BT_SCO_TX_QCHAT" value="1" />
+    </path>
+
+    <path name="qchat-call bt-sco-wb">
+        <ctl name="Internal BTSCO SampleRate" value="BTSCO_RATE_16KHZ" />
+        <path name="qchat-call bt-sco" />
+    </path>
+
+    <path name="qchat-call headphones">
+        <ctl name="SLIM_6_RX_Voice Mixer QCHAT" value="1" />
+        <ctl name="QCHAT_Tx Mixer SLIM_0_TX_QCHAT" value="1" />
+    </path>
+
+    <path name="qchat-call hdmi">
+        <ctl name="HDMI_RX_Voice Mixer QCHAT" value="1" />
+        <ctl name="QCHAT_Tx Mixer SLIM_0_TX_QCHAT" value="1" />
+    </path>
+
+    <path name="qchat-call afe-proxy">
+        <ctl name="AFE_PCM_RX_Voice Mixer QCHAT" value="1" />
+        <ctl name="QCHAT_Tx Mixer AFE_PCM_TX_QCHAT" value="1" />
+    </path>
+
+    <path name="qchat-call usb-headphones">
+        <ctl name="AFE_PCM_RX_Voice Mixer QCHAT" value="1" />
+        <ctl name="QCHAT_Tx Mixer AFE_PCM_TX_QCHAT" value="1" />
+    </path>
+
+    <path name="qchat-call vbat-voice-speaker">
+        <path name="echo-reference vbat-speaker-mono" />
+        <path name="qchat-call"/>
+    </path>
+
     <path name="vowlan-call">
         <ctl name="SLIM_0_RX_Voice Mixer VoWLAN" value="1" />
         <ctl name="VoWLAN_Tx Mixer SLIM_0_TX_VoWLAN" value="1" />
diff --git a/configs/msm8953/mixer_paths_wcd9335.xml b/configs/msm8953/mixer_paths_wcd9335.xml
index 657198f..1eb65b9 100644
--- a/configs/msm8953/mixer_paths_wcd9335.xml
+++ b/configs/msm8953/mixer_paths_wcd9335.xml
@@ -462,6 +462,9 @@
     <ctl name="QCHAT_Tx Mixer SLIM_0_TX_QCHAT" value="0" />
     <ctl name="INTERNAL_BT_SCO_RX_Voice Mixer QCHAT" value="0" />
     <ctl name="QCHAT_Tx Mixer INTERNAL_BT_SCO_TX_QCHAT" value="0" />
+    <ctl name="HDMI_RX_Voice Mixer QCHAT" value="0" />
+    <ctl name="AFE_PCM_RX_Voice Mixer QCHAT" value="0" />
+    <ctl name="QCHAT_Tx Mixer AFE_PCM_TX_QCHAT" value="0" />
     <!-- QCHAT end-->
 
     <!-- VoWLAN start -->
@@ -1588,6 +1591,46 @@
         <path name="compress-voip-call"/>
     </path>
 
+    <path name="qchat-call">
+        <ctl name="SLIM_0_RX_Voice Mixer QCHAT" value="1" />
+        <ctl name="QCHAT_Tx Mixer SLIM_0_TX_QCHAT" value="1" />
+    </path>
+
+    <path name="qchat-call bt-sco">
+        <ctl name="INTERNAL_BT_SCO_RX_Voice Mixer QCHAT" value="1" />
+        <ctl name="QCHAT_Tx Mixer INTERNAL_BT_SCO_TX_QCHAT" value="1" />
+    </path>
+
+    <path name="qchat-call bt-sco-wb">
+        <ctl name="Internal BTSCO SampleRate" value="BTSCO_RATE_16KHZ" />
+        <path name="qchat-call bt-sco" />
+    </path>
+
+    <path name="qchat-call headphones">
+        <ctl name="SLIM_6_RX_Voice Mixer QCHAT" value="1" />
+        <ctl name="QCHAT_Tx Mixer SLIM_0_TX_QCHAT" value="1" />
+    </path>
+
+    <path name="qchat-call hdmi">
+        <ctl name="HDMI_RX_Voice Mixer QCHAT" value="1" />
+        <ctl name="QCHAT_Tx Mixer SLIM_0_TX_QCHAT" value="1" />
+    </path>
+
+    <path name="qchat-call afe-proxy">
+        <ctl name="AFE_PCM_RX_Voice Mixer QCHAT" value="1" />
+        <ctl name="QCHAT_Tx Mixer AFE_PCM_TX_QCHAT" value="1" />
+    </path>
+
+    <path name="qchat-call usb-headphones">
+        <ctl name="AFE_PCM_RX_Voice Mixer QCHAT" value="1" />
+        <ctl name="QCHAT_Tx Mixer AFE_PCM_TX_QCHAT" value="1" />
+    </path>
+
+    <path name="qchat-call vbat-voice-speaker">
+        <path name="echo-reference vbat-speaker-mono" />
+        <path name="qchat-call"/>
+    </path>
+
     <path name="vowlan-call">
         <ctl name="SLIM_0_RX_Voice Mixer VoWLAN" value="1" />
         <ctl name="VoWLAN_Tx Mixer SLIM_0_TX_VoWLAN" value="1" />
diff --git a/hal/msm8916/platform.c b/hal/msm8916/platform.c
index 64475a3..90b98ef 100644
--- a/hal/msm8916/platform.c
+++ b/hal/msm8916/platform.c
@@ -254,12 +254,6 @@
 };
 
 static bool is_external_codec = false;
-static const int pcm_device_table_of_ext_codec[AUDIO_USECASE_MAX][2] = {
-   [USECASE_QCHAT_CALL] = {QCHAT_CALL_PCM_DEVICE_OF_EXT_CODEC, QCHAT_CALL_PCM_DEVICE_OF_EXT_CODEC}
-};
-
-/* List of use cases that has different PCM device ID's for internal and external codecs */
-static const int misc_usecase[AUDIO_USECASE_MAX] = { USECASE_QCHAT_CALL };
 
 int pcm_device_table[AUDIO_USECASE_MAX][2] = {
     [USECASE_AUDIO_PLAYBACK_DEEP_BUFFER] = {DEEP_BUFFER_PCM_DEVICE,
@@ -774,20 +768,6 @@
 #define PCM_OFFLOAD_PLATFORM_DELAY (30*1000LL)
 #define LOW_LATENCY_PLATFORM_DELAY (13*1000LL)
 
-static bool is_misc_usecase(audio_usecase_t usecase) {
-     bool ret = false;
-     int i;
-
-     for (i = 0; i < AUDIO_USECASE_MAX; i++) {
-          if(usecase == misc_usecase[i]) {
-             ret = true;
-             break;
-          }
-     }
-     return ret;
-}
-
-
 static void update_codec_type(const char *snd_card_name) {
 
      if (!strncmp(snd_card_name, "msm8939-tapan-snd-card",
@@ -2097,17 +2077,10 @@
 {
     int device_id = -1;
 
-    if (is_external_codec && is_misc_usecase(usecase)) {
-        if (device_type == PCM_PLAYBACK)
-            device_id = pcm_device_table_of_ext_codec[usecase][0];
-        else
-            device_id = pcm_device_table_of_ext_codec[usecase][1];
-    } else {
-        if (device_type == PCM_PLAYBACK)
-            device_id = pcm_device_table[usecase][0];
-        else
-            device_id = pcm_device_table[usecase][1];
-    }
+    if (device_type == PCM_PLAYBACK)
+        device_id = pcm_device_table[usecase][0];
+    else
+        device_id = pcm_device_table[usecase][1];
     return device_id;
 }
 
diff --git a/hal/msm8916/platform.h b/hal/msm8916/platform.h
index 7c877b5..756c749 100644
--- a/hal/msm8916/platform.h
+++ b/hal/msm8916/platform.h
@@ -302,8 +302,7 @@
 #define VOICE_CALL_PCM_DEVICE 2
 #define VOICE2_CALL_PCM_DEVICE 13
 #define VOLTE_CALL_PCM_DEVICE 15
-#define QCHAT_CALL_PCM_DEVICE 26
-#define QCHAT_CALL_PCM_DEVICE_OF_EXT_CODEC 28
+#define QCHAT_CALL_PCM_DEVICE 37
 #define VOWLAN_CALL_PCM_DEVICE 16
 
 #define AFE_PROXY_PLAYBACK_PCM_DEVICE 7