Merge "configs: Enable sorting for the paths in utils script"
diff --git a/configs/common/base/mixer_paths_base.xml b/configs/common/base/mixer_paths_base.xml
old mode 100644
new mode 100755
index 8055744..3d96c7f
--- a/configs/common/base/mixer_paths_base.xml
+++ b/configs/common/base/mixer_paths_base.xml
@@ -458,6 +458,7 @@
     <ctl name="RX INT2_1 VBAT RX AUX VBAT Enable" value="0"/>
     <ctl name="MultiMedia16 Mixer SLIM_8_TX" value="0"/>
     <ctl name="RX_CDC_DMA_RX_1 Audio Mixer MultiMedia31" value="0"/>
+    <path name="speaker-and-haptics"/>
     <path name="gsm-mode">
         <ctl name="GSM mode Enable" value="ON"/>
     </path>
diff --git a/configs/common/mixer_xml_utils.py b/configs/common/mixer_xml_utils.py
index 5920afd..d8f5581 100755
--- a/configs/common/mixer_xml_utils.py
+++ b/configs/common/mixer_xml_utils.py
@@ -56,6 +56,7 @@
 
 
 def xml_to_map(xml_node, root_key=None, map=None, node_level=0):
+    """Given xml node, generate map(dict)"""
     if not map:
         map = dict()
     if not root_key:
@@ -69,6 +70,16 @@
     return map
 
 
+def get_mixer_map(super_root):
+    for node in super_root:
+        mixer = node
+    mixer_map = dict()
+    for node in mixer:
+        node_key = gen_xml_string(node)
+        mixer_map[node_key] = node
+    return mixer_map
+
+
 def get_key_for_node_only(xml_node, level):
     """ Given xml node ,generate unique based on (node, node atrributes, node depth) only"""
     attr_str = ''
@@ -118,11 +129,12 @@
 
 
 def gen_xml_string(xml_node, level=0):
+    """Generate xml string for a given xml node with good indentation"""
     s = '<' + xml_node.tag + ' '
     if xml_node.attrib:
         for at_name in ATTRIBUTE_ORDER:
-            at_value = xml_node.attrib.get(at_name, "ZEBRAA")
-            if at_value != "ZEBRAA":
+            at_value = xml_node.attrib.get(at_name, "ZEBRAAAA")
+            if at_value != "ZEBRAAAA":
                 s += at_name + '=\"' + at_value + '\" '
     space_str = ''
     for i in range(level):
@@ -214,19 +226,14 @@
 def mixer_extract_overlay(super_base, super_mixer):
     for child in super_mixer:
         mixer = child
-    base_map = xml_to_map(super_base, map=None)
-    # print_map(base_map)
-    level = 0
-    current_key = get_key_for_node_only(
-        super_mixer, level) + '->' + get_key_for_node_only(mixer, level + 1)
-    level += 1
+    base_map = get_mixer_map(super_base)
     new_mixer = get_copy_xml_node(mixer)
     super_root = get_copy_xml_node(super_mixer)
     super_root.append(new_mixer)
     for xml_child in mixer:
-        if not _mixer_extract_overlay(xml_child, current_key, base_map,
-                                      level + 1):
-            # print(xml_child.tag, xml_child.attrib)
+        xml_child_key = gen_xml_string(xml_child)
+        node_elem=base_map.get(xml_child_key, False)
+        if not isinstance(node_elem,ET.Element):
             child_copy = copy_full_node(xml_child)
             new_mixer.append(child_copy)
     return super_root
@@ -243,12 +250,13 @@
             return False
     return True
 
+
 def seperate_ctl_path(super_root):
     for child in super_root:
-        mixer=child
-    path_nodes=list()
+        mixer = child
+    path_nodes = list()
     for child in mixer:
-        if child.tag=='path':
+        if child.tag == 'path':
             path_nodes.append(child)
     for path_node in path_nodes:
         mixer.remove(path_node)
@@ -256,12 +264,13 @@
         mixer.append(path_node)
     return super_root
 
+
 def mixer_combine(super_base, super_overlay):
     super_base = copy_full_node(super_base)
     super_overlay = copy_full_node(super_overlay)
 
-    super_base=seperate_ctl_path(super_base)
-    super_overlay=seperate_ctl_path(super_overlay)
+    super_base = seperate_ctl_path(super_base)
+    super_overlay = seperate_ctl_path(super_overlay)
 
     for child in super_base:
         base = child
@@ -285,6 +294,7 @@
     for i in range(overlay_ctl_len, len(overlay)):
         base.append(overlay[i])
     super_base = override_tag(super_base)
+    super_base = sort_tag_depend(super_base)
     return super_base
 
 
@@ -314,6 +324,72 @@
     return super_combined
 
 
+def sort_tag_depend(super_root):
+    for node in super_root:
+        mixer = node
+    dep_map = dict()
+    sub_node_list = list()
+    start_flag = True
+    start = 0
+    path_start = 0
+    all_nodes_map = dict()
+    for sub_node in mixer:
+        start += 1
+        sub_node_list.append(sub_node)
+        if sub_node.tag == "ctl":
+            continue
+        if start_flag:
+            path_start = start
+            start_flag = False
+        key = sub_node.tag+":"+"name=" + \
+            sub_node.attrib.get("name", str(None)) + "id=" + \
+            sub_node.attrib.get("id", str(None))
+        dep_list = list()
+        all_nodes_map[key] = sub_node
+        for child in sub_node:
+            if child.tag == "ctl":
+                continue
+            dep_list.append(child)
+        if len(dep_list) != 0:
+            dep_map[key] = dep_list
+        else:
+            dep_map[key] = True
+    # print("path_start:"+str(path_start))
+    ctl_list = sub_node_list[0:path_start]
+    path_list = sub_node_list[path_start:]
+    new_path_list = _sort_tag_depend(
+        all_nodes_map, path_list, dep_map, new_path_list=None)
+    full_list = ctl_list+new_path_list
+    mixer.clear()
+    for node in full_list:
+        mixer.append(node)
+    return super_root
+
+
+def _sort_tag_depend(all_nodes_map, path_list, dep_map, new_path_list=None):
+    if new_path_list is None:
+        new_path_list = list()
+
+    for sub_node in path_list:
+        key = sub_node.tag+":"+"name=" + \
+            sub_node.attrib.get("name", str(None))+"id=" + \
+            sub_node.attrib.get("id", str(None))
+        res = dep_map.get(key, False)
+        req_node = all_nodes_map.get(key, 0)
+        if req_node == 0:
+            print(gen_xml_string(sub_node))
+            print("Error in ordering the mixer tags")
+        if res == True:
+            new_path_list.append(req_node)
+        elif res == False:
+            continue
+        else:
+            _sort_tag_depend(all_nodes_map, res, dep_map, new_path_list)
+            new_path_list.append(req_node)
+        dep_map[key] = False
+    return new_path_list
+
+
 def is_xmls_good(files):
     try:
         for file_name in files:
@@ -527,6 +603,24 @@
     return flag
 
 
+def checker_v3(node1, node2):
+    for node in node1:
+        mixer1 = node
+    for node in node2:
+        mixer2 = node
+    map2 = dict()
+    for sub_node in mixer2:
+        key = gen_xml_string(sub_node)
+        map2[key] = True
+    flag = True
+    for sub_node in mixer1:
+        key = gen_xml_string(sub_node)
+        if not map2.get(key, False):
+            print(key)
+            flag = False
+    return flag
+
+
 def check(args):
     if args.file:
         if not os.path.isfile(args.file):
@@ -535,10 +629,10 @@
         return
     f1 = open_xml_root(args.file1)
     f2 = open_xml_root(args.file2)
-    if check_mixer_equivalent(f1, f2):
+    if checker_v3(f1, f2):
         print('file1 <= file2')
     print("=======================================================")
-    if check_mixer_equivalent(f2, f1):
+    if checker_v3(f2, f1):
         print('file2 <= file1')
     return
 
diff --git a/configs/holi/holi.mk b/configs/holi/holi.mk
index c6b10ff..bca59d2 100755
--- a/configs/holi/holi.mk
+++ b/configs/holi/holi.mk
@@ -6,16 +6,18 @@
 AUDIO_USE_STUB_HAL := true
 endif
 endif
-##mixer xml generation
-#BASE_PATH := vendor/qcom/opensource/audio-hal/primary-hal/configs/common/base
-#OVERLAY_PATH := vendor/qcom/opensource/audio-hal/primary-hal/configs/holi/holi_overlay
-#TARGET_PATH := vendor/qcom/opensource/audio-hal/primary-hal/configs/holi
-#SCRIPT := vendor/qcom/opensource/audio-hal/primary-hal/configs/common/mixer_xml_utils.py
 
-#$(shell python $(SCRIPT) --generate combine --base $(BASE_PATH)/mixer_paths_base.xml --overlay $(OVERLAY_PATH)/mixer_paths_overlay.xml $(OVERLAY_PATH)/mixer_paths_qrd_overlay.xml $(OVERLAY_PATH)/mixer_paths_usbc_overlay.xml --out_dir $(TARGET_PATH) --out mixer_paths.xml mixer_paths_qrd.xml mixer_paths_usbc.xml )
+#mixer xml generation
+BASE_PATH := vendor/qcom/opensource/audio-hal/primary-hal/configs/common/base
+OVERLAY_PATH := vendor/qcom/opensource/audio-hal/primary-hal/configs/holi/holi_overlay
+TARGET_PATH := vendor/qcom/opensource/audio-hal/primary-hal/configs/holi
+SCRIPT := vendor/qcom/opensource/audio-hal/primary-hal/configs/common/mixer_xml_utils.py
 
-#$(shell python $(SCRIPT) --generate combine --base $(BASE_PATH)/sound_trigger_mixer_paths_base.xml --overlay $(OVERLAY_PATH)/sound_trigger_mixer_paths_overlay.xml $(OVERLAY_PATH)/sound_trigger_mixer_paths_qrd_overlay.xml $(OVERLAY_PATH)/sound_trigger_mixer_paths_usbc_overlay.xml --out_dir $(TARGET_PATH) --out sound_trigger_mixer_paths.xml sound_trigger_mixer_paths_qrd.xml sound_trigger_mixer_paths_usbc.xml )
-##
+$(shell python $(SCRIPT) --generate combine --base $(BASE_PATH)/mixer_paths_base.xml --overlay $(OVERLAY_PATH)/mixer_paths_overlay.xml $(OVERLAY_PATH)/mixer_paths_qrd_overlay.xml $(OVERLAY_PATH)/mixer_paths_usbc_overlay.xml --out_dir $(TARGET_PATH) --out mixer_paths.xml mixer_paths_qrd.xml mixer_paths_usbc.xml )
+
+$(shell python $(SCRIPT) --generate combine --base $(BASE_PATH)/sound_trigger_mixer_paths_base.xml --overlay $(OVERLAY_PATH)/sound_trigger_mixer_paths_overlay.xml $(OVERLAY_PATH)/sound_trigger_mixer_paths_qrd_overlay.xml $(OVERLAY_PATH)/sound_trigger_mixer_paths_usbc_overlay.xml --out_dir $(TARGET_PATH) --out sound_trigger_mixer_paths.xml sound_trigger_mixer_paths_qrd.xml sound_trigger_mixer_paths_usbc.xml )
+#
+
 ifneq ($(AUDIO_USE_STUB_HAL), true)
 BOARD_USES_ALSA_AUDIO := true
 TARGET_USES_AOSP_FOR_AUDIO := false
diff --git a/configs/holi/holi_overlay/mixer_paths_qrd_overlay.xml b/configs/holi/holi_overlay/mixer_paths_qrd_overlay.xml
index 4b30af6..835d6fb 100644
--- a/configs/holi/holi_overlay/mixer_paths_qrd_overlay.xml
+++ b/configs/holi/holi_overlay/mixer_paths_qrd_overlay.xml
@@ -248,6 +248,9 @@
     <path name="handset-mic">
         <path name="amic3"/>
     </path>
+    <path name="headphones-44.1">
+        <path name="headphones"/>
+    </path>
     <path name="hph-highquality-mode">
         <ctl name="RX_HPH_PWR_MODE" value="LOHIFI"/>
         <ctl name="RX HPH Mode" value="CLS_H_LOHIFI"/>
@@ -291,6 +294,10 @@
     <path name="speaker-dmic-broadside">
         <path name="speaker-dmic-endfire"/>
     </path>
+    <path name="voice-tty-full-headset-mic">
+        <path name="amic2"/>
+        <ctl name="ADC2 Volume" value="0"/>
+    </path>
     <path name="voice-tty-hco-headset-mic">
         <path name="voice-tty-full-headset-mic"/>
     </path>
diff --git a/configs/holi/holi_overlay/mixer_paths_usbc_overlay.xml b/configs/holi/holi_overlay/mixer_paths_usbc_overlay.xml
index 8d001f8..f0eb264 100644
--- a/configs/holi/holi_overlay/mixer_paths_usbc_overlay.xml
+++ b/configs/holi/holi_overlay/mixer_paths_usbc_overlay.xml
@@ -144,6 +144,19 @@
     <path name="spkr-rx-calib">
         <ctl name="RX_CDC_DMA_RX_1_DL_HL Switch" value="1"/>
     </path>
+    <path name="amic2">
+        <ctl name="TX DEC0 MUX" value="SWR_MIC"/>
+        <ctl name="TX SMIC MUX0" value="SWR_MIC1"/>
+        <ctl name="TX_CDC_DMA_TX_4 Channels" value="One"/>
+        <ctl name="TX_AIF2_CAP Mixer DEC0" value="1"/>
+        <ctl name="DEC0_BCS Switch" value="1"/>
+        <ctl name="ADC2_MIXER Switch" value="1"/>
+        <ctl name="ADC2 MUX" value="INP2"/>
+        <ctl name="ADC2 ChMap" value="SWRM_TX1_CH2"/>
+        <ctl name="MBHC ChMap" value="SWRM_TX2_CH3"/>
+        <ctl name="BCS Channel" value="CH6"/>
+        <ctl name="HDR12 MUX" value="NO_HDR12"/>
+    </path>
     <path name="speaker">
         <ctl name="RX_CDC_DMA_RX_1 Channels" value="One"/>
         <ctl name="RX_MACRO RX2 MUX" value="AIF2_PB"/>
diff --git a/configs/lahaina/lahaina.mk b/configs/lahaina/lahaina.mk
index 14efb45..a2d7e0b 100755
--- a/configs/lahaina/lahaina.mk
+++ b/configs/lahaina/lahaina.mk
@@ -6,16 +6,18 @@
 AUDIO_USE_STUB_HAL := true
 endif
 endif
-##mixer xml generation
-#BASE_PATH := vendor/qcom/opensource/audio-hal/primary-hal/configs/common/base
-#OVERLAY_PATH := vendor/qcom/opensource/audio-hal/primary-hal/configs/lahaina/shima_overlay
-#TARGET_PATH := vendor/qcom/opensource/audio-hal/primary-hal/configs/lahaina
-#SCRIPT := vendor/qcom/opensource/audio-hal/primary-hal/configs/common/mixer_xml_utils.py
 
-#$(shell python $(SCRIPT) --generate combine --base $(BASE_PATH)/mixer_paths_base.xml --overlay $(OVERLAY_PATH)/mixer_paths_shimaidp_overlay.xml $(OVERLAY_PATH)/mixer_paths_shimaidps_overlay.xml $(OVERLAY_PATH)/mixer_paths_shimaqrd_overlay.xml --out_dir $(TARGET_PATH) --out mixer_paths_shimaidp.xml mixer_paths_shimaidps.xml mixer_paths_shimaqrd.xml )
+#mixer xml generation
+BASE_PATH := vendor/qcom/opensource/audio-hal/primary-hal/configs/common/base
+OVERLAY_PATH := vendor/qcom/opensource/audio-hal/primary-hal/configs/lahaina/shima_overlay
+TARGET_PATH := vendor/qcom/opensource/audio-hal/primary-hal/configs/lahaina
+SCRIPT := vendor/qcom/opensource/audio-hal/primary-hal/configs/common/mixer_xml_utils.py
 
-#$(shell python $(SCRIPT) --generate combine --base $(BASE_PATH)/sound_trigger_mixer_paths_base.xml --overlay $(OVERLAY_PATH)/sound_trigger_mixer_paths_shimaidp_overlay.xml $(OVERLAY_PATH)/sound_trigger_mixer_paths_shimaidps_overlay.xml $(OVERLAY_PATH)/sound_trigger_mixer_paths_shimaqrd_overlay.xml --out_dir $(TARGET_PATH) --out sound_trigger_mixer_paths_shimaidp.xml sound_trigger_mixer_paths_shimaidps.xml sound_trigger_mixer_paths_shimaqrd.xml )
-##
+$(shell python $(SCRIPT) --generate combine --base $(BASE_PATH)/mixer_paths_base.xml --overlay $(OVERLAY_PATH)/mixer_paths_shimaidp_overlay.xml $(OVERLAY_PATH)/mixer_paths_shimaidps_overlay.xml $(OVERLAY_PATH)/mixer_paths_shimaqrd_overlay.xml --out_dir $(TARGET_PATH) --out mixer_paths_shimaidp.xml mixer_paths_shimaidps.xml mixer_paths_shimaqrd.xml )
+
+$(shell python $(SCRIPT) --generate combine --base $(BASE_PATH)/sound_trigger_mixer_paths_base.xml --overlay $(OVERLAY_PATH)/sound_trigger_mixer_paths_shimaidp_overlay.xml $(OVERLAY_PATH)/sound_trigger_mixer_paths_shimaidps_overlay.xml $(OVERLAY_PATH)/sound_trigger_mixer_paths_shimaqrd_overlay.xml --out_dir $(TARGET_PATH) --out sound_trigger_mixer_paths_shimaidp.xml sound_trigger_mixer_paths_shimaidps.xml sound_trigger_mixer_paths_shimaqrd.xml )
+#
+
 ifneq ($(AUDIO_USE_STUB_HAL), true)
 BOARD_USES_ALSA_AUDIO := true
 TARGET_USES_AOSP_FOR_AUDIO := false
diff --git a/configs/lahaina/mixer_paths_shimaidp.xml b/configs/lahaina/mixer_paths_shimaidp.xml
index 1f775f9..d43d437 100755
--- a/configs/lahaina/mixer_paths_shimaidp.xml
+++ b/configs/lahaina/mixer_paths_shimaidp.xml
@@ -498,6 +498,7 @@
     <ctl name="TX3 MODE" value="ADC_LP" />
 
     <!-- These are audio route (FE to BE) specific mixer settings -->
+    <path name="speaker-and-haptics"/>
     <path name="gsm-mode">
         <ctl name="GSM mode Enable" value="ON" />
     </path>
diff --git a/configs/lahaina/shima_overlay/mixer_paths_shimaidps_overlay.xml b/configs/lahaina/shima_overlay/mixer_paths_shimaidps_overlay.xml
index cfe9bb8..ea6d898 100644
--- a/configs/lahaina/shima_overlay/mixer_paths_shimaidps_overlay.xml
+++ b/configs/lahaina/shima_overlay/mixer_paths_shimaidps_overlay.xml
@@ -48,6 +48,13 @@
     <path name="incall-rec-downlink">
         <ctl name="MultiMedia9 Mixer VOC_REC_DL" value="1"/>
     </path>
+    <path name="amic1">
+        <ctl name="TX DEC1 MUX" value="SWR_MIC"/>
+        <ctl name="TX SMIC MUX1" value="SWR_MIC0"/>
+        <ctl name="TX_AIF1_CAP Mixer DEC1" value="1"/>
+        <ctl name="ADC1_MIXER Switch" value="1"/>
+        <ctl name="ADC1 ChMap" value="SWRM_TX1_CH1"/>
+    </path>
     <path name="amic2">
         <ctl name="TX DEC0 MUX" value="SWR_MIC"/>
         <ctl name="TX SMIC MUX0" value="SWR_MIC1"/>
@@ -61,6 +68,15 @@
         <ctl name="BCS Channel" value="CH2"/>
         <ctl name="HDR12 MUX" value="NO_HDR12"/>
     </path>
+    <path name="amic3">
+        <ctl name="TX DEC1 MUX" value="SWR_MIC"/>
+        <ctl name="TX SMIC MUX1" value="SWR_MIC1"/>
+        <ctl name="TX_AIF1_CAP Mixer DEC1" value="1"/>
+        <ctl name="ADC2_MIXER Switch" value="1"/>
+        <ctl name="ADC2 MUX" value="INP3"/>
+        <ctl name="ADC2 ChMap" value="SWRM_TX1_CH2"/>
+        <ctl name="HDR12 MUX" value="NO_HDR12"/>
+    </path>
     <path name="amic4">
         <ctl name="TX DEC1 MUX" value="SWR_MIC"/>
         <ctl name="TX SMIC MUX1" value="SWR_MIC2"/>
@@ -142,6 +158,10 @@
         <ctl name="HPHL_RDAC Switch" value="1"/>
         <ctl name="HPHR_RDAC Switch" value="1"/>
     </path>
+    <path name="headset-mic">
+        <path name="amic2"/>
+        <ctl name="TX_DEC0 Volume" value="84"/>
+    </path>
     <path name="handset-dmic-endfire">
         <ctl name="TX_CDC_DMA_TX_3 Channels" value="Two"/>
         <ctl name="TX_AIF1_CAP Mixer DEC1" value="1"/>
diff --git a/configs/lahaina/shima_overlay/mixer_paths_shimaqrd_overlay.xml b/configs/lahaina/shima_overlay/mixer_paths_shimaqrd_overlay.xml
old mode 100644
new mode 100755
index d85a784..3a7926c
--- a/configs/lahaina/shima_overlay/mixer_paths_shimaqrd_overlay.xml
+++ b/configs/lahaina/shima_overlay/mixer_paths_shimaqrd_overlay.xml
@@ -47,7 +47,7 @@
     <ctl name="TX_DEC1 Volume" value="96"/>
     <ctl name="TX_DEC2 Volume" value="96"/>
     <ctl name="TX_DEC3 Volume" value="96"/>
-    <ctl name="RX_EAR Mode" value="OFF" />
+    <ctl name="RX_EAR Mode" value="OFF"/>
     <path name="echo-reference">
         <ctl name="AUDIO_REF_EC_UL1 MUX" value="WSA_CDC_DMA_RX_0"/>
         <ctl name="EC Reference Channels" value="One"/>
@@ -72,6 +72,19 @@
         <ctl name="AUDIO_REF_EC_UL10 MUX" value="RX_CDC_DMA_RX_0"/>
         <ctl name="EC Reference Channels" value="One"/>
     </path>
+    <path name="amic2">
+        <ctl name="TX DEC0 MUX" value="SWR_MIC"/>
+        <ctl name="TX SMIC MUX0" value="SWR_MIC1"/>
+        <ctl name="TX_CDC_DMA_TX_4 Channels" value="One"/>
+        <ctl name="DEC0_BCS Switch" value="1"/>
+        <ctl name="TX_AIF2_CAP Mixer DEC0" value="1"/>
+        <ctl name="ADC2_MIXER Switch" value="1"/>
+        <ctl name="ADC2 MUX" value="INP2"/>
+        <ctl name="ADC2 ChMap" value="SWRM_TX1_CH2"/>
+        <ctl name="MBHC ChMap" value="SWRM_TX2_CH3"/>
+        <ctl name="BCS Channel" value="CH6"/>
+        <ctl name="HDR12 MUX" value="NO_HDR12"/>
+    </path>
     <path name="speaker">
         <ctl name="WSA_CDC_DMA_RX_0 Channels" value="One"/>
         <ctl name="WSA RX1 MUX" value="AIF1_PB"/>
@@ -90,6 +103,10 @@
         <ctl name="SpkrRight VISENSE Switch" value="1"/>
         <ctl name="SpkrRight SWR DAC_Port Switch" value="1"/>
     </path>
+    <path name="speaker-vbat">
+        <path name="speaker"/>
+        <ctl name="WSA_RX INT1 VBAT WSA RX1 VBAT Enable" value="1"/>
+    </path>
     <path name="speaker-mic">
         <path name="dmic6"/>
     </path>
@@ -117,6 +134,10 @@
         <ctl name="VI_FEED_TX Channels" value="One"/>
         <ctl name="WSA_RX_0_VI_FB_LCH_MUX" value="WSA_CDC_DMA_TX_0"/>
     </path>
+    <path name="speaker-protected-vbat">
+        <path name="speaker-protected"/>
+        <ctl name="WSA_RX INT1 VBAT WSA RX1 VBAT Enable" value="1"/>
+    </path>
     <path name="voice-speaker-protected-vbat">
         <path name="voice-speaker-protected"/>
         <ctl name="WSA_RX INT0 VBAT WSA RX1 VBAT Enable" value="1"/>
@@ -128,7 +149,7 @@
         <ctl name="RX INT0 DEM MUX" value="CLSH_DSM_OUT"/>
         <ctl name="EAR_RDAC Switch" value="1"/>
         <ctl name="RDAC3_MUX" value="RX1"/>
-        <ctl name="RX_EAR Mode" value="ON" />
+        <ctl name="RX_EAR Mode" value="ON"/>
     </path>
     <path name="handset-mic">
         <path name="dmic2"/>
@@ -213,4 +234,4 @@
     <path name="voice-tty-vco-handset-mic">
         <path name="dmic3"/>
     </path>
-</mixer>
+</mixer>
\ No newline at end of file
diff --git a/configs/lahaina/shima_overlay/sound_trigger_mixer_paths_shimaidps_overlay.xml b/configs/lahaina/shima_overlay/sound_trigger_mixer_paths_shimaidps_overlay.xml
index c70c77e..1d16bb2 100644
--- a/configs/lahaina/shima_overlay/sound_trigger_mixer_paths_shimaidps_overlay.xml
+++ b/configs/lahaina/shima_overlay/sound_trigger_mixer_paths_shimaidps_overlay.xml
@@ -81,4 +81,15 @@
         <ctl name="VA DMIC MUX2" value="DMIC3"/>
         <ctl name="VA DMIC MUX3" value="DMIC4"/>
     </path>
+    <path name="listen-ape-headset-mic">
+        <ctl name="VA_AIF1_CAP Mixer DEC0" value="1"/>
+        <ctl name="VA DEC0 MUX" value="SWR_MIC"/>
+        <ctl name="VA SMIC MUX0" value="SWR_MIC1"/>
+        <ctl name="ADC2_MIXER Switch" value="1"/>
+        <ctl name="VA_DEC0 MODE" value="ADC_LOW_PWR"/>
+        <ctl name="ADC2 MUX" value="INP2"/>
+        <ctl name="HDR12 MUX" value="NO_HDR12"/>
+        <ctl name="ADC2 ChMap" value="SWRM_TX1_CH2"/>
+        <ctl name="ADC2_BCS Disable" value="1"/>
+    </path>
 </mixer>
\ No newline at end of file
diff --git a/configs/lahaina/shima_overlay/sound_trigger_mixer_paths_shimaqrd_overlay.xml b/configs/lahaina/shima_overlay/sound_trigger_mixer_paths_shimaqrd_overlay.xml
index 04f0192..e5f27af 100644
--- a/configs/lahaina/shima_overlay/sound_trigger_mixer_paths_shimaqrd_overlay.xml
+++ b/configs/lahaina/shima_overlay/sound_trigger_mixer_paths_shimaqrd_overlay.xml
@@ -80,6 +80,18 @@
         <ctl name="VA DMIC MUX2" value="DMIC3"/>
         <ctl name="VA DMIC MUX3" value="DMIC5"/>
     </path>
+    <path name="listen-ape-headset-mic">
+        <ctl name="VA_AIF1_CAP Mixer DEC0" value="1"/>
+        <ctl name="VA DEC0 MUX" value="SWR_MIC"/>
+        <ctl name="VA SMIC MUX0" value="SWR_MIC1"/>
+        <ctl name="VA_CDC_DMA_TX_0 Channels" value="One"/>
+        <ctl name="ADC2_MIXER Switch" value="1"/>
+        <ctl name="VA_DEC0 MODE" value="ADC_LOW_PWR"/>
+        <ctl name="ADC2 MUX" value="INP2"/>
+        <ctl name="HDR12 MUX" value="NO_HDR12"/>
+        <ctl name="ADC2 ChMap" value="SWRM_TX1_CH2"/>
+        <ctl name="ADC2_BCS Disable" value="1"/>
+    </path>
     <path name="echo-reference">
         <ctl name="AUDIO_REF_EC_UL1 MUX" value="WSA_CDC_DMA_RX_0"/>
         <ctl name="EC Reference Channels" value="One"/>