Merge "hal: Add separate backend for headset-mic"
diff --git a/configs/msmnile/audio_platform_info.xml b/configs/msmnile/audio_platform_info.xml
index 9761f99..df2f46d 100644
--- a/configs/msmnile/audio_platform_info.xml
+++ b/configs/msmnile/audio_platform_info.xml
@@ -145,6 +145,12 @@
         <device name="SND_DEVICE_OUT_VOICE_TTY_VCO_HEADPHONES" backend="headphones" interface="SLIMBUS_6_RX"/>
         <device name="SND_DEVICE_OUT_SPEAKER_AND_BT_SCO" backend="speaker-and-bt-sco" interface="SLIMBUS_0_RX-and-SLIMBUS_7_RX"/>
         <device name="SND_DEVICE_OUT_SPEAKER_AND_BT_SCO_WB" backend="speaker-and-bt-sco-wb" interface="SLIMBUS_0_RX-and-SLIMBUS_7_RX"/>
+        <device name="SND_DEVICE_IN_HEADSET_MIC" backend="headset-mic" interface="SLIMBUS_1_TX"/>
+        <device name="SND_DEVICE_IN_HEADSET_MIC_FLUENCE" backend="headset-mic" interface="SLIMBUS_1_TX"/>
+        <device name="SND_DEVICE_IN_VOICE_HEADSET_MIC" backend="headset-mic" interface="SLIMBUS_1_TX"/>
+        <device name="SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC" backend="headset-mic" interface="SLIMBUS_1_TX"/>
+        <device name="SND_DEVICE_IN_VOICE_TTY_HCO_HEADSET_MIC" backend="headset-mic" interface="SLIMBUS_1_TX"/>
+        <device name="SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC" backend="headset-mic" interface="SLIMBUS_1_TX"/>
     </backend_names>
     <!-- below values are for ref purpose to OEM, doesn't contain actual hardware info on MTP -->
     <microphone_characteristics>
diff --git a/configs/msmnile/mixer_paths_tavil.xml b/configs/msmnile/mixer_paths_tavil.xml
index 6104fbe..a684cc0 100644
--- a/configs/msmnile/mixer_paths_tavil.xml
+++ b/configs/msmnile/mixer_paths_tavil.xml
@@ -1383,6 +1383,10 @@
         <ctl name="MultiMedia1 Mixer SLIM_0_TX" value="1" />
     </path>
 
+    <path name="audio-record headset-mic">
+        <ctl name="MultiMedia1 Mixer SLIM_1_TX" value="1" />
+    </path>
+
     <path name="audio-record usb-headset-mic">
         <ctl name="MultiMedia1 Mixer USB_AUDIO_TX" value="1" />
     </path>
@@ -1421,6 +1425,27 @@
         <ctl name="MultiMedia17 Mixer SLIM_0_TX" value="1" />
     </path>
 
+    <path name="audio-record-compress2 headset-mic">
+        <ctl name="MultiMedia17 Mixer SLIM_1_TX" value="1" />
+    </path>
+
+    <path name="audio-record-compress2 usb-headset-mic">
+        <ctl name="MultiMedia17 Mixer USB_AUDIO_TX" value="1" />
+    </path>
+
+    <path name="audio-record-compress2 bt-sco">
+        <ctl name="MultiMedia17 Mixer SLIM_7_TX" value="1" />
+    </path>
+
+    <path name="audio-record-compress2 bt-sco-wb">
+        <ctl name="BT SampleRate" value="KHZ_16" />
+        <path name="audio-record-compress2 bt-sco" />
+    </path>
+
+    <path name="audio-record-compress2">
+        <ctl name="MultiMedia17 Mixer SLIM_0_TX" value="1" />
+    </path>
+
     <path name="audio-record-compress2 usb-headset-mic">
         <ctl name="MultiMedia17 Mixer USB_AUDIO_TX" value="1" />
     </path>
@@ -1817,12 +1842,12 @@
     </path>
 
     <path name="amic2">
-        <ctl name="AIF1_CAP Mixer SLIM TX0" value="1"/>
-        <ctl name="SLIM_0_TX Channels" value="One" />
-        <ctl name="CDC_IF TX0 MUX" value="DEC0" />
-        <ctl name="ADC MUX0" value="AMIC" />
-        <ctl name="AMIC MUX0" value="ADC2" />
-        <ctl name="IIR0 INP0 MUX" value="DEC0" />
+        <ctl name="AIF3_CAP Mixer SLIM TX1" value="1"/>
+        <ctl name="SLIM_1_TX Channels" value="One" />
+        <ctl name="CDC_IF TX1 MUX" value="DEC1" />
+        <ctl name="ADC MUX1" value="AMIC" />
+        <ctl name="AMIC MUX1" value="ADC2" />
+        <ctl name="IIR0 INP0 MUX" value="DEC1" />
     </path>
 
     <!-- For Tavil, DMIC numbered from 0 to 5 -->
diff --git a/hal/Android.mk b/hal/Android.mk
index 3f82b97..eac6636 100644
--- a/hal/Android.mk
+++ b/hal/Android.mk
@@ -333,6 +333,10 @@
     LOCAL_SRC_FILES += audio_extn/compress_in.c
 endif
 
+ifeq ($(strip $(AUDIO_FEATURE_ENABLED_CONCURRENT_CAPTURE)),true)
+    LOCAL_CFLAGS += -DCONCURRENT_CAPTURE_ENABLED
+endif
+
 ifeq ($(strip $(BOARD_SUPPORTS_QAHW)),true)
     LOCAL_CFLAGS += -DAUDIO_HW_EXTN_API_ENABLED
     LOCAL_SRC_FILES += audio_hw_extn_api.c
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index 1ebffba..9eb1dc2 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -2959,6 +2959,14 @@
             strdup("SLIM_6_RX Format");
         my_data->current_backend_cfg[HEADPHONE_BACKEND].samplerate_mixer_ctl =
             strdup("SLIM_6_RX SampleRate");
+        //TODO: enable CONCURRENT_CAPTURE_ENABLED flag only if separate backend is defined
+        //for headset-mic. This is to capture separate data from headset-mic and handset-mic.
+#ifdef CONCURRENT_CAPTURE_ENABLED
+        my_data->current_backend_cfg[HEADSET_TX_BACKEND].bitwidth_mixer_ctl =
+            strdup("SLIM_1_RX Format");
+        my_data->current_backend_cfg[HEADSET_TX_BACKEND].samplerate_mixer_ctl =
+            strdup("SLIM_1_RX SampleRate");
+#endif
     }
 
     my_data->current_backend_cfg[USB_AUDIO_TX_BACKEND].bitwidth_mixer_ctl =
@@ -3876,6 +3884,8 @@
                         port = HDMI_TX_BACKEND;
                 else if (strcmp(backend_tag_table[snd_device], "hdmi-arc-in") == 0)
                         port = HDMI_ARC_TX_BACKEND;
+                else if (strcmp(backend_tag_table[snd_device], "headset-mic") == 0)
+                        port = HEADSET_TX_BACKEND;
         }
     } else {
         ALOGW("%s:napb: Invalid device - %d ", __func__, snd_device);
diff --git a/hal/msm8974/platform.h b/hal/msm8974/platform.h
index 78470fd..8aa3e3c 100644
--- a/hal/msm8974/platform.h
+++ b/hal/msm8974/platform.h
@@ -67,10 +67,15 @@
  * All these devices are handled by the internal HW codec. We can
  * enable any one of these devices at any time
  */
+#ifdef CONCURRENT_CAPTURE_ENABLED
+#define AUDIO_DEVICE_IN_ALL_CODEC_BACKEND \
+    (AUDIO_DEVICE_IN_BUILTIN_MIC | AUDIO_DEVICE_IN_BACK_MIC | \
+     AUDIO_DEVICE_IN_VOICE_CALL) & ~AUDIO_DEVICE_BIT_IN
+#else
 #define AUDIO_DEVICE_IN_ALL_CODEC_BACKEND \
     (AUDIO_DEVICE_IN_BUILTIN_MIC | AUDIO_DEVICE_IN_BACK_MIC | \
      AUDIO_DEVICE_IN_WIRED_HEADSET | AUDIO_DEVICE_IN_VOICE_CALL) & ~AUDIO_DEVICE_BIT_IN
-
+#endif
 /* Sound devices specific to the platform
  * The DEVICE_OUT_* and DEVICE_IN_* should be mapped to these sound
  * devices to enable corresponding mixer paths
@@ -306,6 +311,7 @@
     SPDIF_TX_BACKEND,
     HDMI_TX_BACKEND,
     HDMI_ARC_TX_BACKEND,
+    HEADSET_TX_BACKEND,
     MAX_CODEC_BACKENDS
 };