Merge "hal: Use call state to ensure voice call start"
diff --git a/Android.mk b/Android.mk
index e590854..a7c8f2d 100644
--- a/Android.mk
+++ b/Android.mk
@@ -1,4 +1,4 @@
-ifneq ($(filter mpq8092 msm8960 msm8226 msm8x26 msm8610 msm8974 msm8x74 apq8084 msm8916 msm8994 msm8992 msm8909 msm8996 msm8952 msm8937 thorium msm8953 msmgold msm8998 sdm660 sdm845 sdm670 apq8098_latv,$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter mpq8092 msm8960 msm8226 msm8x26 msm8610 msm8974 msm8x74 apq8084 msm8916 msm8994 msm8992 msm8909 msm8996 msm8952 msm8937 thorium msm8953 msmgold msm8998 sdm660 sdm845 sdm670 apq8098_latv qcs605,$(TARGET_BOARD_PLATFORM)),)
 
 MY_LOCAL_PATH := $(call my-dir)
 
diff --git a/configs/apq8098_latv/apq8098_latv.mk b/configs/apq8098_latv/apq8098_latv.mk
old mode 100755
new mode 100644
index 7a74e58..7fe0d48
--- a/configs/apq8098_latv/apq8098_latv.mk
+++ b/configs/apq8098_latv/apq8098_latv.mk
@@ -63,6 +63,9 @@
 AUDIO_FEATURE_ENABLED_GEF_SUPPORT := true
 BOARD_SUPPORTS_QAHW := true
 AUDIO_FEATURE_ENABLED_QAF := true
+AUDIO_FEATURE_IP_HDLR_ENABLED := true
+MM_AUDIO_IP_HDLR_ENABLED := true
+AUDIO_FEATURE_ENABLED_MS12_SECURITY := true
 AUDIO_FEATURE_ENABLED_RAS := true
 AUDIO_FEATURE_ENABLED_DYNAMIC_LOG := true
 AUDIO_FEATURE_ENABLED_SND_MONITOR := true
@@ -144,7 +147,11 @@
 
 #Buffer size in kbytes for compress offload playback
 PRODUCT_PROPERTY_OVERRIDES += \
-vendor.audio.offload.buffer.size.kb=32
+vendor.audio.offload.buffer.size.kb=2
+
+#Minimum duration for offload playback in secc
+PRODUCT_PROPERTY_OVERRIDES += \
+audio.offload.min.duration.secs=0
 
 #Enable offload audio video playback by default
 PRODUCT_PROPERTY_OVERRIDES += \
@@ -166,7 +173,7 @@
 PRODUCT_PROPERTY_OVERRIDES += \
 audio.deep_buffer.media=true
 
-#QC property used when calculating client heap size in audio flinger
+#QTI property used when calculating client heap size in audio flinger
 PRODUCT_PROPERTY_OVERRIDES += \
 audio.heap.size.multiplier=7
 
@@ -203,6 +210,26 @@
 PRODUCT_PROPERTY_OVERRIDES += \
 vendor.audio.safx.pbe.enabled=true
 
+#enable QAF
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio.qaf.enabled=true
+
+#QAF Library
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio.qaf.library=/vendor/lib/libdolby_ms12_wrapper.so
+
+#Disable reencode
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio.qaf.reencode=true
+
+#HDMI passthrough out
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio.qaf.hdmi.out=ddp
+
+#AV streaming offload
+PRODUCT_PROPERTY_OVERRIDES += \
+av.streaming.offload.enable=true
+
 #parser input buffer size(256kb) in byte stream mode
 PRODUCT_PROPERTY_OVERRIDES += \
 vendor.audio.parser.ip.buffer.size=262144
diff --git a/configs/apq8098_latv/audio_policy_configuration.xml b/configs/apq8098_latv/audio_policy_configuration.xml
index 484f96a..77db6e5 100755
--- a/configs/apq8098_latv/audio_policy_configuration.xml
+++ b/configs/apq8098_latv/audio_policy_configuration.xml
@@ -21,7 +21,6 @@
     <!-- version section contains a “version” tag in the form “major.minor” e.g version=”1.0” -->
 
     <!-- Global configuration Decalaration -->
-    <globalConfiguration speaker_drc_enabled="true"/>
 
 
     <!-- Modules section:
@@ -49,34 +48,14 @@
         <!-- Primary Audio HAL -->
         <module name="primary" halVersion="2.0">
             <attachedDevices>
-                <item>Earpiece</item>
-                <item>Speaker</item>
-                <item>Telephony Tx</item>
-                <item>Built-In Mic</item>
-                <item>Built-In Back Mic</item>
-                <item>FM Tuner</item>
-                <item>Telephony Rx</item>
+                <item>HDMI</item>
             </attachedDevices>
-            <defaultOutputDevice>Speaker</defaultOutputDevice>
+            <defaultOutputDevice>HDMI</defaultOutputDevice>
             <mixPorts>
                 <mixPort name="primary output" role="source" flags="AUDIO_OUTPUT_FLAG_FAST|AUDIO_OUTPUT_FLAG_PRIMARY">
                     <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
                              samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
                 </mixPort>
-                <mixPort name="raw" role="source"
-                        flags="AUDIO_OUTPUT_FLAG_FAST|AUDIO_OUTPUT_FLAG_RAW">
-                    <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
-                             samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
-                </mixPort>
-                <mixPort name="mmap_no_irq_out" role="source" flags="AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_MMAP_NOIRQ">
-                    <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
-                             samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
-                </mixPort>
-                <mixPort name="deep_buffer" role="source"
-                        flags="AUDIO_OUTPUT_FLAG_DEEP_BUFFER">
-                    <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
-                             samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
-                </mixPort>
                 <mixPort name="compress_passthrough" role="source"
                         flags="AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING">
                     <profile name="" format="dynamic"
@@ -99,21 +78,9 @@
                 </mixPort>
                 <mixPort name="compressed_offload" role="source"
                          flags="AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING">
-                    <profile name="" format="AUDIO_FORMAT_MP3"
-                             samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000"
-                             channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/>
                     <profile name="" format="AUDIO_FORMAT_MP2"
                              samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000"
                              channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1"/>
-                    <profile name="" format="AUDIO_FORMAT_FLAC"
-                             samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000,128000,176400,192000"
-                             channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/>
-                    <profile name="" format="AUDIO_FORMAT_ALAC"
-                             samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000,128000,176400,192000"
-                             channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
-                    <profile name="" format="AUDIO_FORMAT_APE"
-                             samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000,128000,176400,192000"
-                             channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/>
                     <profile name="" format="AUDIO_FORMAT_AAC_LC"
                              samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000"
                              channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/>
@@ -132,21 +99,6 @@
                     <profile name="" format="AUDIO_FORMAT_E_AC3_JOC"
                              samplingRates="32000,44100,48000"
                              channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
-                    <profile name="" format="AUDIO_FORMAT_DTS"
-                             samplingRates="32000,44100,48000"
-                             channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1"/>
-                    <profile name="" format="AUDIO_FORMAT_DTS_HD"
-                             samplingRates="32000,44100,48000,64000,88200,96000,128000,176400,192000"
-                             channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
-                    <profile name="" format="AUDIO_FORMAT_WMA"
-                             samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000"
-                             channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
-                    <profile name="" format="AUDIO_FORMAT_WMA_PRO"
-                             samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000"
-                             channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
-                    <profile name="" format="AUDIO_FORMAT_VORBIS"
-                             samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000,128000,176400,192000"
-                             channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/>
                     <profile name="" format="AUDIO_FORMAT_AAC_ADTS_LC"
                              samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000"
                              channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/>
@@ -157,108 +109,14 @@
                              samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000"
                              channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/>
                 </mixPort>
-                <mixPort name="dsd_compress_passthrough" role="source"
-                         flags="AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING">
-                    <profile name="" format="AUDIO_FORMAT_DSD"
-                             samplingRates="2822400,5644800"
-                             channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/>
-                </mixPort>
-                <mixPort name="voice_tx" role="source">
-                    <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
-                             samplingRates="8000,16000,48000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
-                </mixPort>
-                <mixPort name="voip_rx" role="source"
-                         flags="AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_VOIP_RX">
-                    <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
-                             samplingRates="8000,16000,32000,48000" channelMasks="AUDIO_CHANNEL_OUT_MONO"/>
-                </mixPort>
-
-                <mixPort name="primary input" role="sink">
-                    <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
-                             samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000"
-                             channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK"/>
-                </mixPort>
-                <mixPort name="surround_sound" role="sink">
-                    <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
-                             samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000"
-                             channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_INDEX_MASK_3,AUDIO_CHANNEL_INDEX_MASK_4,AUDIO_CHANNEL_IN_5POINT1,AUDIO_CHANNEL_INDEX_MASK_6"/>
-                </mixPort>
-                <mixPort name="record_24" role="sink">
-                    <profile name="" format="AUDIO_FORMAT_PCM_24_BIT_PACKED"
-                             samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,96000,192000"
-                             channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_INDEX_MASK_3,AUDIO_CHANNEL_INDEX_MASK_4"/>
-                    <profile name="" format="AUDIO_FORMAT_PCM_8_24_BIT"
-                             samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,96000,192000"
-                             channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_INDEX_MASK_3,AUDIO_CHANNEL_INDEX_MASK_4"/>
-                    <profile name="" format="AUDIO_FORMAT_PCM_FLOAT"
-                             samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,96000,192000"
-                             channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_INDEX_MASK_3,AUDIO_CHANNEL_INDEX_MASK_4"/>
-                </mixPort>
-                <mixPort name="voice_rx" role="sink">
-                    <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
-                             samplingRates="8000,16000,48000" channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO"/>
-                </mixPort>
-                <mixPort name="mmap_no_irq_in" role="sink" flags="AUDIO_INPUT_FLAG_MMAP_NOIRQ">
-                    <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
-                             samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000"
-                             channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_INDEX_MASK_3"/>
-                </mixPort>
             </mixPorts>
 
             <devicePorts>
                 <!-- Output devices declaration, i.e. Sink DEVICE PORT -->
-                <devicePort tagName="Earpiece" type="AUDIO_DEVICE_OUT_EARPIECE" role="sink">
-                   <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
-                            samplingRates="48000" channelMasks="AUDIO_CHANNEL_IN_MONO"/>
-                </devicePort>
-                <devicePort tagName="Speaker" role="sink" type="AUDIO_DEVICE_OUT_SPEAKER" address="">
-                    <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
-                             samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
-                </devicePort>
-                <devicePort tagName="Wired Headset" type="AUDIO_DEVICE_OUT_WIRED_HEADSET" role="sink">
-                    <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
-                             samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
-                </devicePort>
-                <devicePort tagName="Wired Headphones" type="AUDIO_DEVICE_OUT_WIRED_HEADPHONE" role="sink">
-                    <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
-                             samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
-                </devicePort>
-                <devicePort tagName="Line" type="AUDIO_DEVICE_OUT_LINE" role="sink">
-                    <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
-                             samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
-                </devicePort>
-                <devicePort tagName="BT SCO" type="AUDIO_DEVICE_OUT_BLUETOOTH_SCO" role="sink">
-                    <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
-                             samplingRates="8000,16000" channelMasks="AUDIO_CHANNEL_OUT_MONO"/>
-                </devicePort>
-                <devicePort tagName="BT SCO Headset" type="AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET" role="sink">
-                    <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
-                             samplingRates="8000,16000" channelMasks="AUDIO_CHANNEL_OUT_MONO"/>
-                </devicePort>
-                <devicePort tagName="BT SCO Car Kit" type="AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT" role="sink">
-                    <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
-                             samplingRates="8000,16000" channelMasks="AUDIO_CHANNEL_OUT_MONO"/>
-                </devicePort>
-                <devicePort tagName="BT SCO All" type="AUDIO_DEVICE_OUT_ALL_SCO" role="sink">
-                    <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
-                             samplingRates="8000,16000" channelMasks="AUDIO_CHANNEL_OUT_MONO"/>
-                </devicePort>
-                <devicePort tagName="Telephony Tx" type="AUDIO_DEVICE_OUT_TELEPHONY_TX" role="sink">
-                    <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
-                             samplingRates="8000,16000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
-                </devicePort>
                 <devicePort tagName="HDMI" type="AUDIO_DEVICE_OUT_AUX_DIGITAL" role="sink">
                     <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
                              samplingRates="8000,11025,16000,22050,32000,44100,48000,64000,88200,96000,128000,176400,192000" channelMasks="dynamic"/>
                 </devicePort>
-                <devicePort tagName="Proxy" type="AUDIO_DEVICE_OUT_PROXY" role="sink">
-                    <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
-                             samplingRates="8000,11025,16000,22050,32000,44100,48000,64000,88200,96000,128000,176400,192000" channelMasks="dynamic"/>
-                </devicePort>
-                <devicePort tagName="FM" type="AUDIO_DEVICE_OUT_FM" role="sink">
-                    <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
-                             samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
-                </devicePort>
                 <devicePort tagName="BT A2DP Out" type="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP" role="sink">
                     <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
                              samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
@@ -271,134 +129,24 @@
                     <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
                              samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
                 </devicePort>
-                <devicePort tagName="USB Device Out" type="AUDIO_DEVICE_OUT_USB_DEVICE" role="sink">
-                    <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
-                             samplingRates="44100,48000,64000,88200,96000,128000,176400,192000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
-                </devicePort>
-
-                <devicePort tagName="Built-In Mic" type="AUDIO_DEVICE_IN_BUILTIN_MIC" role="source">
-                    <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
-                             samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000"
-                             channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK"/>
-                </devicePort>
-                <devicePort tagName="Built-In Back Mic" type="AUDIO_DEVICE_IN_BACK_MIC" role="source">
-                    <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
-                             samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000"
-                             channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK"/>
-                </devicePort>
-                <devicePort tagName="FM Tuner" type="AUDIO_DEVICE_IN_FM_TUNER" role="source">
-                    <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
-                             samplingRates="48000"
-                             channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO"/>
-                </devicePort>
-                <devicePort tagName="Wired Headset Mic" type="AUDIO_DEVICE_IN_WIRED_HEADSET" role="source">
-                    <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
-                             samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000"
-                             channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK"/>
-                </devicePort>
-                <devicePort tagName="BT SCO Headset Mic" type="AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET" role="source">
-                    <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
-                             samplingRates="8000,16000" channelMasks="AUDIO_CHANNEL_IN_MONO"/>
-                </devicePort>
-                <devicePort tagName="Telephony Rx" type="AUDIO_DEVICE_IN_TELEPHONY_RX" role="source">
-                    <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
-                             samplingRates="8000,16000,48000" channelMasks="AUDIO_CHANNEL_IN_MONO"/>
-                </devicePort>
-                <devicePort tagName="USB Device In" type="AUDIO_DEVICE_IN_USB_DEVICE" role="source">
-                    <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
-                             samplingRates="44100,48000,64000,88200,96000,128000,176400,192000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
-                    <profile name="" format="AUDIO_FORMAT_PCM_8_24_BIT"
-                             samplingRates="44100,48000,64000,88200,96000,128000,176400,192000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
-                </devicePort>
             </devicePorts>
             <!-- route declaration, i.e. list all available sources for a given sink -->
             <routes>
-                <route type="mix" sink="Earpiece"
-                       sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out"/>
-                <route type="mix" sink="Speaker"
-                       sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out"/>
-                <route type="mix" sink="Wired Headset"
-                       sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,dsd_compress_passthrough,voip_rx,mmap_no_irq_out"/>
-                <route type="mix" sink="Wired Headphones"
-                       sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,dsd_compress_passthrough,voip_rx,mmap_no_irq_out"/>
-                <route type="mix" sink="Line"
-                       sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,dsd_compress_passthrough,voip_rx,mmap_no_irq_out"/>
                 <route type="mix" sink="HDMI"
-                       sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,compress_passthrough"/>
-                <route type="mix" sink="Proxy"
-                       sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload"/>
-                <route type="mix" sink="FM"
-                       sources="primary output"/>
-                <route type="mix" sink="BT SCO All"
-                       sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out"/>
-                <route type="mix" sink="USB Device Out"
-                       sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out"/>
-                <route type="mix" sink="Telephony Tx"
-                       sources="voice_tx"/>
-                <route type="mix" sink="voice_rx"
-                       sources="Telephony Rx"/>
-                <route type="mix" sink="primary input"
-                       sources="Wired Headset Mic,BT SCO Headset Mic,FM Tuner,USB Device In,Telephony Rx"/>
-                <route type="mix" sink="surround_sound"
-                       sources="Built-In Mic,Built-In Back Mic"/>
-                <route type="mix" sink="record_24"
-                       sources="Built-In Mic,Built-In Back Mic,Wired Headset Mic"/>
-                <route type="mix" sink="mmap_no_irq_in"
-                       sources="Built-In Mic,Built-In Back Mic,Wired Headset Mic,USB Device In"/>
+                       sources="primary output,direct_pcm,compressed_offload,compress_passthrough"/>
                 <route type="mix" sink="BT A2DP Out"
-                       sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload"/>
+                       sources="primary output,direct_pcm,compressed_offload"/>
                 <route type="mix" sink="BT A2DP Headphones"
-                       sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload"/>
+                       sources="primary output,direct_pcm,compressed_offload"/>
                 <route type="mix" sink="BT A2DP Speaker"
-                       sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload"/>
+                       sources="primary output,direct_pcm,compressed_offload"/>
             </routes>
 
         </module>
 
         <!-- A2DP Audio HAL -->
-        <module name="a2dp" halVersion="2.0">
-            <mixPorts>
-                <mixPort name="a2dp input" role="sink">
-                    <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
-                             samplingRates="44100,48000" channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO"/>
-                </mixPort>
-            </mixPorts>
-
-            <devicePorts>
-                <devicePort tagName="BT A2DP In" type="AUDIO_DEVICE_IN_BLUETOOTH_A2DP" role="source">
-                    <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
-                             samplingRates="44100,48000" channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO"/>
-                </devicePort>
-            </devicePorts>
-
-            <routes>
-                <route type="mix" sink="a2dp input"
-                       sources="BT A2DP In"/>
-            </routes>
-        </module>
-
         <!-- Usb Audio HAL -->
-        <module name="usb" halVersion="2.0">
-            <mixPorts>
-                <mixPort name="usb_accessory output" role="source">
-                    <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
-                             samplingRates="44100" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
-                </mixPort>
-            </mixPorts>
-            <devicePorts>
-                <devicePort tagName="USB Host Out" type="AUDIO_DEVICE_OUT_USB_ACCESSORY" role="sink">
-                    <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
-                             samplingRates="44100" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
-                </devicePort>
-            </devicePorts>
-            <routes>
-                <route type="mix" sink="USB Host Out"
-                       sources="usb_accessory output"/>
-            </routes>
-        </module>
-
         <!-- Remote Submix Audio HAL -->
-        <xi:include href="/vendor/etc/r_submix_audio_policy_configuration.xml"/>
 
     </modules>
     <!-- End of Modules section -->
diff --git a/configs/msm8953/sound_trigger_mixer_paths.xml b/configs/msm8953/sound_trigger_mixer_paths.xml
index f6abb6b..e7f3740 100644
--- a/configs/msm8953/sound_trigger_mixer_paths.xml
+++ b/configs/msm8953/sound_trigger_mixer_paths.xml
@@ -94,6 +94,54 @@
         <ctl name="LSM8 Mixer TERT_MI2S_TX" value="1" />
     </path>
 
+    <path name="listen-voice-wakeup-1 preproc">
+        <ctl name="TERT_MI2S_TX LSM Function" value="SWAUDIO" />
+        <ctl name="LSM1 Port" value="ADM_LSM_TX" />
+        <ctl name="LSM1 Mixer TERT_MI2S_TX" value="1" />
+    </path>
+
+    <path name="listen-voice-wakeup-2 preproc">
+        <ctl name="TERT_MI2S_TX LSM Function" value="SWAUDIO" />
+        <ctl name="LSM2 Port" value="ADM_LSM_TX" />
+        <ctl name="LSM2 Mixer TERT_MI2S_TX" value="1" />
+    </path>
+
+    <path name="listen-voice-wakeup-3 preproc">
+        <ctl name="TERT_MI2S_TX LSM Function" value="SWAUDIO" />
+        <ctl name="LSM3 Port" value="ADM_LSM_TX" />
+        <ctl name="LSM3 Mixer TERT_MI2S_TX" value="1" />
+    </path>
+
+    <path name="listen-voice-wakeup-4 preproc">
+        <ctl name="TERT_MI2S_TX LSM Function" value="SWAUDIO" />
+        <ctl name="LSM4 Port" value="ADM_LSM_TX" />
+        <ctl name="LSM4 Mixer TERT_MI2S_TX" value="1" />
+    </path>
+
+    <path name="listen-voice-wakeup-5 preproc">
+        <ctl name="TERT_MI2S_TX LSM Function" value="SWAUDIO" />
+        <ctl name="LSM5 Port" value="ADM_LSM_TX" />
+        <ctl name="LSM5 Mixer TERT_MI2S_TX" value="1" />
+    </path>
+
+    <path name="listen-voice-wakeup-6 preproc">
+        <ctl name="TERT_MI2S_TX LSM Function" value="SWAUDIO" />
+        <ctl name="LSM6 Port" value="ADM_LSM_TX" />
+        <ctl name="LSM6 Mixer TERT_MI2S_TX" value="1" />
+    </path>
+
+    <path name="listen-voice-wakeup-7 preproc">
+        <ctl name="TERT_MI2S_TX LSM Function" value="SWAUDIO" />
+        <ctl name="LSM7 Port" value="ADM_LSM_TX" />
+        <ctl name="LSM7 Mixer TERT_MI2S_TX" value="1" />
+    </path>
+
+    <path name="listen-voice-wakeup-8 preproc">
+        <ctl name="TERT_MI2S_TX LSM Function" value="SWAUDIO" />
+        <ctl name="LSM8 Port" value="ADM_LSM_TX" />
+        <ctl name="LSM8 Mixer TERT_MI2S_TX" value="1" />
+    </path>
+
     <path name="listen-ape-handset-mic">
         <!-- this is to avoid codec mute when device is not enabled first -->
         <ctl name="LOOPBACK Mode" value="ENABLE" />
@@ -102,4 +150,18 @@
         <ctl name="ADC2 MUX" value="INP3" />
     </path>
 
+    <path name="listen-ape-handset-mic-preproc">
+        <ctl name="DEC1 MUX" value="ADC2" />
+        <ctl name="ADC2 MUX" value="INP3" />
+    </path>
+
+    <path name="listen-ape-handset-dmic">
+        <ctl name="ADC1 Volume" value="6" />
+        <ctl name="DEC1 MUX" value="ADC1" />
+        <ctl name="ADC3 Volume" value="6" />
+        <ctl name="DEC2 MUX" value="ADC2" />
+        <ctl name="MI2S_TX Channels" value="Two" />
+        <ctl name="ADC2 MUX" value="INP3" />
+    </path>
+
 </mixer>
diff --git a/configs/msm8953/sound_trigger_mixer_paths_wcd9335.xml b/configs/msm8953/sound_trigger_mixer_paths_wcd9335.xml
index af630d0..c1b6097 100644
--- a/configs/msm8953/sound_trigger_mixer_paths_wcd9335.xml
+++ b/configs/msm8953/sound_trigger_mixer_paths_wcd9335.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="ISO-8859-1"?>
-<!--- Copyright (c) 2015-2016, The Linux Foundation. All rights reserved.
+<!--- Copyright (c) 2015-2017, The Linux Foundation. All rights reserved.
 
       Redistribution and use in source and binary forms, with or without
       modification, are permitted provided that the following conditions are
@@ -57,6 +57,19 @@
     <ctl name="EC BUF MUX INP" value="ZERO" />
     <ctl name="ADC MUX1" value="DMIC" />
     <ctl name="DMIC MUX1" value="ZERO" />
+    <ctl name="ADC MUX5" value="AMIC" />
+    <ctl name="ADC MUX6" value="AMIC" />
+    <ctl name="ADC MUX7" value="AMIC" />
+    <ctl name="ADC MUX8" value="AMIC" />
+    <ctl name="DMIC MUX5" value="ZERO" />
+    <ctl name="DMIC MUX6" value="ZERO" />
+    <ctl name="DMIC MUX7" value="ZERO" />
+    <ctl name="DMIC MUX8" value="ZERO" />
+    <ctl name="IIR0 INP0 MUX" value="ZERO" />
+    <ctl name="AIF1_CAP Mixer SLIM TX5" value="0" />
+    <ctl name="AIF1_CAP Mixer SLIM TX6" value="0" />
+    <ctl name="AIF1_CAP Mixer SLIM TX7" value="0" />
+    <ctl name="AIF1_CAP Mixer SLIM TX8" value="0" />
 
     <path name="listen-voice-wakeup-1">
         <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
@@ -100,6 +113,54 @@
         <ctl name="LSM8 Mixer SLIMBUS_5_TX" value="1" />
     </path>
 
+    <path name="listen-voice-wakeup-1 preproc">
+        <ctl name="SLIMBUS_0_TX LSM Function" value="SWAUDIO" />
+        <ctl name="LSM1 Port" value="ADM_LSM_TX" />
+        <ctl name="LSM1 Mixer SLIMBUS_0_TX" value="1" />
+    </path>
+
+    <path name="listen-voice-wakeup-2 preproc">
+        <ctl name="SLIMBUS_0_TX LSM Function" value="SWAUDIO" />
+        <ctl name="LSM2 Port" value="ADM_LSM_TX" />
+        <ctl name="LSM2 Mixer SLIMBUS_0_TX" value="1" />
+    </path>
+
+    <path name="listen-voice-wakeup-3 preproc">
+        <ctl name="SLIMBUS_0_TX LSM Function" value="SWAUDIO" />
+        <ctl name="LSM3 Port" value="ADM_LSM_TX" />
+        <ctl name="LSM3 Mixer SLIMBUS_0_TX" value="1" />
+    </path>
+
+    <path name="listen-voice-wakeup-4 preproc">
+        <ctl name="SLIMBUS_0_TX LSM Function" value="SWAUDIO" />
+        <ctl name="LSM4 Port" value="ADM_LSM_TX" />
+        <ctl name="LSM4 Mixer SLIMBUS_0_TX" value="1" />
+    </path>
+
+    <path name="listen-voice-wakeup-5 preproc">
+        <ctl name="SLIMBUS_0_TX LSM Function" value="SWAUDIO" />
+        <ctl name="LSM5 Port" value="ADM_LSM_TX" />
+        <ctl name="LSM5 Mixer SLIMBUS_0_TX" value="1" />
+    </path>
+
+    <path name="listen-voice-wakeup-6 preproc">
+        <ctl name="SLIMBUS_0_TX LSM Function" value="SWAUDIO" />
+        <ctl name="LSM6 Port" value="ADM_LSM_TX" />
+        <ctl name="LSM6 Mixer SLIMBUS_0_TX" value="1" />
+    </path>
+
+    <path name="listen-voice-wakeup-7 preproc">
+        <ctl name="SLIMBUS_0_TX LSM Function" value="SWAUDIO" />
+        <ctl name="LSM7 Port" value="ADM_LSM_TX" />
+        <ctl name="LSM7 Mixer SLIMBUS_0_TX" value="1" />
+    </path>
+
+    <path name="listen-voice-wakeup-8 preproc">
+        <ctl name="SLIMBUS_0_TX LSM Function" value="SWAUDIO" />
+        <ctl name="LSM8 Port" value="ADM_LSM_TX" />
+        <ctl name="LSM8 Mixer SLIMBUS_0_TX" value="1" />
+    </path>
+
     <path name="listen-cpe-handset-mic">
         <ctl name="MADONOFF Switch" value="1" />
         <ctl name="TX13 INP MUX" value="CPE_TX_PP" />
@@ -130,4 +191,67 @@
         <ctl name="MAD Input" value="DMIC0" />
     </path>
 
+    <path name="listen-ape-handset-mic-preproc">
+        <ctl name="AIF1_CAP Mixer SLIM TX7" value="1"/>
+        <ctl name="SLIM_0_TX Channels" value="One" />
+        <ctl name="SLIM TX7 MUX" value="DEC7" />
+        <ctl name="ADC MUX7" value="DMIC" />
+        <ctl name="DMIC MUX7" value="DMIC0" />
+        <ctl name="IIR0 INP0 MUX" value="DEC7" />
+    </path>
+
+    <path name="listen-ape-handset-dmic">
+        <ctl name="AIF1_CAP Mixer SLIM TX7" value="1" />
+        <ctl name="AIF1_CAP Mixer SLIM TX8" value="1" />
+        <ctl name="SLIM TX7 MUX" value="DEC7" />
+        <ctl name="ADC MUX7" value="DMIC" />
+        <ctl name="DMIC MUX7" value="DMIC0" />
+        <ctl name="SLIM TX8 MUX" value="DEC8" />
+        <ctl name="ADC MUX8" value="DMIC" />
+        <ctl name="DMIC MUX8" value="DMIC3" />
+        <ctl name="SLIM_0_TX Channels" value="Two" />
+   </path>
+
+    <path name="listen-ape-handset-qmic">
+        <ctl name="AIF1_CAP Mixer SLIM TX5" value="1" />
+        <ctl name="AIF1_CAP Mixer SLIM TX6" value="1" />
+        <ctl name="AIF1_CAP Mixer SLIM TX7" value="1" />
+        <ctl name="AIF1_CAP Mixer SLIM TX8" value="1" />
+        <ctl name="SLIM_0_TX Channels" value="Four" />
+        <ctl name="SLIM TX5 MUX" value="DEC5" />
+        <ctl name="ADC MUX5" value="DMIC" />
+        <ctl name="DMIC MUX5" value="DMIC0" />
+        <ctl name="SLIM TX6 MUX" value="DEC6" />
+        <ctl name="ADC MUX6" value="DMIC" />
+        <ctl name="DMIC MUX6" value="DMIC2" />
+        <ctl name="SLIM TX7 MUX" value="DEC7" />
+        <ctl name="ADC MUX7" value="DMIC" />
+        <ctl name="DMIC MUX7" value="DMIC1" />
+        <ctl name="SLIM TX8 MUX" value="DEC8" />
+        <ctl name="ADC MUX8" value="DMIC" />
+        <ctl name="DMIC MUX8" value="DMIC3" />
+    </path>
+
+    <path name="listen-ape-handset-tmic">
+        <ctl name="AIF1_CAP Mixer SLIM TX5" value="1"/>
+        <ctl name="AIF1_CAP Mixer SLIM TX6" value="1" />
+        <ctl name="AIF1_CAP Mixer SLIM TX7" value="1"/>
+        <ctl name="SLIM_0_TX Channels" value="Three" />
+        <ctl name="SLIM TX5 MUX" value="DEC5" />
+        <ctl name="ADC MUX5" value="DMIC" />
+        <ctl name="DMIC MUX5" value="DMIC0" />
+        <ctl name="SLIM TX6 MUX" value="DEC6" />
+        <ctl name="ADC MUX6" value="DMIC" />
+        <ctl name="DMIC MUX6" value="DMIC2" />
+        <ctl name="SLIM TX7 MUX" value="DEC7" />
+        <ctl name="ADC MUX7" value="DMIC" />
+        <ctl name="DMIC MUX7" value="DMIC4" />
+    </path>
+
+    <path name="echo-reference">
+        <ctl name="AUDIO_REF_EC_UL1 MUX" value="SLIM_RX" />
+        <ctl name="EC Reference Channels" value="Two"/>
+        <ctl name="EC Reference Bit Format" value="S16_LE"/>
+        <ctl name="EC Reference SampleRate" value="48000"/>
+    </path>
 </mixer>
diff --git a/configs/msm8953/sound_trigger_platform_info.xml b/configs/msm8953/sound_trigger_platform_info.xml
index 28026f7..a1f70a0 100644
--- a/configs/msm8953/sound_trigger_platform_info.xml
+++ b/configs/msm8953/sound_trigger_platform_info.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="ISO-8859-1"?>
-<!--- Copyright (c) 2013-2016, The Linux Foundation. All rights reserved.       -->
+<!--- Copyright (c) 2013-2017, The Linux Foundation. All rights reserved.       -->
 <!---                                                                           -->
 <!--- Redistribution and use in source and binary forms, with or without        -->
 <!--- modification, are permitted provided that the following conditions are    -->
@@ -35,12 +35,25 @@
         <param enable_failure_detection="false" />
         <param rx_concurrency_disabled="true" />
         <param rx_conc_max_st_ses="1" />
+        <!-- Below backend params must match with port used in mixer path file -->
+        <!-- param used to configure backend sample rate, format and channels -->
+        <!--Enable below backend params for internal codec-->
+        <!--param backend_port_name="MI2S_TX" />
+        <param backend_dai_name="TERT_MI2S_TX" /-->
+        <param backend_port_name="SLIM_0_TX" />
+        <param backend_dai_name="SLIMBUS_0_TX" />
     </common_config>
 
     <acdb_ids>
-        <param DEVICE_HANDSET_APE_ACDB_ID="130" />
-        <param DEVICE_HANDSET_CPE_ACDB_ID="128" />
-        <param DEVICE_HANDSET_CPE_ECPP_ACDB_ID="128" />
+        <!--For internal codec please enable below device-->
+        <!--param DEVICE_HANDSET_MIC_APE="130" /-->
+        <param DEVICE_HANDSET_MIC_APE="100" />
+        <param DEVICE_HANDSET_MIC_CPE="128" />
+        <param DEVICE_HANDSET_MIC_ECPP_CPE="128" />
+        <param DEVICE_HANDSET_MIC_PP_APE="151" />
+        <param DEVICE_HANDSET_QMIC_APE="150" />
+        <param DEVICE_HANDSET_DMIC_APE="149" />
+        <param DEVICE_HANDSET_TMIC_APE="152" />
     </acdb_ids>
 
     <!-- Multiple sound_model_config tags can be listed, each with unique    -->
@@ -55,6 +68,14 @@
         <param max_ape_phrases="10" />
         <param max_ape_users="10" />
         <param sample_rate="16000" />
+        <param bit_width="16" />
+        <param channel_count="1"/>
+        <!-- adm_cfg_profile should match with the one defined under adm_config -->
+        <!-- Set it to NONE if LSM directly connects to AFE -->
+        <param adm_cfg_profile="NONE" />
+        <!-- fluence_type: "FLUENCE", "FLUENCE_DMIC", "FLUENCE_TMIC", -->
+        <!-- "FLUENCE_QMIC". param value is valid when adm_cfg_profile="FLUENCE"-->
+        <param fluence_type="NONE" />
 
         <!-- Module and param ids with which the algorithm is integrated in firmware -->
         <param load_sound_model_ids="0x00012C0D, 0x00012C14" />
@@ -69,5 +90,21 @@
         <param client_capture_read_delay="2000" />
     </sound_model_config>
 
+    <!-- Multiple adm_config tags can be listed, each with unique profile name. -->
+    <!-- app_type to match corresponding value from ACDB -->
+    <adm_config>
+        <param adm_cfg_profile="DEFAULT" />
+        <param app_type="69938" />
+        <param sample_rate="16000" />
+        <param bit_width="16" />
+    </adm_config>
+
+    <adm_config>
+        <param adm_cfg_profile="FLUENCE" />
+        <param app_type="69944" />
+        <param sample_rate="16000" />
+        <param bit_width="16" />
+    </adm_config>
+
 </sound_trigger_platform_info>
 
diff --git a/configs/sdm660/mixer_paths.xml b/configs/sdm660/mixer_paths.xml
index 8cca459..ad417bb 100644
--- a/configs/sdm660/mixer_paths.xml
+++ b/configs/sdm660/mixer_paths.xml
@@ -160,6 +160,7 @@
     <ctl name="I2S TX2 INP1" value="ZERO" />
     <ctl name="I2S TX2 INP2" value="ZERO" />
     <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia4" value="0" />
+    <ctl name="ADC1_INP1 Switch" value="0" />
     <ctl name="HDMI Mixer MultiMedia4" value="0" />
     <ctl name="INT4_MI2S_RX_VI_FB_MONO_CH_MUX" value="ZERO" />
     <ctl name="INT4_MI2S_RX_VI_FB_STEREO_CH_MUX" value="ZERO" />
@@ -1585,6 +1586,7 @@
     <path name="adc1">
         <ctl name="ADC1 Volume" value="6" />
         <ctl name="DEC1 MUX" value="ADC1" />
+        <ctl name="ADC1_INP1 Switch" value="1" />
     </path>
 
     <path name="adc2">
diff --git a/configs/sdm660/mixer_paths_mtp.xml b/configs/sdm660/mixer_paths_mtp.xml
index 4f61224..ef6a5b0 100644
--- a/configs/sdm660/mixer_paths_mtp.xml
+++ b/configs/sdm660/mixer_paths_mtp.xml
@@ -159,6 +159,7 @@
     <ctl name="I2S TX2 INP1" value="ZERO" />
     <ctl name="I2S TX2 INP2" value="ZERO" />
     <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia4" value="0" />
+    <ctl name="ADC1_INP1 Switch" value="0" />
     <ctl name="HDMI Mixer MultiMedia4" value="0" />
     <ctl name="INT4_MI2S_RX_VI_FB_MONO_CH_MUX" value="ZERO" />
     <ctl name="INT4_MI2S_RX_VI_FB_STEREO_CH_MUX" value="ZERO" />
@@ -1704,6 +1705,7 @@
     <path name="adc1">
         <ctl name="ADC1 Volume" value="6" />
         <ctl name="DEC1 MUX" value="ADC1" />
+        <ctl name="ADC1_INP1 Switch" value="1" />
     </path>
 
     <path name="adc2">
diff --git a/configs/sdm660/mixer_paths_skush.xml b/configs/sdm660/mixer_paths_skush.xml
index aa81e7b..7986132 100644
--- a/configs/sdm660/mixer_paths_skush.xml
+++ b/configs/sdm660/mixer_paths_skush.xml
@@ -150,6 +150,7 @@
     <ctl name="INT3_MI2S_TX Channels" value="One" />
     <ctl name="I2S TX2 INP1" value="ZERO" />
     <ctl name="I2S TX2 INP2" value="ZERO" />
+    <ctl name="ADC1_INP1 Switch" value="0" />
     <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia4" value="0" />
     <ctl name="HDMI Mixer MultiMedia4" value="0" />
     <ctl name="INT4_MI2S_RX_VI_FB_MONO_CH_MUX" value="ZERO" />
@@ -1762,6 +1763,7 @@
     <path name="adc1">
         <ctl name="ADC1 Volume" value="6" />
         <ctl name="DEC1 MUX" value="ADC1" />
+        <ctl name="ADC1_INP1 Switch" value="1" />
     </path>
 
     <path name="adc2">
diff --git a/configs/sdm670/audio_output_policy.conf b/configs/sdm670/audio_output_policy.conf
index 76039c7..52ef791 100644
--- a/configs/sdm670/audio_output_policy.conf
+++ b/configs/sdm670/audio_output_policy.conf
@@ -25,6 +25,13 @@
     bit_width 16
     app_type 69943
   }
+voip_rx {
+    flags AUDIO_OUTPUT_FLAG_VOIP_RX|AUDIO_OUTPUT_FLAG_DIRECT
+    formats AUDIO_FORMAT_PCM_16_BIT
+    sampling_rates 8000|16000|32000|48000
+    bit_width 16
+    app_type 69946
+  }
   deep_buffer {
     flags AUDIO_OUTPUT_FLAG_DEEP_BUFFER
     formats AUDIO_FORMAT_PCM_16_BIT
diff --git a/configs/sdm670/audio_platform_info.xml b/configs/sdm670/audio_platform_info.xml
index 71a8bf6..e525a76 100644
--- a/configs/sdm670/audio_platform_info.xml
+++ b/configs/sdm670/audio_platform_info.xml
@@ -90,6 +90,8 @@
         <usecase name="USECASE_AUDIO_PLAYBACK_EXT_DISP_SILENCE" type="out" id="27" />
         <usecase name="USECASE_AUDIO_HFP_SCO" type="in" id="35" />
         <usecase name="USECASE_AUDIO_HFP_SCO_WB" type="in" id="35" />
+        <usecase name="USECASE_AUDIO_PLAYBACK_VOIP" type="out" id="16" />
+        <usecase name="USECASE_AUDIO_RECORD_VOIP" type="in" id="16" />
     </pcm_ids>
     <config_params>
         <param key="spkr_1_tz_name" value="wsatz.13"/>
diff --git a/configs/sdm670/audio_platform_info_intcodec.xml b/configs/sdm670/audio_platform_info_intcodec.xml
index d04ced2..4b3c44f 100644
--- a/configs/sdm670/audio_platform_info_intcodec.xml
+++ b/configs/sdm670/audio_platform_info_intcodec.xml
@@ -60,6 +60,8 @@
         <usecase name="USECASE_AUDIO_PLAYBACK_EXT_DISP_SILENCE" type="out" id="27" />
         <usecase name="USECASE_AUDIO_HFP_SCO" type="in" id="12" />
         <usecase name="USECASE_AUDIO_HFP_SCO_WB" type="in" id="12" />
+        <usecase name="USECASE_AUDIO_PLAYBACK_VOIP" type="out" id="16" />
+        <usecase name="USECASE_AUDIO_RECORD_VOIP" type="in" id="16" />
     </pcm_ids>
     <config_params>
         <!-- In the below value string, the value indicates default mono -->
diff --git a/configs/sdm670/audio_platform_info_skuw.xml b/configs/sdm670/audio_platform_info_skuw.xml
new file mode 100644
index 0000000..475a441
--- /dev/null
+++ b/configs/sdm670/audio_platform_info_skuw.xml
@@ -0,0 +1,204 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!-- Copyright (c) 2014, 2016-2017, The Linux Foundation. All rights reserved.   -->
+<!--                                                                             -->
+<!-- Redistribution and use in source and binary forms, with or without          -->
+<!-- modification, are permitted provided that the following conditions are      -->
+<!-- met:                                                                        -->
+<!--     * Redistributions of source code must retain the above copyright        -->
+<!--       notice, this list of conditions and the following disclaimer.         -->
+<!--     * Redistributions in binary form must reproduce the above               -->
+<!--       copyright notice, this list of conditions and the following           -->
+<!--       disclaimer in the documentation and/or other materials provided       -->
+<!--       with the distribution.                                                -->
+<!--     * Neither the name of The Linux Foundation nor the names of its         -->
+<!--       contributors may be used to endorse or promote products derived       -->
+<!--       from this software without specific prior written permission.         -->
+<!--                                                                             -->
+<!-- THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED                -->
+<!-- WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF        -->
+<!-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT      -->
+<!-- ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS      -->
+<!-- BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR      -->
+<!-- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF        -->
+<!-- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR             -->
+<!-- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,       -->
+<!-- WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE        -->
+<!-- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN      -->
+<!-- IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.                               -->
+<audio_platform_info>
+    <bit_width_configs>
+        <device name="SND_DEVICE_OUT_SPEAKER" bit_width="24"/>
+    </bit_width_configs>
+    <interface_names>
+        <device name="AUDIO_DEVICE_IN_BUILTIN_MIC" interface="INT3_MI2S" codec_type="internal"/>
+        <device name="AUDIO_DEVICE_IN_BACK_MIC" interface="INT3_MI2S" codec_type="internal"/>
+    </interface_names>
+    <pcm_ids>
+        <usecase name="USECASE_AUDIO_PLAYBACK_LOW_LATENCY" type="out" id="13"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD" type="out" id="8"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD2" type="out" id="15"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD3" type="out" id="16"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD4" type="out" id="28"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD5" type="out" id="29"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD6" type="out" id="30"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD7" type="out" id="31"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD8" type="out" id="32"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD9" type="out" id="33"/>
+        <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="19"/>
+        <usecase name="USECASE_VOICEMMODE2_CALL" type="out" id="19"/>
+        <usecase name="USECASE_VOWLAN_CALL" type="in" id="-1"/>
+        <usecase name="USECASE_VOWLAN_CALL" type="out" id="-1"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_FM" type="out" id="5"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_FM" type="in" id="34"/>
+        <usecase name="USECASE_AUDIO_SPKR_CALIB_RX" type="out" id="5"/>
+        <usecase name="USECASE_AUDIO_SPKR_CALIB_TX" type="in" id="40"/>
+        <usecase name="USECASE_AUDIO_PLAYBACK_AFE_PROXY" type="out" id="6"/>
+        <usecase name="USECASE_AUDIO_RECORD_AFE_PROXY" type="in" id="7"/>
+        <usecase name="USECASE_AUDIO_RECORD_LOW_LATENCY" type="in" id="17" />
+        <usecase name="USECASE_AUDIO_PLAYBACK_ULL" type="out" id="17" />
+        <usecase name="USECASE_AUDIO_PLAYBACK_EXT_DISP_SILENCE" type="out" id="27" />
+        <usecase name="USECASE_AUDIO_HFP_SCO" type="in" id="12" />
+        <usecase name="USECASE_AUDIO_HFP_SCO_WB" type="in" id="12" />
+        <usecase name="USECASE_AUDIO_PLAYBACK_VOIP" type="out" id="16" />
+        <usecase name="USECASE_AUDIO_RECORD_VOIP" type="in" id="16" />
+    </pcm_ids>
+    <config_params>
+        <!-- In the below value string, the value indicates default mono -->
+        <!-- speaker. It can be set to either left or right              -->
+        <param key="spkr_1_tz_name" value="wsatz.13"/>
+        <param key="spkr_2_tz_name" value="wsatz.14"/>
+        <param key="true_32_bit" value="true"/>
+        <param key="native_audio_mode" value="true"/>
+        <param key="hfp_pcm_dev_id" value="39"/>
+        <param key="input_mic_max_count" value="2"/>
+    </config_params>
+    <acdb_ids>
+        <device name="SND_DEVICE_OUT_SPEAKER" acdb_id="14"/>
+        <device name="SND_DEVICE_OUT_SPEAKER_PROTECTED" acdb_id="136"/>
+        <device name="SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED" acdb_id="136"/>
+        <device name="SND_DEVICE_OUT_SPEAKER_PROTECTED_VBAT" acdb_id="136"/>
+        <device name="SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED_VBAT" acdb_id="136"/>
+        <device name="SND_DEVICE_IN_CAPTURE_VI_FEEDBACK" acdb_id="137"/>
+        <device name="SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED" acdb_id="150"/>
+        <device name="SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED_VBAT" acdb_id="150"/>
+        <device name="SND_DEVICE_IN_CAPTURE_VI_FEEDBACK_MONO_1" acdb_id="151"/>
+        <device name="SND_DEVICE_IN_CAPTURE_VI_FEEDBACK_MONO_2" acdb_id="152"/>
+        <device name="SND_DEVICE_OUT_SPEAKER_EXTERNAL_1" acdb_id="14"/>
+        <device name="SND_DEVICE_OUT_SPEAKER_EXTERNAL_2" acdb_id="14"/>
+        <device name="SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES_EXTERNAL_1" acdb_id="10"/>
+        <device name="SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES_EXTERNAL_2" acdb_id="10"/>
+        <device name="SND_DEVICE_OUT_SPEAKER_AND_USB_HEADSET" acdb_id="45"/>
+    </acdb_ids>
+    <backend_names>
+        <device name="SND_DEVICE_OUT_HEADPHONES" backend="headphones" interface="INT0_MI2S_RX"/>
+        <device name="SND_DEVICE_OUT_BT_SCO_WB" backend="bt-sco-wb" interface="SLIMBUS_7_RX"/>
+        <device name="SND_DEVICE_OUT_BT_SCO" backend="bt-sco" interface="SLIMBUS_7_RX"/>
+        <device name="SND_DEVICE_OUT_BT_A2DP" backend="bt-a2dp" interface="SLIMBUS_7_RX"/>
+        <device name="SND_DEVICE_OUT_LINE" backend="headphones" interface="INT0_MI2S_RX"/>
+        <device name="SND_DEVICE_OUT_ANC_HEADSET" backend="headphones" interface="INT0_MI2S_RX"/>
+        <device name="SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES" backend="speaker-and-headphones" interface="INT4_MI2S_RX-and-INT0_MI2S_RX"/>
+        <device name="SND_DEVICE_OUT_SPEAKER_AND_LINE" backend="speaker-and-headphones" interface="INT4_MI2S_RX-and-INT0_MI2S_RX"/>
+        <device name="SND_DEVICE_OUT_SPEAKER_AND_ANC_HEADSET" backend="speaker-and-headphones" interface="INT4_MI2S_RX-and-INT0_MI2S_RX"/>
+        <device name="SND_DEVICE_OUT_VOICE_HEADPHONES" backend="headphones" interface="INT0_MI2S_RX"/>
+        <device name="SND_DEVICE_OUT_VOICE_ANC_HEADSET" backend="headphones" interface="INT0_MI2S_RX"/>
+        <device name="SND_DEVICE_OUT_VOICE_LINE" backend="headphones" interface="INT0_MI2S_RX"/>
+        <device name="SND_DEVICE_OUT_VOICE_TTY_FULL_HEADPHONES" backend="headphones" interface="INT0_MI2S_RX"/>
+        <device name="SND_DEVICE_OUT_VOICE_TTY_VCO_HEADPHONES" backend="headphones" interface="INT0_MI2S_RX"/>
+        <device name="SND_DEVICE_OUT_HANDSET" backend="handset" interface="INT0_MI2S_RX"/>
+        <device name="SND_DEVICE_OUT_SPEAKER" interface="INT4_MI2S_RX"/>
+        <device name="SND_DEVICE_OUT_SPEAKER_EXTERNAL_1" interface="INT4_MI2S_RX"/>
+        <device name="SND_DEVICE_OUT_SPEAKER_EXTERNAL_2" interface="INT4_MI2S_RX"/>
+        <device name="SND_DEVICE_OUT_SPEAKER_REVERSE" interface="INT4_MI2S_RX"/>
+        <device name="SND_DEVICE_OUT_SPEAKER_VBAT" interface="INT4_MI2S_RX"/>
+        <device name="SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES_EXTERNAL_1" interface="INT4_MI2S_RX-and-INT0_MI2S_RX"/>
+        <device name="SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES_EXTERNAL_2" interface="INT4_MI2S_RX-and-INT0_MI2S_RX"/>
+        <device name="SND_DEVICE_OUT_VOICE_HANDSET" backend="handset" interface="INT0_MI2S_RX"/>
+        <device name="SND_DEVICE_OUT_VOICE_SPEAKER" interface="INT4_MI2S_RX"/>
+        <device name="SND_DEVICE_OUT_VOICE_SPEAKER_VBAT" interface="INT4_MI2S_RX"/>
+        <device name="SND_DEVICE_OUT_VOICE_SPEAKER_2" interface="INT4_MI2S_RX"/>
+        <device name="SND_DEVICE_OUT_VOICE_SPEAKER_2_VBAT" interface="INT4_MI2S_RX"/>
+        <device name="SND_DEVICE_OUT_SPEAKER_AND_HDMI" interface="INT4_MI2S_RX-and-HDMI"/>
+        <device name="SND_DEVICE_OUT_SPEAKER_AND_DISPLAY_PORT" interface="INT4_MI2S_RX-and-DISPLAY_PORT"/>
+        <device name="SND_DEVICE_OUT_SPEAKER_AND_BT_A2DP" interface="INT4_MI2S_RX-and-SLIMBUS_7_RX"/>
+        <device name="SND_DEVICE_OUT_VOICE_TTY_HCO_HANDSET" interface="INT0_MI2S_RX"/>
+        <device name="SND_DEVICE_OUT_ANC_FB_HEADSET" interface="INT0_MI2S_RX"/>
+        <device name="SND_DEVICE_OUT_VOICE_ANC_FB_HEADSET" interface="INT0_MI2S_RX"/>
+        <device name="SND_DEVICE_OUT_ANC_HANDSET" backend="handset" interface="INT0_MI2S_RX"/>
+        <device name="SND_DEVICE_OUT_SPEAKER_PROTECTED" interface="INT5_MI2S_TX"/>
+        <device name="SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED" interface="INT5_MI2S_TX"/>
+        <device name="SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED" interface="INT5_MI2S_TX"/>
+        <device name="SND_DEVICE_OUT_SPEAKER_PROTECTED_VBAT" interface="INT5_MI2S_TX"/>
+        <device name="SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED_VBAT" interface="INT5_MI2S_TX"/>
+        <device name="SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED_VBAT" interface="INT5_MI2S_TX"/>
+        <device name="SND_DEVICE_OUT_SPEAKER_WSA" interface="INT4_MI2S_RX"/>
+        <device name="SND_DEVICE_OUT_VOICE_SPEAKER_WSA" interface="INT4_MI2S_RX"/>
+        <device name="SND_DEVICE_OUT_VOICE_SPEAKER_2_WSA" interface="INT4_MI2S_RX"/>
+        <device name="SND_DEVICE_IN_HANDSET_MIC" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_HANDSET_MIC_EXTERNAL" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_HANDSET_MIC_AEC" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_HANDSET_MIC_NS" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_HANDSET_MIC_AEC_NS" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_HANDSET_DMIC" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_HANDSET_DMIC_AEC" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_HANDSET_DMIC_NS" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_HANDSET_DMIC_AEC_NS" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_SPEAKER_MIC" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_SPEAKER_MIC_AEC" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_SPEAKER_MIC_NS" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_SPEAKER_MIC_AEC_NS" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_SPEAKER_DMIC" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_SPEAKER_DMIC_NS" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_HEADSET_MIC" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_HEADSET_MIC_FLUENCE" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_VOICE_SPEAKER_MIC" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_VOICE_HEADSET_MIC" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_HDMI_MIC" interface="HDMI"/>
+        <device name="SND_DEVICE_IN_BT_SCO_MIC" interface="SLIMBUS_7_TX"/>
+        <device name="SND_DEVICE_IN_BT_SCO_MIC_NREC" interface="SLIMBUS_7_TX"/>
+        <device name="SND_DEVICE_IN_BT_SCO_MIC_WB" interface="SLIMBUS_7_TX"/>
+        <device name="SND_DEVICE_IN_BT_SCO_MIC_WB_NREC" interface="SLIMBUS_7_TX"/>
+        <device name="SND_DEVICE_IN_CAMCORDER_MIC" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_VOICE_DMIC" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_VOICE_SPEAKER_DMIC" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_VOICE_SPEAKER_QMIC" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_VOICE_TTY_VCO_HANDSET_MIC" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_VOICE_TTY_HCO_HEADSET_MIC" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_VOICE_REC_MIC" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_VOICE_REC_MIC_NS" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_VOICE_REC_DMIC_STEREO" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_AANC_HANDSET_MIC" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_QUAD_MIC" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_HANDSET_STEREO_DMIC" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_SPEAKER_STEREO_DMIC" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_CAPTURE_VI_FEEDBACK" interface="INT5_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_CAPTURE_VI_FEEDBACK_MONO_1" interface="INT5_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_CAPTURE_VI_FEEDBACK_MONO_2" interface="INT5_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_VOICE_SPEAKER_DMIC_BROADSIDE" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_SPEAKER_DMIC_BROADSIDE" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_BROADSIDE" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_SPEAKER_DMIC_NS_BROADSIDE" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_BROADSIDE" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_VOICE_FLUENCE_DMIC_AANC" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_HANDSET_QMIC" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_SPEAKER_QMIC_AEC" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_SPEAKER_QMIC_NS" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_SPEAKER_QMIC_AEC_NS" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_THREE_MIC" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_HANDSET_TMIC" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_VOICE_REC_TMIC" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_UNPROCESSED_MIC" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_UNPROCESSED_STEREO_MIC" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_UNPROCESSED_THREE_MIC" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_UNPROCESSED_QUAD_MIC" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC" interface="INT3_MI2S_TX"/>
+        <device name="SND_DEVICE_OUT_VOICE_SPEAKER_AND_VOICE_HEADPHONES" backend="speaker-and-headphones" interface="INT4_MI2S_RX-and-INT0_MI2S_RX"/>
+        <device name="SND_DEVICE_OUT_VOICE_SPEAKER_AND_VOICE_ANC_HEADSET" backend="speaker-and-headphones" interface="INT4_MI2S_RX-and-INT0_MI2S_RX"/>
+        </backend_names>
+</audio_platform_info>
+
diff --git a/configs/sdm670/audio_policy_configuration.xml b/configs/sdm670/audio_policy_configuration.xml
index 8e51ba5..418cf42 100644
--- a/configs/sdm670/audio_policy_configuration.xml
+++ b/configs/sdm670/audio_policy_configuration.xml
@@ -328,7 +328,7 @@
                 <route type="mix" sink="voice_rx"
                        sources="Telephony Rx"/>
                 <route type="mix" sink="primary input"
-                       sources="Built-In Mic,Wired Headset Mic,BT SCO Headset Mic,FM Tuner,USB Device In,Telephony Rx"/>
+                       sources="Wired Headset Mic,BT SCO Headset Mic,FM Tuner,USB Device In,Telephony Rx"/>
                 <route type="mix" sink="surround_sound"
                        sources="Built-In Mic,Built-In Back Mic"/>
                 <route type="mix" sink="record_24"
diff --git a/configs/sdm670/mixer_paths.xml b/configs/sdm670/mixer_paths.xml
index 5f81e65..e72de16 100644
--- a/configs/sdm670/mixer_paths.xml
+++ b/configs/sdm670/mixer_paths.xml
@@ -158,6 +158,7 @@
     <ctl name="INT3_MI2S_TX Channels" value="One" />
     <ctl name="I2S TX2 INP1" value="ZERO" />
     <ctl name="I2S TX2 INP2" value="ZERO" />
+    <ctl name="ADC1_INP1 Switch" value="0" />
     <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia4" value="0" />
     <ctl name="HDMI Mixer MultiMedia4" value="0" />
     <ctl name="INT4_MI2S_RX_VI_FB_MONO_CH_MUX" value="ZERO" />
@@ -1584,6 +1585,7 @@
     <path name="adc1">
         <ctl name="ADC1 Volume" value="6" />
         <ctl name="DEC1 MUX" value="ADC1" />
+        <ctl name="ADC1_INP1 Switch" value="1" />
     </path>
 
     <path name="adc2">
diff --git a/configs/sdm670/mixer_paths_mtp.xml b/configs/sdm670/mixer_paths_mtp.xml
index 9b462a4..bbfe732 100644
--- a/configs/sdm670/mixer_paths_mtp.xml
+++ b/configs/sdm670/mixer_paths_mtp.xml
@@ -67,6 +67,9 @@
     <ctl name="MultiMedia1 Mixer SLIM_7_TX" value="0" />
     <ctl name="MultiMedia8 Mixer INT3_MI2S_TX" value="0" />
     <ctl name="MultiMedia8 Mixer SLIM_7_TX" value="0" />
+    <ctl name="MultiMedia10 Mixer INT3_MI2S_TX" value="0" />
+    <ctl name="MultiMedia10 Mixer SLIM_7_TX" value="0" />
+    <ctl name="MultiMedia10 Mixer AFE_PCM_TX" value="0" />
     <ctl name="DISPLAY_PORT Mixer MultiMedia1" value="0" />
     <ctl name="DISPLAY_PORT Mixer MultiMedia2" value="0" />
     <ctl name="DISPLAY_PORT Mixer MultiMedia3" value="0" />
@@ -135,9 +138,11 @@
     <ctl name="MultiMedia2 Mixer USB_AUDIO_TX" value="0" />
     <ctl name="MultiMedia5 Mixer USB_AUDIO_TX" value="0" />
     <ctl name="MultiMedia8 Mixer USB_AUDIO_TX" value="0" />
+    <ctl name="MultiMedia10 Mixer USB_AUDIO_TX" value="0" />
     <ctl name="USB_AUDIO_TX Format" value="S16_LE" />
     <ctl name="USB_AUDIO_TX SampleRate" value="KHZ_48" />
     <ctl name="USB_AUDIO_TX Channels" value="One" />
+    <ctl name="ADC1_INP1 Switch" value="0" />
     <ctl name="MultiMedia6 Mixer INT3_MI2S_TX" value="0" />
     <ctl name="INT4_MI2S_RX Channels" value="One" />
     <ctl name="INT0_MI2S_RX Channels" value="One" />
@@ -1447,6 +1452,63 @@
         <ctl name="VoiceMMode2_Tx Mixer USB_AUDIO_TX_MMode2" value="1" />
     </path>
 
+    <!-- VOIP Rx settings -->
+    <path name="audio-playback-voip">
+        <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia10" value="1" />
+    </path>
+
+    <path name="audio-playback-voip headphones">
+        <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia10" value="1" />
+    </path>
+
+    <path name="audio-playback-voip bt-sco">
+        <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia10" value="1" />
+    </path>
+
+    <path name="audio-playback-voip bt-sco-wb">
+        <ctl name="BT SampleRate" value="KHZ_16" />
+        <path name="audio-playback-voip bt-sco" />
+    </path>
+
+    <path name="audio-playback-voip afe-proxy">
+        <ctl name="AFE_PCM_RX Audio Mixer MultiMedia10" value="1" />
+    </path>
+
+    <path name="audio-playback-voip usb-headphones">
+        <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia10" value="1" />
+    </path>
+
+    <path name="audio-playback-voip usb-headset">
+        <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia10" value="1" />
+    </path>
+
+    <path name="audio-playback-voip display-port">
+        <ctl name="DISPLAY_PORT Audio Mixer MultiMedia10" value="1" />
+    </path>
+
+    <path name="audio-playback-voip speaker-and-display-port">
+        <path name="audio-playback-voip display-port" />
+        <path name="audio-playback-voip" />
+    </path>
+
+    <!-- VoIP Tx settings -->
+    <path name="audio-record-voip">
+        <ctl name="MultiMedia10 Mixer INT3_MI2S_TX" value="1" />
+    </path>
+
+    <path name="audio-record-voip usb-headset-mic">
+        <ctl name="MultiMedia10 Mixer USB_AUDIO_TX" value="1" />
+    </path>
+
+    <path name="audio-record-voip bt-sco">
+        <ctl name="MultiMedia10 Mixer SLIM_7_TX" value="1" />
+    </path>
+
+    <path name="audio-record-voip bt-sco-wb">
+        <ctl name="BT SampleRate" value="KHZ_16" />
+        <path name="audio-record-voip bt-sco" />
+   </path>
+
    <path name="spkr-rx-calib">
         <ctl name="INT4_MI2S_RX_DL_HL Switch"  value="1" />
     </path>
@@ -1458,6 +1520,7 @@
     <path name="adc1">
         <ctl name="ADC1 Volume" value="6" />
         <ctl name="DEC1 MUX" value="ADC1" />
+        <ctl name="ADC1_INP1 Switch" value="1" />
     </path>
 
     <path name="adc2">
diff --git a/configs/sdm670/mixer_paths_skuw.xml b/configs/sdm670/mixer_paths_skuw.xml
new file mode 100644
index 0000000..7ed5142
--- /dev/null
+++ b/configs/sdm670/mixer_paths_skuw.xml
@@ -0,0 +1,2404 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!-- Copyright (c) 2015-2017, The Linux Foundation. All rights reserved.    -->
+<!--                                                                        -->
+<!-- Redistribution and use in source and binary forms, with or without     -->
+<!-- modification, are permitted provided that the following conditions are -->
+<!-- met:                                                                   -->
+<!--     * Redistributions of source code must retain the above copyright   -->
+<!--       notice, this list of conditions and the following disclaimer.    -->
+<!--     * Redistributions in binary form must reproduce the above          -->
+<!--       copyright notice, this list of conditions and the following      -->
+<!--       disclaimer in the documentation and/or other materials provided  -->
+<!--       with the distribution.                                           -->
+<!--     * Neither the name of The Linux Foundation nor the names of its    -->
+<!--       contributors may be used to endorse or promote products derived  -->
+<!--       from this software without specific prior written permission.    -->
+<!--                                                                        -->
+<!-- THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED           -->
+<!-- WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF   -->
+<!-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT -->
+<!-- ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS -->
+<!-- BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -->
+<!-- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF   -->
+<!-- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR        -->
+<!-- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,  -->
+<!-- WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE   -->
+<!-- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -->
+<!-- IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.                          -->
+<mixer>
+    <!-- These are the initial mixer settings -->
+    <ctl name="Voice Rx Device Mute" id="0" value="0" />
+    <ctl name="Voice Rx Device Mute" id="1" value="-1" />
+    <ctl name="Voice Rx Device Mute" id="2" value="20" />
+    <ctl name="Voice Tx Mute" id="0" value="0" />
+    <ctl name="Voice Tx Mute" id="1" value="-1" />
+    <ctl name="Voice Tx Mute" id="2" value="500" />
+    <ctl name="Voice Rx Gain" id="0" value="0" />
+    <ctl name="Voice Rx Gain" id="1" value="-1" />
+    <ctl name="Voice Rx Gain" id="2" value="20" />
+    <ctl name="Voip Tx Mute" id="0" value="0" />
+    <ctl name="Voip Tx Mute" id="1" value="500" />
+    <ctl name="Voip Rx Gain" id="0" value="0" />
+    <ctl name="Voip Rx Gain" id="1" value="20" />
+    <ctl name="Voip Mode Config" value="12" />
+    <ctl name="Voip Rate Config" value="0" />
+    <ctl name="Voip Evrc Min Max Rate Config" id="0" value="1" />
+    <ctl name="Voip Evrc Min Max Rate Config" id="1" value="4" />
+    <ctl name="Voip Dtx Mode" value="0" />
+    <ctl name="TTY Mode" value="OFF" />
+    <ctl name="INT4_MI2S_RX Port Mixer INT3_MI2S_TX" value="0" />
+    <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia1" value="0" />
+    <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia4" value="0" />
+    <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia5" value="0" />
+    <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia7" value="0" />
+    <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia8" value="0" />
+    <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia10" value="0" />
+    <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia11" value="0" />
+    <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia12" value="0" />
+    <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia13" value="0" />
+    <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia14" value="0" />
+    <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia15" value="0" />
+    <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia16" value="0" />
+    <ctl name="INT0_MI2S_RX Port Mixer INT3_MI2S_TX" value="0" />
+    <ctl name="MultiMedia5 Mixer INT3_MI2S_TX" value="0" />
+    <ctl name="MultiMedia5 Mixer AFE_PCM_TX" value="0" />
+    <ctl name="MultiMedia5 Mixer SLIM_8_TX" value="0" />
+    <ctl name="MultiMedia5 Mixer SLIM_7_TX" value="0" />
+    <ctl name="MultiMedia1 Mixer INT3_MI2S_TX" value="0" />
+    <ctl name="MultiMedia1 Mixer SLIM_7_TX" value="0" />
+    <ctl name="MultiMedia8 Mixer INT3_MI2S_TX" value="0" />
+    <ctl name="MultiMedia8 Mixer SLIM_7_TX" value="0" />
+    <ctl name="MultiMedia10 Mixer INT3_MI2S_TX" value="0" />
+    <ctl name="MultiMedia10 Mixer SLIM_7_TX" value="0" />
+    <ctl name="MultiMedia10 Mixer AFE_PCM_TX" value="0" />
+    <ctl name="HDMI Mixer MultiMedia1" value="0" />
+    <ctl name="HDMI Mixer MultiMedia2" value="0" />
+    <ctl name="HDMI Mixer MultiMedia3" value="0" />
+    <ctl name="HDMI Mixer MultiMedia4" value="0" />
+    <ctl name="HDMI Mixer MultiMedia5" value="0" />
+    <ctl name="HDMI Mixer MultiMedia7" value="0" />
+    <ctl name="HDMI Mixer MultiMedia9" value="0" />
+    <ctl name="HDMI Mixer MultiMedia10" value="0" />
+    <ctl name="HDMI Mixer MultiMedia11" value="0" />
+    <ctl name="HDMI Mixer MultiMedia12" value="0" />
+    <ctl name="HDMI Mixer MultiMedia13" value="0" />
+    <ctl name="HDMI Mixer MultiMedia14" value="0" />
+    <ctl name="HDMI Mixer MultiMedia15" value="0" />
+    <ctl name="HDMI Mixer MultiMedia16" value="0" />
+    <ctl name="DISPLAY_PORT Mixer MultiMedia1" value="0" />
+    <ctl name="DISPLAY_PORT Mixer MultiMedia2" value="0" />
+    <ctl name="DISPLAY_PORT Mixer MultiMedia3" value="0" />
+    <ctl name="DISPLAY_PORT Mixer MultiMedia4" value="0" />
+    <ctl name="DISPLAY_PORT Mixer MultiMedia5" value="0" />
+    <ctl name="DISPLAY_PORT Mixer MultiMedia6" value="0" />
+    <ctl name="DISPLAY_PORT Mixer MultiMedia7" value="0" />
+    <ctl name="DISPLAY_PORT Mixer MultiMedia8" value="0" />
+    <ctl name="DISPLAY_PORT Mixer MultiMedia9" value="0" />
+    <ctl name="DISPLAY_PORT Mixer MultiMedia10" value="0" />
+    <ctl name="DISPLAY_PORT Mixer MultiMedia11" value="0" />
+    <ctl name="DISPLAY_PORT Mixer MultiMedia12" value="0" />
+    <ctl name="DISPLAY_PORT Mixer MultiMedia13" value="0" />
+    <ctl name="DISPLAY_PORT Mixer MultiMedia14" value="0" />
+    <ctl name="DISPLAY_PORT Mixer MultiMedia15" value="0" />
+    <ctl name="DISPLAY_PORT Mixer MultiMedia16" value="0" />
+    <ctl name="Display Port RX Bit Format" value="S16_LE" />
+    <ctl name="Display Port RX SampleRate" value="KHZ_48" />
+    <ctl name="Display Port RX Channels" value="Two" />
+    <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia1" value="0" />
+    <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia1" value="0" />
+    <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia2" value="0" />
+    <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia2" value="0" />
+    <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia3" value="0" />
+    <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia3" value="0" />
+    <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia4" value="0" />
+    <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia4" value="0" />
+    <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia5" value="0" />
+    <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia5" value="0" />
+    <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia7" value="0" />
+    <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia7" value="0" />
+    <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia8" value="0" />
+    <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia8" value="0" />
+    <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia10" value="0" />
+    <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia10" value="0" />
+    <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia11" value="0" />
+    <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia11" value="0" />
+    <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia12" value="0" />
+    <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia12" value="0" />
+    <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia13" value="0" />
+    <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia13" value="0" />
+    <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia14" value="0" />
+    <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia14" value="0" />
+    <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia15" value="0" />
+    <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia15" value="0" />
+    <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia16" value="0" />
+    <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia16" value="0" />
+    <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia1" value="0" />
+    <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia2" value="0" />
+    <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia3" value="0" />
+    <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia4" value="0" />
+    <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia5" value="0" />
+    <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia7" value="0" />
+    <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia8" value="0" />
+    <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia10" value="0" />
+    <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia11" value="0" />
+    <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia12" value="0" />
+    <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia13" value="0" />
+    <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia14" value="0" />
+    <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia15" value="0" />
+    <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia16" value="0" />
+    <ctl name="USB_AUDIO_RX Format" value="S16_LE" />
+    <ctl name="USB_AUDIO_RX SampleRate" value="KHZ_48" />
+    <ctl name="USB_AUDIO_RX Channels" value="Two" />
+    <ctl name="MultiMedia1 Mixer USB_AUDIO_TX" value="0" />
+    <ctl name="MultiMedia5 Mixer USB_AUDIO_TX" value="0" />
+    <ctl name="MultiMedia8 Mixer USB_AUDIO_TX" value="0" />
+    <ctl name="MultiMedia10 Mixer USB_AUDIO_TX" value="0" />
+    <ctl name="USB_AUDIO_TX Format" value="S16_LE" />
+    <ctl name="USB_AUDIO_TX SampleRate" value="KHZ_48" />
+    <ctl name="USB_AUDIO_TX Channels" value="One" />
+    <ctl name="MultiMedia6 Mixer INT3_MI2S_TX" value="0" />
+    <ctl name="INT4_MI2S_RX Channels" value="One" />
+    <ctl name="INT0_MI2S_RX Channels" value="One" />
+    <ctl name="INT3_MI2S_TX Channels" value="One" />
+    <ctl name="I2S TX2 INP1" value="ZERO" />
+    <ctl name="I2S TX2 INP2" value="ZERO" />
+    <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia4" value="0" />
+    <ctl name="INT4_MI2S_RX_VI_FB_MONO_CH_MUX" value="ZERO" />
+    <ctl name="INT4_MI2S_RX_VI_FB_STEREO_CH_MUX" value="ZERO" />
+    <ctl name="VI_FEED_TX Channels" value="One" />
+    <ctl name="AIF1_VI_SDW Mixer SPKR_VI_1" value="0" />
+    <ctl name="AIF1_VI_SDW Mixer SPKR_VI_2" value="0" />
+    <ctl name="INT5 MI2S VI MONO" value="Left" />
+    <!-- HFP start -->
+    <ctl name="HFP_SLIM7_UL_HL Switch" value="0" />
+    <ctl name="INT4_MI2S_RX Port Mixer SLIM_7_TX" value="0" />
+    <ctl name="INT0_MI2S_RX Port Mixer SLIM_7_TX" value="0" />
+    <!-- HFP end -->
+    <!-- echo reference -->
+    <ctl name="AUDIO_REF_EC_UL1 MUX" value="None" />
+    <!-- usb headset -->
+    <ctl name="AFE_PCM_RX Audio Mixer MultiMedia1" value="0" />
+    <ctl name="AFE_PCM_RX Audio Mixer MultiMedia4" value="0" />
+    <ctl name="AFE_PCM_RX Audio Mixer MultiMedia7" value="0" />
+    <ctl name="AFE_PCM_RX Audio Mixer MultiMedia10" value="0" />
+    <ctl name="AFE_PCM_RX Audio Mixer MultiMedia11" value="0" />
+    <ctl name="AFE_PCM_RX Audio Mixer MultiMedia12" value="0" />
+    <ctl name="AFE_PCM_RX Audio Mixer MultiMedia13" value="0" />
+    <ctl name="AFE_PCM_RX Audio Mixer MultiMedia14" value="0" />
+    <ctl name="AFE_PCM_RX Audio Mixer MultiMedia15" value="0" />
+    <ctl name="AFE_PCM_RX Audio Mixer MultiMedia16" value="0" />
+    <ctl name="MultiMedia1 Mixer AFE_PCM_TX" value="0" />
+    <ctl name="AFE_PCM_RX Audio Mixer MultiMedia5" value="0" />
+    <!-- usb headset end -->
+    <!-- fm -->
+    <ctl name="SLIMBUS_8 LOOPBACK Volume" value="0" />
+    <ctl name="INT4_MI2S_RX Port Mixer SLIM_8_TX" value="0" />
+    <ctl name="INT4_MI2S_RX_DL_HL Switch" value="0" />
+    <ctl name="INT0_MI2S_RX Port Mixer SLIM_8_TX" value="0" />
+    <ctl name="INT0_MI2S_RX_DL_HL Switch" value="0" />
+    <ctl name="MultiMedia1 Mixer SLIM_8_TX" value="0" />
+    <ctl name="MultiMedia2 Mixer SLIM_8_TX" value="0" />
+    <!-- fm end -->
+
+    <!-- Multimode Voice1 -->
+    <ctl name="INT4_MI2S_RX_Voice Mixer VoiceMMode1" value="0" />
+    <ctl name="INT0_MI2S_RX_Voice Mixer VoiceMMode1" value="0" />
+    <ctl name="VoiceMMode1_Tx Mixer INT3_MI2S_TX_MMode1" value="0" />
+    <!-- Multimode Voice1 HDMI -->
+    <ctl name="HDMI_RX_Voice Mixer VoiceMMode1" value="0" />
+    <!-- Multimode Voice1 BTSCO -->
+    <ctl name="SLIM_7_RX_Voice Mixer VoiceMMode1" value="0" />
+    <ctl name="VoiceMMode1_Tx Mixer SLIM_7_TX_MMode1" value="0" />
+    <!-- Multimode Voice1 USB headset -->
+    <ctl name="AFE_PCM_RX_Voice Mixer VoiceMMode1" value="0" />
+    <ctl name="VoiceMMode1_Tx Mixer AFE_PCM_TX_MMode1" value="0" />
+    <ctl name="USB_AUDIO_RX_Voice Mixer VoiceMMode1" value="0" />
+    <ctl name="VoiceMMode1_Tx Mixer USB_AUDIO_TX_MMode1" value="0" />
+    <!-- Miltimode Voice1 end-->
+
+    <!-- Multimode Voice2 -->
+    <ctl name="INT4_MI2S_RX_Voice Mixer VoiceMMode2" value="0" />
+    <ctl name="INT0_MI2S_RX_Voice Mixer VoiceMMode2" value="0" />
+    <ctl name="VoiceMMode2_Tx Mixer INT3_MI2S_TX_MMode2" value="0" />
+    <!-- Multimode Voice2 HDMI -->
+    <ctl name="HDMI_RX_Voice Mixer VoiceMMode2" value="0" />
+    <!-- Multimode Voice2 BTSCO -->
+    <ctl name="SLIM_7_RX_Voice Mixer VoiceMMode2" value="0" />
+    <ctl name="VoiceMMode2_Tx Mixer SLIM_7_TX_MMode2" value="0" />
+    <!-- Multimode Voice2 USB headset -->
+    <ctl name="AFE_PCM_RX_Voice Mixer VoiceMMode2" value="0" />
+    <ctl name="VoiceMMode2_Tx Mixer AFE_PCM_TX_MMode2" value="0" />
+    <ctl name="USB_AUDIO_RX_Voice Mixer VoiceMMode2" value="0" />
+    <ctl name="VoiceMMode2_Tx Mixer USB_AUDIO_TX_MMode2" value="0" />
+    <!-- Multimode Voice2 end-->
+
+    <!-- Voice external ec. reference -->
+    <ctl name="VOC_EXT_EC MUX" value="NONE" />
+    <!-- Voice external ec. reference end -->
+
+    <!-- RT Proxy Cal -->
+    <ctl name="RT_PROXY_1_RX SetCalMode" value="CAL_MODE_NONE" />
+    <ctl name="RT_PROXY_1_TX SetCalMode" value="CAL_MODE_NONE" />
+    <!-- RT Proxy Cal end -->
+
+    <!-- Incall Recording -->
+    <ctl name="MultiMedia1 Mixer VOC_REC_UL" value="0" />
+    <ctl name="MultiMedia1 Mixer VOC_REC_DL" value="0" />
+    <ctl name="MultiMedia8 Mixer VOC_REC_UL" value="0" />
+    <ctl name="MultiMedia8 Mixer VOC_REC_DL" value="0" />
+    <!-- Incall Recording End -->
+
+    <!-- Incall Music -->
+    <ctl name="Incall_Music Audio Mixer MultiMedia2" value="0" />
+    <!-- Incall Music End -->
+
+    <!-- compress-voip-call start -->
+    <ctl name="INT4_MI2S_RX_Voice Mixer Voip" value="0" />
+    <ctl name="INT0_MI2S_RX_Voice Mixer Voip" value="0" />
+    <ctl name="Voip_Tx Mixer INT3_MI2S_TX_Voip" value="0" />
+    <ctl name="SLIM_7_RX_Voice Mixer Voip" value="0" />
+    <ctl name="Voip_Tx Mixer SLIM_7_TX_Voip" value="0" />
+    <ctl name="AFE_PCM_RX_Voice Mixer Voip" value="0" />
+    <ctl name="Voip_Tx Mixer AFE_PCM_TX_Voip" value="0" />
+    <ctl name="USB_AUDIO_RX_Voice Mixer Voip" value="0" />
+    <ctl name="Voip_Tx Mixer USB_AUDIO_TX_Voip" value="0" />
+    <!-- compress-voip-call end-->
+
+    <!-- Audio BTSCO -->
+    <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia1" value="0" />
+    <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia4" value="0" />
+    <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia5" value="0" />
+    <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia6" value="0" />
+    <ctl name="MultiMedia1 Mixer SLIM_7_TX" value="0" />
+    <!-- audio record compress-->
+    <ctl name="MultiMedia8 Mixer INT3_MI2S_TX" value="0" />
+    <ctl name="MultiMedia8 Mixer SLIM_7_TX" value="0" />
+    <ctl name="MultiMedia8 Mixer AFE_PCM_TX" value="0" />
+    <!-- audio record compress end-->
+
+    <!-- split a2dp -->
+    <ctl name="BT SampleRate" value="KHZ_8" />
+    <ctl name="AFE Input Channels" value="Zero" />
+    <ctl name="SLIM7_RX ADM Channels" value="Zero" />
+    <!-- split a2dp end-->
+
+    <!-- ADSP testfwk -->
+    <ctl name="INT4_MI2S_RX_DL_HL Switch" value="0" />
+    <ctl name="INT0_MI2S_RX_DL_HL Switch" value="0" />
+    <!-- ADSP testfwk end-->
+
+    <ctl name="AFE_PCM_RX Audio Mixer MultiMedia3" value="0" />
+
+    <!-- Codec controls -->
+    <!-- WSA controls -->
+    <ctl name="SpkrLeft COMP Switch" value="0" />
+    <ctl name="SpkrRight COMP Switch" value="0" />
+    <ctl name="SpkrLeft BOOST Switch" value="0" />
+    <ctl name="SpkrRight BOOST Switch" value="0" />
+    <ctl name="SpkrLeft VISENSE Switch" value="0" />
+    <ctl name="SpkrRight VISENSE Switch" value="0" />
+    <ctl name="SpkrLeft SWR DAC_Port Switch" value="0" />
+    <ctl name="SpkrRight SWR DAC_Port Switch" value="0" />
+    <ctl name="SpkrLeft WSA PA Gain" value="G_0_DB" />
+    <ctl name="EAR SPKR PA Gain" value="G_DEFAULT" />
+
+    <!-- EAR controls -->
+    <ctl name="EAR_S" value="ZERO" />
+
+    <!-- Volume controls -->
+    <ctl name="HPHL Volume" value="9" />
+    <ctl name="HPHR Volume" value="9" />
+    <ctl name="EAR PA Gain" value="POS_1P5_DB" />
+    <ctl name="EAR PA Boost" value="DISABLE" />
+
+    <ctl name="RX1 Digital Volume" value="84" />
+    <ctl name="RX2 Digital Volume" value="84" />
+    <ctl name="RX3 Digital Volume" value="84" />
+    <ctl name="RX4 Digital Volume" value="84" />
+    <ctl name="RX5 Digital Volume" value="84" />
+    <ctl name="ADC1 Volume" value="4" />
+    <ctl name="ADC2 Volume" value="4" />
+    <ctl name="ADC3 Volume" value="4" />
+    <ctl name="DEC1 Volume" value="84" />
+    <ctl name="DEC2 Volume" value="84" />
+    <ctl name="DEC3 Volume" value="84" />
+    <ctl name="DEC4 Volume" value="84" />
+
+    <!-- Compander controls -->
+    <ctl name="COMP1 Switch" value="1" />
+    <ctl name="COMP2 Switch" value="1" />
+
+    <!-- MUX controls -->
+    <ctl name="DEC1 MUX" value="ZERO" />
+    <ctl name="DEC2 MUX" value="ZERO" />
+    <ctl name="DEC3 MUX" value="ZERO" />
+    <ctl name="DEC4 MUX" value="ZERO" />
+    <ctl name="ADC2 MUX" value="ZERO" />
+    <ctl name="RDAC2 MUX" value="ZERO" />
+    <ctl name="ADC1_INP1 Switch" value="0" />
+
+    <!-- Interpolator chain controls -->
+    <!-- ADD RX Chain Controls -->
+
+    <ctl name="RX1 MIX1 INP1" value="ZERO" />
+    <ctl name="RX2 MIX1 INP1" value="ZERO" />
+    <ctl name="RDAC2 MUX" value="ZERO" />
+    <ctl name="HPHL" value="ZERO" />
+    <ctl name="HPHR" value="ZERO" />
+    <ctl name="RX1 MIX2 INP1" value="ZERO" />
+    <ctl name="RX2 MIX2 INP1" value="ZERO" />
+    <ctl name="RX3 MIX1 INP1" value="ZERO" />
+    <ctl name="RX4 MIX1 INP1" value="ZERO" />
+    <ctl name="RX5 MIX1 INP1" value="ZERO" />
+    <ctl name="RX HPH Mode" value="NORMAL" />
+    <ctl name="COMP0 RX1" value="0" />
+    <ctl name="COMP0 RX2" value="0" />
+
+    <!-- IIR/voice anc -->
+    <ctl name="IIR1 Band1" id ="0" value="268435456" />
+    <ctl name="IIR1 Band1" id ="1" value="0" />
+    <ctl name="IIR1 Band1" id ="2" value="0" />
+    <ctl name="IIR1 Band1" id ="3" value="0" />
+    <ctl name="IIR1 Band1" id ="4" value="0" />
+    <ctl name="IIR1 Band2" id ="0" value="268435456" />
+    <ctl name="IIR1 Band2" id ="1" value="0" />
+    <ctl name="IIR1 Band2" id ="2" value="0" />
+    <ctl name="IIR1 Band2" id ="3" value="0" />
+    <ctl name="IIR1 Band2" id ="4" value="0" />
+    <ctl name="IIR1 Band3" id ="0" value="268435456" />
+    <ctl name="IIR1 Band3" id ="1" value="0" />
+    <ctl name="IIR1 Band3" id ="2" value="0" />
+    <ctl name="IIR1 Band3" id ="3" value="0" />
+    <ctl name="IIR1 Band3" id ="4" value="0" />
+    <ctl name="IIR1 Band4" id ="0" value="268435456" />
+    <ctl name="IIR1 Band4" id ="1" value="0" />
+    <ctl name="IIR1 Band4" id ="2" value="0" />
+    <ctl name="IIR1 Band4" id ="3" value="0" />
+    <ctl name="IIR1 Band4" id ="4" value="0" />
+    <ctl name="IIR1 Band5" id ="0" value="268435456" />
+    <ctl name="IIR1 Band5" id ="1" value="0" />
+    <ctl name="IIR1 Band5" id ="2" value="0" />
+    <ctl name="IIR1 Band5" id ="3" value="0" />
+    <ctl name="IIR1 Band5" id ="4" value="0" />
+    <ctl name="IIR1 Enable Band1" value="0" />
+    <ctl name="IIR1 Enable Band2" value="0" />
+    <ctl name="IIR1 Enable Band3" value="0" />
+    <ctl name="IIR1 Enable Band4" value="0" />
+    <ctl name="IIR1 Enable Band5" value="0" />
+    <ctl name="IIR1 INP1 Volume" value="53" />
+    <ctl name="IIR1 INP2 Volume" value="53" />
+    <ctl name="IIR1 INP3 Volume" value="53" />
+    <ctl name="IIR1 INP4 Volume" value="53" />
+    <ctl name="IIR1 INP1 MUX" value="ZERO" />
+
+    <!-- anc related -->
+
+    <!-- Codec controls end -->
+
+    <!-- These are audio route (FE to BE) specific mixer settings -->
+    <path name="gsm-mode">
+        <ctl name="GSM mode Enable" value="ON" />
+    </path>
+
+    <path name="echo-reference speaker-vbat-mono">
+    </path>
+
+    <path name="echo-reference speaker-vbat-mono-2">
+    </path>
+
+    <path name="echo-reference speaker-vbat">
+    </path>
+
+    <path name="echo-reference">
+        <ctl name="AUDIO_REF_EC_UL1 MUX" value="INT4_MI2S_RX" />
+    </path>
+
+    <path name="echo-reference headphones">
+        <ctl name="AUDIO_REF_EC_UL1 MUX" value="INT0_MI2S_RX" />
+    </path>
+
+    <path name="echo-reference headphones-44.1">
+    </path>
+
+    <path name="deep-buffer-playback">
+        <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia1" value="1" />
+    </path>
+
+    <path name="deep-buffer-playback handset">
+        <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia1" value="1" />
+    </path>
+
+    <path name="deep-buffer-playback speaker-protected">
+        <path name="deep-buffer-playback" />
+    </path>
+
+    <path name="deep-buffer-playback hdmi">
+        <ctl name="HDMI Mixer MultiMedia1" value="1" />
+    </path>
+
+    <path name="deep-buffer-playback display-port">
+        <ctl name="DISPLAY_PORT Mixer MultiMedia1" value="1" />
+    </path>
+
+    <path name="deep-buffer-playback speaker-and-hdmi">
+        <path name="deep-buffer-playback hdmi" />
+        <path name="deep-buffer-playback" />
+    </path>
+
+    <path name="deep-buffer-playback speaker-and-display-port">
+        <path name="deep-buffer-playback display-port" />
+        <path name="deep-buffer-playback" />
+    </path>
+
+    <path name="deep-buffer-playback bt-sco">
+        <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia1" value="1" />
+    </path>
+
+    <path name="deep-buffer-playback bt-sco-wb">
+        <ctl name="BT SampleRate" value="KHZ_16" />
+        <path name="deep-buffer-playback bt-sco" />
+    </path>
+
+    <path name="deep-buffer-playback afe-proxy">
+        <ctl name="AFE_PCM_RX Audio Mixer MultiMedia1" value="1" />
+    </path>
+
+    <path name="deep-buffer-playback usb-headphones">
+        <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia1" value="1" />
+    </path>
+
+    <path name="deep-buffer-playback usb-headset">
+        <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia1" value="1" />
+    </path>
+
+    <path name="deep-buffer-playback speaker-and-usb-headphones">
+        <path name="deep-buffer-playback usb-headphones" />
+        <path name="deep-buffer-playback" />
+    </path>
+
+    <path name="deep-buffer-playback headphones">
+        <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia1" value="1" />
+    </path>
+
+    <path name="deep-buffer-playback speaker-and-headphones">
+        <path name="deep-buffer-playback headphones" />
+        <path name="deep-buffer-playback" />
+    </path>
+
+    <path name="low-latency-playback">
+        <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia5" value="1" />
+    </path>
+
+    <path name="low-latency-playback handset">
+        <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia5" value="1" />
+    </path>
+
+    <path name="low-latency-playback speaker-protected">
+        <path name="low-latency-playback" />
+    </path>
+
+    <path name="low-latency-playback hdmi">
+        <ctl name="HDMI Mixer MultiMedia5" value="1" />
+    </path>
+
+    <path name="low-latency-playback display-port">
+        <ctl name="DISPLAY_PORT Mixer MultiMedia5" value="1" />
+    </path>
+
+    <path name="low-latency-playback bt-sco">
+        <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia5" value="1" />
+    </path>
+
+    <path name="low-latency-playback bt-sco-wb">
+        <ctl name="BT SampleRate" value="KHZ_16" />
+        <path name="low-latency-playback bt-sco" />
+    </path>
+
+    <path name="low-latency-playback speaker-and-hdmi">
+        <path name="low-latency-playback hdmi" />
+        <path name="low-latency-playback" />
+    </path>
+
+    <path name="low-latency-playback speaker-and-display-port">
+        <path name="low-latency-playback display-port" />
+        <path name="low-latency-playback" />
+    </path>
+
+    <path name="low-latency-playback afe-proxy">
+        <ctl name="AFE_PCM_RX Audio Mixer MultiMedia5" value="1" />
+    </path>
+
+    <path name="low-latency-playback usb-headphones">
+        <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia5" value="1" />
+    </path>
+
+    <path name="low-latency-playback usb-headset">
+        <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia5" value="1" />
+    </path>
+
+    <path name="low-latency-playback speaker-and-usb-headphones">
+        <path name="low-latency-playback usb-headphones" />
+        <path name="low-latency-playback" />
+    </path>
+
+    <path name="low-latency-playback headphones">
+        <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia5" value="1" />
+    </path>
+
+    <path name="low-latency-playback speaker-and-headphones">
+        <path name="low-latency-playback headphones" />
+        <path name="low-latency-playback" />
+    </path>
+
+    <path name="audio-ull-playback">
+        <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia8" value="1" />
+    </path>
+
+    <path name="audio-ull-playback handset">
+        <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia8" value="1" />
+    </path>
+
+    <path name="audio-ull-playback speaker-protected">
+        <path name="audio-ull-playback" />
+    </path>
+
+    <path name="audio-ull-playback headphones">
+        <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia8" value="1" />
+    </path>
+
+    <path name="audio-ull-playback speaker-and-headphones">
+        <path name="audio-ull-playback" />
+        <path name="audio-ull-playback headphones" />
+    </path>
+
+    <path name="audio-ull-playback hdmi">
+        <ctl name="HDMI Mixer MultiMedia8" value="1" />
+    </path>
+
+    <path name="audio-ull-playback display-port">
+        <ctl name="DISPLAY_PORT Mixer MultiMedia8" value="1" />
+    </path>
+
+    <path name="audio-ull-playback bt-sco">
+        <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia8" value="1" />
+    </path>
+
+    <path name="audio-ull-playback bt-sco-wb">
+        <ctl name="BT SampleRate" value="KHZ_16" />
+        <path name="audio-ull-playback bt-sco" />
+    </path>
+
+    <path name="audio-ull-playback speaker-and-hdmi">
+        <path name="audio-ull-playback hdmi" />
+        <path name="audio-ull-playback" />
+    </path>
+
+    <path name="audio-ull-playback speaker-and-display-port">
+        <path name="audio-ull-playback display-port" />
+        <path name="audio-ull-playback" />
+    </path>
+
+    <path name="audio-ull-playback afe-proxy">
+        <ctl name="AFE_PCM_RX Audio Mixer MultiMedia8" value="1" />
+    </path>
+
+    <path name="audio-ull-playback usb-headphones">
+        <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia8" value="1" />
+    </path>
+
+    <path name="audio-ull-playback usb-headset">
+        <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia8" value="1" />
+    </path>
+
+    <path name="multi-channel-playback hdmi">
+        <ctl name="HDMI Mixer MultiMedia2" value="1" />
+    </path>
+
+    <path name="multi-channel-playback display-port">
+        <ctl name="DISPLAY_PORT Mixer MultiMedia2" value="1" />
+    </path>
+
+    <path name="multi-channel-playback afe-proxy">
+        <ctl name="AFE_PCM_RX Audio Mixer MultiMedia2" value="1" />
+    </path>
+
+    <path name="compress-offload-playback">
+        <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia4" value="1" />
+    </path>
+
+    <path name="compress-offload-playback handset">
+        <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia4" value="1" />
+    </path>
+
+    <path name="compress-offload-playback speaker-protected">
+        <path name="compress-offload-playback" />
+    </path>
+
+    <path name="compress-offload-playback hdmi">
+        <ctl name="HDMI Mixer MultiMedia4" value="1" />
+    </path>
+
+    <path name="silence-playback hdmi">
+        <ctl name="HDMI Mixer MultiMedia9" value="1" />
+    </path>
+
+    <path name="compress-offload-playback display-port">
+        <ctl name="DISPLAY_PORT Mixer MultiMedia4" value="1" />
+    </path>
+
+    <path name="silence-playback display-port">
+        <ctl name="DISPLAY_PORT Mixer MultiMedia9" value="1" />
+    </path>
+
+    <path name="compress-offload-playback bt-sco">
+        <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia4" value="1" />
+    </path>
+
+    <path name="compress-offload-playback bt-sco-wb">
+        <ctl name="BT SampleRate" value="KHZ_16" />
+        <path name="compress-offload-playback bt-sco" />
+    </path>
+
+    <path name="compress-offload-playback speaker-and-hdmi">
+        <path name="compress-offload-playback hdmi" />
+        <path name="compress-offload-playback" />
+    </path>
+
+    <path name="compress-offload-playback speaker-and-display-port">
+        <path name="compress-offload-playback display-port" />
+        <path name="compress-offload-playback" />
+    </path>
+
+    <path name="compress-offload-playback afe-proxy">
+        <ctl name="AFE_PCM_RX Audio Mixer MultiMedia4" value="1" />
+    </path>
+
+    <path name="compress-offload-playback usb-headphones">
+        <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia4" value="1" />
+    </path>
+
+    <path name="compress-offload-playback usb-headset">
+        <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia4" value="1" />
+    </path>
+
+    <path name="compress-offload-playback speaker-and-usb-headphones">
+        <path name="compress-offload-playback usb-headphones" />
+        <path name="compress-offload-playback" />
+    </path>
+
+    <path name="compress-offload-playback headphones">
+        <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia4" value="1" />
+    </path>
+
+    <path name="compress-offload-playback headphones-44.1">
+        <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia4" value="1" />
+    </path>
+
+    <path name="compress-offload-playback headphones-dsd">
+    </path>
+
+    <path name="compress-offload-playback speaker-and-headphones">
+        <path name="compress-offload-playback headphones" />
+        <path name="compress-offload-playback" />
+    </path>
+
+    <path name="compress-offload-playback2">
+        <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia7" value="1" />
+    </path>
+
+    <path name="compress-offload-playback2 handset">
+        <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia7" value="1" />
+    </path>
+
+    <path name="compress-offload-playback2 hdmi">
+        <ctl name="HDMI Mixer MultiMedia7" value="1" />
+    </path>
+
+    <path name="compress-offload-playback2 display-port">
+        <ctl name="DISPLAY_PORT Mixer MultiMedia7" value="1" />
+    </path>
+
+    <path name="compress-offload-playback2 bt-sco">
+        <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia7" value="1" />
+    </path>
+
+    <path name="compress-offload-playback2 bt-sco-wb">
+        <ctl name="BT SampleRate" value="KHZ_16" />
+        <path name="compress-offload-playback2 bt-sco" />
+    </path>
+
+    <path name="compress-offload-playback2 speaker-and-hdmi">
+        <path name="compress-offload-playback2 hdmi" />
+        <path name="compress-offload-playback2" />
+    </path>
+
+    <path name="compress-offload-playback2 speaker-and-display-port">
+        <path name="compress-offload-playback2 display-port" />
+        <path name="compress-offload-playback2" />
+    </path>
+
+    <path name="compress-offload-playback2 afe-proxy">
+        <ctl name="AFE_PCM_RX Audio Mixer MultiMedia7" value="1" />
+    </path>
+
+    <path name="compress-offload-playback2 usb-headphones">
+        <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia7" value="1" />
+    </path>
+
+    <path name="compress-offload-playback2 usb-headset">
+        <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia7" value="1" />
+    </path>
+
+    <path name="compress-offload-playback2 speaker-and-usb-headphones">
+        <path name="compress-offload-playback2 usb-headphones" />
+        <path name="compress-offload-playback2" />
+    </path>
+
+    <path name="compress-offload-playback2 headphones">
+        <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia7" value="1" />
+    </path>
+
+    <path name="compress-offload-playback2 headphones-44.1">
+        <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia7" value="1" />
+    </path>
+
+    <path name="compress-offload-playback2 headphones-dsd">
+    </path>
+
+    <path name="compress-offload-playback2 speaker-and-headphones">
+        <path name="compress-offload-playback2 headphones" />
+        <path name="compress-offload-playback2" />
+    </path>
+
+    <path name="compress-offload-playback3">
+        <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia10" value="1" />
+    </path>
+
+    <path name="compress-offload-playback3 handset">
+        <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia10" value="1" />
+    </path>
+
+    <path name="compress-offload-playback3 hdmi">
+        <ctl name="HDMI Mixer MultiMedia10" value="1" />
+    </path>
+
+    <path name="compress-offload-playback3 display-port">
+        <ctl name="DISPLAY_PORT Mixer MultiMedia10" value="1" />
+    </path>
+
+    <path name="compress-offload-playback3 bt-sco">
+        <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia10" value="1" />
+    </path>
+
+    <path name="compress-offload-playback3 bt-sco-wb">
+        <ctl name="BT SampleRate" value="KHZ_16" />
+        <path name="compress-offload-playback3 bt-sco" />
+    </path>
+
+    <path name="compress-offload-playback3 speaker-and-hdmi">
+        <path name="compress-offload-playback3 hdmi" />
+        <path name="compress-offload-playback3" />
+    </path>
+
+    <path name="compress-offload-playback3 speaker-and-display-port">
+        <path name="compress-offload-playback3 display-port" />
+        <path name="compress-offload-playback3" />
+    </path>
+
+    <path name="compress-offload-playback3 afe-proxy">
+        <ctl name="AFE_PCM_RX Audio Mixer MultiMedia10" value="1" />
+    </path>
+
+    <path name="compress-offload-playback3 usb-headphones">
+        <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia10" value="1" />
+    </path>
+
+    <path name="compress-offload-playback3 usb-headset">
+        <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia10" value="1" />
+    </path>
+
+    <path name="compress-offload-playback3 speaker-and-usb-headphones">
+        <path name="compress-offload-playback3 usb-headphones" />
+        <path name="compress-offload-playback3" />
+    </path>
+
+    <path name="compress-offload-playback3 headphones">
+        <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia10" value="1" />
+    </path>
+
+    <path name="compress-offload-playback3 headphones-44.1">
+        <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia10" value="1" />
+    </path>
+
+    <path name="compress-offload-playback3 headphones-dsd">
+    </path>
+
+    <path name="compress-offload-playback3 speaker-and-headphones">
+        <path name="compress-offload-playback3 headphones" />
+        <path name="compress-offload-playback3" />
+    </path>
+
+    <path name="compress-offload-playback4">
+        <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia11" value="1" />
+    </path>
+
+    <path name="compress-offload-playback4 handset">
+        <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia11" value="1" />
+    </path>
+
+    <path name="compress-offload-playback4 hdmi">
+        <ctl name="HDMI Mixer MultiMedia11" value="1" />
+    </path>
+
+    <path name="compress-offload-playback4 display-port">
+        <ctl name="DISPLAY_PORT Mixer MultiMedia11" value="1" />
+    </path>
+
+    <path name="compress-offload-playback4 bt-sco">
+        <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia11" value="1" />
+    </path>
+
+    <path name="compress-offload-playback4 bt-sco-wb">
+        <ctl name="BT SampleRate" value="KHZ_16" />
+        <path name="compress-offload-playback4 bt-sco" />
+    </path>
+
+    <path name="compress-offload-playback4 speaker-and-hdmi">
+        <path name="compress-offload-playback4 hdmi" />
+        <path name="compress-offload-playback4" />
+    </path>
+
+    <path name="compress-offload-playback4 speaker-and-display-port">
+        <path name="compress-offload-playback4 display-port" />
+        <path name="compress-offload-playback4" />
+    </path>
+
+
+    <path name="compress-offload-playback4 afe-proxy">
+        <ctl name="AFE_PCM_RX Audio Mixer MultiMedia11" value="1" />
+    </path>
+
+    <path name="compress-offload-playback4 usb-headphones">
+        <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia11" value="1" />
+    </path>
+
+    <path name="compress-offload-playback4 usb-headset">
+        <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia11" value="1" />
+    </path>
+
+    <path name="compress-offload-playback4 speaker-and-usb-headphones">
+        <path name="compress-offload-playback4 usb-headphones" />
+        <path name="compress-offload-playback4" />
+    </path>
+
+    <path name="compress-offload-playback4 headphones">
+        <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia11" value="1" />
+    </path>
+
+    <path name="compress-offload-playback4 headphones-44.1">
+        <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia11" value="1" />
+    </path>
+
+    <path name="compress-offload-playback4 headphones-dsd">
+    </path>
+
+    <path name="compress-offload-playback4 speaker-and-headphones">
+        <path name="compress-offload-playback4 headphones" />
+        <path name="compress-offload-playback4" />
+    </path>
+
+    <path name="compress-offload-playback5">
+        <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia12" value="1" />
+    </path>
+
+    <path name="compress-offload-playback5 handset">
+        <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia12" value="1" />
+    </path>
+
+    <path name="compress-offload-playback5 hdmi">
+        <ctl name="HDMI Mixer MultiMedia12" value="1" />
+    </path>
+
+    <path name="compress-offload-playback5 display-port">
+        <ctl name="DISPLAY_PORT Mixer MultiMedia12" value="1" />
+    </path>
+
+    <path name="compress-offload-playback5 bt-sco">
+        <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia12" value="1" />
+    </path>
+
+    <path name="compress-offload-playback5 bt-sco-wb">
+        <ctl name="BT SampleRate" value="KHZ_16" />
+        <path name="compress-offload-playback5 bt-sco" />
+    </path>
+
+    <path name="compress-offload-playback5 speaker-and-hdmi">
+        <path name="compress-offload-playback5 hdmi" />
+        <path name="compress-offload-playback5" />
+    </path>
+
+    <path name="compress-offload-playback5 speaker-and-display-port">
+        <path name="compress-offload-playback5 display-port" />
+        <path name="compress-offload-playback5" />
+    </path>
+
+    <path name="compress-offload-playback5 afe-proxy">
+        <ctl name="AFE_PCM_RX Audio Mixer MultiMedia12" value="1" />
+    </path>
+
+    <path name="compress-offload-playback5 usb-headphones">
+        <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia12" value="1" />
+    </path>
+
+    <path name="compress-offload-playback5 usb-headset">
+        <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia12" value="1" />
+    </path>
+
+    <path name="compress-offload-playback5 speaker-and-usb-headphones">
+        <path name="compress-offload-playback5 usb-headphones" />
+        <path name="compress-offload-playback5" />
+    </path>
+
+    <path name="compress-offload-playback5 headphones">
+        <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia12" value="1" />
+    </path>
+
+    <path name="compress-offload-playback5 headphones-44.1">
+        <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia12" value="1" />
+    </path>
+
+    <path name="compress-offload-playback5 headphones-dsd">
+    </path>
+
+    <path name="compress-offload-playback5 speaker-and-headphones">
+        <path name="compress-offload-playback5 headphones" />
+        <path name="compress-offload-playback5" />
+    </path>
+
+    <path name="compress-offload-playback6">
+        <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia13" value="1" />
+    </path>
+
+    <path name="compress-offload-playback6 handset">
+        <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia13" value="1" />
+    </path>
+
+    <path name="compress-offload-playback6 hdmi">
+        <ctl name="HDMI Mixer MultiMedia13" value="1" />
+    </path>
+
+    <path name="compress-offload-playback6 display-port">
+        <ctl name="DISPLAY_PORT Mixer MultiMedia13" value="1" />
+    </path>
+
+    <path name="compress-offload-playback6 bt-sco">
+        <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia13" value="1" />
+    </path>
+
+    <path name="compress-offload-playback6 bt-sco-wb">
+        <ctl name="BT SampleRate" value="KHZ_16" />
+        <path name="compress-offload-playback6 bt-sco" />
+    </path>
+
+    <path name="compress-offload-playback6 speaker-and-hdmi">
+        <path name="compress-offload-playback6 hdmi" />
+        <path name="compress-offload-playback6" />
+    </path>
+
+    <path name="compress-offload-playback6 speaker-and-display-port">
+        <path name="compress-offload-playback6 display-port" />
+        <path name="compress-offload-playback6" />
+    </path>
+
+    <path name="compress-offload-playback6 afe-proxy">
+        <ctl name="AFE_PCM_RX Audio Mixer MultiMedia13" value="1" />
+    </path>
+
+    <path name="compress-offload-playback6 usb-headphones">
+        <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia13" value="1" />
+    </path>
+
+    <path name="compress-offload-playback6 usb-headset">
+        <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia13" value="1" />
+    </path>
+
+    <path name="compress-offload-playback6 speaker-and-usb-headphones">
+        <path name="compress-offload-playback6 usb-headphones" />
+        <path name="compress-offload-playback6" />
+    </path>
+
+    <path name="compress-offload-playback6 headphones">
+        <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia13" value="1" />
+    </path>
+
+    <path name="compress-offload-playback6 headphones-44.1">
+        <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia13" value="1" />
+    </path>
+
+    <path name="compress-offload-playback6 headphones-dsd">
+    </path>
+
+    <path name="compress-offload-playback6 speaker-and-headphones">
+        <path name="compress-offload-playback6 headphones" />
+        <path name="compress-offload-playback6" />
+    </path>
+
+    <path name="compress-offload-playback7">
+        <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia14" value="1" />
+    </path>
+
+    <path name="compress-offload-playback7 handset">
+        <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia14" value="1" />
+    </path>
+
+    <path name="compress-offload-playback7 hdmi">
+        <ctl name="HDMI Mixer MultiMedia14" value="1" />
+    </path>
+
+    <path name="compress-offload-playback7 display-port">
+        <ctl name="DISPLAY_PORT Mixer MultiMedia14" value="1" />
+    </path>
+
+    <path name="compress-offload-playback7 bt-sco">
+        <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia14" value="1" />
+    </path>
+
+    <path name="compress-offload-playback7 bt-sco-wb">
+        <ctl name="BT SampleRate" value="KHZ_16" />
+        <path name="compress-offload-playback7 bt-sco" />
+    </path>
+
+    <path name="compress-offload-playback7 speaker-and-hdmi">
+        <path name="compress-offload-playback7 hdmi" />
+        <path name="compress-offload-playback7" />
+    </path>
+
+    <path name="compress-offload-playback7 speaker-and-display-port">
+        <path name="compress-offload-playback7 display-port" />
+        <path name="compress-offload-playback7" />
+    </path>
+
+    <path name="compress-offload-playback7 afe-proxy">
+        <ctl name="AFE_PCM_RX Audio Mixer MultiMedia14" value="1" />
+    </path>
+
+    <path name="compress-offload-playback7 usb-headphones">
+        <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia14" value="1" />
+    </path>
+
+    <path name="compress-offload-playback7 usb-headset">
+        <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia14" value="1" />
+    </path>
+
+    <path name="compress-offload-playback7 speaker-and-usb-headphones">
+        <path name="compress-offload-playback7 usb-headphones" />
+        <path name="compress-offload-playback7" />
+    </path>
+
+    <path name="compress-offload-playback7 headphones">
+        <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia14" value="1" />
+    </path>
+
+    <path name="compress-offload-playback7 headphones-44.1">
+        <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia14" value="1" />
+    </path>
+
+    <path name="compress-offload-playback7 headphones-dsd">
+    </path>
+
+    <path name="compress-offload-playback7 speaker-and-headphones">
+        <path name="compress-offload-playback7 headphones" />
+        <path name="compress-offload-playback7" />
+    </path>
+
+    <path name="compress-offload-playback8">
+        <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia15" value="1" />
+    </path>
+
+    <path name="compress-offload-playback8 handset">
+        <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia15" value="1" />
+    </path>
+
+    <path name="compress-offload-playback8 hdmi">
+        <ctl name="HDMI Mixer MultiMedia15" value="1" />
+    </path>
+
+    <path name="compress-offload-playback8 display-port">
+        <ctl name="DISPLAY_PORT Mixer MultiMedia15" value="1" />
+    </path>
+
+    <path name="compress-offload-playback8 bt-sco">
+        <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia15" value="1" />
+    </path>
+
+    <path name="compress-offload-playback8 bt-sco-wb">
+        <ctl name="BT SampleRate" value="KHZ_16" />
+        <path name="compress-offload-playback8 bt-sco" />
+    </path>
+
+    <path name="compress-offload-playback8 speaker-and-hdmi">
+        <path name="compress-offload-playback8 hdmi" />
+        <path name="compress-offload-playback8" />
+    </path>
+
+    <path name="compress-offload-playback8 speaker-and-display-port">
+        <path name="compress-offload-playback8 display-port" />
+        <path name="compress-offload-playback8" />
+    </path>
+
+    <path name="compress-offload-playback8 afe-proxy">
+        <ctl name="AFE_PCM_RX Audio Mixer MultiMedia15" value="1" />
+    </path>
+
+    <path name="compress-offload-playback8 usb-headphones">
+        <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia15" value="1" />
+    </path>
+
+    <path name="compress-offload-playback8 usb-headset">
+        <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia15" value="1" />
+    </path>
+
+    <path name="compress-offload-playback8 speaker-and-usb-headphones">
+        <path name="compress-offload-playback8 usb-headphones" />
+        <path name="compress-offload-playback8" />
+    </path>
+
+    <path name="compress-offload-playback8 headphones">
+        <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia15" value="1" />
+    </path>
+
+    <path name="compress-offload-playback8 headphones-44.1">
+        <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia15" value="1" />
+    </path>
+
+    <path name="compress-offload-playback8 headphones-dsd">
+    </path>
+
+    <path name="compress-offload-playback8 speaker-and-headphones">
+        <path name="compress-offload-playback8 headphones" />
+        <path name="compress-offload-playback8" />
+    </path>
+
+    <path name="compress-offload-playback9">
+        <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia16" value="1" />
+    </path>
+
+    <path name="compress-offload-playback9 handset">
+        <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia16" value="1" />
+    </path>
+
+    <path name="compress-offload-playback9 hdmi">
+        <ctl name="HDMI Mixer MultiMedia16" value="1" />
+    </path>
+
+    <path name="compress-offload-playback9 display-port">
+        <ctl name="DISPLAY_PORT Mixer MultiMedia16" value="1" />
+    </path>
+
+    <path name="compress-offload-playback9 bt-sco">
+        <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia16" value="1" />
+    </path>
+
+    <path name="compress-offload-playback9 bt-sco-wb">
+        <ctl name="BT SampleRate" value="KHZ_16" />
+        <path name="compress-offload-playback9 bt-sco" />
+    </path>
+
+    <path name="compress-offload-playback9 speaker-and-hdmi">
+        <path name="compress-offload-playback9 hdmi" />
+        <path name="compress-offload-playback9" />
+    </path>
+
+    <path name="compress-offload-playback9 speaker-and-display-port">
+        <path name="compress-offload-playback9 display-port" />
+        <path name="compress-offload-playback9" />
+    </path>
+
+    <path name="compress-offload-playback9 afe-proxy">
+        <ctl name="AFE_PCM_RX Audio Mixer MultiMedia16" value="1" />
+    </path>
+
+    <path name="compress-offload-playback9 usb-headphones">
+        <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia16" value="1" />
+    </path>
+
+    <path name="compress-offload-playback9 usb-headset">
+        <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia16" value="1" />
+    </path>
+
+    <path name="compress-offload-playback9 speaker-and-usb-headphones">
+        <path name="compress-offload-playback9 usb-headphones" />
+        <path name="compress-offload-playback9" />
+    </path>
+
+    <path name="compress-offload-playback9 headphones">
+        <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia16" value="1" />
+    </path>
+
+    <path name="compress-offload-playback9 headphones-44.1">
+        <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia16" value="1" />
+    </path>
+
+    <path name="compress-offload-playback9 headphones-dsd">
+    </path>
+
+    <path name="compress-offload-playback9 speaker-and-headphones">
+        <path name="compress-offload-playback9 headphones" />
+        <path name="compress-offload-playback9" />
+    </path>
+
+    <path name="audio-record">
+        <ctl name="MultiMedia1 Mixer INT3_MI2S_TX" value="1" />
+    </path>
+
+    <path name="audio-record usb-headset-mic">
+        <ctl name="MultiMedia1 Mixer USB_AUDIO_TX" value="1" />
+    </path>
+
+    <path name="audio-record bt-sco">
+        <ctl name="MultiMedia1 Mixer SLIM_7_TX" value="1" />
+    </path>
+
+    <path name="audio-record bt-sco-wb">
+        <ctl name="BT SampleRate" value="KHZ_16" />
+        <path name="audio-record bt-sco" />
+    </path>
+
+    <path name="audio-record capture-fm">
+        <ctl name="MultiMedia1 Mixer SLIM_8_TX" value="1" />
+    </path>
+
+    <path name="audio-record-compress">
+        <ctl name="MultiMedia8 Mixer INT3_MI2S_TX" value="1" />
+    </path>
+
+    <path name="audio-record-compress bt-sco">
+        <ctl name="MultiMedia8 Mixer SLIM_7_TX" value="1" />
+    </path>
+
+    <path name="audio-record-compress bt-sco-wb">
+        <ctl name="BT SampleRate" value="KHZ_16" />
+        <path name="audio-record-compress bt-sco" />
+    </path>
+
+    <path name="audio-record-compress usb-headset-mic">
+        <ctl name="MultiMedia8 Mixer USB_AUDIO_TX" value="1" />
+    </path>
+
+    <path name="low-latency-record">
+      <ctl name="MultiMedia8 Mixer INT3_MI2S_TX" value="1" />
+    </path>
+
+    <path name="low-latency-record bt-sco">
+      <ctl name="MultiMedia8 Mixer SLIM_7_TX" value="1" />
+    </path>
+
+    <path name="low-latency-record bt-sco-wb">
+        <ctl name="BT SampleRate" value="KHZ_16" />
+        <path name="low-latency-record bt-sco" />
+    </path>
+
+    <path name="low-latency-record usb-headset-mic">
+        <ctl name="MultiMedia8 Mixer USB_AUDIO_TX" value="1" />
+    </path>
+
+    <path name="low-latency-record capture-fm">
+      <ctl name="MultiMedia8 Mixer SLIM_8_TX" value="1" />
+    </path>
+
+    <path name="fm-virtual-record capture-fm">
+        <ctl name="MultiMedia2 Mixer SLIM_8_TX" value="1" />
+    </path>
+
+    <path name="play-fm">
+        <ctl name="SLIMBUS_8 LOOPBACK Volume" value="1" />
+        <ctl name="INT4_MI2S_RX Port Mixer SLIM_8_TX" value="1" />
+        <ctl name="INT4_MI2S_RX_DL_HL Switch" value="1" />
+    </path>
+
+    <path name="play-fm headphones">
+        <ctl name="SLIMBUS_8 LOOPBACK Volume" value="1" />
+        <ctl name="INT0_MI2S_RX Port Mixer SLIM_8_TX" value="1" />
+        <ctl name="INT0_MI2S_RX_DL_HL Switch" value="1" />
+    </path>
+
+    <path name="incall-rec-uplink">
+        <ctl name="MultiMedia1 Mixer VOC_REC_UL" value="1" />
+    </path>
+
+    <path name="incall-rec-uplink bt-sco">
+        <path name="incall-rec-uplink" />
+    </path>
+
+    <path name="incall-rec-uplink bt-sco-wb">
+        <path name="incall-rec-uplink" />
+    </path>
+
+    <path name="incall-rec-uplink usb-headset-mic">
+        <path name="incall-rec-uplink" />
+    </path>
+
+    <path name="incall-rec-uplink afe-proxy">
+        <path name="incall-rec-uplink" />
+    </path>
+
+    <path name="incall-rec-uplink-compress">
+        <ctl name="MultiMedia8 Mixer VOC_REC_UL" value="1" />
+    </path>
+
+    <path name="incall-rec-uplink-compress bt-sco">
+        <path name="incall-rec-uplink-compress" />
+    </path>
+
+    <path name="incall-rec-uplink-compress bt-sco-wb">
+        <path name="incall-rec-uplink-compress" />
+    </path>
+
+    <path name="incall-rec-uplink-compress usb-headset-mic">
+        <path name="incall-rec-uplink-compress" />
+    </path>
+
+    <path name="incall-rec-uplink-compress afe-proxy">
+        <path name="incall-rec-uplink-compress" />
+    </path>
+
+    <path name="incall-rec-downlink">
+        <ctl name="MultiMedia1 Mixer VOC_REC_DL"  value="1" />
+    </path>
+
+    <path name="incall-rec-downlink bt-sco">
+        <path name="incall-rec-downlink" />
+    </path>
+
+    <path name="incall-rec-downlink bt-sco-wb">
+        <path name="incall-rec-downlink" />
+    </path>
+
+    <path name="incall-rec-downlink usb-headset-mic">
+        <path name="incall-rec-downlink" />
+    </path>
+
+    <path name="incall-rec-downlink afe-proxy">
+        <path name="incall-rec-downlink" />
+    </path>
+
+    <path name="incall-rec-downlink-compress">
+        <ctl name="MultiMedia8 Mixer VOC_REC_DL" value="1" />
+    </path>
+
+    <path name="incall-rec-downlink-compress bt-sco">
+        <path name="incall-rec-downlink-compress" />
+    </path>
+
+    <path name="incall-rec-downlink-compress bt-sco-wb">
+        <path name="incall-rec-downlink-compress" />
+    </path>
+
+    <path name="incall-rec-downlink-compress usb-headset-mic">
+        <path name="incall-rec-downlink-compress" />
+    </path>
+
+    <path name="incall-rec-downlink-compress afe-proxy">
+        <path name="incall-rec-downlink-compress" />
+    </path>
+
+    <path name="incall-rec-uplink-and-downlink">
+        <path name="incall-rec-uplink" />
+        <path name="incall-rec-downlink" />
+    </path>
+
+    <path name="incall-rec-uplink-and-downlink bt-sco">
+        <path name="incall-rec-uplink-and-downlink" />
+    </path>
+
+    <path name="incall-rec-uplink-and-downlink bt-sco-wb">
+        <path name="incall-rec-uplink-and-downlink" />
+    </path>
+
+    <path name="incall-rec-uplink-and-downlink usb-headset-mic">
+        <path name="incall-rec-uplink-and-downlink" />
+    </path>
+
+    <path name="incall-rec-uplink-and-downlink afe-proxy">
+        <path name="incall-rec-uplink-and-downlink" />
+    </path>
+
+    <path name="incall-rec-uplink-and-downlink-compress">
+        <path name="incall-rec-uplink-compress" />
+        <path name="incall-rec-downlink-compress" />
+    </path>
+
+    <path name="incall-rec-uplink-and-downlink-compress bt-sco">
+        <path name="incall-rec-uplink-and-downlink-compress" />
+    </path>
+
+    <path name="incall-rec-uplink-and-downlink-compress bt-sco-wb">
+        <path name="incall-rec-uplink-and-downlink-compress" />
+    </path>
+
+    <path name="incall-rec-uplink-and-downlink-compress usb-headset-mic">
+        <path name="incall-rec-uplink-and-downlink-compress" />
+    </path>
+
+    <path name="incall-rec-uplink-and-downlink-compress afe-proxy">
+        <path name="incall-rec-uplink-and-downlink-compress" />
+    </path>
+
+    <path name="hfp-sco">
+        <ctl name="HFP_SLIM7_UL_HL Switch" value="1" />
+        <ctl name="INT4_MI2S_RX Port Mixer SLIM_7_TX" value="1" />
+        <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia6" value="1" />
+        <ctl name="MultiMedia6 Mixer INT3_MI2S_TX" value="1" />
+        <ctl name="INT4_MI2S_RX_DL_HL Switch" value="1" />
+   </path>
+
+    <path name="hfp-sco headphones">
+        <ctl name="HFP_SLIM7_UL_HL Switch" value="1" />
+        <ctl name="INT0_MI2S_RX Port Mixer SLIM_7_TX" value="1" />
+        <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia6" value="1" />
+        <ctl name="MultiMedia6 Mixer INT3_MI2S_TX" value="1" />
+        <ctl name="INT0_MI2S_RX_DL_HL Switch" value="1" />
+    </path>
+
+   <path name="hfp-sco-wb">
+        <ctl name="BT SampleRate" value="KHZ_16" />
+        <path name="hfp-sco" />
+   </path>
+
+    <path name="hfp-sco-wb headphones">
+        <ctl name="BT SampleRate" value="KHZ_16" />
+        <path name="hfp-sco headphones" />
+    </path>
+
+    <path name="compress-voip-call">
+        <ctl name="INT4_MI2S_RX_Voice Mixer Voip" value="1" />
+        <ctl name="Voip_Tx Mixer INT3_MI2S_TX_Voip" value="1" />
+    </path>
+
+    <path name="compress-voip-call bt-a2dp">
+        <ctl name="SLIM_7_RX_Voice Mixer Voip" value="1" />
+        <ctl name="Voip_Tx Mixer INT3_MI2S_TX_Voip" value="1" />
+    </path>
+
+    <path name="compress-voip-call handset">
+        <ctl name="INT0_MI2S_RX_Voice Mixer Voip" value="1" />
+        <ctl name="Voip_Tx Mixer INT3_MI2S_TX_Voip" value="1" />
+    </path>
+
+    <path name="compress-voip-call headphones">
+        <ctl name="INT0_MI2S_RX_Voice Mixer Voip" value="1" />
+        <ctl name="Voip_Tx Mixer INT3_MI2S_TX_Voip" value="1" />
+    </path>
+
+    <path name="compress-voip-call bt-sco">
+        <ctl name="SLIM_7_RX_Voice Mixer Voip" value="1" />
+        <ctl name="Voip_Tx Mixer SLIM_7_TX_Voip" value="1" />
+    </path>
+
+    <path name="compress-voip-call bt-sco-wb">
+        <ctl name="BT SampleRate" value="KHZ_16" />
+        <path name="compress-voip-call bt-sco" />
+    </path>
+
+    <path name="compress-voip-call afe-proxy">
+        <ctl name="AFE_PCM_RX_Voice Mixer Voip" value="1" />
+        <ctl name="Voip_Tx Mixer AFE_PCM_TX_Voip" value="1" />
+    </path>
+
+    <path name="compress-voip-call usb-headphones">
+        <ctl name="USB_AUDIO_RX_Voice Mixer Voip" value="1" />
+        <ctl name="Voip_Tx Mixer INT3_MI2S_TX_Voip" value="1" />
+    </path>
+
+    <path name="compress-voip-call usb-headset">
+        <ctl name="USB_AUDIO_RX_Voice Mixer Voip" value="1" />
+        <ctl name="Voip_Tx Mixer USB_AUDIO_TX_Voip" value="1" />
+    </path>
+
+    <path name="compress-voip-call voice-speaker-vbat">
+        <path name="echo-reference speaker-vbat-mono" />
+        <path name="compress-voip-call"/>
+    </path>
+
+    <path name="compress-voip-call voice-speaker-2-vbat">
+        <path name="echo-reference speaker-vbat-mono-2" />
+        <path name="compress-voip-call"/>
+    </path>
+
+    <path name="voicemmode1-call">
+        <ctl name="INT4_MI2S_RX_Voice Mixer VoiceMMode1" value="1" />
+        <ctl name="VoiceMMode1_Tx Mixer INT3_MI2S_TX_MMode1" value="1" />
+    </path>
+
+    <path name="voicemmode1-call handset">
+        <ctl name="INT0_MI2S_RX_Voice Mixer VoiceMMode1" value="1" />
+        <ctl name="VoiceMMode1_Tx Mixer INT3_MI2S_TX_MMode1" value="1" />
+    </path>
+
+    <path name="voicemmode1-call headphones">
+        <ctl name="INT0_MI2S_RX_Voice Mixer VoiceMMode1" value="1" />
+        <ctl name="VoiceMMode1_Tx Mixer INT3_MI2S_TX_MMode1" value="1" />
+    </path>
+
+    <path name="voicemmode1-call hdmi">
+        <ctl name="HDMI_RX_Voice Mixer VoiceMMode1" value="1" />
+        <ctl name="VoiceMMode1_Tx Mixer INT3_MI2S_TX_MMode1" value="1" />
+    </path>
+
+    <path name="voicemmode1-call bt-sco">
+        <ctl name="SLIM_7_RX_Voice Mixer VoiceMMode1" value="1" />
+        <ctl name="VoiceMMode1_Tx Mixer SLIM_7_TX_MMode1" value="1" />
+    </path>
+
+    <path name="voicemmode1-call bt-sco-wb">
+        <ctl name="BT SampleRate" value="KHZ_16" />
+        <path name="voicemmode1-call bt-sco" />
+    </path>
+
+    <path name="voicemmode1-call afe-proxy">
+        <ctl name="AFE_PCM_RX_Voice Mixer VoiceMMode1" value="1" />
+        <ctl name="VoiceMMode1_Tx Mixer AFE_PCM_TX_MMode1" value="1" />
+    </path>
+
+    <path name="voicemmode1-call usb-headphones">
+        <ctl name="USB_AUDIO_RX_Voice Mixer VoiceMMode1" value="1" />
+        <ctl name="VoiceMMode1_Tx Mixer INT3_MI2S_TX_MMode1" value="1" />
+    </path>
+
+    <path name="voicemmode1-call usb-headset">
+        <ctl name="USB_AUDIO_RX_Voice Mixer VoiceMMode1" value="1" />
+        <ctl name="VoiceMMode1_Tx Mixer USB_AUDIO_TX_MMode1" value="1" />
+    </path>
+
+    <path name="voicemmode1-call voice-speaker-vbat">
+        <path name="echo-reference speaker-vbat-mono" />
+        <path name="voicemmode1-call"/>
+    </path>
+
+    <path name="voicemmode1-call voice-speaker-2-vbat">
+        <path name="echo-reference speaker-vbat-mono-2" />
+        <path name="voicemmode1-call"/>
+    </path>
+
+    <path name="voicemmode2-call">
+        <ctl name="INT4_MI2S_RX_Voice Mixer VoiceMMode2" value="1" />
+        <ctl name="VoiceMMode2_Tx Mixer INT3_MI2S_TX_MMode2" value="1" />
+    </path>
+
+    <path name="voicemmode2-call handset">
+        <ctl name="INT0_MI2S_RX_Voice Mixer VoiceMMode2" value="1" />
+        <ctl name="VoiceMMode2_Tx Mixer INT3_MI2S_TX_MMode2" value="1" />
+    </path>
+
+    <path name="voicemmode2-call headphones">
+        <ctl name="INT0_MI2S_RX_Voice Mixer VoiceMMode2" value="1" />
+        <ctl name="VoiceMMode2_Tx Mixer INT3_MI2S_TX_MMode2" value="1" />
+    </path>
+
+    <path name="voicemmode2-call hdmi">
+        <ctl name="HDMI_RX_Voice Mixer VoiceMMode2" value="1" />
+        <ctl name="VoiceMMode2_Tx Mixer INT3_MI2S_TX_MMode2" value="1" />
+    </path>
+
+    <path name="voicemmode2-call bt-sco">
+        <ctl name="SLIM_7_RX_Voice Mixer VoiceMMode2" value="1" />
+        <ctl name="VoiceMMode2_Tx Mixer SLIM_7_TX_MMode2" value="1" />
+    </path>
+
+    <path name="voicemmode2-call bt-sco-wb">
+        <ctl name="BT SampleRate" value="KHZ_16" />
+        <path name="voicemmode2-call bt-sco" />
+    </path>
+
+    <path name="voicemmode2-call afe-proxy">
+        <ctl name="AFE_PCM_RX_Voice Mixer VoiceMMode2" value="1" />
+        <ctl name="VoiceMMode2_Tx Mixer AFE_PCM_TX_MMode2" value="1" />
+    </path>
+
+    <path name="voicemmode2-call usb-headphones">
+        <ctl name="USB_AUDIO_RX_Voice Mixer VoiceMMode2" value="1" />
+        <ctl name="VoiceMMode2_Tx Mixer INT3_MI2S_TX_MMode2" value="1" />
+    </path>
+
+    <path name="voicemmode2-call usb-headset">
+        <ctl name="USB_AUDIO_RX_Voice Mixer VoiceMMode2" value="1" />
+        <ctl name="VoiceMMode2_Tx Mixer USB_AUDIO_TX_MMode2" value="1" />
+    </path>
+
+    <path name="voicemmode2-call voice-speaker-vbat">
+        <path name="echo-reference speaker-vbat-mono" />
+        <path name="voicemmode2-call"/>
+    </path>
+
+    <path name="voicemmode2-call voice-speaker-2-vbat">
+        <path name="echo-reference speaker-vbat-mono-2" />
+        <path name="voicemmode2-call"/>
+    </path>
+
+    <!-- VoIP Rx settings -->
+    <path name="audio-playback-voip">
+        <ctl name="INT4_MI2S_RX Audio Mixer MultiMedia10" value="1" />
+    </path>
+
+    <path name="audio-playback-voip handset">
+        <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia10" value="1" />
+    </path>
+
+    <path name="audio-playback-voip headphones">
+        <ctl name="INT0_MI2S_RX Audio Mixer MultiMedia10" value="1" />
+    </path>
+
+    <path name="audio-playback-voip bt-sco">
+        <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia10" value="1" />
+    </path>
+
+    <path name="audio-playback-voip bt-sco-wb">
+        <ctl name="BT SampleRate" value="KHZ_16" />
+        <path name="audio-playback-voip bt-sco" />
+    </path>
+
+    <path name="audio-playback-voip afe-proxy">
+        <ctl name="AFE_PCM_RX Audio Mixer MultiMedia10" value="1" />
+    </path>
+
+    <path name="audio-playback-voip usb-headphones">
+        <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia10" value="1" />
+    </path>
+
+    <path name="audio-playback-voip usb-headset">
+        <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia10" value="1" />
+    </path>
+
+    <path name="audio-playback-voip display-port">
+        <ctl name="DISPLAY_PORT Mixer MultiMedia10" value="1" />
+    </path>
+
+    <path name="audio-playback-voip speaker-and-display-port">
+        <path name="audio-playback-voip display-port" />
+        <path name="audio-playback-voip" />
+    </path>
+
+    <!-- VoIP Tx settings -->
+    <path name="audio-record-voip">
+        <ctl name="MultiMedia10 Mixer INT3_MI2S_TX" value="1" />
+    </path>
+
+    <path name="audio-record-voip usb-headset-mic">
+        <ctl name="MultiMedia10 Mixer USB_AUDIO_TX" value="1" />
+    </path>
+
+    <path name="audio-record-voip bt-sco">
+        <ctl name="MultiMedia10 Mixer SLIM_7_TX" value="1" />
+    </path>
+
+    <path name="audio-record-voip bt-sco-wb">
+        <ctl name="BT SampleRate" value="KHZ_16" />
+        <path name="audio-record-voip bt-sco" />
+    </path>
+
+    <path name="spkr-rx-calib">
+        <ctl name="INT4_MI2S_RX_DL_HL Switch"  value="1" />
+    </path>
+
+    <path name="spkr-vi-record">
+    </path>
+
+    <!-- These are actual sound device specific mixer settings -->
+    <path name="adc1">
+        <ctl name="ADC1 Volume" value="6" />
+        <ctl name="DEC1 MUX" value="ADC1" />
+        <ctl name="ADC1_INP1 Switch" value="1" />
+    </path>
+
+    <path name="adc2">
+        <ctl name="ADC2 Volume" value="6" />
+        <ctl name="DEC1 MUX" value="ADC2" />
+        <ctl name="ADC2 MUX" value="INP2" />
+    </path>
+
+    <path name="adc3">
+        <ctl name="ADC3 Volume" value="6" />
+        <ctl name="DEC1 MUX" value="ADC2" />
+        <ctl name="ADC2 MUX" value="INP3" />
+    </path>
+
+    <!-- DMIC numbered from 1 to 4 -->
+    <path name="dmic1">
+        <ctl name="DEC1 MUX" value="DMIC1" />
+    </path>
+
+    <path name="dmic2">
+        <ctl name="DEC1 MUX" value="DMIC2" />
+    </path>
+
+    <path name="dmic3">
+        <ctl name="DEC1 MUX" value="DMIC3" />
+    </path>
+
+    <path name="dmic4">
+        <ctl name="DEC1 MUX" value="DMIC4" />
+    </path>
+
+    <path name="speaker">
+        <ctl name="INT4_MI2S_RX Channels" value="One" />
+        <ctl name="RX4 MIX1 INP1" value="RX4" />
+        <ctl name="COMP1 Switch" value="1" />
+        <ctl name="SpkrLeft COMP Switch" value="1" />
+        <ctl name="SpkrLeft BOOST Switch" value="1" />
+        <ctl name="SpkrLeft VISENSE Switch" value="1" />
+        <ctl name="SpkrLeft SWR DAC_Port Switch" value="1" />
+        <ctl name="SpkrLeft WSA PA Mute" value="0" />
+    </path>
+
+    <path name="speaker-mono">
+        <ctl name="INT4_MI2S_RX Channels" value="One" />
+        <ctl name="RX4 MIX1 INP1" value="RX4" />
+        <ctl name="COMP1 Switch" value="1" />
+        <ctl name="SpkrLeft COMP Switch" value="1" />
+        <ctl name="SpkrLeft BOOST Switch" value="1" />
+        <ctl name="SpkrLeft VISENSE Switch" value="1" />
+        <ctl name="SpkrLeft SWR DAC_Port Switch" value="1" />
+        <ctl name="SpkrLeft WSA PA Mute" value="0" />
+    </path>
+
+    <path name="speaker-mono-2">
+        <ctl name="INT4_MI2S_RX Channels" value="One" />
+        <ctl name="RX5 MIX1 INP1" value="RX4" />
+        <ctl name="COMP2 Switch" value="1" />
+        <ctl name="SpkrRight COMP Switch" value="1" />
+        <ctl name="SpkrRight BOOST Switch" value="1" />
+        <ctl name="SpkrRight VISENSE Switch" value="1" />
+        <ctl name="SpkrRight SWR DAC_Port Switch" value="1" />
+        <ctl name="SpkrRight WSA PA Mute" value="0" />
+    </path>
+
+    <path name="speaker-fluid">
+        <path name="speaker-mono" />
+    </path>
+
+    <path name="speaker-liquid">
+        <path name="speaker" />
+    </path>
+
+   <path name="speaker-vbat-mono">
+       <path name="speaker-mono" />
+   </path>
+
+   <path name="speaker-vbat-mono-2">
+       <path name="speaker-mono-2" />
+   </path>
+
+   <path name="speaker-vbat">
+       <path name="speaker" />
+   </path>
+
+   <path name="sidetone-iir">
+        <ctl name="IIR1 Enable Band1" value="1" />
+        <ctl name="IIR1 Enable Band2" value="1" />
+        <ctl name="IIR1 Enable Band3" value="1" />
+        <ctl name="IIR1 Enable Band4" value="1" />
+        <ctl name="IIR1 Enable Band5" value="1" />
+    </path>
+
+    <path name="sidetone-headphones">
+        <path name="sidetone-iir" />
+        <ctl name="RX1 MIX2 INP1" value="IIR1" />
+        <ctl name="RX2 MIX2 INP1" value="IIR1" />
+        <ctl name="IIR1 INP1 Volume" value="53" />
+    </path>
+
+    <path name="sidetone-handset">
+        <path name="sidetone-iir" />
+        <ctl name="IIR1 INP1 Volume" value="53" />
+        <ctl name="RX1 MIX2 INP1" value="IIR1" />
+    </path>
+
+    <path name="speaker-mic">
+        <path name="adc1" />
+        <ctl name="IIR1 INP1 MUX" value="DEC1" />
+    </path>
+
+    <path name="speaker-mic-liquid">
+        <path name="dmic2" />
+    </path>
+
+    <path name="speaker-mic-sbc">
+    </path>
+
+    <path name="speaker-protected">
+        <ctl name="AIF1_VI_SDW Mixer SPKR_VI_1" value="1" />
+        <path name="speaker" />
+        <ctl name="VI_FEED_TX Channels" value="One" />
+        <ctl name="INT4_MI2S_RX_VI_FB_MONO_CH_MUX" value="INT5_MI2S_TX" />
+    </path>
+
+    <path name="voice-speaker-protected">
+        <ctl name="AIF1_VI_SDW Mixer SPKR_VI_1" value="1" />
+        <path name="speaker-mono" />
+        <ctl name="VI_FEED_TX Channels" value="One" />
+        <ctl name="INT4_MI2S_RX_VI_FB_MONO_CH_MUX" value="INT5_MI2S_TX" />
+    </path>
+
+    <path name="voice-speaker-2-protected">
+        <ctl name="AIF1_VI_SDW Mixer SPKR_VI_2" value="1" />
+        <path name="speaker-mono-2" />
+        <ctl name="VI_FEED_TX Channels" value="One" />
+        <ctl name="INT4_MI2S_RX_VI_FB_MONO_CH_MUX" value="INT5_MI2S_TX" />
+        <ctl name="INT5 MI2S VI MONO" value="Right" />
+    </path>
+
+    <path name="vi-feedback">
+    </path>
+
+    <path name="vi-feedback-mono-1">
+    </path>
+
+    <path name="vi-feedback-mono-2">
+    </path>
+
+    <path name="speaker-protected-vbat">
+        <path name="speaker-protected" />
+    </path>
+
+    <path name="voice-speaker-protected-vbat">
+        <path name="voice-speaker-protected" />
+    </path>
+
+    <path name="voice-speaker-2-protected-vbat">
+        <path name="voice-speaker-2-protected" />
+    </path>
+
+    <path name="handset">
+        <ctl name="INT0_MI2S_RX Channels" value="One" />
+        <ctl name="EAR PA Boost" value="DISABLE" />
+	<ctl name="RX1 MIX1 INP1" value="RX1" />
+	<ctl name="RDAC2 MUX" value="RX1" />
+	<ctl name="EAR_S" value="Switch" />
+    </path>
+
+    <path name="handset-mic">
+        <path name="adc1" />
+        <ctl name="IIR1 INP1 MUX" value="DEC1" />
+    </path>
+
+    <path name="handset-mic-db">
+    </path>
+
+    <path name="handset-mic-cdp">
+        <path name="adc1" />
+    </path>
+
+    <path name="handset-mic-sbc">
+    </path>
+
+    <path name="three-mic">
+    </path>
+
+    <path name="anc-handset">
+    </path>
+
+    <path name="headphones">
+        <ctl name="INT0_MI2S_RX Channels" value="Two" />
+        <ctl name="RX1 MIX1 INP1" value="RX1" />
+        <ctl name="RX2 MIX1 INP1" value="RX2" />
+        <ctl name="RDAC2 MUX" value="RX2" />
+        <ctl name="RX HPH Mode" value="HD2" />
+        <ctl name="COMP0 RX1" value="1" />
+        <ctl name="COMP0 RX2" value="1" />
+        <ctl name="HPHL" value="Switch" />
+        <ctl name="HPHR" value="Switch" />
+    </path>
+
+    <path name="headphones-44.1">
+        <path name="headphones" />
+    </path>
+
+    <path name="true-native-mode">
+    </path>
+
+    <path name="line">
+        <path name="headphones" />
+    </path>
+
+    <path name="headset-mic">
+        <path name="adc2" />
+        <ctl name="IIR1 INP1 MUX" value="DEC1" />
+    </path>
+
+    <path name="headset-mic-liquid">
+        <path name="adc2" />
+    </path>
+
+    <path name="voice-handset">
+        <path name="handset" />
+    </path>
+
+    <path name="voice-handset-tmus">
+        <path name="handset" />
+    </path>
+
+    <path name="voice-speaker">
+        <path name="speaker-mono" />
+    </path>
+
+    <path name="voice-speaker-2">
+        <path name="speaker-mono-2" />
+    </path>
+
+    <path name="voice-speaker-fluid">
+        <path name="speaker-fluid" />
+    </path>
+
+    <path name="voice-speaker-mic">
+        <path name="speaker-mic" />
+    </path>
+
+    <path name="voice-speaker-vbat">
+        <path name="speaker-vbat-mono" />
+    </path>
+
+    <path name="voice-speaker-2-vbat">
+        <path name="speaker-vbat-mono-2" />
+    </path>
+
+    <path name="voice-headphones">
+        <path name="headphones" />
+    </path>
+
+    <path name="voice-line">
+        <path name="voice-headphones" />
+    </path>
+
+    <path name="voice-headset-mic">
+        <path name="headset-mic" />
+    </path>
+
+    <path name="speaker-and-headphones">
+        <path name="headphones" />
+        <path name="speaker" />
+    </path>
+
+    <path name="speaker-and-line">
+        <path name="speaker-and-headphones" />
+    </path>
+
+    <path name="speaker-and-headphones-liquid">
+        <path name="headphones" />
+        <path name="speaker" />
+    </path>
+
+    <path name="speaker-and-line-liquid">
+        <path name="speaker-and-headphones-liquid" />
+    </path>
+
+    <path name="usb-headphones">
+    </path>
+
+    <path name="usb-headset">
+    </path>
+
+    <path name="afe-proxy">
+    </path>
+
+    <path name="anc-headphones">
+        <path name="headphones" />
+    </path>
+
+    <path name="speaker-and-anc-headphones">
+        <path name="anc-headphones" />
+        <path name="speaker" />
+    </path>
+
+    <path name="anc-fb-headphones">
+        <path name="anc-headphones" />
+    </path>
+
+    <path name="speaker-and-anc-fb-headphones">
+        <path name="anc-fb-headphones" />
+        <path name="speaker" />
+    </path>
+
+    <path name="voice-anc-headphones">
+        <path name="voice-headphones" />
+    </path>
+
+    <path name="voice-anc-fb-headphones">
+        <path name="voice-headphones" />
+    </path>
+
+    <path name="speaker-and-anc-headphones-liquid">
+        <path name="anc-headphones" />
+    </path>
+
+    <path name="hdmi">
+    </path>
+
+    <path name="display-port">
+    </path>
+
+    <path name="speaker-and-usb-headphones">
+        <path name="speaker" />
+        <path name="usb-headphones" />
+    </path>
+
+    <path name="speaker-and-hdmi">
+        <path name="speaker" />
+        <path name="hdmi" />
+    </path>
+
+    <path name="speaker-and-display-port">
+        <path name="speaker" />
+        <path name="display-port" />
+    </path>
+
+    <path name="voice-rec-mic">
+        <path name="handset-mic" />
+    </path>
+
+    <path name="camcorder-mic">
+        <path name="handset-mic" />
+    </path>
+
+    <path name="hdmi-tx">
+        <path name="handset-mic" />
+    </path>
+
+    <path name="bt-sco-headset">
+    </path>
+
+    <path name="bt-sco-mic">
+    </path>
+
+    <path name="bt-sco-headset-wb">
+    </path>
+
+    <path name="bt-sco-mic-wb">
+    </path>
+
+    <path name="usb-headset-mic">
+    </path>
+
+    <path name="capture-fm">
+    </path>
+
+    <path name="aanc-path">
+    </path>
+
+    <path name="aanc-handset-mic">
+    </path>
+
+    <!-- Dual MIC devices -->
+    <path name="handset-dmic-endfire">
+        <ctl name="ADC1 Volume" value="6" />
+        <ctl name="ADC3 Volume" value="6" />
+        <ctl name="DEC1 MUX" value="ADC1" />
+        <ctl name="ADC1_INP1 Switch" value="1" />
+        <ctl name="DEC2 MUX" value="ADC2" />
+        <ctl name="ADC2 MUX" value="INP3" />
+        <ctl name="INT3_MI2S_TX Channels" value="Two" />
+    </path>
+
+    <path name="speaker-dmic-endfire">
+        <ctl name="ADC1 Volume" value="6" />
+        <ctl name="ADC3 Volume" value="6" />
+        <ctl name="DEC1 MUX" value="ADC1" />
+        <ctl name="ADC1_INP1 Switch" value="1" />
+        <ctl name="DEC2 MUX" value="ADC2" />
+        <ctl name="ADC2 MUX" value="INP3" />
+        <ctl name="INT3_MI2S_TX Channels" value="Two" />
+    </path>
+
+    <path name="dmic-endfire">
+        <path name="handset-dmic-endfire" />
+        <ctl name="IIR1 INP1 MUX" value="DEC1" />
+    </path>
+
+    <path name="dmic-endfire-liquid">
+        <path name="handset-dmic-endfire" />
+        <ctl name="IIR1 INP1 MUX" value="DEC1" />
+    </path>
+
+    <path name="handset-stereo-dmic-ef">
+        <path name="handset-dmic-endfire" />
+    </path>
+
+    <path name="speaker-stereo-dmic-ef">
+        <path name="speaker-dmic-endfire" />
+    </path>
+
+    <path name="voice-dmic-ef-tmus">
+        <path name="dmic-endfire" />
+    </path>
+
+    <path name="voice-dmic-ef">
+        <path name="dmic-endfire" />
+    </path>
+
+    <path name="voice-speaker-dmic-ef">
+        <path name="speaker-dmic-endfire" />
+    </path>
+
+    <path name="voice-rec-dmic-ef">
+        <path name="dmic-endfire" />
+    </path>
+
+    <path name="voice-rec-dmic-ef-fluence">
+        <path name="dmic-endfire" />
+    </path>
+
+    <path name="handset-stereo-dmic-ef-liquid">
+        <path name="handset-dmic-endfire" />
+    </path>
+
+    <path name="speaker-stereo-dmic-ef-liquid">
+        <path name="speaker-dmic-endfire" />
+    </path>
+
+    <path name="voice-dmic-ef-liquid-liquid">
+        <path name="dmic-endfire-liquid" />
+    </path>
+
+    <path name="voice-speaker-dmic-ef-liquid">
+        <path name="dmic-endfire-liquid" />
+    </path>
+
+    <path name="voice-rec-dmic-ef-liquid">
+        <path name="dmic-endfire-liquid" />
+    </path>
+
+    <path name="voice-rec-dmic-ef-fluence-liquid">
+        <path name="dmic-endfire-liquid" />
+    </path>
+
+    <path name="speaker-dmic-broadside">
+        <ctl name="INT3_MI2S_TX Channels" value="Two" />
+        <ctl name="ADC1 Volume" value="6" />
+        <ctl name="ADC3 Volume" value="6" />
+        <ctl name="DEC1 MUX" value="ADC1" />
+        <ctl name="ADC1_INP1 Switch" value="1" />
+        <ctl name="DEC2 MUX" value="ADC2" />
+        <ctl name="ADC2 MUX" value="INP3" />
+    </path>
+
+    <path name="dmic-broadside">
+        <path name="speaker-dmic-broadside" />
+        <ctl name="IIR1 INP1 MUX" value="DEC1" />
+    </path>
+
+    <path name="voice-speaker-dmic-broadside">
+        <path name="dmic-broadside" />
+    </path>
+
+    <!-- Quad MIC devices -->
+    <path name="speaker-qmic">
+    </path>
+
+    <path name="speaker-qmic-liquid">
+    </path>
+
+    <path name="voice-speaker-qmic">
+        <path name="speaker-qmic" />
+    </path>
+
+    <path name="quad-mic">
+        <path name="speaker-qmic" />
+    </path>
+
+    <path name="voice-speaker-qmic-liquid">
+        <path name="speaker-qmic-liquid" />
+    </path>
+
+    <path name="quad-mic-liquid">
+        <path name="speaker-qmic-liquid" />
+    </path>
+
+    <!-- TTY devices -->
+
+    <path name="tty-headphones">
+        <ctl name="RX1 MIX1 INP1" value="RX1" />
+        <ctl name="HPHL" value="Switch" />
+    </path>
+
+    <path name="voice-tty-full-headphones">
+        <ctl name="TTY Mode" value="FULL" />
+        <path name="tty-headphones" />
+    </path>
+
+    <path name="voice-tty-vco-headphones">
+        <ctl name="TTY Mode" value="VCO" />
+        <path name="tty-headphones" />
+    </path>
+
+    <path name="voice-tty-hco-handset">
+        <ctl name="TTY Mode" value="HCO" />
+        <path name="handset" />
+    </path>
+
+    <path name="voice-tty-full-headset-mic">
+        <path name="adc2" />
+    </path>
+
+    <path name="voice-tty-hco-headset-mic">
+        <path name="voice-tty-full-headset-mic" />
+    </path>
+
+    <path name="voice-tty-vco-handset-mic">
+        <path name="dmic4" />
+    </path>
+
+    <path name="unprocessed-handset-mic">
+        <path name="handset-mic" />
+    </path>
+
+    <path name="unprocessed-mic">
+        <path name="unprocessed-handset-mic" />
+    </path>
+    <!-- USB TTY start -->
+
+    <!-- full: both end tty -->
+    <path name="voice-tty-full-usb">
+        <ctl name="TTY Mode" value="FULL" />
+        <path name="usb-headphones" />
+    </path>
+
+    <path name="voice-tty-full-usb-mic">
+        <path name="usb-headset-mic" />
+    </path>
+
+    <!-- vco, in: handset mic use existing, out: tty -->
+    <path name="voice-tty-vco-usb">
+        <ctl name="TTY Mode" value="VCO" />
+        <path name="usb-headphones" />
+    </path>
+
+    <!-- hco, in: tty, out: speaker, use existing handset -->
+    <path name="voice-tty-hco-usb-mic">
+        <path name="voice-tty-full-usb-mic" />
+    </path>
+
+    <!-- USB TTY end   -->
+
+    <!-- Added for ADSP testfwk -->
+    <path name="ADSP testfwk">
+        <ctl name="INT4_MI2S_RX_DL_HL Switch" value="1" />
+    </path>
+
+    <path name="bt-a2dp">
+        <ctl name="BT SampleRate" value="KHZ_48" />
+        <ctl name="AFE Input Channels" value="Two" />
+        <ctl name="SLIM7_RX ADM Channels" value="Two" />
+    </path>
+
+    <path name="speaker-and-bt-a2dp">
+        <path name="speaker" />
+        <path name="bt-a2dp" />
+    </path>
+
+    <path name="deep-buffer-playback bt-a2dp">
+        <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia1" value="1" />
+    </path>
+
+    <path name="low-latency-playback bt-a2dp">
+        <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia5" value="1" />
+    </path>
+
+    <path name="compress-offload-playback bt-a2dp">
+        <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia4" value="1" />
+    </path>
+
+    <path name="compress-offload-playback2 bt-a2dp">
+        <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia7" value="1" />
+    </path>
+
+    <path name="compress-offload-playback3 bt-a2dp">
+        <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia10" value="1" />
+    </path>
+
+    <path name="compress-offload-playback4 bt-a2dp">
+        <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia11" value="1" />
+    </path>
+
+    <path name="compress-offload-playback5 bt-a2dp">
+        <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia12" value="1" />
+    </path>
+
+    <path name="compress-offload-playback6 bt-a2dp">
+        <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia13" value="1" />
+    </path>
+
+    <path name="compress-offload-playback7 bt-a2dp">
+        <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia14" value="1" />
+    </path>
+
+    <path name="compress-offload-playback8 bt-a2dp">
+        <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia15" value="1" />
+    </path>
+
+    <path name="compress-offload-playback9 bt-a2dp">
+        <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia16" value="1" />
+    </path>
+
+    <path name="audio-ull-playback bt-a2dp">
+        <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia8" value="1" />
+    </path>
+
+    <path name="deep-buffer-playback speaker-and-bt-a2dp">
+        <path name="deep-buffer-playback bt-a2dp" />
+        <path name="deep-buffer-playback" />
+    </path>
+
+    <path name="compress-offload-playback speaker-and-bt-a2dp">
+        <path name="compress-offload-playback bt-a2dp" />
+        <path name="compress-offload-playback" />
+    </path>
+
+    <path name="low-latency-playback speaker-and-bt-a2dp">
+        <path name="low-latency-playback bt-a2dp" />
+        <path name="low-latency-playback" />
+    </path>
+
+    <path name="compress-offload-playback2 speaker-and-bt-a2dp">
+        <path name="compress-offload-playback2 bt-a2dp" />
+        <path name="compress-offload-playback2" />
+    </path>
+
+    <path name="compress-offload-playback3 speaker-and-bt-a2dp">
+        <path name="compress-offload-playback3 bt-a2dp" />
+        <path name="compress-offload-playback3" />
+    </path>
+
+    <path name="compress-offload-playback4 speaker-and-bt-a2dp">
+        <path name="compress-offload-playback4 bt-a2dp" />
+        <path name="compress-offload-playback4" />
+    </path>
+
+    <path name="compress-offload-playback5 speaker-and-bt-a2dp">
+        <path name="compress-offload-playback5 bt-a2dp" />
+        <path name="compress-offload-playback5" />
+    </path>
+
+    <path name="compress-offload-playback6 speaker-and-bt-a2dp">
+        <path name="compress-offload-playback6 bt-a2dp" />
+        <path name="compress-offload-playback6" />
+    </path>
+
+    <path name="compress-offload-playback7 speaker-and-bt-a2dp">
+        <path name="compress-offload-playback7 bt-a2dp" />
+        <path name="compress-offload-playback7" />
+    </path>
+
+    <path name="compress-offload-playback8 speaker-and-bt-a2dp">
+        <path name="compress-offload-playback8 bt-a2dp" />
+        <path name="compress-offload-playback8" />
+    </path>
+
+    <path name="compress-offload-playback9 speaker-and-bt-a2dp">
+        <path name="compress-offload-playback9 bt-a2dp" />
+        <path name="compress-offload-playback9" />
+    </path>
+
+    <path name="audio-ull-playback speaker-and-bt-a2dp">
+        <path name="audio-ull-playback bt-a2dp" />
+        <path name="audio-ull-playback" />
+    </path>
+</mixer>
diff --git a/configs/sdm670/mixer_paths_tavil.xml b/configs/sdm670/mixer_paths_tavil.xml
index f822423..793ecc1 100644
--- a/configs/sdm670/mixer_paths_tavil.xml
+++ b/configs/sdm670/mixer_paths_tavil.xml
@@ -72,6 +72,9 @@
     <ctl name="MultiMedia8 Mixer SLIM_0_TX" value="0" />
     <ctl name="MultiMedia8 Mixer SLIM_4_TX" value="0" />
     <ctl name="MultiMedia8 Mixer SLIM_7_TX" value="0" />
+    <ctl name="MultiMedia10 Mixer SLIM_0_TX" value="0" />
+    <ctl name="MultiMedia10 Mixer SLIM_7_TX" value="0" />
+    <ctl name="MultiMedia10 Mixer AFE_PCM_TX" value="0" />
     <ctl name="DISPLAY_PORT Mixer MultiMedia1" value="0" />
     <ctl name="DISPLAY_PORT Mixer MultiMedia2" value="0" />
     <ctl name="DISPLAY_PORT Mixer MultiMedia3" value="0" />
@@ -160,6 +163,7 @@
     <ctl name="MultiMedia2 Mixer USB_AUDIO_TX" value="0" />
     <ctl name="MultiMedia5 Mixer USB_AUDIO_TX" value="0" />
     <ctl name="MultiMedia8 Mixer USB_AUDIO_TX" value="0" />
+    <ctl name="MultiMedia10 Mixer USB_AUDIO_TX" value="0" />
     <ctl name="USB_AUDIO_TX Format" value="S16_LE" />
     <ctl name="USB_AUDIO_TX SampleRate" value="KHZ_48" />
     <ctl name="USB_AUDIO_TX Channels" value="One" />
@@ -1541,6 +1545,63 @@
         <ctl name="VoiceMMode2_Tx Mixer USB_AUDIO_TX_MMode2" value="1" />
     </path>
 
+    <!-- VOIP Rx settings -->
+    <path name="audio-playback-voip">
+        <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia10" value="1" />
+    </path>
+
+    <path name="audio-playback-voip headphones">
+        <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia10" value="1" />
+    </path>
+
+    <path name="audio-playback-voip bt-sco">
+        <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia10" value="1" />
+    </path>
+
+    <path name="audio-playback-voip bt-sco-wb">
+        <ctl name="BT SampleRate" value="KHZ_16" />
+        <path name="audio-playback-voip bt-sco" />
+    </path>
+
+    <path name="audio-playback-voip afe-proxy">
+        <ctl name="AFE_PCM_RX Audio Mixer MultiMedia10" value="1" />
+    </path>
+
+    <path name="audio-playback-voip usb-headphones">
+        <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia10" value="1" />
+    </path>
+
+    <path name="audio-playback-voip usb-headset">
+        <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia10" value="1" />
+    </path>
+
+    <path name="audio-playback-voip display-port">
+        <ctl name="DISPLAY_PORT Audio Mixer MultiMedia10" value="1" />
+    </path>
+
+    <path name="audio-playback-voip speaker-and-display-port">
+        <path name="audio-playback-voip display-port" />
+        <path name="audio-playback-voip" />
+    </path>
+
+    <!-- VoIP Tx settings -->
+    <path name="audio-record-voip">
+        <ctl name="MultiMedia10 Mixer SLIM_0_TX" value="1" />
+    </path>
+
+    <path name="audio-record-voip usb-headset-mic">
+        <ctl name="MultiMedia10 Mixer USB_AUDIO_TX" value="1" />
+    </path>
+
+    <path name="audio-record-voip bt-sco">
+        <ctl name="MultiMedia10 Mixer SLIM_7_TX" value="1" />
+    </path>
+
+    <path name="audio-record-voip bt-sco-wb">
+        <ctl name="BT SampleRate" value="KHZ_16" />
+        <path name="audio-record-voip bt-sco" />
+    </path>
+
    <path name="spkr-rx-calib">
         <ctl name="SLIMBUS_DL_HL Switch"  value="1" />
     </path>
diff --git a/configs/sdm670/sdm670.mk b/configs/sdm670/sdm670.mk
index d220650..3163d3e 100644
--- a/configs/sdm670/sdm670.mk
+++ b/configs/sdm670/sdm670.mk
@@ -6,7 +6,7 @@
 ifneq ($(TARGET_USES_AOSP_FOR_AUDIO), true)
 USE_CUSTOM_AUDIO_POLICY := 1
 AUDIO_FEATURE_ENABLED_COMPRESS_CAPTURE := false
-AUDIO_FEATURE_ENABLED_COMPRESS_VOIP := true
+AUDIO_FEATURE_ENABLED_COMPRESS_VOIP := false
 AUDIO_FEATURE_ENABLED_DYNAMIC_ECNS := false
 AUDIO_FEATURE_ENABLED_EXTN_FORMATS := true
 AUDIO_FEATURE_ENABLED_EXTN_FLAC_DECODER := true
@@ -89,14 +89,17 @@
     hardware/qcom/audio/configs/sdm670/mixer_paths_tasha.xml:$(TARGET_COPY_OUT_VENDOR)/etc/mixer_paths_tasha.xml \
     hardware/qcom/audio/configs/sdm670/mixer_paths_tashalite.xml:$(TARGET_COPY_OUT_VENDOR)/etc/mixer_paths_tashalite.xml \
     hardware/qcom/audio/configs/sdm670/mixer_paths_i2s.xml:$(TARGET_COPY_OUT_VENDOR)/etc/mixer_paths_i2s.xml \
+    hardware/qcom/audio/configs/sdm670/mixer_paths_skuw.xml:$(TARGET_COPY_OUT_VENDOR)/etc/mixer_paths_skuw.xml \
     hardware/qcom/audio/configs/sdm670/audio_tuning_mixer.txt:$(TARGET_COPY_OUT_VENDOR)/etc/audio_tuning_mixer.txt \
     hardware/qcom/audio/configs/sdm670/audio_tuning_mixer_tavil.txt:$(TARGET_COPY_OUT_VENDOR)/etc/audio_tuning_mixer_tavil.txt \
     hardware/qcom/audio/configs/sdm670/audio_tuning_mixer_tasha.txt:$(TARGET_COPY_OUT_VENDOR)/etc/audio_tuning_mixer_tasha.txt \
     hardware/qcom/audio/configs/sdm670/audio_platform_info_intcodec.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_platform_info_intcodec.xml \
     hardware/qcom/audio/configs/sdm670/audio_platform_info_i2s.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_platform_info_i2s.xml \
     hardware/qcom/audio/configs/sdm670/audio_platform_info.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_platform_info.xml \
+    hardware/qcom/audio/configs/sdm670/audio_platform_info_skuw.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_platform_info_skuw.xml \
     hardware/qcom/audio/configs/sdm670/sound_trigger_platform_info.xml:$(TARGET_COPY_OUT_VENDOR)/etc/sound_trigger_platform_info.xml \
     hardware/qcom/audio/configs/sdm670/sound_trigger_mixer_paths.xml:$(TARGET_COPY_OUT_VENDOR)/etc/sound_trigger_mixer_paths.xml \
+    hardware/qcom/audio/configs/sdm670/sound_trigger_mixer_paths_skuw.xml:$(TARGET_COPY_OUT_VENDOR)/etc/sound_trigger_mixer_paths_skuw.xml \
     hardware/qcom/audio/configs/sdm670/sound_trigger_mixer_paths_wcd9335.xml:$(TARGET_COPY_OUT_VENDOR)/etc/sound_trigger_mixer_paths_wcd9335.xml \
     hardware/qcom/audio/configs/sdm670/sound_trigger_mixer_paths_wcd9340.xml:$(TARGET_COPY_OUT_VENDOR)/etc/sound_trigger_mixer_paths_wcd9340.xml \
     hardware/qcom/audio/configs/sdm670/sound_trigger_mixer_paths_wcd9340.xml:$(TARGET_COPY_OUT_VENDOR)/etc/sound_trigger_mixer_paths_wcd9340.xml \
@@ -136,6 +139,11 @@
 persist.vendor.audio.fluence.voicerec=false\
 persist.vendor.audio.fluence.speaker=true
 
+##speaker protection v3 switch and ADSP AFE API version
+PRODUCT_PROPERTY_OVERRIDES += \
+persist.vendor.audio.spv3.enable=true\
+persist.vendor.audio.avs.afe_api_version=2
+
 #disable tunnel encoding
 PRODUCT_PROPERTY_OVERRIDES += \
 vendor.audio.tunnel.encode=false
@@ -235,6 +243,10 @@
 PRODUCT_PROPERTY_OVERRIDES += \
 vendor.audio.offload.pstimeout.secs=3
 
+#Set AudioFlinger client heap size
+PRODUCT_PROPERTY_OVERRIDES += \
+ro.af.client_heap_size_kbyte=7168
+
 # for HIDL related packages
 PRODUCT_PACKAGES += \
     android.hardware.audio@2.0-service \
diff --git a/configs/sdm670/sound_trigger_mixer_paths_skuw.xml b/configs/sdm670/sound_trigger_mixer_paths_skuw.xml
new file mode 100644
index 0000000..6497073
--- /dev/null
+++ b/configs/sdm670/sound_trigger_mixer_paths_skuw.xml
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--- Copyright (c) 2014-2017, The Linux Foundation. All rights reserved.       -->
+<!---                                                                           -->
+<!--- Redistribution and use in source and binary forms, with or without        -->
+<!--- modification, are permitted provided that the following conditions are    -->
+<!--- met:                                                                      -->
+<!---     * Redistributions of source code must retain the above copyright      -->
+<!---       notice, this list of conditions and the following disclaimer.       -->
+<!---     * Redistributions in binary form must reproduce the above             -->
+<!---       copyright notice, this list of conditions and the following         -->
+<!---       disclaimer in the documentation and/or other materials provided     -->
+<!---       with the distribution.                                              -->
+<!---     * Neither the name of The Linux Foundation nor the names of its       -->
+<!---       contributors may be used to endorse or promote products derived     -->
+<!---       from this software without specific prior written permission.       -->
+<!---                                                                           -->
+<!--- THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED              -->
+<!--- WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF      -->
+<!--- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT    -->
+<!--- ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS    -->
+<!--- BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR    -->
+<!--- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF      -->
+<!--- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR           -->
+<!--- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,     -->
+<!--- WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE      -->
+<!--- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN    -->
+<!--- IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.                             -->
+
+<mixer>
+    <!-- These are the initial mixer settings -->
+    <ctl name="LSM1 Mixer INT3_MI2S_TX" value="0" />
+    <ctl name="LSM2 Mixer INT3_MI2S_TX" value="0" />
+    <ctl name="LSM3 Mixer INT3_MI2S_TX" value="0" />
+    <ctl name="LSM4 Mixer INT3_MI2S_TX" value="0" />
+    <ctl name="LSM5 Mixer INT3_MI2S_TX" value="0" />
+    <ctl name="LSM6 Mixer INT3_MI2S_TX" value="0" />
+    <ctl name="LSM7 Mixer INT3_MI2S_TX" value="0" />
+    <ctl name="LSM8 Mixer INT3_MI2S_TX" value="0" />
+    <ctl name="LSM1 Port" value="None" />
+    <ctl name="LSM2 Port" value="None" />
+    <ctl name="LSM3 Port" value="None" />
+    <ctl name="LSM4 Port" value="None" />
+    <ctl name="LSM5 Port" value="None" />
+    <ctl name="LSM6 Port" value="None" />
+    <ctl name="LSM7 Port" value="None" />
+    <ctl name="LSM8 Port" value="None" />
+    <ctl name="INT3_MI2S_TX LSM Function" value="None" />
+    <ctl name="DEC1 MUX" value="ZERO" />
+    <ctl name="ADC1_INP1 Switch" value="0" />
+
+    <path name="listen-voice-wakeup-1">
+        <ctl name="INT3_MI2S_TX LSM Function" value="SWAUDIO" />
+        <ctl name="LSM1 Port" value="INT3_MI2S_TX" />
+        <ctl name="LSM1 Mixer INT3_MI2S_TX" value="1" />
+    </path>
+
+    <path name="listen-voice-wakeup-2">
+        <ctl name="INT3_MI2S_TX LSM Function" value="SWAUDIO" />
+        <ctl name="LSM2 Port" value="INT3_MI2S_TX" />
+        <ctl name="LSM2 Mixer INT3_MI2S_TX" value="1" />
+    </path>
+
+    <path name="listen-voice-wakeup-3">
+        <ctl name="INT3_MI2S_TX LSM Function" value="SWAUDIO" />
+        <ctl name="LSM3 Port" value="INT3_MI2S_TX" />
+        <ctl name="LSM3 Mixer INT3_MI2S_TX" value="1" />
+    </path>
+
+    <path name="listen-voice-wakeup-4">
+        <ctl name="INT3_MI2S_TX LSM Function" value="SWAUDIO" />
+        <ctl name="LSM4 Port" value="INT3_MI2S_TX" />
+        <ctl name="LSM4 Mixer INT3_MI2S_TX" value="1" />
+    </path>
+
+    <path name="listen-voice-wakeup-5">
+        <ctl name="INT3_MI2S_TX LSM Function" value="SWAUDIO" />
+        <ctl name="LSM5 Port" value="INT3_MI2S_TX" />
+        <ctl name="LSM5 Mixer INT3_MI2S_TX" value="1" />
+    </path>
+
+    <path name="listen-voice-wakeup-6">
+        <ctl name="INT3_MI2S_TX LSM Function" value="SWAUDIO" />
+        <ctl name="LSM6 Port" value="INT3_MI2S_TX" />
+        <ctl name="LSM6 Mixer INT3_MI2S_TX" value="1" />
+    </path>
+
+    <path name="listen-voice-wakeup-7">
+        <ctl name="INT3_MI2S_TX LSM Function" value="SWAUDIO" />
+        <ctl name="LSM7 Port" value="INT3_MI2S_TX" />
+        <ctl name="LSM7 Mixer INT3_MI2S_TX" value="1" />
+    </path>
+
+    <path name="listen-voice-wakeup-8">
+        <ctl name="INT3_MI2S_TX LSM Function" value="SWAUDIO" />
+        <ctl name="LSM8 Port" value="INT3_MI2S_TX" />
+        <ctl name="LSM8 Mixer INT3_MI2S_TX" value="1" />
+    </path>
+
+    <path name="listen-voice-wakeup-1 preproc">
+        <ctl name="INT3_MI2S_TX LSM Function" value="SWAUDIO" />
+        <ctl name="LSM1 Port" value="ADM_LSM_TX" />
+        <ctl name="LSM1 Mixer INT3_MI2S_TX" value="1" />
+    </path>
+
+    <path name="listen-voice-wakeup-2 preproc">
+        <ctl name="INT3_MI2S_TX LSM Function" value="SWAUDIO" />
+        <ctl name="LSM2 Port" value="ADM_LSM_TX" />
+        <ctl name="LSM2 Mixer INT3_MI2S_TX" value="1" />
+    </path>
+
+    <path name="listen-voice-wakeup-3 preproc">
+        <ctl name="INT3_MI2S_TX LSM Function" value="SWAUDIO" />
+        <ctl name="LSM3 Port" value="ADM_LSM_TX" />
+        <ctl name="LSM3 Mixer INT3_MI2S_TX" value="1" />
+    </path>
+
+    <path name="listen-voice-wakeup-4 preproc">
+        <ctl name="INT3_MI2S_TX LSM Function" value="SWAUDIO" />
+        <ctl name="LSM4 Port" value="ADM_LSM_TX" />
+        <ctl name="LSM4 Mixer INT3_MI2S_TX" value="1" />
+    </path>
+
+    <path name="listen-voice-wakeup-5 preproc">
+        <ctl name="INT3_MI2S_TX LSM Function" value="SWAUDIO" />
+        <ctl name="LSM5 Port" value="ADM_LSM_TX" />
+        <ctl name="LSM5 Mixer INT3_MI2S_TX" value="1" />
+    </path>
+
+    <path name="listen-voice-wakeup-6 preproc">
+        <ctl name="INT3_MI2S_TX LSM Function" value="SWAUDIO" />
+        <ctl name="LSM6 Port" value="ADM_LSM_TX" />
+        <ctl name="LSM6 Mixer INT3_MI2S_TX" value="1" />
+    </path>
+
+    <path name="listen-voice-wakeup-7 preproc">
+        <ctl name="INT3_MI2S_TX LSM Function" value="SWAUDIO" />
+        <ctl name="LSM7 Port" value="ADM_LSM_TX" />
+        <ctl name="LSM7 Mixer INT3_MI2S_TX" value="1" />
+    </path>
+
+    <path name="listen-voice-wakeup-8 preproc">
+        <ctl name="INT3_MI2S_TX LSM Function" value="SWAUDIO" />
+        <ctl name="LSM8 Port" value="ADM_LSM_TX" />
+        <ctl name="LSM8 Mixer INT3_MI2S_TX" value="1" />
+    </path>
+
+    <path name="listen-ape-handset-mic">
+        <ctl name="ADC1 Volume" value="6" />
+        <ctl name="DEC1 MUX" value="ADC1" />
+        <ctl name="ADC1_INP1 Switch" value="1" />
+    </path>
+
+    <path name="listen-ape-handset-mic-preproc">
+        <path name="listen-ape-handset-mic"/>
+    </path>
+
+    <path name="echo-reference">
+        <ctl name="AUDIO_REF_EC_UL1 MUX" value="INT4_MI2S_RX"/>
+        <ctl name="EC Reference Channels" value="Two"/>
+        <ctl name="EC Reference Bit Format" value="S16_LE"/>
+        <ctl name="EC Reference SampleRate" value="48000"/>
+    </path>
+
+
+</mixer>
diff --git a/configs/sdm845/mixer_paths_tavil.xml b/configs/sdm845/mixer_paths_tavil.xml
index 8a6360b..2e31741 100644
--- a/configs/sdm845/mixer_paths_tavil.xml
+++ b/configs/sdm845/mixer_paths_tavil.xml
@@ -1841,6 +1841,10 @@
         <path name="speaker-mono-2" />
     </path>
 
+    <path name="speaker-hdk">
+        <path name="speaker-mono" />
+    </path>
+
     <path name="speaker-fluid">
         <path name="speaker-mono" />
     </path>
@@ -2063,6 +2067,14 @@
         <path name="handset-qrd" />
     </path>
 
+    <path name="voice-handset-hdk">
+        <path name="handset-qrd" />
+    </path>
+
+    <path name="voice-handset-tmus-hdk">
+        <path name="handset-qrd" />
+    </path>
+
     <path name="voice-speaker">
         <path name="speaker-mono" />
     </path>
@@ -2071,6 +2083,10 @@
         <path name="speaker-mono-2" />
     </path>
 
+    <path name="voice-speaker-hdk">
+        <path name="speaker-mono" />
+    </path>
+
     <path name="voice-speaker-2">
         <path name="speaker-mono-2" />
     </path>
@@ -2412,6 +2428,11 @@
         <path name="handset-qrd" />
     </path>
 
+    <path name="voice-tty-hco-handset-hdk">
+        <ctl name="TTY Mode" value="HCO" />
+        <path name="handset-qrd" />
+    </path>
+
     <path name="voice-tty-full-headset-mic">
         <path name="amic2" />
         <ctl name="ADC2 Volume" value="0" />
diff --git a/configs/sdm845/sdm845.mk b/configs/sdm845/sdm845.mk
index e6f2b3d..83751da 100644
--- a/configs/sdm845/sdm845.mk
+++ b/configs/sdm845/sdm845.mk
@@ -219,6 +219,18 @@
 PRODUCT_PROPERTY_OVERRIDES += \
 ro.af.client_heap_size_kbyte=7168
 
+#Set HAL buffer size to samples equal to 3 ms
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio_hal.in_period_size=144
+
+#Set HAL buffer size to 3 ms
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio_hal.period_multiplier=3
+
+#ADM Buffering size in ms
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio.adm.buffering.ms=2
+
 # for HIDL related packages
 PRODUCT_PACKAGES += \
     android.hardware.audio@2.0-service \
diff --git a/hal/Android.mk b/hal/Android.mk
index cbf766a..9b320f0 100644
--- a/hal/Android.mk
+++ b/hal/Android.mk
@@ -8,7 +8,7 @@
 
 AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM)
 
-ifneq ($(filter msm8974 msm8226 msm8610 apq8084 msm8994 msm8992 msm8996 msm8998 apq8098_latv sdm845 sdm670,$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter msm8974 msm8226 msm8610 apq8084 msm8994 msm8992 msm8996 msm8998 apq8098_latv sdm845 sdm670 qcs605,$(TARGET_BOARD_PLATFORM)),)
   # B-family platform uses msm8974 code base
   AUDIO_PLATFORM = msm8974
   MULTIPLE_HW_VARIANTS_ENABLED := true
@@ -39,6 +39,9 @@
 ifneq ($(filter sdm670,$(TARGET_BOARD_PLATFORM)),)
   LOCAL_CFLAGS := -DPLATFORM_SDM670
 endif
+ifneq ($(filter qcs605,$(TARGET_BOARD_PLATFORM)),)
+  LOCAL_CFLAGS := -DPLATFORM_QCS605
+endif
 endif
 
 ifneq ($(filter msm8916 msm8909 msm8952 msm8937 thorium msm8953 msmgold sdm660,$(TARGET_BOARD_PLATFORM)),)
@@ -65,6 +68,11 @@
 LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
 LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/techpack/audio/include
 LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
+ifneq ($(filter sdm670 qcs605,$(TARGET_BOARD_PLATFORM)),)
+  LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/vendor/qcom/opensource/audio-kernel/include
+  LOCAL_ADDITIONAL_DEPENDENCIES += $(BOARD_VENDOR_KERNEL_MODULES)
+endif
+
 LOCAL_CFLAGS += -DUSE_VENDOR_EXTN
 
 ifeq ($(strip $(AUDIO_FEATURE_ENABLED_HDMI_EDID)),true)
@@ -261,6 +269,11 @@
     LOCAL_SRC_FILES += audio_extn/a2dp.c
 endif
 
+ifeq ($(strip $(AUDIO_FEATURE_IP_HDLR_ENABLED)),true)
+    LOCAL_CFLAGS += -DAUDIO_EXTN_IP_HDLR_ENABLED
+    LOCAL_SRC_FILES += audio_extn/ip_hdlr_intf.c
+endif
+
 ifeq ($(strip $(AUDIO_FEATURE_ENABLED_QAF)),true)
     LOCAL_CFLAGS += -DQAF_EXTN_ENABLED
     LOCAL_C_INCLUDES += $(TARGET_OUT_HEADERS)/mm-audio/qaf/
@@ -363,11 +376,6 @@
     LOCAL_SHARED_LIBRARIES += libaudio_log_utils
 endif
 
-ifeq ($(strip $($AUDIO_FEATURE_IP_HDLR_ENABLED)),true)
-    LOCAL_CFLAGS += -DAUDIO_EXTN_IP_HDLR_ENABLED
-    LOCAL_SRC_FILES += audio_extn/ip_hdlr_intf.c
-endif
-
 ifeq ($(strip $($AUDIO_FEATURE_ENABLED_DYNAMIC_ECNS)),true)
     LOCAL_CFLAGS += -DDYNAMIC_ECNS_ENABLED
 endif
diff --git a/hal/audio_extn/a2dp.c b/hal/audio_extn/a2dp.c
index 2c0c53b..8ce3784 100644
--- a/hal/audio_extn/a2dp.c
+++ b/hal/audio_extn/a2dp.c
@@ -969,9 +969,9 @@
 
      ret = str_parms_get_str(parms, AUDIO_PARAMETER_DEVICE_CONNECT, value,
                             sizeof(value));
-     if( ret >= 0) {
+     if (ret >= 0) {
          val = atoi(value);
-         if (val & AUDIO_DEVICE_OUT_ALL_A2DP) {
+         if (audio_is_a2dp_out_device(val)) {
              ALOGV("Received device connect request for A2DP");
              open_a2dp_output();
          }
@@ -981,9 +981,9 @@
      ret = str_parms_get_str(parms, AUDIO_PARAMETER_DEVICE_DISCONNECT, value,
                          sizeof(value));
 
-     if( ret >= 0) {
+     if (ret >= 0) {
          val = atoi(value);
-         if (val & AUDIO_DEVICE_OUT_ALL_A2DP) {
+         if (audio_is_a2dp_out_device(val)) {
              ALOGV("Received device dis- connect request");
              reset_a2dp_enc_config_params();
              close_a2dp_output();
diff --git a/hal/audio_extn/adsp_hdlr.h b/hal/audio_extn/adsp_hdlr.h
index b265e42..1c257fc 100644
--- a/hal/audio_extn/adsp_hdlr.h
+++ b/hal/audio_extn/adsp_hdlr.h
@@ -66,7 +66,7 @@
 #define audio_extn_adsp_hdlr_stream_close(handle)                            (0)
 #define audio_extn_adsp_hdlr_stream_set_callback(handle, callback, cookie)   (0)
 #define audio_extn_adsp_hdlr_stream_set_param(handle, cmd, param)            (0)
-#define audio_extn_adsp_hdlr_stream_register_event(stream_data, param, cb)   (0)
+#define audio_extn_adsp_hdlr_stream_register_event(handle, param, cb, cookie) (0)
 #define audio_extn_adsp_hdlr_stream_deregister_event(handle, param)          (0)
 #endif
 
diff --git a/hal/audio_extn/audio_defs.h b/hal/audio_extn/audio_defs.h
index 7abc89b..2a81ba1 100644
--- a/hal/audio_extn/audio_defs.h
+++ b/hal/audio_extn/audio_defs.h
@@ -122,13 +122,13 @@
     uint16_t  doa_speech;
     uint16_t  doa_noise[3];
     uint8_t   polar_activity[360];
-};
+} __attribute__((packed));
 
 struct sound_focus_param {
     uint16_t  start_angle[MAX_SECTORS];
     uint8_t   enable[MAX_SECTORS];
     uint16_t  gain_step;
-};
+} __attribute__((packed));
 
 struct aptx_dec_bt_addr {
     uint32_t nap;
@@ -162,7 +162,7 @@
      * timer in microseconds.
      */
     uint32_t        ref_timer_abs_ts_msw;
-};
+} __attribute__((packed));
 
 /*use these for setting infine window.i.e free run mode */
 #define AUDIO_MAX_RENDER_START_WINDOW 0x8000000000000000
diff --git a/hal/audio_extn/audio_extn.c b/hal/audio_extn/audio_extn.c
index c1c4460..c598990 100644
--- a/hal/audio_extn/audio_extn.c
+++ b/hal/audio_extn/audio_extn.c
@@ -611,7 +611,7 @@
 {
     struct mixer_ctl *ctl;
     const char *mixer_ctl_name = "Playback Device Channel Map";
-    int set_values[8] = {0};
+    long set_values[8] = {0};
     int ret;
     ALOGV("%s channel_count:%d",__func__, channel_count);
 
@@ -650,7 +650,7 @@
               __func__, mixer_ctl_name);
         return -EINVAL;
     }
-    ALOGV("AFE: set mapping(%d %d %d %d %d %d %d %d) for channel:%d",
+    ALOGV("AFE: set mapping(%ld %ld %ld %ld %ld %ld %ld %ld) for channel:%d",
         set_values[0], set_values[1], set_values[2], set_values[3], set_values[4],
         set_values[5], set_values[6], set_values[7], channel_count);
     ret = mixer_ctl_set_array(ctl, set_values, channel_count);
diff --git a/hal/audio_extn/audio_extn.h b/hal/audio_extn/audio_extn.h
index 072d202..81f51e4 100644
--- a/hal/audio_extn/audio_extn.h
+++ b/hal/audio_extn/audio_extn.h
@@ -629,6 +629,9 @@
 int audio_extn_utils_get_snd_card_num();
 bool audio_extn_is_dsp_bit_width_enforce_mode_supported(audio_output_flags_t flags);
 bool audio_extn_utils_is_dolby_format(audio_format_t format);
+int audio_extn_utils_get_bit_width_from_string(const char *);
+int audio_extn_utils_get_sample_rate_from_string(const char *);
+int audio_extn_utils_get_channels_from_string(const char *);
 
 #ifdef DS2_DOLBY_DAP_ENABLED
 #define LIB_DS2_DAP_HAL "vendor/lib/libhwdaphal.so"
diff --git a/hal/audio_extn/compress_in.c b/hal/audio_extn/compress_in.c
index 49997f5..305ed5b 100644
--- a/hal/audio_extn/compress_in.c
+++ b/hal/audio_extn/compress_in.c
@@ -82,7 +82,9 @@
 static const audio_usecase_t cin_usecases[] = {
     USECASE_AUDIO_RECORD_COMPRESS2,
     USECASE_AUDIO_RECORD_COMPRESS3,
-    USECASE_AUDIO_RECORD_COMPRESS4
+    USECASE_AUDIO_RECORD_COMPRESS4,
+    USECASE_AUDIO_RECORD_COMPRESS5,
+    USECASE_AUDIO_RECORD_COMPRESS6
 };
 
 static pthread_mutex_t cin_lock = PTHREAD_MUTEX_INITIALIZER;
diff --git a/hal/audio_extn/dolby.c b/hal/audio_extn/dolby.c
index fda9a1a..ffd256f 100644
--- a/hal/audio_extn/dolby.c
+++ b/hal/audio_extn/dolby.c
@@ -196,7 +196,7 @@
                                  bool set_cache __unused)
 {
     int idx, i;
-    int ddp_endp_params_data[2*DDP_ENDP_NUM_PARAMS + 1];
+    long ddp_endp_params_data[2*DDP_ENDP_NUM_PARAMS + 1];
     int length = 0;
     for(idx=0; idx<DDP_ENDP_NUM_DEVICES; idx++) {
         if(ddp_endp_params[idx].device & device) {
diff --git a/hal/audio_extn/ffv.c b/hal/audio_extn/ffv.c
index cb4978f..50b776b 100644
--- a/hal/audio_extn/ffv.c
+++ b/hal/audio_extn/ffv.c
@@ -653,7 +653,7 @@
 
 void audio_extn_ffv_append_ec_ref_dev_name(char *device_name)
 {
-    if (ffvmod.ec_ref_dev == AUDIO_DEVICE_OUT_AUX_LINE)
+    if (ffvmod.ec_ref_dev == AUDIO_DEVICE_OUT_LINE)
         strlcat(device_name, " lineout",  DEVICE_NAME_MAX_SIZE);
     ALOGD("%s: ec ref dev name %s", __func__, device_name);
 }
@@ -878,9 +878,9 @@
             if (val & AUDIO_DEVICE_OUT_SPEAKER) {
                 ALOGD("%s: capture ec ref from speaker", __func__);
                 ffvmod.ec_ref_dev = AUDIO_DEVICE_OUT_SPEAKER;
-            } else if (val & AUDIO_DEVICE_OUT_AUX_LINE) {
+            } else if (val & AUDIO_DEVICE_OUT_LINE) {
                 ALOGD("%s: capture ec ref from line out", __func__);
-                ffvmod.ec_ref_dev = AUDIO_DEVICE_OUT_AUX_LINE;
+                ffvmod.ec_ref_dev = AUDIO_DEVICE_OUT_LINE;
             } else {
                 ALOGE("%s: Invalid ec ref out device", __func__);
             }
diff --git a/hal/audio_extn/gef.c b/hal/audio_extn/gef.c
index 0781f4c..4525f08 100644
--- a/hal/audio_extn/gef.c
+++ b/hal/audio_extn/gef.c
@@ -56,7 +56,7 @@
 #ifdef AUDIO_GENERIC_EFFECT_FRAMEWORK_ENABLED
 
 #if LINUX_ENABLED
-#define GEF_LIBRARY "/usr/lib/libqtigef.so"
+#define GEF_LIBRARY "libqtigef.so"
 #else
 #define GEF_LIBRARY "/vendor/lib/libqtigef.so"
 #endif
@@ -109,69 +109,63 @@
 
 void audio_extn_gef_init(struct audio_device *adev)
 {
-    int ret = 0;
     const char* error = NULL;
 
     ALOGV("%s: Enter with error", __func__);
 
     memset(&gef_hal_handle, 0, sizeof(gef_data));
 
-    ret = access(GEF_LIBRARY, R_OK);
-    if (ret == 0) {
-        //: check error for dlopen
-        gef_hal_handle.handle = dlopen(GEF_LIBRARY, RTLD_LAZY);
-        if (gef_hal_handle.handle == NULL) {
-            ALOGE("%s: DLOPEN failed for %s with error %s",
-                __func__, GEF_LIBRARY, dlerror());
-            goto ERROR_RETURN;
-        } else {
-            ALOGV("%s: DLOPEN successful for %s", __func__, GEF_LIBRARY);
-
-            //call dlerror to clear the error
-            dlerror();
-            gef_hal_handle.init =
-                (gef_init_t)dlsym(gef_hal_handle.handle, "gef_init");
-            error = dlerror();
-
-            if(error != NULL) {
-                ALOGE("%s: dlsym of %s failed with error %s",
-                     __func__, "gef_init", error);
-                goto ERROR_RETURN;
-            }
-
-            //call dlerror to clear the error
-            dlerror();
-            gef_hal_handle.deinit =
-                (gef_deinit_t)dlsym(gef_hal_handle.handle, "gef_deinit");
-            error = dlerror();
-
-            if(error != NULL) {
-                ALOGE("%s: dlsym of %s failed with error %s",
-                     __func__, "gef_deinit", error);
-                goto ERROR_RETURN;
-            }
-
-            //call dlerror to clear the error
-            error = dlerror();
-            gef_hal_handle.device_config_cb =
-                 (gef_device_config_cb_t)dlsym(gef_hal_handle.handle,
-                 "gef_device_config_cb");
-            error = dlerror();
-
-            if(error != NULL) {
-                ALOGE("%s: dlsym of %s failed with error %s",
-                     __func__, "gef_device_config_cb", error);
-                goto ERROR_RETURN;
-            }
-
-            gef_hal_handle.gef_ptr = gef_hal_handle.init((void*)adev);
-        }
+    //: check error for dlopen
+    gef_hal_handle.handle = dlopen(GEF_LIBRARY, RTLD_LAZY);
+    if (gef_hal_handle.handle == NULL) {
+        ALOGE("%s: DLOPEN failed for %s with error %s",
+            __func__, GEF_LIBRARY, dlerror());
+        goto ERROR_RETURN;
     } else {
-        ALOGE("%s: %s access failed", __func__, GEF_LIBRARY);
+        ALOGV("%s: DLOPEN successful for %s", __func__, GEF_LIBRARY);
+
+        //call dlerror to clear the error
+        dlerror();
+        gef_hal_handle.init =
+            (gef_init_t)dlsym(gef_hal_handle.handle, "gef_init");
+        error = dlerror();
+
+        if(error != NULL) {
+            ALOGE("%s: dlsym of %s failed with error %s",
+                 __func__, "gef_init", error);
+            goto ERROR_RETURN;
+        }
+
+        //call dlerror to clear the error
+        dlerror();
+        gef_hal_handle.deinit =
+            (gef_deinit_t)dlsym(gef_hal_handle.handle, "gef_deinit");
+        error = dlerror();
+
+        if(error != NULL) {
+            ALOGE("%s: dlsym of %s failed with error %s",
+                 __func__, "gef_deinit", error);
+            goto ERROR_RETURN;
+        }
+
+        //call dlerror to clear the error
+        error = dlerror();
+        gef_hal_handle.device_config_cb =
+            (gef_device_config_cb_t)dlsym(gef_hal_handle.handle,
+             "gef_device_config_cb");
+        error = dlerror();
+
+        if(error != NULL) {
+            ALOGE("%s: dlsym of %s failed with error %s",
+                 __func__, "gef_device_config_cb", error);
+            goto ERROR_RETURN;
+        }
+
+        gef_hal_handle.gef_ptr = gef_hal_handle.init((void*)adev);
     }
 
 ERROR_RETURN:
-    ALOGV("%s: Exit with error %d", __func__, ret);
+    ALOGV("%s: Exit with error ", __func__);
     return;
 }
 
diff --git a/hal/audio_extn/hfp.c b/hal/audio_extn/hfp.c
index 748562a..0d9f9ae 100644
--- a/hal/audio_extn/hfp.c
+++ b/hal/audio_extn/hfp.c
@@ -55,7 +55,7 @@
 #define HFP_RX_VOLUME     "SEC AUXPCM LOOPBACK Volume"
 #elif defined PLATFORM_MSM8996
 #define HFP_RX_VOLUME     "PRI AUXPCM LOOPBACK Volume"
-#elif defined (PLATFORM_MSM8998) || defined (PLATFORM_MSMFALCON) || defined (PLATFORM_SDM845) || defined (PLATFORM_SDM670)
+#elif defined (PLATFORM_MSM8998) || defined (PLATFORM_MSMFALCON) || defined (PLATFORM_SDM845) || defined (PLATFORM_SDM670) || defined (PLATFORM_QCS605)
 #define HFP_RX_VOLUME     "SLIMBUS_7 LOOPBACK Volume"
 #else
 #define HFP_RX_VOLUME     "Internal HFP RX Volume"
@@ -312,7 +312,7 @@
 {
     struct mixer_ctl *ctl;
     const char *mixer_ctl_name = "HFP TX Mute";
-    uint32_t set_values[ ] = {0};
+    long set_values[ ] = {0};
 
     ALOGI("%s: enter, state=%d", __func__, state);
 
diff --git a/hal/audio_extn/ip_hdlr_intf.c b/hal/audio_extn/ip_hdlr_intf.c
old mode 100644
new mode 100755
index a94e6de..ece7af3
--- a/hal/audio_extn/ip_hdlr_intf.c
+++ b/hal/audio_extn/ip_hdlr_intf.c
@@ -37,7 +37,7 @@
 #endif
 
 #ifdef LINUX_ENABLED
-#define LIB_PATH "/usr/lib/libaudio_ip_handler.so"
+#define LIB_PATH "libaudio_ip_handler.so"
 #else
 #define LIB_PATH "/system/vendor/lib/libaudio_ip_handler.so"
 #endif
@@ -48,10 +48,14 @@
 #include <dlfcn.h>
 #include <cutils/log.h>
 #include <sound/asound.h>
+#include <cutils/properties.h>
 
 #include "audio_hw.h"
 #include "audio_defs.h"
 #include "platform.h"
+#include "audio_extn.h"
+#include "platform_api.h"
+#include "adsp_hdlr.h"
 
 /* These values defined by ADSP */
 #define ADSP_DEC_SERVICE_ID 1
@@ -136,7 +140,7 @@
         return false;
 }
 
-int audio_extn_ip_hdlr_intf_event(void *stream_handle, void *payload, void *ip_hdlr_handle)
+int audio_extn_ip_hdlr_intf_event(void *stream_handle __unused, void *payload, void *ip_hdlr_handle )
 {
     ALOGVV("%s:[%d] handle = %p",__func__, ip_hdlr->ref_cnt, ip_hdlr_handle);
 
@@ -149,7 +153,6 @@
     int ret = 0;
     int pcm_device_id = 0;
     struct mixer_ctl *ctl = NULL;
-    struct stream_out *out = (struct stream_out *)aud_sess_handle;
     struct rtic_ack_param param;
     struct listnode *node, *tempnode;
     struct ip_hdlr_stream *stream_info;
@@ -234,7 +237,7 @@
             pthread_mutex_unlock(&inout->pre_lock);
             ALOGVV("%s:[%d] calling client callback", __func__, ip_hdlr->ref_cnt);
             if (inout && inout->client_callback)
-                inout->client_callback(AUDIO_EXTN_STREAM_CBK_EVENT_ERROR, NULL, inout->client_cookie);
+                inout->client_callback((stream_callback_event_t)AUDIO_EXTN_STREAM_CBK_EVENT_ERROR, NULL, inout->client_cookie);
             pthread_mutex_unlock(&inout->lock);
             break;
         } else if (stream_info->stream == aud_sess_handle) {
@@ -244,7 +247,7 @@
             pthread_mutex_unlock(&out->pre_lock);
             ALOGVV("%s:[%d] calling client callback", __func__, ip_hdlr->ref_cnt);
             if (out && out->client_callback)
-                out->client_callback(AUDIO_EXTN_STREAM_CBK_EVENT_ERROR, NULL, out->client_cookie);
+                out->client_callback((stream_callback_event_t)AUDIO_EXTN_STREAM_CBK_EVENT_ERROR, NULL, out->client_cookie);
             pthread_mutex_unlock(&out->lock);
             break;
         }
@@ -259,8 +262,6 @@
     int ret = 0, fd = 0, pcm_device_id = 0;
     struct audio_adsp_event *param;
     struct reg_event *reg_ev;
-    size_t shm_size;
-    void  *shm_buf;;
     struct stream_out *out;
     struct stream_inout *inout;
     void *adsp_hdlr_stream_handle;
@@ -302,7 +303,7 @@
                                                      audio_extn_ip_hdlr_intf_event,
                                                      handle);
     if (ret < 0) {
-        ALOGE("%s:[%d] failed to register event",__func__, ip_hdlr->ref_cnt, ret);
+        ALOGE("%s:[%d] failed to register event %d",__func__, ip_hdlr->ref_cnt, ret);
         goto done;
     }
 
@@ -313,7 +314,7 @@
     ret = snprintf(mixer_ctl_name, sizeof(mixer_ctl_name),
                    "Playback ION FD %d", pcm_device_id);
     if (ret < 0) {
-        ALOGE("%s:[%d] snprintf failed",__func__, ip_hdlr->ref_cnt, ret);
+        ALOGE("%s:[%d] snprintf failed %d",__func__, ip_hdlr->ref_cnt, ret);
         goto done;
     }
     ALOGV("%s: fd = %d  pcm_id = %d", __func__, fd, pcm_device_id);
@@ -371,11 +372,11 @@
     pthread_mutex_lock(&ip_hdlr->stream_list_lock);
     list_add_tail(&ip_hdlr->stream_list, &stream_info->list);
     pthread_mutex_unlock(&ip_hdlr->stream_list_lock);
-done:
+
     return ret;
 }
 
-int audio_extn_ip_hdlr_intf_close(void *handle, bool is_dsp_decode, void *aud_sess_handle)
+int audio_extn_ip_hdlr_intf_close(void *handle, bool is_dsp_decode, void *aud_sess_handle __unused)
 {
     struct audio_adsp_event param;
     void *adsp_hdlr_stream_handle;
@@ -484,7 +485,7 @@
         ret = snprintf(mixer_ctl_name, sizeof(mixer_ctl_name),
                        "Playback ION LIB FD %d", pcm_device_id);
         if (ret < 0) {
-            ALOGE("%s:[%d] snprintf failed",__func__, ip_hdlr->ref_cnt, ret);
+            ALOGE("%s:[%d] snprintf failed %d", __func__, ip_hdlr->ref_cnt, ret);
             goto dlclose;
         }
         ALOGV("%s: fd = %d  pcm_id = %d", __func__, lib_fd, pcm_device_id);
diff --git a/hal/audio_extn/keep_alive.c b/hal/audio_extn/keep_alive.c
index dad4946..698d8d0 100644
--- a/hal/audio_extn/keep_alive.c
+++ b/hal/audio_extn/keep_alive.c
@@ -30,6 +30,7 @@
 #define LOG_TAG "keep_alive"
 /*#define LOG_NDEBUG 0*/
 
+#include <cutils/properties.h>
 #include <stdlib.h>
 #include <cutils/log.h>
 #include "audio_hw.h"
@@ -194,7 +195,8 @@
 {
     struct audio_device * adev = (struct audio_device *)ka.userdata;
     char mixer_ctl_name[MAX_LENGTH_MIXER_CONTROL_IN_INT];
-    int app_type_cfg[MAX_LENGTH_MIXER_CONTROL_IN_INT], len = 0, rc;
+    long app_type_cfg[MAX_LENGTH_MIXER_CONTROL_IN_INT];
+    int len = 0, rc;
     struct mixer_ctl *ctl;
     int acdb_dev_id, snd_device;
     struct listnode *node;
@@ -374,12 +376,13 @@
     int ret;
 
     if (ka.state == STATE_DISABLED)
-        return;
+        return 0;
 
     ret = str_parms_get_str(parms, AUDIO_PARAMETER_DEVICE_CONNECT, value, sizeof(value));
     if (ret >= 0) {
         int val = atoi(value);
-        if (val & AUDIO_DEVICE_OUT_AUX_DIGITAL) {
+        if (audio_is_output_devices(val) &&
+            (val & AUDIO_DEVICE_OUT_AUX_DIGITAL)) {
             if (!audio_extn_passthru_is_active()) {
                 ALOGV("start keep alive");
                 audio_extn_keep_alive_start();
@@ -391,7 +394,8 @@
                             sizeof(value));
     if (ret >= 0) {
         int val = atoi(value);
-        if (val & AUDIO_DEVICE_OUT_AUX_DIGITAL) {
+        if (audio_is_output_devices(val) &&
+            (val & AUDIO_DEVICE_OUT_AUX_DIGITAL)) {
             ALOGV("stop keep_alive");
             audio_extn_keep_alive_stop();
         }
diff --git a/hal/audio_extn/qaf.c b/hal/audio_extn/qaf.c
index 20d0ae4..37dba0a 100644
--- a/hal/audio_extn/qaf.c
+++ b/hal/audio_extn/qaf.c
@@ -115,6 +115,7 @@
 #include "audio_extn.h"
 #include <qti_audio.h>
 #include "sound/compress_params.h"
+#include "ip_hdlr_intf.h"
 
 #ifdef DYNAMIC_LOG_ENABLED
 #include <log_xml_parser.h>
@@ -219,6 +220,7 @@
     float vol_right;
     bool is_vol_set;
     qaf_stream_state stream_state[MAX_QAF_MODULE_IN];
+    bool is_session_closing;
 };
 
 struct qaf {
@@ -806,7 +808,7 @@
                    / audio_stream_out_frame_size(stream)
                    / out->stream.common.get_sample_rate(&out->stream.common));
         }
-    } else if (ret < bytes) {
+    } else if (ret < (ssize_t)bytes) {
         //partial buffer copied to the module.
         DEBUG_MSG_VV("Not enough space available in mm module, post msg to cb thread");
         (void)qaf_send_offload_cmd_l(out, OFFLOAD_CMD_WAIT_FOR_BUFFER);
@@ -936,14 +938,20 @@
     if ((qaf_mod->stream_out[QAF_OUT_OFFLOAD] != NULL)
         || (qaf_mod->stream_out[QAF_OUT_OFFLOAD_MCH] != NULL)) {
         unsigned int sample_rate = 0;
+        audio_usecase_t platform_latency = 0;
 
         if (qaf_mod->stream_out[QAF_OUT_OFFLOAD])
             sample_rate = qaf_mod->stream_out[QAF_OUT_OFFLOAD]->sample_rate;
         else if (qaf_mod->stream_out[QAF_OUT_OFFLOAD_MCH])
             sample_rate = qaf_mod->stream_out[QAF_OUT_OFFLOAD_MCH]->sample_rate;
 
-        audio_usecase_t platform_latency =
+        if (qaf_mod->stream_out[QAF_OUT_OFFLOAD])
+            platform_latency =
                 platform_render_latency(qaf_mod->stream_out[QAF_OUT_OFFLOAD]->usecase);
+        else
+            platform_latency =
+                platform_render_latency(qaf_mod->stream_out[QAF_OUT_OFFLOAD_MCH]->usecase);
+
         dsp_latency = (platform_latency * sample_rate) / 1000000LL;
     } else if (qaf_mod->stream_out[QAF_OUT_TRANSCODE_PASSTHROUGH] != NULL) {
         unsigned int sample_rate = 0;
@@ -1269,11 +1277,15 @@
     struct audio_config config;
     audio_qaf_media_format_t *media_fmt = NULL;
 
+    if (qaf_mod->is_session_closing) {
+        DEBUG_MSG("Dropping event as session is closing."
+                "Device 0x%X, Event = 0x%X, Bytes to write %d", device, event_id, size);
+        return;
+    }
+
     DEBUG_MSG_VV("Device 0x%X, Event = 0x%X, Bytes to write %d", device, event_id, size);
 
 
-    pthread_mutex_lock(&p_qaf->lock);
-
     /* Default config initialization. */
     config.sample_rate = config.offload_info.sample_rate = QAF_OUTPUT_SAMPLING_RATE;
     config.offload_info.version = AUDIO_INFO_INITIALIZER.version;
@@ -1283,12 +1295,13 @@
     config.offload_info.channel_mask = config.channel_mask = AUDIO_CHANNEL_OUT_STEREO;
 
     if (event_id == AUDIO_SEC_FAIL_EVENT) {
-        DEBUG_MSG("%s Security failed, closing session");
+        DEBUG_MSG("%s Security failed, closing session", __func__);
         qaf_session_close(qaf_mod);
-        pthread_mutex_unlock(&p_qaf->lock);
         return;
     }
 
+    pthread_mutex_lock(&p_qaf->lock);
+
     if (event_id == AUDIO_DATA_EVENT) {
         data_buffer_p = (int8_t*)buf;
         buffer_size = size;
@@ -1777,6 +1790,8 @@
 {
     int j;
 
+    DEBUG_MSG("Closing Session.");
+
     //Check if all streams are closed or not.
     for (j = 0; j < MAX_QAF_MODULE_IN; j++) {
         if (qaf_mod->stream_in[j] != NULL) {
@@ -1787,6 +1802,9 @@
         return 0; //Some stream is already active, Can not close session.
     }
 
+    qaf_mod->is_session_closing = true;
+    pthread_mutex_lock(&p_qaf->lock);
+
     if (qaf_mod->session_handle != NULL && qaf_mod->qaf_audio_session_close) {
 #ifdef AUDIO_EXTN_IP_HDLR_ENABLED
         if (qaf_mod == &p_qaf->qaf_mod[MS12]) {
@@ -1810,6 +1828,8 @@
     }
     qaf_mod->new_out_format_index = 0;
 
+    pthread_mutex_unlock(&p_qaf->lock);
+    qaf_mod->is_session_closing = false;
     DEBUG_MSG("Session Closed.");
 
     return 0;
@@ -1843,11 +1863,11 @@
     }
     unlock_output_stream(out);
 
+    pthread_mutex_unlock(&p_qaf->lock);
+
     //If all streams are closed then close the session.
     qaf_session_close(qaf_mod);
 
-    pthread_mutex_unlock(&p_qaf->lock);
-
     DEBUG_MSG();
     return ret;
 }
@@ -1858,8 +1878,8 @@
     ALOGV("%s %d", __func__, __LINE__);
     unsigned char* license_data = NULL;
     device_license_config_t lic_config = {NULL, 0, 0};
-    int ret = -ENOSYS, size = 0;
-    char value[PROPERTY_VALUE_MAX] = {0};
+    int ret = -ENOSYS;
+
     struct qaf_module *qaf_mod = NULL;
 
     if (mod_type >= MAX_MM_MODULE_TYPE || !(p_qaf->qaf_mod[mod_type].qaf_audio_session_open))
@@ -1877,6 +1897,9 @@
     }
 
 #ifndef AUDIO_EXTN_IP_HDLR_ENABLED
+ {
+    int size=0;
+    char value[PROPERTY_VALUE_MAX] = {0};
     if (mod_type == MS12) {
         //Getting the license
         license_data = platform_get_license((struct audio_hw_device *)(p_qaf->adev->platform),
@@ -1905,6 +1928,7 @@
             goto exit;
         }
     }
+}
 #endif
 
     ret = qaf_mod->qaf_audio_session_open(&qaf_mod->session_handle,
@@ -1934,7 +1958,7 @@
     if (mod_type == MS12) {
         ret = audio_extn_ip_hdlr_intf_open(qaf_mod->ip_hdlr_hdl, false, qaf_mod->session_handle, out->usecase);
         if (ret < 0) {
-            ERROR_MSG("audio_extn_ip_hdlr_intf_open failed, ret = %d", __func__, ret);
+            ERROR_MSG("%s audio_extn_ip_hdlr_intf_open failed, ret = %d", __func__, ret);
             goto exit;
         }
     }
@@ -1973,7 +1997,7 @@
     if (p_qaf->qaf_mod[mmtype].qaf_audio_session_open == NULL ||
         p_qaf->qaf_mod[mmtype].qaf_audio_stream_open == NULL) {
         ERROR_MSG("Session or Stream is NULL");
-        return status;
+        return -ENOTSUP;
     }
     //Open the module session, if not opened already.
     status = audio_extn_qaf_session_open(mmtype, out);
@@ -2074,7 +2098,7 @@
     if (status != 0) {
         //If no stream is active then close the session.
         qaf_session_close(qaf_mod);
-        return status;
+        return 0;
     }
 
     //If Device is HDMI, QAF passthrough is enabled and there is no previous QAF passthrough input stream.
@@ -2491,13 +2515,10 @@
     out = (struct stream_out *)*stream_out;
 
     ret = qaf_stream_open(out, config, flags, devices);
-    if (ret == -ENOTSUP) {
+    if (ret < 0) {
+        ERROR_MSG("Error opening QAF stream err[%d]! QAF bypassed.", ret);
         //Stream not supported by QAF, Bypass QAF.
         return 0;
-    } else if (ret < 0) {
-        ERROR_MSG("Error opening QAF stream err[%d]!", ret);
-        adev_close_output_stream(dev, *stream_out);
-        return ret;
     }
 
     /* Override function pointers based on qaf definitions */
@@ -2542,7 +2563,7 @@
     struct qaf_module* qaf_mod = get_qaf_module_for_input_stream(out);
 
     if (!qaf_mod) {
-        DEBUG_MSG("qaf module is NULL, by passing qaf on close output stream");
+        DEBUG_MSG("qaf module is NULL, bypassing qaf on close output stream");
         /*closing non-MS12/default output stream opened with qaf */
         adev_close_output_stream(dev, stream);
         return;
@@ -2775,7 +2796,6 @@
     int status = 0, val = 0, k;
     char *format_params, *kv_parirs;
     struct str_parms *qaf_params;
-    char value[32];
 
     DEBUG_MSG("Entry");
 
@@ -2783,10 +2803,9 @@
         return -EINVAL;
     }
 
-    status = str_parms_get_str(parms, AUDIO_PARAMETER_DEVICE_CONNECT, value, sizeof(value));
+    status = str_parms_get_int(parms, AUDIO_PARAMETER_DEVICE_CONNECT, &val);
 
-    if (status >= 0) {
-        val = atoi(value);
+    if ((status >= 0) && audio_is_output_device(val)) {
         if (val & AUDIO_DEVICE_OUT_AUX_DIGITAL) { //HDMI is connected.
 
             p_qaf->hdmi_connect = 1;
@@ -2823,9 +2842,8 @@
         //TODO else if: Need to consider other devices.
     }
 
-    status = str_parms_get_str(parms, AUDIO_PARAMETER_DEVICE_DISCONNECT, value, sizeof(value));
-    if (status >= 0) {
-        val = atoi(value);
+    status = str_parms_get_int(parms, AUDIO_PARAMETER_DEVICE_DISCONNECT, &val);
+    if ((status >= 0) && audio_is_output_device(val)) {
         if (val & AUDIO_DEVICE_OUT_AUX_DIGITAL) { //HDMI is disconnected.
 
             qaf_params = str_parms_create();
@@ -2921,7 +2939,7 @@
         }
 }
 #else
-        qaf_mod->qaf_lib = dlopen(lib_name, RTLD_NOW);
+       qaf_mod->qaf_lib = dlopen(lib_name, RTLD_NOW);
         if (qaf_mod->qaf_lib == NULL) {
             ERROR_MSG("DLOPEN failed for %s", lib_name);
             continue;
diff --git a/hal/audio_extn/soundtrigger.c b/hal/audio_extn/soundtrigger.c
index a38ca17..c2dee84 100644
--- a/hal/audio_extn/soundtrigger.c
+++ b/hal/audio_extn/soundtrigger.c
@@ -71,7 +71,7 @@
 static void get_library_path(char *lib_path)
 {
     snprintf(lib_path, MAX_LIBRARY_PATH,
-             "/usr/lib/sound_trigger.primary.default.so");
+             "sound_trigger.primary.default.so");
 }
 #else
 static void get_library_path(char *lib_path)
diff --git a/hal/audio_extn/source_track.c b/hal/audio_extn/source_track.c
index e5e6c06..e078be4 100644
--- a/hal/audio_extn/source_track.c
+++ b/hal/audio_extn/source_track.c
@@ -161,6 +161,7 @@
     case SND_DEVICE_IN_VOICE_SPEAKER_DMIC:
     case SND_DEVICE_IN_VOICE_SPEAKER_DMIC_BROADSIDE:
     case SND_DEVICE_IN_VOICE_SPEAKER_QMIC:
+    case SND_DEVICE_IN_HANDSET_GENERIC_QMIC:
         ret = true;
         break;
     default:
diff --git a/hal/audio_extn/spkr_protection.c b/hal/audio_extn/spkr_protection.c
index a33d432..ea4d856 100644
--- a/hal/audio_extn/spkr_protection.c
+++ b/hal/audio_extn/spkr_protection.c
@@ -46,6 +46,7 @@
 #include <cutils/properties.h>
 #include "audio_extn.h"
 #include <linux/msm_audio_calibration.h>
+#include <linux/msm_audio.h>
 
 #ifdef DYNAMIC_LOG_ENABLED
 #include <log_xml_parser.h>
@@ -59,7 +60,29 @@
 #define MIN_SPKR_TEMP_Q6 (-30 * (1 << 6))
 #define MAX_SPKR_TEMP_Q6 (80 * (1 << 6))
 #define VI_FEED_CHANNEL "VI_FEED_TX Channels"
+#define WSA8815_NAME_LEFT "wsatz.13"
+#define WSA8815_NAME_RIGHT "wsatz.14"
+#define WCD_LEFT_BOOST_MAX_STATE "SPKR Left Boost Max State"
+#define WCD_RIGHT_BOOST_MAX_STATE "SPKR Right Boost Max State"
+#define WSA_LEFT_BOOST_LEVEL "SpkrLeft Boost Level"
+#define WSA_RIGHT_BOOST_LEVEL "SpkrRight Boost Level"
+/* Min and max resistance value in lookup table. */
+#define MIN_RESISTANCE_LOOKUP (3.2)
+#define MAX_RESISTANCE_LOOKUP (8)
+#define SPV3_LOOKUP_TABLE_ROWS (49)
+/* default limiter threshold is 0dB */
+#define DEFAULT_LIMITER_TH (0x0)
+#define AFE_API_VERSION_SUPPORT_SPV3 (0x2)
+enum spv3_boost_max_state {
+    BOOST_NO_MAX_STATE,
+    BOOST_MAX_STATE_1,
+    BOOST_MAX_STATE_2,
+};
 
+enum sp_version {
+    SP_V2 = 0x1,
+    SP_V3 = AFE_API_VERSION_SUPPORT_SPV3,
+};
 /*Set safe temp value to 40C*/
 #define SAFE_SPKR_TEMP 40
 #define SAFE_SPKR_TEMP_Q6 (SAFE_SPKR_TEMP * (1 << 6))
@@ -162,6 +185,8 @@
     pthread_cond_t cal_wait_condition;
     bool init_check;
     volatile bool thread_exit;
+    unsigned int sp_version;
+    int limiter_th[SP_V2_NUM_MAX_SPKRS];
 };
 
 static struct pcm_config pcm_config_skr_prot = {
@@ -180,6 +205,86 @@
     char *spkr_2_name;
 };
 
+struct spv3_boost {
+    /* bit7-4: first stage; bit 3-0: second stage */
+    int boost_value;
+    int max_state;
+};
+
+#define SPV3_BOOST_VALUE_STATE(value, state) \
+{    .boost_value = (value), .max_state = (state) }
+
+static struct spv3_boost spv3_boost_lookup_table[SPV3_LOOKUP_TABLE_ROWS] = {
+    SPV3_BOOST_VALUE_STATE(0xc7, BOOST_MAX_STATE_1),
+    SPV3_BOOST_VALUE_STATE(0xd7, BOOST_MAX_STATE_1),
+    SPV3_BOOST_VALUE_STATE(0xd7, BOOST_MAX_STATE_1),
+    SPV3_BOOST_VALUE_STATE(0xe7, BOOST_MAX_STATE_1),
+    SPV3_BOOST_VALUE_STATE(0xe7, BOOST_MAX_STATE_1),
+    SPV3_BOOST_VALUE_STATE(0xf7, BOOST_MAX_STATE_1),
+    SPV3_BOOST_VALUE_STATE(0x70, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x70, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x71, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x71, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x72, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x72, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x73, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x73, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x74, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x75, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x75, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x76, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x76, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x77, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x77, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x78, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x78, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x79, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x79, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x7a, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x7a, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x7a, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x7b, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x7b, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x7c, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x7c, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x7d, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x7d, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x7e, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x7e, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x7f, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x7f, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x7f, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x7f, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x7f, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x7f, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x7f, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x7f, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x7f, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x7f, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x7f, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x7f, BOOST_MAX_STATE_2),
+    SPV3_BOOST_VALUE_STATE(0x7f, BOOST_MAX_STATE_2),
+};
+
+/* 3.2 ohm in q24 format: (3.2 * (1 << 24)) */
+#define MIN_LOOKUP_RESISTANCE_SPKR_Q24    (53687091)
+/* 8 ohm in q24 format: (8 * (1 << 24)) */
+#define MAX_LOOKUP_RESISTANCE_SPKR_Q24    (134217728)
+/* 0.1 ohm in q24 format: (0.1 * (1 <<24)) */
+#define LOOKUP_RESISTANCE_GAP_SPKR_Q24    (1677722)
+
+/* 3.2ohm : 0.1ohm : 8ohm lookup table */
+static int spv3_limiter_th_q27_table[SPV3_LOOKUP_TABLE_ROWS] = {
+    -526133494, -508685189, -491236884, -473788580, -457682452, -441576325,
+    -426812375, -410706248, -395942298, -382520525, -367756575, -354334802,
+    -340913029, -327491256, -315411661, -301989888, -289910292, -277830697,
+    -265751101, -255013683, -242934088, -232196669, -221459251, -210721833,
+    -199984415, -190589174, -179851756, -170456515, -159719096, -150323855,
+    -140928614, -131533373, -122138132, -114085069, -104689828, -95294587,
+    -87241523,  -79188460,  -69793219,  -61740155,  -53687091,  -45634028,
+    -37580964,  -29527900,  -22817014,  -14763950,  -6710886,   0,
+    0
+};
 static struct speaker_prot_session handle;
 static int vi_feed_no_channels;
 static struct spkr_tz_names tz_names;
@@ -380,6 +485,11 @@
     cal_data.cal_type.cal_info.t0[SP_V2_SPKR_1] = protCfg->t0[SP_V2_SPKR_1];
     cal_data.cal_type.cal_info.t0[SP_V2_SPKR_2] = protCfg->t0[SP_V2_SPKR_2];
     cal_data.cal_type.cal_info.mode = protCfg->mode;
+#ifdef MSM_SPKR_PROT_SPV3
+    cal_data.cal_type.cal_info.sp_version = protCfg->sp_version;
+    cal_data.cal_type.cal_info.limiter_th[SP_V2_SPKR_1] = protCfg->limiter_th[SP_V2_SPKR_1];
+    cal_data.cal_type.cal_info.limiter_th[SP_V2_SPKR_2] = protCfg->limiter_th[SP_V2_SPKR_2];
+#endif
     property_get("persist.vendor.audio.spkr.cal.duration", value, "0");
     if (atoi(value) > 0) {
         ALOGD("%s: quick calibration enabled", __func__);
@@ -444,6 +554,179 @@
     }
 }
 
+static bool is_wsa_present(void)
+{
+   ALOGD("%s: tz1: %s, tz2: %s", __func__,
+          tz_names.spkr_1_name, tz_names.spkr_2_name);
+   handle.spkr_1_tzn = get_tzn(tz_names.spkr_1_name);
+   handle.spkr_2_tzn = get_tzn(tz_names.spkr_2_name);
+   if ((handle.spkr_1_tzn >= 0) || (handle.spkr_2_tzn >= 0))
+        handle.wsa_found = true;
+
+   return handle.wsa_found;
+}
+
+static void audio_extn_check_wsa_support_sp_v3(struct audio_device *adev,
+                unsigned int num_of_spkrs, bool *wsa_support_spv3)
+{
+    unsigned int i = 0;
+    if (!is_wsa_present() ||
+        platform_spkr_prot_is_wsa_analog_mode(adev)){
+        for (i = 0; i < num_of_spkrs; i++)
+            wsa_support_spv3[i] = false;
+
+        return;
+    }
+
+    if (!strncmp(WSA8815_NAME_LEFT, tz_names.spkr_1_name,
+            sizeof(WSA8815_NAME_LEFT)) ||
+            !strncmp(WSA8815_NAME_RIGHT, tz_names.spkr_1_name,
+                sizeof(WSA8815_NAME_RIGHT))) {
+        wsa_support_spv3[SP_V2_SPKR_1] = true;
+    } else {
+        wsa_support_spv3[SP_V2_SPKR_1] = false;
+        ALOGI("%s: Speaker1(%s) is not wsa8815.", __func__, tz_names.spkr_1_name);
+    }
+
+    if (num_of_spkrs == SP_V2_NUM_MAX_SPKRS &&
+        (!strncmp(WSA8815_NAME_RIGHT, tz_names.spkr_2_name,
+                    sizeof(WSA8815_NAME_RIGHT)) ||
+            !strncmp(WSA8815_NAME_LEFT, tz_names.spkr_2_name,
+                    sizeof(WSA8815_NAME_LEFT)))) {
+        wsa_support_spv3[SP_V2_SPKR_2] = true;
+    } else {
+        wsa_support_spv3[SP_V2_SPKR_2] = false;
+        ALOGI("%s: Speaker2(%s) is not wsa8815.", __func__, tz_names.spkr_2_name);
+    }
+
+}
+
+int audio_extn_set_wcd_boost_max_state(struct audio_device *adev,
+                int boost_max_state, int wsa_num)
+{
+    struct mixer_ctl *ctl = NULL;
+    const char *mixer_ctl_name[] = {
+        WCD_LEFT_BOOST_MAX_STATE,
+        WCD_RIGHT_BOOST_MAX_STATE
+    };
+    int status = 0;
+
+    ctl = mixer_get_ctl_by_name(adev->mixer, mixer_ctl_name[wsa_num]);
+    if (!ctl) {
+        ALOGE("%s: Could not get ctl for mixer cmd - %s",
+                __func__, mixer_ctl_name[wsa_num]);
+        return -EINVAL;
+    }
+
+    status = mixer_ctl_set_value(ctl, 0, boost_max_state);
+    if (status < 0) {
+        ALOGE("%s: failed to set WCD boost state.\n", __func__);
+        return -EINVAL;
+    }
+
+    return 0;
+}
+
+int audio_extn_set_wsa_boost_level(struct audio_device *adev,
+                int wsa_num, int boost_table_index)
+{
+    struct mixer_ctl *ctl;
+    const char *mixer_ctl_name_boost_level[] = {
+        WSA_LEFT_BOOST_LEVEL,
+        WSA_RIGHT_BOOST_LEVEL
+    };
+    int status = 0;
+
+    ctl = mixer_get_ctl_by_name(adev->mixer,
+        mixer_ctl_name_boost_level[wsa_num]);
+    if (!ctl) {
+        ALOGE("%s: Could not get ctl for mixer cmd - %s",
+                __func__, mixer_ctl_name_boost_level[wsa_num]);
+        return -EINVAL;
+    }
+
+    status = mixer_ctl_set_value(ctl, 0,
+                    spv3_boost_lookup_table[boost_table_index].boost_value);
+
+    if (status < 0) {
+        ALOGE("%s: Could not set ctl for mixer %s\n", __func__,
+                mixer_ctl_name_boost_level[wsa_num]);
+        return -EINVAL;
+    }
+
+    return 0;
+}
+
+static int audio_extn_config_spv3(struct audio_device *adev, unsigned int wsa_num)
+{
+    float dcr = 0;
+    unsigned int r0_index = 0;
+    int boost_max_state = 0;
+    int ret = 0;
+
+    /* get R0 value */
+    dcr = ((float)handle.sp_r0t0_cal.r0[wsa_num] / MIN_RESISTANCE_SPKR_Q24 * 2);
+    if (dcr < MIN_RESISTANCE_LOOKUP) {
+        ALOGV("%s: resistance %f changes to min value of 3.2.",
+                __func__, dcr);
+        dcr = MIN_RESISTANCE_LOOKUP;
+    }
+
+    if (dcr > MAX_RESISTANCE_LOOKUP) {
+        ALOGV("%s: resistance %f changes to max value of 8.",
+                __func__, dcr);
+        dcr = MAX_RESISTANCE_LOOKUP;
+    }
+
+    r0_index = (int)((dcr - MIN_RESISTANCE_LOOKUP) * 10);
+    if (r0_index >= SPV3_LOOKUP_TABLE_ROWS) {
+        ALOGE("%s: r0_index=%d overflows.", __func__, r0_index);
+        return -EINVAL;
+    }
+
+    boost_max_state = spv3_boost_lookup_table[r0_index].max_state;
+    ret = audio_extn_set_wcd_boost_max_state(adev, boost_max_state, wsa_num);
+    if (ret < 0) {
+        ALOGE("%s: failed to set wcd max boost state.",
+            __func__);
+        return -EINVAL;
+    }
+
+    ret = audio_extn_set_wsa_boost_level(adev, wsa_num, r0_index);
+    if (ret < 0) {
+        ALOGE("%s: failed to set wsa boost level.",
+            __func__);
+        return -EINVAL;
+    }
+
+    handle.limiter_th[wsa_num] = spv3_limiter_th_q27_table[r0_index];
+
+    return 0;
+}
+
+static void audio_extn_check_config_sp_v3(struct audio_device *adev,
+                bool spv3_enable, unsigned int afe_api_version)
+{
+    int chn = 0;
+    bool wsa_support_spv3[SP_V2_NUM_MAX_SPKRS] = {false, false};
+
+    if (spv3_enable && afe_api_version >= AFE_API_VERSION_SUPPORT_SPV3) {
+        handle.sp_version = SP_V2;
+        audio_extn_check_wsa_support_sp_v3(adev, vi_feed_no_channels, wsa_support_spv3);
+        /*
+         * In case of WSA8815+8810, invalid limiter threshold is sent to DSP
+         * for WSA8810 speaker. DSP ignores the invalid value and use default one.
+         * The approach let spv3 apply on 8815 and spv2 on 8810 respectively.
+         */
+        for (chn = 0; chn < vi_feed_no_channels; chn++) {
+            if (wsa_support_spv3[chn] && !audio_extn_config_spv3(adev, chn))
+                handle.sp_version = SP_V3;
+            else
+                handle.limiter_th[chn] = DEFAULT_LIMITER_TH;
+        }
+    }
+}
+
 static int spkr_calibrate(int t0_spk_1, int t0_spk_2)
 {
     struct audio_device *adev = handle.adev_handle;
@@ -706,6 +989,8 @@
     int spk_1_tzn, spk_2_tzn;
     char buf[32] = {0};
     int ret;
+    bool spv3_enable = false;
+    unsigned int afe_api_version = 0;
 
     memset(&protCfg, 0, sizeof(protCfg));
     /* If the value of this persist.vendor.audio.spkr.cal.duration is 0
@@ -738,6 +1023,9 @@
         return NULL;
     }
 
+    spv3_enable = property_get_bool("persist.vendor.audio.spv3.enable", false);
+    afe_api_version = property_get_int32("persist.vendor.audio.avs.afe_api_version", 0);
+
     fp = fopen(CALIB_FILE,"rb");
     if (fp) {
         int i;
@@ -770,6 +1058,9 @@
             } else
                 handle.spkr_prot_mode = MSM_SPKR_PROT_CALIBRATED;
             close(acdb_fd);
+
+            audio_extn_check_config_sp_v3(adev, spv3_enable, vi_feed_no_channels);
+
             pthread_exit(0);
             return NULL;
         }
@@ -921,6 +1212,9 @@
     if (handle.thermal_handle)
         dlclose(handle.thermal_handle);
     handle.thermal_handle = NULL;
+
+    audio_extn_check_config_sp_v3(adev, spv3_enable, vi_feed_no_channels);
+
     pthread_exit(0);
     return NULL;
 }
@@ -936,17 +1230,6 @@
     return 0;
 }
 
-static bool is_wsa_present(void)
-{
-   ALOGD("%s: tz1: %s, tz2: %s", __func__,
-          tz_names.spkr_1_name, tz_names.spkr_2_name);
-   handle.spkr_1_tzn = get_tzn(tz_names.spkr_1_name);
-   handle.spkr_2_tzn = get_tzn(tz_names.spkr_2_name);
-   if ((handle.spkr_1_tzn >= 0) || (handle.spkr_2_tzn >= 0))
-        handle.wsa_found = true;
-   return handle.wsa_found;
-}
-
 void audio_extn_spkr_prot_set_parameters(struct str_parms *parms,
                                          char *value, int len)
 {
@@ -1449,6 +1732,11 @@
             break;
     }
     protCfg.mode = MSM_SPKR_PROT_CALIBRATED;
+#ifdef MSM_SPKR_PROT_SPV3
+    protCfg.sp_version = handle.sp_version;
+    protCfg.limiter_th[SP_V2_SPKR_1] = handle.limiter_th[SP_V2_SPKR_1];
+    protCfg.limiter_th[SP_V2_SPKR_2] = handle.limiter_th[SP_V2_SPKR_2];
+#endif
     ret = set_spkr_prot_cal(acdb_fd, &protCfg);
     if (ret)
         ALOGE("%s: speaker protection cal data swap failed", __func__);
diff --git a/hal/audio_extn/utils.c b/hal/audio_extn/utils.c
index 4b48e3d..c7ad1a3 100644
--- a/hal/audio_extn/utils.c
+++ b/hal/audio_extn/utils.c
@@ -106,6 +106,11 @@
 #define MAX_CHANNELS_SUPPORTED 8
 #endif
 
+typedef struct {
+    const char *id_string;
+    const int value;
+} mixer_config_lookup;
+
 struct string_to_enum {
     const char *name;
     uint32_t value;
@@ -134,6 +139,7 @@
     STRING_TO_ENUM(AUDIO_INPUT_FLAG_RAW),
     STRING_TO_ENUM(AUDIO_INPUT_FLAG_SYNC),
     STRING_TO_ENUM(AUDIO_INPUT_FLAG_TIMESTAMP),
+    STRING_TO_ENUM(AUDIO_INPUT_FLAG_COMPRESS),
 };
 
 const struct string_to_enum s_format_name_to_enum_table[] = {
@@ -188,13 +194,18 @@
 /* payload structure avt_device drift query */
 struct audio_avt_device_drift_stats {
     uint32_t       minor_version;
+
     /* Indicates the device interface direction as either
      * source (Tx) or sink (Rx).
     */
     uint16_t        device_direction;
-    /*params exposed to client */
+
+    /* Reference timer for drift accumulation and time stamp information.
+     * currently it only support AFE_REF_TIMER_TYPE_AVTIMER
+     */
+    uint16_t        reference_timer;
     struct audio_avt_device_drift_param drift_param;
-};
+} __attribute__((packed));
 
 static char bTable[BASE_TABLE_SIZE] = {
             'A','B','C','D','E','F','G','H','I','J','K','L',
@@ -2367,4 +2378,63 @@
         return false;
 }
 
+int audio_extn_utils_get_bit_width_from_string(const char *id_string)
+{
+    int i;
+    const mixer_config_lookup mixer_bitwidth_config[] = {{"S24_3LE", 24},
+                                                         {"S32_LE", 32},
+                                                         {"S24_LE", 24},
+                                                         {"S16_LE", 16}};
+    int num_configs = sizeof(mixer_bitwidth_config) / sizeof(mixer_bitwidth_config[0]);
 
+    for (i = 0; i < num_configs; i++) {
+        if (!strcmp(id_string, mixer_bitwidth_config[i].id_string))
+            return mixer_bitwidth_config[i].value;
+    }
+
+    return -EINVAL;
+}
+
+int audio_extn_utils_get_sample_rate_from_string(const char *id_string)
+{
+    int i;
+    const mixer_config_lookup mixer_samplerate_config[] = {{"KHZ_32", 32000},
+                                                           {"KHZ_48", 48000},
+                                                           {"KHZ_96", 96000},
+                                                           {"KHZ_144", 144000},
+                                                           {"KHZ_192", 192000},
+                                                           {"KHZ_384", 384000},
+                                                           {"KHZ_44P1", 44100},
+                                                           {"KHZ_88P2", 88200},
+                                                           {"KHZ_176P4", 176400},
+                                                           {"KHZ_352P8", 352800}};
+    int num_configs = sizeof(mixer_samplerate_config) / sizeof(mixer_samplerate_config[0]);
+
+    for (i = 0; i < num_configs; i++) {
+        if (!strcmp(id_string, mixer_samplerate_config[i].id_string))
+            return mixer_samplerate_config[i].value;
+    }
+
+    return -EINVAL;
+}
+
+int audio_extn_utils_get_channels_from_string(const char *id_string)
+{
+    int i;
+    const mixer_config_lookup mixer_channels_config[] = {{"One", 1},
+                                                         {"Two", 2},
+                                                         {"Three",3},
+                                                         {"Four", 4},
+                                                         {"Five", 5},
+                                                         {"Six", 6},
+                                                         {"Seven", 7},
+                                                         {"Eight", 8}};
+    int num_configs = sizeof(mixer_channels_config) / sizeof(mixer_channels_config[0]);
+
+    for (i = 0; i < num_configs; i++) {
+        if (!strcmp(id_string, mixer_channels_config[i].id_string))
+            return mixer_channels_config[i].value;
+    }
+
+    return -EINVAL;
+}
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 39789f0..bbd05ee 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -74,6 +74,7 @@
 #include <platform.h>
 #include "audio_extn.h"
 #include "voice_extn.h"
+#include "ip_hdlr_intf.h"
 
 #include "sound/compress_params.h"
 #include "sound/asound.h"
@@ -299,6 +300,8 @@
     [USECASE_AUDIO_RECORD_COMPRESS2] = "audio-record-compress2",
     [USECASE_AUDIO_RECORD_COMPRESS3] = "audio-record-compress3",
     [USECASE_AUDIO_RECORD_COMPRESS4] = "audio-record-compress4",
+    [USECASE_AUDIO_RECORD_COMPRESS5] = "audio-record-compress5",
+    [USECASE_AUDIO_RECORD_COMPRESS6] = "audio-record-compress6",
     [USECASE_AUDIO_RECORD_LOW_LATENCY] = "low-latency-record",
     [USECASE_AUDIO_RECORD_FM_VIRTUAL] = "fm-virtual-record",
     [USECASE_AUDIO_RECORD_MMAP] = "mmap-record",
@@ -933,7 +936,6 @@
 #define check_and_enable_effect(x) ENOSYS
 #endif
 
-
 int pcm_ioctl(struct pcm *pcm, int request, ...)
 {
     va_list ap;
@@ -3728,7 +3730,9 @@
     }
 
     //suspend, resume handling block
-    if (out->dynamic_pm_qos_enabled) {
+    //remove QOS only if vendor.audio.hal.dynamic.qos.config.supported is set to true
+    // and vendor.audio.hal.output.suspend.supported is set to true
+    if (out->hal_output_suspend_supported && out->dynamic_pm_qos_config_supported) {
         //check suspend parameter only for low latency and if the property
         //is enabled
         if (str_parms_get_str(parms, "suspend_playback", value, sizeof(value)) >= 0) {
@@ -3977,7 +3981,7 @@
     if (str_parms_get_str(query, "supports_hw_suspend", value, sizeof(value)) >= 0) {
         //only low latency track supports suspend_resume
         str_parms_add_int(reply, "supports_hw_suspend",
-                (out->dynamic_pm_qos_enabled));
+                (out->hal_output_suspend_supported));
         if (str)
             free(str);
         str = str_parms_to_str(reply);
@@ -4037,7 +4041,7 @@
                           float right)
 {
     struct stream_out *out = (struct stream_out *)stream;
-    int volume[2];
+    long volume[2];
     char mixer_ctl_name[128];
     struct audio_device *adev = out->dev;
     struct mixer_ctl *ctl;
@@ -4068,7 +4072,7 @@
     char mixer_ctl_name[] = "App Type Gain";
     struct audio_device *adev = out->dev;
     struct mixer_ctl *ctl;
-    uint32_t set_values[4];
+    long set_values[4];
 
     ctl = mixer_get_ctl_by_name(adev->mixer, mixer_ctl_name);
     if (!ctl) {
@@ -4079,8 +4083,8 @@
 
     set_values[0] = 0; //0: Rx Session 1:Tx Session
     set_values[1] = out->app_type_cfg.app_type;
-    set_values[2] = (int)(left * VOIP_PLAYBACK_VOLUME_MAX);
-    set_values[3] = (int)(right * VOIP_PLAYBACK_VOLUME_MAX);
+    set_values[2] = (long)(left * VOIP_PLAYBACK_VOLUME_MAX);
+    set_values[3] = (long)(right * VOIP_PLAYBACK_VOLUME_MAX);
 
     mixer_ctl_set_array(ctl, set_values, ARRAY_SIZE(set_values));
     return 0;
@@ -4115,8 +4119,8 @@
                       __func__, mixer_ctl_name);
                 return -EINVAL;
             }
-            volume[0] = (int)(AmpToDb(left));
-            volume[1] = (int)(AmpToDb(right));
+            volume[0] = (long)(AmpToDb(left));
+            volume[1] = (long)(AmpToDb(right));
             mixer_ctl_set_array(ctl, volume, sizeof(volume)/sizeof(volume[0]));
             return 0;
         } else {
@@ -5532,7 +5536,8 @@
     out->convert_buffer = NULL;
     out->started = 0;
     out->a2dp_compress_mute = false;
-    out->dynamic_pm_qos_enabled = 0;
+    out->hal_output_suspend_supported = 0;
+    out->dynamic_pm_qos_config_supported = 0;
 
     if ((flags & AUDIO_OUTPUT_FLAG_BD) &&
         (property_get_bool("audio.matrix.limiter.enable", false)))
@@ -5917,8 +5922,11 @@
             out->stream.get_mmap_position = out_get_mmap_position;
         } else if (out->flags & AUDIO_OUTPUT_FLAG_FAST) {
             out->usecase = USECASE_AUDIO_PLAYBACK_LOW_LATENCY;
-            out->dynamic_pm_qos_enabled = property_get_bool("vendor.audio.dynamic.qos.enable", false);
-            if (!out->dynamic_pm_qos_enabled) {
+            out->hal_output_suspend_supported =
+                property_get_bool("vendor.audio.hal.output.suspend.supported", false);
+            out->dynamic_pm_qos_config_supported =
+                property_get_bool("vendor.audio.hal.dynamic.qos.config.supported", false);
+            if (!out->dynamic_pm_qos_config_supported) {
                 ALOGI("%s: dynamic qos voting not enabled for platform", __func__);
             } else {
                 ALOGI("%s: dynamic qos voting enabled for platform", __func__);
@@ -6242,7 +6250,8 @@
     ret = str_parms_get_str(parms, AUDIO_PARAMETER_DEVICE_CONNECT, value, sizeof(value));
     if (ret >= 0) {
         val = atoi(value);
-        if (val & AUDIO_DEVICE_OUT_AUX_DIGITAL) {
+        if (audio_is_output_device(val) &&
+            (val & AUDIO_DEVICE_OUT_AUX_DIGITAL)) {
             ALOGV("cache new ext disp type and edid");
             ret = platform_get_ext_disp_type(adev->platform);
             if (ret < 0) {
@@ -6251,8 +6260,8 @@
                 goto done;
             }
             platform_cache_edid(adev->platform);
-        } else if ((val & AUDIO_DEVICE_OUT_USB_DEVICE) ||
-                   !(val ^ AUDIO_DEVICE_IN_USB_DEVICE)) {
+        } else if ((audio_is_output_device(val) && (val & AUDIO_DEVICE_OUT_USB_DEVICE)) ||
+                   (audio_is_input_device(val) && ((uint32_t)val & AUDIO_DEVICE_IN_USB_DEVICE))) {
             /*
              * Do not allow AFE proxy port usage by WFD source when USB headset is connected.
              * Per AudioPolicyManager, USB device is higher priority than WFD.
@@ -6262,8 +6271,10 @@
              */
             ret = str_parms_get_str(parms, "card", value, sizeof(value));
             if (ret >= 0) {
-                audio_extn_usb_add_device(AUDIO_DEVICE_OUT_USB_DEVICE, atoi(value));
-                audio_extn_usb_add_device(AUDIO_DEVICE_IN_USB_DEVICE, atoi(value));
+                if (audio_is_output_device(val))
+                    audio_extn_usb_add_device(AUDIO_DEVICE_OUT_USB_DEVICE, atoi(value));
+                else
+                    audio_extn_usb_add_device(AUDIO_DEVICE_IN_USB_DEVICE, atoi(value));
             }
             ALOGV("detected USB connect .. disable proxy");
             adev->allow_afe_proxy_usage = false;
@@ -6279,12 +6290,14 @@
          * invalidated prior to updating sysfs of the disconnect event
          * Invalidate will be handled by audio_extn_ext_disp_set_parameters()
          */
-        if ((val & AUDIO_DEVICE_OUT_USB_DEVICE) ||
-                   !(val ^ AUDIO_DEVICE_IN_USB_DEVICE)) {
+        if ((audio_is_output_device(val) && (val & AUDIO_DEVICE_OUT_USB_DEVICE)) ||
+            (audio_is_input_device(val) && ((uint32_t)val == AUDIO_DEVICE_IN_USB_DEVICE))) {
             ret = str_parms_get_str(parms, "card", value, sizeof(value));
             if (ret >= 0) {
-                audio_extn_usb_remove_device(AUDIO_DEVICE_OUT_USB_DEVICE, atoi(value));
-                audio_extn_usb_remove_device(AUDIO_DEVICE_IN_USB_DEVICE, atoi(value));
+                if (audio_is_output_device(val))
+                    audio_extn_usb_remove_device(AUDIO_DEVICE_OUT_USB_DEVICE, atoi(value));
+                else
+                    audio_extn_usb_remove_device(AUDIO_DEVICE_IN_USB_DEVICE, atoi(value));
             }
             ALOGV("detected USB disconnect .. enable proxy");
             adev->allow_afe_proxy_usage = true;
@@ -6496,8 +6509,9 @@
 
     switch (flags) {
         case AUDIO_INPUT_FLAG_NONE:
-        case AUDIO_INPUT_FLAG_FAST: // just fast, not fast|raw || fast|mmap
             break;
+        case AUDIO_INPUT_FLAG_FAST: // disallow hifi record for FAST as
+                                    // it affects RTD numbers over USB
         default:
             return !allowed;
     }
@@ -6593,6 +6607,15 @@
     in->standby = 1;
     in->capture_handle = handle;
     in->flags = flags;
+    in->bit_width = 16;
+    in->af_period_multiplier = 1;
+
+    /* Update config params with the requested sample rate and channels */
+    if ((in->device == AUDIO_DEVICE_IN_TELEPHONY_RX) &&
+          (adev->mode != AUDIO_MODE_IN_CALL)) {
+        ret = -EINVAL;
+        goto err_open;
+    }
 
     /* restrict 24 bit capture for unprocessed source only
      * for other sources if 24 bit requested reject 24 and set 16 bit capture only
@@ -6615,7 +6638,9 @@
             goto err_open;
         }
         channel_count = audio_channel_count_from_in_mask(config->channel_mask);
-    } else if (config->format == AUDIO_FORMAT_DEFAULT) {
+    }
+
+    if (config->format == AUDIO_FORMAT_DEFAULT) {
         config->format = AUDIO_FORMAT_PCM_16_BIT;
     } else if ((config->format == AUDIO_FORMAT_PCM_FLOAT) ||
                (config->format == AUDIO_FORMAT_PCM_32_BIT) ||
@@ -6638,11 +6663,8 @@
             if (config->sample_rate > 48000)
                 config->sample_rate = 48000;
             ret_error = true;
-        } else if (config->format == AUDIO_FORMAT_PCM_24_BIT_PACKED) {
-            in->config.format = PCM_FORMAT_S24_3LE;
-        } else if (config->format == AUDIO_FORMAT_PCM_8_24_BIT) {
-            in->config.format = PCM_FORMAT_S24_LE;
-        } else {
+        } else if (!(config->format == AUDIO_FORMAT_PCM_24_BIT_PACKED ||
+                     config->format == AUDIO_FORMAT_PCM_8_24_BIT)) {
             config->format = AUDIO_FORMAT_PCM_24_BIT_PACKED;
             ret_error = true;
         }
@@ -6671,32 +6693,18 @@
         in->realtime = 0;
         in->usecase = USECASE_AUDIO_RECORD_MMAP;
         in->config = pcm_config_mmap_capture;
+        in->config.format = pcm_format_from_audio_format(config->format);
         in->stream.start = in_start;
         in->stream.stop = in_stop;
         in->stream.create_mmap_buffer = in_create_mmap_buffer;
         in->stream.get_mmap_position = in_get_mmap_position;
-        in->af_period_multiplier = 1;
         ALOGV("%s: USECASE_AUDIO_RECORD_MMAP", __func__);
     } else if (in->realtime) {
         in->config = pcm_config_audio_capture_rt;
+        in->config.format = pcm_format_from_audio_format(config->format);
         in->sample_rate = in->config.rate;
         in->af_period_multiplier = af_period_multiplier;
-    } else {
-        in->config = pcm_config_audio_capture;
-        in->config.rate = config->sample_rate;
-        in->sample_rate = config->sample_rate;
-        in->af_period_multiplier = 1;
-    }
-    in->bit_width = 16;
-
-    /* Update config params with the requested sample rate and channels */
-    if ((in->device == AUDIO_DEVICE_IN_TELEPHONY_RX) &&
-          (adev->mode != AUDIO_MODE_IN_CALL)) {
-        ret = -EINVAL;
-        goto err_open;
-    }
-
-    if (is_usb_dev && may_use_hifi_record) {
+    } else if (is_usb_dev && may_use_hifi_record) {
         in->usecase = USECASE_AUDIO_RECORD_HIFI;
         in->config = pcm_config_audio_capture;
         frame_size = audio_stream_in_frame_size(&in->stream);
@@ -6706,7 +6714,6 @@
                                             false /*is_low_latency*/);
         in->config.period_size = buffer_size / frame_size;
         in->config.rate = config->sample_rate;
-        in->af_period_multiplier = 1;
         in->config.format = pcm_format_from_audio_format(config->format);
         in->config.channels = channel_count;
     } else if ((in->device == AUDIO_DEVICE_IN_TELEPHONY_RX) ||
@@ -6749,41 +6756,54 @@
         ret = audio_extn_cin_configure_input_stream(in);
         if (ret)
             goto err_open;
-    } else {
-        in->config.channels = channel_count;
-        if (!in->realtime) {
-            in->format = config->format;
-            frame_size = audio_stream_in_frame_size(&in->stream);
-            buffer_size = get_input_buffer_size(config->sample_rate,
-                                                config->format,
-                                                channel_count,
-                                                is_low_latency);
-            in->config.period_size = buffer_size / frame_size;
-        }
-
+    } else if (in->source == AUDIO_SOURCE_VOICE_COMMUNICATION) {
+        bool valid_rate = (config->sample_rate == 8000 ||
+                           config->sample_rate == 16000 ||
+                           config->sample_rate == 32000 ||
+                           config->sample_rate == 48000);
+        bool valid_ch = audio_channel_count_from_in_mask(in->channel_mask) == 1;
+        //XXX needed for voice_extn_compress_voip_open_input_stream
+        in->config.rate = config->sample_rate;
 #ifndef COMPRESS_VOIP_ENABLED
-        if ((in->source == AUDIO_SOURCE_VOICE_COMMUNICATION) &&
-            (in->config.rate == 8000 || in->config.rate == 16000 ||
-             in->config.rate == 32000 || in->config.rate == 48000) &&
-            (audio_channel_count_from_in_mask(in->channel_mask) == 1)) {
-
+        if (valid_rate && valid_ch) {
             in->usecase = USECASE_AUDIO_RECORD_VOIP;
             in->config = default_pcm_config_voip_copp;
-            in->config.period_size = VOIP_IO_BUF_SIZE(in->sample_rate, DEFAULT_VOIP_BUF_DURATION_MS, DEFAULT_VOIP_BIT_DEPTH_BYTE)/2;
-            in->config.rate = in->sample_rate;
-#else
-        if ((in->source == AUDIO_SOURCE_VOICE_COMMUNICATION) &&
-               (in->dev->mode == AUDIO_MODE_IN_COMMUNICATION ||
-                voice_extn_compress_voip_is_active(in->dev)) &&
-               (voice_extn_compress_voip_is_format_supported(in->format)) &&
-               (in->config.rate == 8000 || in->config.rate == 16000 ||
-                in->config.rate == 32000 || in->config.rate == 48000) &&
-               (audio_channel_count_from_in_mask(in->channel_mask) == 1)) {
-            voice_extn_compress_voip_open_input_stream(in);
-#endif
+            in->config.period_size = VOIP_IO_BUF_SIZE(in->sample_rate,
+                                                      DEFAULT_VOIP_BUF_DURATION_MS,
+                                                      DEFAULT_VOIP_BIT_DEPTH_BYTE)/2;
         }
+#else
+        if ((in->dev->mode == AUDIO_MODE_IN_COMMUNICATION ||
+             voice_extn_compress_voip_is_active(in->dev)) &&
+            (voice_extn_compress_voip_is_format_supported(in->format)) &&
+            valid_rate && valid_ch) {
+            voice_extn_compress_voip_open_input_stream(in);
+        }
+#endif
+        else {
+            ALOGE("%s AUDIO_SOURCE_VOICE_COMMUNICATION invalid args", __func__);
+            ret = -EINVAL;
+            if (!valid_ch) config->channel_mask = 1;
+            if (!valid_rate) config->sample_rate = 48000;
+            goto err_open;
+        }
+        // update back to whatever was overwritten
+        in->config.rate = config->sample_rate;
+        in->sample_rate = config->sample_rate;
+    } else {
+        in->config = pcm_config_audio_capture;
+        in->config.rate = config->sample_rate;
+        in->config.format = pcm_format_from_audio_format(config->format);
+        in->config.channels = channel_count;
+        in->sample_rate = config->sample_rate;
+        in->format = config->format;
+        frame_size = audio_stream_in_frame_size(&in->stream);
+        buffer_size = get_input_buffer_size(config->sample_rate,
+                                            config->format,
+                                            channel_count,
+                                            is_low_latency);
+        in->config.period_size = buffer_size / frame_size;
     }
-
     audio_extn_utils_update_stream_input_app_type_cfg(adev->platform,
                                                 &adev->streams_input_cfg_list,
                                                 devices, flags, in->format, in->sample_rate,
diff --git a/hal/audio_hw.h b/hal/audio_hw.h
index 56ee9d0..f39abf9 100644
--- a/hal/audio_hw.h
+++ b/hal/audio_hw.h
@@ -50,9 +50,9 @@
 #include "audio_hw_extn_api.h"
 
 #if LINUX_ENABLED
-#define VISUALIZER_LIBRARY_PATH "/usr/lib/libqcomvisualizer.so"
-#define OFFLOAD_EFFECTS_BUNDLE_LIBRARY_PATH "/usr/lib/libqcompostprocbundle.so"
-#define ADM_LIBRARY_PATH "/usr/lib/libadm.so"
+#define VISUALIZER_LIBRARY_PATH "libqcomvisualizer.so"
+#define OFFLOAD_EFFECTS_BUNDLE_LIBRARY_PATH "libqcompostprocbundle.so"
+#define ADM_LIBRARY_PATH "libadm.so"
 #else
 #define VISUALIZER_LIBRARY_PATH "/vendor/lib/soundfx/libqcomvisualizer.so"
 #define OFFLOAD_EFFECTS_BUNDLE_LIBRARY_PATH "/vendor/lib/soundfx/libqcompostprocbundle.so"
@@ -147,6 +147,8 @@
     USECASE_AUDIO_RECORD_COMPRESS2,
     USECASE_AUDIO_RECORD_COMPRESS3,
     USECASE_AUDIO_RECORD_COMPRESS4,
+    USECASE_AUDIO_RECORD_COMPRESS5,
+    USECASE_AUDIO_RECORD_COMPRESS6,
     USECASE_AUDIO_RECORD_LOW_LATENCY,
     USECASE_AUDIO_RECORD_FM_VIRTUAL,
     USECASE_AUDIO_RECORD_HIFI,
@@ -339,7 +341,8 @@
     float volume_r;
 
     char pm_qos_mixer_path[MAX_MIXER_PATH_LEN];
-    int dynamic_pm_qos_enabled;
+    int hal_output_suspend_supported;
+    int dynamic_pm_qos_config_supported;
     bool stream_config_changed;
     mix_matrix_params_t pan_scale_params;
     mix_matrix_params_t downmix_params;
diff --git a/hal/msm8916/platform.c b/hal/msm8916/platform.c
index 50ab6f9..6bb7eb2 100644
--- a/hal/msm8916/platform.c
+++ b/hal/msm8916/platform.c
@@ -302,6 +302,7 @@
     bool is_dsd_supported;
     bool is_asrc_supported;
     struct listnode acdb_meta_key_list;
+    bool use_generic_handset;
 };
 
 static bool is_external_codec = false;
@@ -336,6 +337,9 @@
     [USECASE_AUDIO_RECORD_COMPRESS2] = {-1, -1},
     [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,
@@ -548,6 +552,7 @@
     [SND_DEVICE_IN_HANDSET_8MIC] = "handset-8mic",
     [SND_DEVICE_IN_EC_REF_LOOPBACK_MONO] = "ec-ref-loopback-mono",
     [SND_DEVICE_IN_EC_REF_LOOPBACK_STEREO] = "ec-ref-loopback-stereo",
+    [SND_DEVICE_IN_HANDSET_GENERIC_QMIC] = "quad-mic",
 };
 
 // Platform specific backend bit width table
@@ -710,7 +715,8 @@
     [SND_DEVICE_IN_HANDSET_6MIC] = 4,
     [SND_DEVICE_IN_HANDSET_8MIC] = 4,
     [SND_DEVICE_IN_EC_REF_LOOPBACK_MONO] = 4,
-    [SND_DEVICE_IN_EC_REF_LOOPBACK_STEREO] = 4
+    [SND_DEVICE_IN_EC_REF_LOOPBACK_STEREO] = 4,
+    [SND_DEVICE_IN_HANDSET_GENERIC_QMIC] = 150
 };
 
 struct name_to_index {
@@ -859,6 +865,7 @@
     {TO_NAME_INDEX(SND_DEVICE_IN_HANDSET_8MIC)},
     {TO_NAME_INDEX(SND_DEVICE_IN_EC_REF_LOOPBACK_MONO)},
     {TO_NAME_INDEX(SND_DEVICE_IN_EC_REF_LOOPBACK_STEREO)},
+    {TO_NAME_INDEX(SND_DEVICE_IN_HANDSET_GENERIC_QMIC)},
 };
 
 static char * backend_tag_table[SND_DEVICE_MAX] = {0};
@@ -884,6 +891,8 @@
     {TO_NAME_INDEX(USECASE_AUDIO_RECORD_COMPRESS2)},
     {TO_NAME_INDEX(USECASE_AUDIO_RECORD_COMPRESS3)},
     {TO_NAME_INDEX(USECASE_AUDIO_RECORD_COMPRESS4)},
+    {TO_NAME_INDEX(USECASE_AUDIO_RECORD_COMPRESS5)},
+    {TO_NAME_INDEX(USECASE_AUDIO_RECORD_COMPRESS6)},
     {TO_NAME_INDEX(USECASE_AUDIO_RECORD_LOW_LATENCY)},
     {TO_NAME_INDEX(USECASE_AUDIO_RECORD_MMAP)},
     {TO_NAME_INDEX(USECASE_VOICE_CALL)},
@@ -972,6 +981,8 @@
 #define ULL_PLATFORM_DELAY (6*1000LL)
 #define MMAP_PLATFORM_DELAY (3*1000LL)
 
+static const char *platform_get_mixer_control(struct mixer_ctl *);
+
 static void update_interface(const char *snd_card_name) {
      if (!strncmp(snd_card_name, "apq8009-tashalite-snd-card",
                   sizeof("apq8009-tashalite-snd-card"))) {
@@ -1650,6 +1661,7 @@
     hw_interface_table[SND_DEVICE_IN_UNPROCESSED_THREE_MIC] = strdup("SLIMBUS_0_TX");
     hw_interface_table[SND_DEVICE_IN_UNPROCESSED_QUAD_MIC] = strdup("SLIMBUS_0_TX");
     hw_interface_table[SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC] = strdup("SLIMBUS_0_TX");
+    hw_interface_table[SND_DEVICE_IN_HANDSET_GENERIC_QMIC] = strdup("SLIMBUS_0_TX");
 
     my_data->max_mic_count = PLATFORM_DEFAULT_MIC_COUNT;
     /*remove ALAC & APE from DSP decoder list based on software decoder availability*/
@@ -2149,6 +2161,8 @@
     int idx;
     int wsaCount =0;
     bool is_wsa_combo_supported = false;
+    const char *id_string = NULL;
+    int cfg_value = -1;
 
     snd_card_num = audio_extn_utils_get_snd_card_num();
     if(snd_card_num < 0) {
@@ -2599,6 +2613,41 @@
     my_data->current_backend_cfg[HDMI_TX_BACKEND].channels_mixer_ctl =
         strdup("QUAT_MI2S_TX Channels");
 
+    for (idx = 0; idx < MAX_CODEC_BACKENDS; idx++) {
+        if (my_data->current_backend_cfg[idx].bitwidth_mixer_ctl) {
+            ctl = mixer_get_ctl_by_name(adev->mixer,
+                         my_data->current_backend_cfg[idx].bitwidth_mixer_ctl);
+            id_string = platform_get_mixer_control(ctl);
+            if (id_string) {
+                cfg_value = audio_extn_utils_get_bit_width_from_string(id_string);
+                if (cfg_value > 0)
+                    my_data->current_backend_cfg[idx].bit_width = cfg_value;
+            }
+        }
+
+        if (my_data->current_backend_cfg[idx].samplerate_mixer_ctl) {
+            ctl = mixer_get_ctl_by_name(adev->mixer,
+                         my_data->current_backend_cfg[idx].samplerate_mixer_ctl);
+            id_string = platform_get_mixer_control(ctl);
+            if (id_string) {
+                cfg_value = audio_extn_utils_get_sample_rate_from_string(id_string);
+                if (cfg_value > 0)
+                    my_data->current_backend_cfg[idx].sample_rate = cfg_value;
+            }
+        }
+
+        if (my_data->current_backend_cfg[idx].channels_mixer_ctl) {
+            ctl = mixer_get_ctl_by_name(adev->mixer,
+                         my_data->current_backend_cfg[idx].channels_mixer_ctl);
+            id_string = platform_get_mixer_control(ctl);
+            if (id_string) {
+                cfg_value = audio_extn_utils_get_channels_from_string(id_string);
+                if (cfg_value > 0)
+                    my_data->current_backend_cfg[idx].channels = cfg_value;
+            }
+        }
+    }
+
     ret = audio_extn_utils_get_codec_version(snd_card_name,
                                              my_data->adev->snd_card,
                                              my_data->codec_version);
@@ -2623,6 +2672,9 @@
         }
     }
 
+    if (property_get_bool("vendor.audio.apptype.multirec.enabled", false))
+        my_data->use_generic_handset = true;
+
     my_data->edid_info = NULL;
     return my_data;
 }
@@ -3520,9 +3572,9 @@
     struct mixer_ctl *ctl;
     const char *mixer_ctl_name = "Voice Rx Gain";
     int vol_index = 0, ret = 0;
-    uint32_t set_values[ ] = {0,
-                              ALL_SESSION_VSID,
-                              DEFAULT_VOLUME_RAMP_DURATION_MS};
+    long set_values[ ] = {0,
+                          ALL_SESSION_VSID,
+                          DEFAULT_VOLUME_RAMP_DURATION_MS};
 
     // Voice volume levels are mapped to adsp volume levels as follows.
     // 100 -> 5, 80 -> 4, 60 -> 3, 40 -> 2, 20 -> 1  0 -> 0
@@ -3536,7 +3588,7 @@
               __func__, mixer_ctl_name);
         ret = -EINVAL;
     } else {
-        ALOGV("%s Setting voice volume index: %d",__func__, set_values[0]);
+        ALOGV("%s Setting voice volume index: %ld",__func__, set_values[0]);
         mixer_ctl_set_array(ctl, set_values, ARRAY_SIZE(set_values));
     }
 
@@ -3557,9 +3609,9 @@
     struct mixer_ctl *ctl;
     const char *mixer_ctl_name = "Voice Tx Mute";
     int ret = 0;
-    uint32_t set_values[ ] = {0,
-                              ALL_SESSION_VSID,
-                              DEFAULT_MUTE_RAMP_DURATION_MS};
+    long set_values[ ] = {0,
+                          ALL_SESSION_VSID,
+                          DEFAULT_MUTE_RAMP_DURATION_MS};
 
     set_values[0] = state;
     ctl = mixer_get_ctl_by_name(adev->mixer, mixer_ctl_name);
@@ -3589,9 +3641,9 @@
     struct mixer_ctl *ctl;
     char *mixer_ctl_name = NULL;
     int ret = 0;
-    uint32_t set_values[ ] = {0,
-                              ALL_SESSION_VSID,
-                              0};
+    long set_values[ ] = {0,
+                          ALL_SESSION_VSID,
+                          0};
     if(dir == NULL) {
         ALOGE("%s: Invalid direction:%s", __func__, dir);
         return -EINVAL;
@@ -3989,6 +4041,8 @@
                 snd_device = SND_DEVICE_OUT_HEADPHONES_44_1;
         } else if (out->format == AUDIO_FORMAT_DSD) {
                 snd_device = SND_DEVICE_OUT_HEADPHONES_DSD;
+        } else if (devices & AUDIO_DEVICE_OUT_LINE) {
+                snd_device = SND_DEVICE_OUT_LINE;
         }  else {
 #ifdef RECORD_PLAY_CONCURRENCY
             if (use_voip_out_devices)
@@ -4345,6 +4399,17 @@
                 snd_device = SND_DEVICE_IN_VOICE_USB_HEADSET_MIC;
             }
         }
+    } else if (my_data->use_generic_handset == true &&  //     system prop is enabled
+               (my_data->source_mic_type & SOURCE_QUAD_MIC) &&  // AND 4mic is available
+               ((in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) ||    // AND device is buit-in mic or back mic
+                (in_device & AUDIO_DEVICE_IN_BACK_MIC)) &&
+               (my_data->fluence_in_audio_rec == true &&       //  AND fluencepro is enabled
+                my_data->fluence_type & FLUENCE_QUAD_MIC) &&
+               (source == AUDIO_SOURCE_CAMCORDER ||           // AND source is cam/mic/unprocessed
+                source == AUDIO_SOURCE_UNPROCESSED ||
+                source == AUDIO_SOURCE_MIC)) {
+                snd_device = SND_DEVICE_IN_HANDSET_GENERIC_QMIC;
+                platform_set_echo_reference(adev, true, out_device);
     } else if (source == AUDIO_SOURCE_CAMCORDER) {
         if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC ||
             in_device & AUDIO_DEVICE_IN_BACK_MIC) {
@@ -4639,8 +4704,8 @@
     struct audio_device *adev = my_data->adev;
     struct mixer_ctl *ctl;
     const char *mixer_ctl_name = "Slowtalk Enable";
-    uint32_t set_values[ ] = {0,
-                              ALL_SESSION_VSID};
+    long set_values[ ] = {0,
+                          ALL_SESSION_VSID};
 
     set_values[0] = state;
     ctl = mixer_get_ctl_by_name(adev->mixer, mixer_ctl_name);
@@ -4670,8 +4735,8 @@
     struct mixer_ctl *ctl;
     const char *mixer_ctl_name = "HD Voice Enable";
     int ret = 0;
-    uint32_t set_values[ ] = {0,
-                              ALL_SESSION_VSID};
+    long set_values[ ] = {0,
+                          ALL_SESSION_VSID};
 
     set_values[0] = state;
     ctl = mixer_get_ctl_by_name(adev->mixer, mixer_ctl_name);
@@ -6832,7 +6897,7 @@
     char mixer_ctl_name[44] = {0}; // max length of name is 44 as defined
     int ret;
     unsigned int i;
-    int set_values[FCC_8] = {0};
+    long set_values[FCC_8] = {0};
     struct platform_data *my_data = (struct platform_data *)platform;
     struct audio_device *adev = my_data->adev;
     ALOGV("%s channel_count:%d",__func__, ch_count);
@@ -6863,7 +6928,7 @@
         set_values[i] = ch_map[i];
     }
 
-    ALOGD("%s: set mapping(%d %d %d %d %d %d %d %d) for channel:%d", __func__,
+    ALOGD("%s: set mapping(%ld %ld %ld %ld %ld %ld %ld %d) for channel:%d", __func__,
         set_values[0], set_values[1], set_values[2], set_values[3], set_values[4],
         set_values[5], set_values[6], set_values[7], ch_count);
 
@@ -7134,7 +7199,7 @@
     struct mixer_ctl *ctl;
     char *mixer_ctl_name = "Device PP Params";
     int ret = 0;
-    uint32_t set_values[] = {0,0};
+    long set_values[] = {0,0};
 
     set_values[0] = param;
     set_values[1] = value;
@@ -7892,3 +7957,20 @@
     return -1;
 }
 #endif
+
+static const char *platform_get_mixer_control(struct mixer_ctl *ctl)
+{
+    int id = -1;
+    const char *id_string = NULL;
+
+    if (!ctl) {
+        ALOGD("%s: mixer ctl not obtained", __func__);
+    } else {
+        id = mixer_ctl_get_value(ctl, 0);
+        if (id >= 0) {
+            id_string = mixer_ctl_get_enum_string(ctl, id);
+        }
+    }
+
+    return id_string;
+}
diff --git a/hal/msm8916/platform.h b/hal/msm8916/platform.h
index d128d0f..aeefcc2 100644
--- a/hal/msm8916/platform.h
+++ b/hal/msm8916/platform.h
@@ -228,6 +228,7 @@
     SND_DEVICE_IN_HANDSET_8MIC,
     SND_DEVICE_IN_EC_REF_LOOPBACK_MONO,
     SND_DEVICE_IN_EC_REF_LOOPBACK_STEREO,
+    SND_DEVICE_IN_HANDSET_GENERIC_QMIC,
     SND_DEVICE_IN_END,
 
     SND_DEVICE_MAX = SND_DEVICE_IN_END,
diff --git a/hal/msm8974/hw_info.c b/hal/msm8974/hw_info.c
index 970f160..e3b86ac 100755
--- a/hal/msm8974/hw_info.c
+++ b/hal/msm8974/hw_info.c
@@ -383,6 +383,15 @@
         hw_info->num_snd_devices = ARRAY_SIZE(tavil_qrd_variant_devices);
         hw_info->is_stereo_spkr = false;
         strlcpy(hw_info->dev_extn, "-qrd", sizeof(hw_info->dev_extn));
+    } else if (!strcmp(snd_card_name, "sdm845-tavil-hdk-snd-card")) {
+        strlcpy(hw_info->type, " hdk", sizeof(hw_info->type));
+        strlcpy(hw_info->name, "sdm845", sizeof(hw_info->name));
+        hw_info->snd_devices = (snd_device_t *)tavil_qrd_variant_devices;
+        hw_info->num_snd_devices = ARRAY_SIZE(tavil_qrd_variant_devices);
+        hw_info->is_stereo_spkr = false;
+        strlcpy(hw_info->dev_extn, "-hdk", sizeof(hw_info->dev_extn));
+    } else if (!strcmp(snd_card_name, "sdm845-qvr-tavil-snd-card")) {
+        hw_info->is_stereo_spkr = false;
     } else {
         ALOGW("%s: Not a sdm845 device", __func__);
     }
@@ -483,13 +492,17 @@
 
 static void update_hardware_info_bear(struct hardware_info *hw_info, const char *snd_card_name)
 {
-    if (!strcmp(snd_card_name, "sdm660-snd-card")) {
+    if (!strncmp(snd_card_name, "sdm660-snd-card",
+                 sizeof("sdm660-snd-card")))
         strlcpy(hw_info->name, "sdm660", sizeof(hw_info->name));
-    } else if (!strcmp(snd_card_name, "sdm660-tavil-snd-card")) {
+    else if (!strncmp(snd_card_name, "sdm660-tavil-snd-card",
+                      sizeof("sdm660-tavil-snd-card")))
         strlcpy(hw_info->name, "sdm660", sizeof(hw_info->name));
-    } else {
+    else if (!strncmp(snd_card_name, "sdm670-skuw-snd-card",
+                      sizeof("sdm670-skuw-snd-card")))
+        hw_info->is_stereo_spkr = false;
+    else
         ALOGW("%s: Not an SDM device", __func__);
-    }
 }
 
 void *hw_info_init(const char *snd_card_name)
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index 4df1ca6..21736d0 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -59,6 +59,7 @@
 #define MIXER_XML_DEFAULT_PATH "/etc/mixer_paths.xml"
 #define PLATFORM_INFO_XML_PATH_INTCODEC  "/etc/audio_platform_info_intcodec.xml"
 #define PLATFORM_INFO_XML_PATH_SKUSH  "/etc/audio_platform_info_skush.xml"
+#define PLATFORM_INFO_XML_PATH_SKUW  "/etc/audio_platform_info_skuw.xml"
 #define PLATFORM_INFO_XML_PATH "/etc/audio_platform_info.xml"
 #define MIXER_XML_PATH_AUXPCM "/etc/mixer_paths_auxpcm.xml"
 #define MIXER_XML_PATH_I2S "/etc/mixer_paths_i2s.xml"
@@ -68,6 +69,7 @@
 #define MIXER_XML_DEFAULT_PATH "/vendor/etc/mixer_paths.xml"
 #define PLATFORM_INFO_XML_PATH_INTCODEC  "/vendor/etc/audio_platform_info_intcodec.xml"
 #define PLATFORM_INFO_XML_PATH_SKUSH "/vendor/etc/audio_platform_info_skush.xml"
+#define PLATFORM_INFO_XML_PATH_SKUW "/vendor/etc/audio_platform_info_skuw.xml"
 #define PLATFORM_INFO_XML_PATH "/vendor/etc/audio_platform_info.xml"
 #define MIXER_XML_PATH_AUXPCM "/vendor/etc/mixer_paths_auxpcm.xml"
 #define MIXER_XML_PATH_I2S "/vendor/etc/mixer_paths_i2s.xml"
@@ -75,7 +77,7 @@
 #endif
 
 #include <linux/msm_audio.h>
-#if defined (PLATFORM_MSM8998) || (PLATFORM_SDM845) || (PLATFORM_SDM670)
+#if defined (PLATFORM_MSM8998) || (PLATFORM_SDM845) || (PLATFORM_SDM670) || defined (PLATFORM_QCS605)
 #include <sound/devdep_params.h>
 #endif
 
@@ -273,6 +275,7 @@
     bool is_dsd_supported;
     bool is_asrc_supported;
     struct listnode acdb_meta_key_list;
+    bool use_generic_handset;
 };
 
 static int pcm_device_table[AUDIO_USECASE_MAX][2] = {
@@ -311,6 +314,8 @@
     [USECASE_AUDIO_RECORD_COMPRESS2] = {-1, -1},
     [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,
@@ -522,6 +527,7 @@
     [SND_DEVICE_IN_UNPROCESSED_THREE_MIC] = "unprocessed-three-mic",
     [SND_DEVICE_IN_UNPROCESSED_QUAD_MIC] = "unprocessed-quad-mic",
     [SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC] = "unprocessed-headset-mic",
+    [SND_DEVICE_IN_HANDSET_GENERIC_QMIC] = "quad-mic",
 };
 
 // Platform specific backend bit width table
@@ -680,6 +686,7 @@
     [SND_DEVICE_IN_UNPROCESSED_THREE_MIC] = 145,
     [SND_DEVICE_IN_UNPROCESSED_QUAD_MIC] = 146,
     [SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC] = 147,
+    [SND_DEVICE_IN_HANDSET_GENERIC_QMIC] = 150,
 };
 
 struct name_to_index {
@@ -822,6 +829,7 @@
     {TO_NAME_INDEX(SND_DEVICE_IN_UNPROCESSED_THREE_MIC)},
     {TO_NAME_INDEX(SND_DEVICE_IN_UNPROCESSED_QUAD_MIC)},
     {TO_NAME_INDEX(SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC)},
+    {TO_NAME_INDEX(SND_DEVICE_IN_HANDSET_GENERIC_QMIC)},
 };
 
 static char * backend_tag_table[SND_DEVICE_MAX] = {0};
@@ -847,6 +855,8 @@
     {TO_NAME_INDEX(USECASE_AUDIO_RECORD_COMPRESS2)},
     {TO_NAME_INDEX(USECASE_AUDIO_RECORD_COMPRESS3)},
     {TO_NAME_INDEX(USECASE_AUDIO_RECORD_COMPRESS4)},
+    {TO_NAME_INDEX(USECASE_AUDIO_RECORD_COMPRESS5)},
+    {TO_NAME_INDEX(USECASE_AUDIO_RECORD_COMPRESS6)},
     {TO_NAME_INDEX(USECASE_AUDIO_RECORD_LOW_LATENCY)},
     {TO_NAME_INDEX(USECASE_AUDIO_RECORD_MMAP)},
     {TO_NAME_INDEX(USECASE_VOICE_CALL)},
@@ -990,10 +1000,12 @@
 
 static void update_codec_type_and_interface(struct platform_data * my_data, const char *snd_card_name) {
 
-     if (!strncmp(snd_card_name, "sdm660-snd-card-skush",
-                  sizeof("sdm660-snd-card-skush")) ||
+     if (!strncmp(snd_card_name, "sdm670-skuw-snd-card",
+                  sizeof("sdm670-skuw-snd-card")) ||
          !strncmp(snd_card_name, "sdm660-snd-card-skush",
-                  sizeof("sdm660-snd-card-mtp"))   ||
+                  sizeof("sdm660-snd-card-skush")) ||
+         !strncmp(snd_card_name, "sdm660-snd-card-mtp",
+                  sizeof("sdm660-snd-card-mtp")) ||
          !strncmp(snd_card_name, "sdm670-mtp-snd-card",
                    sizeof("sdm670-mtp-snd-card"))) {
          ALOGI("%s: snd_card_name: %s",__func__,snd_card_name);
@@ -1020,6 +1032,8 @@
     return ret;
 }
 
+static const char *platform_get_mixer_control(struct mixer_ctl *);
+
 bool platform_send_gain_dep_cal(void *platform, int level) {
     bool ret_val = false;
     struct platform_data *my_data = (struct platform_data *)platform;
@@ -1488,6 +1502,7 @@
     hw_interface_table[SND_DEVICE_IN_UNPROCESSED_THREE_MIC] = strdup("SLIMBUS_0_TX");
     hw_interface_table[SND_DEVICE_IN_UNPROCESSED_QUAD_MIC] = strdup("SLIMBUS_0_TX");
     hw_interface_table[SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC] = strdup("SLIMBUS_0_TX");
+    hw_interface_table[SND_DEVICE_IN_HANDSET_GENERIC_QMIC] = strdup("SLIMBUS_0_TX");
 
     my_data->max_mic_count = PLATFORM_DEFAULT_MIC_COUNT;
 
@@ -1882,6 +1897,9 @@
     char *tmp = NULL;
     char mixer_xml_file[MIXER_PATH_MAX_LENGTH]= {0};
     int idx;
+    struct mixer_ctl *ctl = NULL;
+    const char *id_string = NULL;
+    int cfg_value = -1;
 
     adev->snd_card = audio_extn_utils_get_snd_card_num();
     if (adev->snd_card < 0) {
@@ -2069,11 +2087,14 @@
     /* Initialize ACDB ID's */
     if (my_data->is_i2s_ext_modem)
         platform_info_init(PLATFORM_INFO_XML_PATH_I2S, my_data, PLATFORM);
-    else if (my_data->is_internal_codec)
-        platform_info_init(PLATFORM_INFO_XML_PATH_INTCODEC, my_data, PLATFORM);
     else if (!strncmp(snd_card_name, "sdm660-snd-card-skush",
                sizeof("sdm660-snd-card-skush")))
         platform_info_init(PLATFORM_INFO_XML_PATH_SKUSH, my_data, PLATFORM);
+    else if (!strncmp(snd_card_name, "sdm670-skuw-snd-card",
+               sizeof("sdm670-skuw-snd-card")))
+        platform_info_init(PLATFORM_INFO_XML_PATH_SKUW, my_data, PLATFORM);
+    else if (my_data->is_internal_codec)
+        platform_info_init(PLATFORM_INFO_XML_PATH_INTCODEC, my_data, PLATFORM);
     else
         platform_info_init(PLATFORM_INFO_XML_PATH, my_data, PLATFORM);
 
@@ -2343,6 +2364,41 @@
     my_data->current_backend_cfg[HDMI_TX_BACKEND].channels_mixer_ctl =
         strdup("QUAT_MI2S_TX Channels");
 
+    for (idx = 0; idx < MAX_CODEC_BACKENDS; idx++) {
+        if (my_data->current_backend_cfg[idx].bitwidth_mixer_ctl) {
+            ctl = mixer_get_ctl_by_name(adev->mixer,
+                         my_data->current_backend_cfg[idx].bitwidth_mixer_ctl);
+            id_string = platform_get_mixer_control(ctl);
+            if (id_string) {
+                cfg_value = audio_extn_utils_get_bit_width_from_string(id_string);
+                if (cfg_value > 0)
+                    my_data->current_backend_cfg[idx].bit_width = cfg_value;
+            }
+        }
+
+        if (my_data->current_backend_cfg[idx].samplerate_mixer_ctl) {
+            ctl = mixer_get_ctl_by_name(adev->mixer,
+                         my_data->current_backend_cfg[idx].samplerate_mixer_ctl);
+            id_string = platform_get_mixer_control(ctl);
+            if (id_string) {
+                cfg_value = audio_extn_utils_get_sample_rate_from_string(id_string);
+                if (cfg_value > 0)
+                    my_data->current_backend_cfg[idx].sample_rate = cfg_value;
+            }
+        }
+
+        if (my_data->current_backend_cfg[idx].channels_mixer_ctl) {
+            ctl = mixer_get_ctl_by_name(adev->mixer,
+                         my_data->current_backend_cfg[idx].channels_mixer_ctl);
+            id_string = platform_get_mixer_control(ctl);
+            if (id_string) {
+                cfg_value = audio_extn_utils_get_channels_from_string(id_string);
+                if (cfg_value > 0)
+                    my_data->current_backend_cfg[idx].channels = cfg_value;
+            }
+        }
+    }
+
     ret = audio_extn_utils_get_codec_version(snd_card_name,
                                              my_data->adev->snd_card,
                                              my_data->codec_version);
@@ -2391,6 +2447,9 @@
     my_data->current_backend_cfg[USB_AUDIO_RX_BACKEND].channels_mixer_ctl =
         strdup("USB_AUDIO_RX Channels");
 
+    if (property_get_bool("vendor.audio.apptype.multirec.enabled", false))
+        my_data->use_generic_handset = true;
+
     my_data->edid_info = NULL;
     free(snd_card_name);
     free(snd_card_name_t);
@@ -3279,9 +3338,9 @@
     struct mixer_ctl *ctl;
     const char *mixer_ctl_name = "Voice Rx Gain";
     int vol_index = 0, ret = 0;
-    uint32_t set_values[ ] = {0,
-                              ALL_SESSION_VSID,
-                              DEFAULT_VOLUME_RAMP_DURATION_MS};
+    long set_values[ ] = {0,
+                          ALL_SESSION_VSID,
+                          DEFAULT_VOLUME_RAMP_DURATION_MS};
 
     // Voice volume levels are mapped to adsp volume levels as follows.
     // 100 -> 5, 80 -> 4, 60 -> 3, 40 -> 2, 20 -> 1  0 -> 0
@@ -3295,7 +3354,7 @@
               __func__, mixer_ctl_name);
         ret = -EINVAL;
     } else {
-        ALOGV("%s: Setting voice volume index: %d", __func__, set_values[0]);
+        ALOGV("%s: Setting voice volume index: %ld", __func__, set_values[0]);
         mixer_ctl_set_array(ctl, set_values, ARRAY_SIZE(set_values));
     }
 
@@ -3316,9 +3375,9 @@
     struct mixer_ctl *ctl;
     const char *mixer_ctl_name = "Voice Tx Mute";
     int ret = 0;
-    uint32_t set_values[ ] = {0,
-                              ALL_SESSION_VSID,
-                              DEFAULT_MUTE_RAMP_DURATION_MS};
+    long set_values[ ] = {0,
+                          ALL_SESSION_VSID,
+                          DEFAULT_MUTE_RAMP_DURATION_MS};
 
     set_values[0] = state;
     ctl = mixer_get_ctl_by_name(adev->mixer, mixer_ctl_name);
@@ -3348,9 +3407,9 @@
     struct mixer_ctl *ctl;
     char *mixer_ctl_name = NULL;
     int ret = 0;
-    uint32_t set_values[ ] = {0,
-                              ALL_SESSION_VSID,
-                              0};
+    long set_values[ ] = {0,
+                          ALL_SESSION_VSID,
+                          0};
     if(dir == NULL) {
         ALOGE("%s: Invalid direction:%s", __func__, dir);
         return -EINVAL;
@@ -4093,6 +4152,17 @@
             snd_device = SND_DEVICE_IN_VOICE_USB_HEADSET_MIC;
           }
         }
+    } else if (my_data->use_generic_handset == true &&  //     system prop is enabled
+               (my_data->source_mic_type & SOURCE_QUAD_MIC) &&  // AND 4mic is available
+               ((in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) ||    // AND device is buit-in mic or back mic
+                (in_device & AUDIO_DEVICE_IN_BACK_MIC)) &&
+               (my_data->fluence_in_audio_rec == true &&       //  AND fluencepro is enabled
+                my_data->fluence_type & FLUENCE_QUAD_MIC) &&
+               (source == AUDIO_SOURCE_CAMCORDER ||           // AND source is cam/mic/unprocessed
+                source == AUDIO_SOURCE_UNPROCESSED ||
+                source == AUDIO_SOURCE_MIC)) {
+                snd_device = SND_DEVICE_IN_HANDSET_GENERIC_QMIC;
+                platform_set_echo_reference(adev, true, out_device);
     } else if (source == AUDIO_SOURCE_CAMCORDER) {
         if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC ||
             in_device & AUDIO_DEVICE_IN_BACK_MIC) {
@@ -4391,8 +4461,8 @@
     struct audio_device *adev = my_data->adev;
     struct mixer_ctl *ctl;
     const char *mixer_ctl_name = "Slowtalk Enable";
-    uint32_t set_values[ ] = {0,
-                              ALL_SESSION_VSID};
+    long set_values[ ] = {0,
+                          ALL_SESSION_VSID};
 
     set_values[0] = state;
     ctl = mixer_get_ctl_by_name(adev->mixer, mixer_ctl_name);
@@ -4422,8 +4492,8 @@
     struct mixer_ctl *ctl;
     char *mixer_ctl_name = "HD Voice Enable";
     int ret = 0;
-    uint32_t set_values[ ] = {0,
-                              ALL_SESSION_VSID};
+    long set_values[ ] = {0,
+                          ALL_SESSION_VSID};
 
     set_values[0] = state;
     ctl = mixer_get_ctl_by_name(adev->mixer, mixer_ctl_name);
@@ -6625,7 +6695,7 @@
     char mixer_ctl_name[44] = {0}; // max length of name is 44 as defined
     int ret;
     unsigned int i;
-    int set_values[FCC_8] = {0};
+    long set_values[FCC_8] = {0};
     struct platform_data *my_data = (struct platform_data *)platform;
     struct audio_device *adev = my_data->adev;
     ALOGV("%s channel_count:%d",__func__, ch_count);
@@ -6656,7 +6726,7 @@
         set_values[i] = ch_map[i];
     }
 
-    ALOGD("%s: set mapping(%d %d %d %d %d %d %d %d) for channel:%d", __func__,
+    ALOGD("%s: set mapping(%ld %ld %ld %ld %ld %ld %ld %ld) for channel:%d", __func__,
         set_values[0], set_values[1], set_values[2], set_values[3], set_values[4],
         set_values[5], set_values[6], set_values[7], ch_count);
 
@@ -6970,7 +7040,7 @@
     struct mixer_ctl *ctl;
     char *mixer_ctl_name = "Device PP Params";
     int ret = 0;
-    uint32_t set_values[] = {0,0};
+    long set_values[] = {0,0};
 
     set_values[0] = param;
     set_values[1] = value;
@@ -7593,7 +7663,7 @@
     return sample_rate;
 }
 
-#if defined (PLATFORM_MSM8998) || (PLATFORM_SDM845) || (PLATFORM_SDM670)
+#if defined (PLATFORM_MSM8998) || (PLATFORM_SDM845) || (PLATFORM_SDM670) || defined (PLATFORM_QCS605)
 int platform_get_mmap_data_fd(void *platform, int fe_dev, int dir, int *fd,
                               uint32_t *size)
 {
@@ -7629,3 +7699,20 @@
     return -1;
 }
 #endif
+
+static const char *platform_get_mixer_control(struct mixer_ctl *ctl)
+{
+    int id = -1;
+    const char *id_string = NULL;
+
+    if (!ctl) {
+        ALOGD("%s: mixer ctl not obtained", __func__);
+    } else {
+        id = mixer_ctl_get_value(ctl, 0);
+        if (id >= 0) {
+            id_string = mixer_ctl_get_enum_string(ctl, id);
+        }
+    }
+
+    return id_string;
+}
diff --git a/hal/msm8974/platform.h b/hal/msm8974/platform.h
index 4fa9442..db86cdc 100644
--- a/hal/msm8974/platform.h
+++ b/hal/msm8974/platform.h
@@ -228,6 +228,7 @@
     SND_DEVICE_IN_HANDSET_8MIC,
     SND_DEVICE_IN_EC_REF_LOOPBACK_MONO,
     SND_DEVICE_IN_EC_REF_LOOPBACK_STEREO,
+    SND_DEVICE_IN_HANDSET_GENERIC_QMIC,
     SND_DEVICE_IN_END,
 
     SND_DEVICE_MAX = SND_DEVICE_IN_END,
@@ -362,11 +363,11 @@
 #define PLAYBACK_OFFLOAD_DEVICE 9
 
 // Direct_PCM
-#if defined (PLATFORM_MSM8994) || defined (PLATFORM_MSM8996) || defined (PLATFORM_APQ8084) || defined (PLATFORM_MSM8998) || defined (PLATFORM_SDM845) || defined (PLATFORM_SDM670)
+#if defined (PLATFORM_MSM8994) || defined (PLATFORM_MSM8996) || defined (PLATFORM_APQ8084) || defined (PLATFORM_MSM8998) || defined (PLATFORM_SDM845) || defined (PLATFORM_SDM670) ||defined (PLATFORM_QCS605)
 #define PLAYBACK_OFFLOAD_DEVICE2 17
 #endif
 
-#if defined (PLATFORM_APQ8084) || defined (PLATFORM_MSM8996) || defined (PLATFORM_MSM8998) || defined (PLATFORM_SDM845) || defined (PLATFORM_SDM670)
+#if defined (PLATFORM_APQ8084) || defined (PLATFORM_MSM8996) || defined (PLATFORM_MSM8998) || defined (PLATFORM_SDM845) || defined (PLATFORM_SDM670) || defined(PLATFORM_QCS605)
 #define PLAYBACK_OFFLOAD_DEVICE3 18
 #define PLAYBACK_OFFLOAD_DEVICE4 34
 #define PLAYBACK_OFFLOAD_DEVICE5 35
@@ -491,7 +492,7 @@
 #define FM_RX_VOLUME "PRI MI2S LOOPBACK Volume"
 #elif PLATFORM_MSM8996
 #define FM_RX_VOLUME "Tert MI2S LOOPBACK Volume"
-#elif defined (PLATFORM_MSM8998) || defined (PLATFORM_SDM845) || defined (PLATFORM_MSMFALCON) || defined (PLATFORM_SDM670)
+#elif defined (PLATFORM_MSM8998) || defined (PLATFORM_SDM845) || defined (PLATFORM_MSMFALCON) || defined (PLATFORM_SDM670) || defined (PLATFORM_QCS605)
 #define FM_RX_VOLUME "SLIMBUS_8 LOOPBACK Volume"
 #else
 #define FM_RX_VOLUME "Internal FM RX Volume"
diff --git a/hal/voice_extn/compress_voip.c b/hal/voice_extn/compress_voip.c
index 1ec5fbc..2736d68 100644
--- a/hal/voice_extn/compress_voip.c
+++ b/hal/voice_extn/compress_voip.c
@@ -134,8 +134,8 @@
     struct mixer_ctl *ctl;
     const char *mixer_ctl_name = "Voip Rx Gain";
     int vol_index = 0;
-    uint32_t set_values[ ] = {0,
-                              DEFAULT_VOLUME_RAMP_DURATION_MS};
+    long set_values[ ] = {0,
+                          DEFAULT_VOLUME_RAMP_DURATION_MS};
 
     ALOGV("%s: enter", __func__);
 
@@ -152,7 +152,7 @@
               __func__, mixer_ctl_name);
         return -EINVAL;
     }
-    ALOGV("%s: Setting voip volume index: %d", __func__, set_values[0]);
+    ALOGV("%s: Setting voip volume index: %ld", __func__, set_values[0]);
     mixer_ctl_set_array(ctl, set_values, ARRAY_SIZE(set_values));
 
     ALOGV("%s: exit", __func__);
@@ -163,8 +163,8 @@
 {
     struct mixer_ctl *ctl;
     const char *mixer_ctl_name = "Voip Tx Mute";
-    uint32_t set_values[ ] = {0,
-                              DEFAULT_VOLUME_RAMP_DURATION_MS};
+    long set_values[ ] = {0,
+                          DEFAULT_VOLUME_RAMP_DURATION_MS};
 
     ALOGV("%s: enter, state=%d", __func__, state);
 
@@ -187,7 +187,7 @@
 {
     struct mixer_ctl *ctl;
     const char *mixer_ctl_name = "Voip Mode Config";
-    uint32_t set_values[ ] = {0};
+    long set_values[ ] = {0};
     int mode;
 
     ALOGD("%s: enter, format=%d", __func__, format);
@@ -212,7 +212,7 @@
 {
     struct mixer_ctl *ctl;
     const char *mixer_ctl_name = "Voip Rate Config";
-    uint32_t set_values[ ] = {0};
+    long set_values[ ] = {0};
 
     ALOGD("%s: enter, rate=%d", __func__, rate);
 
@@ -233,7 +233,7 @@
 {
     struct mixer_ctl *ctl;
     const char *mixer_ctl_name = "Voip Dtx Mode";
-    uint32_t set_values[ ] = {0};
+    long set_values[ ] = {0};
 
     ALOGD("%s: enter, enable=%d", __func__, enable);
 
diff --git a/hal/voice_extn/voice_extn.h b/hal/voice_extn/voice_extn.h
index 7f10d0c..f35344f 100644
--- a/hal/voice_extn/voice_extn.h
+++ b/hal/voice_extn/voice_extn.h
@@ -146,56 +146,56 @@
 static int __unused voice_extn_compress_voip_close_output_stream(
                                      struct audio_stream *stream __unused)
 {
-    ALOGE("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
+    ALOGV("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
     return -ENOSYS;
 }
 
 static int __unused voice_extn_compress_voip_open_output_stream(
                                          struct stream_out *out __unused)
 {
-    ALOGE("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
+    ALOGV("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
     return -ENOSYS;
 }
 
 static int __unused voice_extn_compress_voip_close_input_stream(
                                     struct audio_stream *stream __unused)
 {
-    ALOGE("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
+    ALOGV("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
     return -ENOSYS;
 }
 
 static int __unused voice_extn_compress_voip_open_input_stream(
                                           struct stream_in *in __unused)
 {
-    ALOGE("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
+    ALOGV("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
     return -ENOSYS;
 }
 
 static int __unused voice_extn_compress_voip_out_get_buffer_size(
                                        struct stream_out *stream __unused)
 {
-    ALOGE("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
+    ALOGV("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
     return -ENOSYS;
 }
 
 static int __unused voice_extn_compress_voip_in_get_buffer_size(
                                            struct stream_in *in __unused)
 {
-    ALOGE("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
+    ALOGV("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
     return -ENOSYS;
 }
 
 static int __unused voice_extn_compress_voip_start_input_stream(
                                            struct stream_in *in __unused)
 {
-    ALOGE("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
+    ALOGV("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
     return -ENOSYS;
 }
 
 static int __unused voice_extn_compress_voip_start_output_stream(
                                           struct stream_out *out __unused)
 {
-    ALOGE("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
+    ALOGV("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
     return -ENOSYS;
 }
 
@@ -203,7 +203,7 @@
                                 struct audio_device *adev __unused,
                                 bool state __unused)
 {
-    ALOGE("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
+    ALOGV("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
     return 0;
 }
 
@@ -211,7 +211,7 @@
                               struct audio_device *adev __unused,
                               float volume __unused)
 {
-    ALOGE("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
+    ALOGV("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
     return 0;
 }
 
@@ -220,7 +220,7 @@
                                   snd_device_t *out_snd_device __unused,
                                   snd_device_t *in_snd_device __unused)
 {
-    ALOGE("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
+    ALOGV("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
     return -ENOSYS;
 }
 
@@ -228,7 +228,7 @@
                                   struct audio_device *adev __unused,
                                   struct str_parms *parms __unused)
 {
-    ALOGE("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
+    ALOGV("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
     return -ENOSYS;
 }
 
@@ -236,7 +236,7 @@
                                      struct str_parms *query __unused,
                                      struct str_parms *reply __unused)
 {
-    ALOGE("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
+    ALOGV("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
 }
 
 static void __unused voice_extn_compress_voip_out_get_parameters(
@@ -244,7 +244,7 @@
                                           struct str_parms *query __unused,
                                           struct str_parms *reply __unused)
 {
-    ALOGE("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
+    ALOGV("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
 }
 
 static void __unused voice_extn_compress_voip_in_get_parameters(
@@ -252,40 +252,40 @@
                                            struct str_parms *query __unused,
                                            struct str_parms *reply __unused)
 {
-    ALOGE("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
+    ALOGV("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
 }
 
 static bool __unused voice_extn_compress_voip_pcm_prop_check()
 {
-    ALOGE("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
+    ALOGV("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
     return false;
 }
 
 static bool __unused  voice_extn_compress_voip_is_active(
                          const struct audio_device *adev __unused)
 {
-    ALOGE("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
+    ALOGV("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
     return false;
 }
 
 static bool __unused voice_extn_compress_voip_is_format_supported(
                                             audio_format_t format __unused)
 {
-    ALOGE("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
+    ALOGV("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
     return true;
 }
 
 static bool __unused voice_extn_compress_voip_is_config_supported(
                                       struct audio_config *config __unused)
 {
-    ALOGE("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
+    ALOGV("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
     return true;
 }
 
 static bool __unused voice_extn_compress_voip_is_started(
                                struct audio_device *adev __unused)
 {
-    ALOGE("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
+    ALOGV("%s: COMPRESS_VOIP_ENABLED is not defined", __func__);
     return false;
 }
 
diff --git a/mm-audio/aenc-aac/qdsp6/Android.mk b/mm-audio/aenc-aac/qdsp6/Android.mk
index 40e6744..b427233 100644
--- a/mm-audio/aenc-aac/qdsp6/Android.mk
+++ b/mm-audio/aenc-aac/qdsp6/Android.mk
@@ -39,6 +39,10 @@
 LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
 LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/techpack/audio/include
 LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
+ifneq ($(filter sdm670 qcs605,$(TARGET_BOARD_PLATFORM)),)
+  LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/vendor/qcom/opensource/audio-kernel/include
+  LOCAL_ADDITIONAL_DEPENDENCIES += $(BOARD_VENDOR_KERNEL_MODULES)
+endif
 
 include $(BUILD_SHARED_LIBRARY)
 
@@ -50,7 +54,6 @@
 
 mm-aac-enc-test-inc    := $(LOCAL_PATH)/inc
 mm-aac-enc-test-inc    += $(LOCAL_PATH)/test
-mm-aac-enc-test-inc    += $(TARGET_OUT_HEADERS)/mm-audio/audio-alsa
 mm-aac-enc-test-inc    += $(TARGET_OUT_HEADERS)/mm-core/omxcore
 
 LOCAL_MODULE            := mm-aenc-omxaac-test
@@ -60,7 +63,6 @@
 LOCAL_PRELINK_MODULE    := false
 LOCAL_SHARED_LIBRARIES  := libmm-omxcore
 LOCAL_SHARED_LIBRARIES  += libOmxAacEnc
-LOCAL_SHARED_LIBRARIES  += libaudioalsa
 LOCAL_SRC_FILES         := test/omx_aac_enc_test.c
 
 include $(BUILD_EXECUTABLE)
diff --git a/mm-audio/aenc-aac/qdsp6/test/omx_aac_enc_test.c b/mm-audio/aenc-aac/qdsp6/test/omx_aac_enc_test.c
index b4b0be8..5239a8e 100644
--- a/mm-audio/aenc-aac/qdsp6/test/omx_aac_enc_test.c
+++ b/mm-audio/aenc-aac/qdsp6/test/omx_aac_enc_test.c
@@ -56,9 +56,6 @@
 #include <pthread.h>
 #include "QOMX_AudioExtensions.h"
 #include "QOMX_AudioIndexExtensions.h"
-#ifdef AUDIOV2 
-#include "control.h" 
-#endif
 #include <linux/ioctl.h>
 
 typedef unsigned char uint8;
@@ -82,14 +79,6 @@
 void audaac_rec_install_adts_header_variable (uint16  byte_num);
 void Release_Encoder();
 
-#ifdef AUDIOV2
-unsigned short session_id;
-int device_id;
-int control = 0;
-const char *device="handset_tx";
-#define DIR_TX 2
-#endif
-
 #define AACHDR_LAYER_SIZE             2
 #define AACHDR_CRC_SIZE               1
 #define AAC_PROFILE_SIZE              2
@@ -705,22 +694,6 @@
                 DEBUG_PRINT ("\nOMX_FreeHandle error. Error code: %d\n", result);
             }
             /* Deinit OpenMAX */
-            if(tunnel)
-            {
-                #ifdef AUDIOV2
-                if (msm_route_stream(DIR_TX,session_id,device_id, 0))
-                {
-                    DEBUG_PRINT("\ncould not set stream routing\n");
-                    return -1;
-                }
-                if (msm_en_device(device_id, 0))
-                {
-                    DEBUG_PRINT("\ncould not enable device\n");
-                    return -1;
-                }
-                msm_mixer_close();
-                #endif
-            }
             OMX_Deinit();
             ebd_cnt=0;
             bOutputEosReached = false;
@@ -898,29 +871,6 @@
     OMX_SetParameter(aac_enc_handle,OMX_IndexParamAudioAac,&aacparam);
     OMX_GetExtensionIndex(aac_enc_handle,"OMX.Qualcomm.index.audio.sessionId",&index);
     OMX_GetParameter(aac_enc_handle,index,&streaminfoparam);
-    if(tunnel)
-    {
-    #ifdef AUDIOV2
-    session_id = streaminfoparam.sessionId;
-    control = msm_mixer_open("/dev/snd/controlC0", 0);
-    if(control < 0)
-    printf("ERROR opening the device\n");
-    device_id = msm_get_device(device);
-    DEBUG_PRINT ("\ndevice_id = %d\n",device_id);
-    DEBUG_PRINT("\nsession_id = %d\n",session_id);
-    if (msm_en_device(device_id, 1))
-    {
-        perror("could not enable device\n");
-        return -1;
-    }
-
-    if (msm_route_stream(DIR_TX,session_id,device_id, 1))
-    {
-        perror("could not set stream routing\n");
-        return -1;
-    }
-    #endif
-    }
     DEBUG_PRINT ("\nOMX_SendCommand Encoder -> IDLE\n");
     OMX_SendCommand(aac_enc_handle, OMX_CommandStateSet, OMX_StateIdle,0);
     /* wait_for_event(); should not wait here event complete status will
diff --git a/mm-audio/aenc-amrnb/qdsp6/Android.mk b/mm-audio/aenc-amrnb/qdsp6/Android.mk
index 62124e9..3fa619e 100644
--- a/mm-audio/aenc-amrnb/qdsp6/Android.mk
+++ b/mm-audio/aenc-amrnb/qdsp6/Android.mk
@@ -39,6 +39,10 @@
 LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
 LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/techpack/audio/include
 LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
+ifneq ($(filter sdm670 qcs605,$(TARGET_BOARD_PLATFORM)),)
+  LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/vendor/qcom/opensource/audio-kernel/include
+  LOCAL_ADDITIONAL_DEPENDENCIES += $(BOARD_VENDOR_KERNEL_MODULES)
+endif
 
 include $(BUILD_SHARED_LIBRARY)
 
@@ -52,7 +56,6 @@
 mm-amr-enc-test-inc    += $(LOCAL_PATH)/test
 
 mm-amr-enc-test-inc    += $(TARGET_OUT_HEADERS)/mm-core/omxcore
-mm-amr-enc-test-inc    += $(TARGET_OUT_HEADERS)/mm-audio/audio-alsa
 LOCAL_MODULE            := mm-aenc-omxamr-test
 LOCAL_MODULE_TAGS       := optional
 LOCAL_CFLAGS            := $(libOmxAmrEnc-def)
@@ -60,7 +63,6 @@
 LOCAL_PRELINK_MODULE    := false
 LOCAL_SHARED_LIBRARIES  := libmm-omxcore
 LOCAL_SHARED_LIBRARIES  += libOmxAmrEnc
-LOCAL_SHARED_LIBRARIES  += libaudioalsa
 LOCAL_SRC_FILES         := test/omx_amr_enc_test.c
 
 include $(BUILD_EXECUTABLE)
diff --git a/mm-audio/aenc-amrnb/qdsp6/test/omx_amr_enc_test.c b/mm-audio/aenc-amrnb/qdsp6/test/omx_amr_enc_test.c
index 58215c4..9bdf6dc 100644
--- a/mm-audio/aenc-amrnb/qdsp6/test/omx_amr_enc_test.c
+++ b/mm-audio/aenc-amrnb/qdsp6/test/omx_amr_enc_test.c
@@ -57,10 +57,6 @@
 #include <pthread.h>
 #include "QOMX_AudioExtensions.h"
 #include "QOMX_AudioIndexExtensions.h"
-#ifdef AUDIOV2
-#include "control.h"
-#endif
-
 
 #include <linux/ioctl.h>
 
@@ -72,14 +68,6 @@
 /* maximum ADTS frame header length                */
 void Release_Encoder();
 
-#ifdef AUDIOV2
-unsigned short session_id;
-int device_id;
-int control = 0;
-const char *device="handset_tx";
-#define DIR_TX 2
-#endif
-
 uint32_t samplerate = 8000;
 uint32_t channels = 1;
 uint32_t bandmode = 7;
@@ -635,22 +623,6 @@
             }
 
             /* Deinit OpenMAX */
-        if(tunnel)
-        {
-            #ifdef AUDIOV2
-            if (msm_route_stream(DIR_TX,session_id,device_id, 0))
-            {
-                DEBUG_PRINT("\ncould not set stream routing\n");
-                return -1;
-            }
-            if (msm_en_device(device_id, 0))
-            {
-                DEBUG_PRINT("\ncould not enable device\n");
-                return -1;
-            }
-            msm_mixer_close();
-            #endif
-        }
             OMX_Deinit();
             ebd_cnt=0;
             bOutputEosReached = false;
@@ -830,27 +802,6 @@
     OMX_SetParameter(amr_enc_handle,OMX_IndexParamAudioAmr,&amrparam);
     OMX_GetExtensionIndex(amr_enc_handle,"OMX.Qualcomm.index.audio.sessionId",&index);
     OMX_GetParameter(amr_enc_handle,index,&streaminfoparam);
-    if(tunnel) {
-    #ifdef AUDIOV2
-    session_id = streaminfoparam.sessionId;
-    control = msm_mixer_open("/dev/snd/controlC0", 0);
-    if(control < 0)
-    printf("ERROR opening the device\n");
-    device_id = msm_get_device(device);
-    DEBUG_PRINT ("\ndevice_id = %d\n",device_id);
-    DEBUG_PRINT("\nsession_id = %d\n",session_id);
-    if (msm_en_device(device_id, 1))
-    {
-        perror("could not enable device\n");
-        return -1;
-    }
-    if (msm_route_stream(DIR_TX,session_id,device_id, 1))
-    {
-        perror("could not set stream routing\n");
-        return -1;
-    }
-    #endif
-    }
 
     DEBUG_PRINT ("\nOMX_SendCommand Encoder -> IDLE\n");
     OMX_SendCommand(amr_enc_handle, OMX_CommandStateSet, OMX_StateIdle,0);
diff --git a/mm-audio/aenc-evrc/qdsp6/Android.mk b/mm-audio/aenc-evrc/qdsp6/Android.mk
index 7d56f5c..03965cb 100644
--- a/mm-audio/aenc-evrc/qdsp6/Android.mk
+++ b/mm-audio/aenc-evrc/qdsp6/Android.mk
@@ -39,6 +39,10 @@
 LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
 LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/techpack/audio/include
 LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
+ifneq ($(filter sdm670 qcs605,$(TARGET_BOARD_PLATFORM)),)
+  LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/vendor/qcom/opensource/audio-kernel/include
+  LOCAL_ADDITIONAL_DEPENDENCIES += $(BOARD_VENDOR_KERNEL_MODULES)
+endif
 
 include $(BUILD_SHARED_LIBRARY)
 
@@ -51,7 +55,6 @@
 mm-evrc-enc-test-inc    := $(LOCAL_PATH)/inc
 mm-evrc-enc-test-inc    += $(LOCAL_PATH)/test
 mm-evrc-enc-test-inc    += $(TARGET_OUT_HEADERS)/mm-core/omxcore
-mm-evrc-enc-test-inc     += $(TARGET_OUT_HEADERS)/mm-audio/audio-alsa
 LOCAL_MODULE            := mm-aenc-omxevrc-test
 LOCAL_MODULE_TAGS       := optional
 LOCAL_CFLAGS            := $(libOmxEvrcEnc-def)
@@ -59,7 +62,6 @@
 LOCAL_PRELINK_MODULE    := false
 LOCAL_SHARED_LIBRARIES  := libmm-omxcore
 LOCAL_SHARED_LIBRARIES  += libOmxEvrcEnc
-LOCAL_SHARED_LIBRARIES  += libaudioalsa
 LOCAL_SRC_FILES         := test/omx_evrc_enc_test.c
 
 include $(BUILD_EXECUTABLE)
diff --git a/mm-audio/aenc-evrc/qdsp6/test/omx_evrc_enc_test.c b/mm-audio/aenc-evrc/qdsp6/test/omx_evrc_enc_test.c
index e5f72cc..f9071dc 100644
--- a/mm-audio/aenc-evrc/qdsp6/test/omx_evrc_enc_test.c
+++ b/mm-audio/aenc-evrc/qdsp6/test/omx_evrc_enc_test.c
@@ -57,10 +57,6 @@
 #include <pthread.h>
 #include "QOMX_AudioExtensions.h"
 #include "QOMX_AudioIndexExtensions.h"
-#ifdef AUDIOV2
-#include "control.h"
-#endif
-
 
 #include <linux/ioctl.h>
 
@@ -72,14 +68,6 @@
 /* maximum ADTS frame header length                */
 void Release_Encoder();
 
-#ifdef AUDIOV2
-unsigned short session_id;
-int device_id;
-int control = 0;
-const char *device="handset_tx";
-#define DIR_TX 2
-#endif
-
 uint32_t samplerate = 8000;
 uint32_t channels = 1;
 uint32_t min_bitrate = 0;
@@ -713,22 +701,6 @@
             }
 
             /* Deinit OpenMAX */
-        if(tunnel)
-        {
-            #ifdef AUDIOV2
-            if (msm_route_stream(DIR_TX,session_id,device_id, 0))
-            {
-                DEBUG_PRINT("\ncould not set stream routing\n");
-                return -1;
-            }
-            if (msm_en_device(device_id, 0))
-            {
-                DEBUG_PRINT("\ncould not enable device\n");
-                return -1;
-            }
-            msm_mixer_close();
-            #endif
-        }
             OMX_Deinit();
             ebd_cnt=0;
             bOutputEosReached = false;
@@ -908,27 +880,6 @@
     OMX_SetParameter(evrc_enc_handle,OMX_IndexParamAudioEvrc,&evrcparam);
     OMX_GetExtensionIndex(evrc_enc_handle,"OMX.Qualcomm.index.audio.sessionId",&index);
     OMX_GetParameter(evrc_enc_handle,index,&streaminfoparam);
-    if(tunnel) {
-    #ifdef AUDIOV2
-    session_id = streaminfoparam.sessionId;
-    control = msm_mixer_open("/dev/snd/controlC0", 0);
-    if(control < 0)
-    printf("ERROR opening the device\n");
-    device_id = msm_get_device(device);
-    DEBUG_PRINT ("\ndevice_id = %d\n",device_id);
-    DEBUG_PRINT("\nsession_id = %d\n",session_id);
-    if (msm_en_device(device_id, 1))
-    {
-        perror("could not enable device\n");
-        return -1;
-    }
-    if (msm_route_stream(DIR_TX,session_id,device_id, 1))
-    {
-        perror("could not set stream routing\n");
-        return -1;
-    }
-    #endif
-    }
 
     DEBUG_PRINT ("\nOMX_SendCommand Encoder -> IDLE\n");
     OMX_SendCommand(evrc_enc_handle, OMX_CommandStateSet, OMX_StateIdle,0);
diff --git a/mm-audio/aenc-g711/qdsp6/Android.mk b/mm-audio/aenc-g711/qdsp6/Android.mk
index 62dc09a..6b2b453 100644
--- a/mm-audio/aenc-g711/qdsp6/Android.mk
+++ b/mm-audio/aenc-g711/qdsp6/Android.mk
@@ -40,6 +40,10 @@
 LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
 LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/techpack/audio/include
 LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
+ifneq ($(filter sdm670 qcs605,$(TARGET_BOARD_PLATFORM)),)
+  LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/vendor/qcom/opensource/audio-kernel/include
+  LOCAL_ADDITIONAL_DEPENDENCIES += $(BOARD_VENDOR_KERNEL_MODULES)
+endif
 
 
 include $(BUILD_SHARED_LIBRARY)
diff --git a/mm-audio/aenc-g711/qdsp6/test/omx_g711_enc_test.c b/mm-audio/aenc-g711/qdsp6/test/omx_g711_enc_test.c
index 8815818..e528198 100644
--- a/mm-audio/aenc-g711/qdsp6/test/omx_g711_enc_test.c
+++ b/mm-audio/aenc-g711/qdsp6/test/omx_g711_enc_test.c
@@ -68,14 +68,6 @@
 
 void Release_Encoder();
 
-#ifdef AUDIOV2
-unsigned short session_id;
-int device_id;
-int control = 0;
-const char *device="handset_tx";
-#define DIR_TX 2
-#endif
-
 #define MIN(A,B)    (((A) < (B))?(A):(B))
 
 FILE *F1 = NULL;
diff --git a/mm-audio/aenc-qcelp13/qdsp6/Android.mk b/mm-audio/aenc-qcelp13/qdsp6/Android.mk
index 2664db5..f4b904a 100644
--- a/mm-audio/aenc-qcelp13/qdsp6/Android.mk
+++ b/mm-audio/aenc-qcelp13/qdsp6/Android.mk
@@ -39,6 +39,10 @@
 LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
 LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/techpack/audio/include
 LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
+ifneq ($(filter sdm670 qcs605,$(TARGET_BOARD_PLATFORM)),)
+  LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/vendor/qcom/opensource/audio-kernel/include
+  LOCAL_ADDITIONAL_DEPENDENCIES += $(BOARD_VENDOR_KERNEL_MODULES)
+endif
 
 
 include $(BUILD_SHARED_LIBRARY)
@@ -54,7 +58,6 @@
 mm-qcelp13-enc-test-inc    += $(LOCAL_PATH)/test
 
 mm-qcelp13-enc-test-inc    += $(TARGET_OUT_HEADERS)/mm-core/omxcore
-mm-qcelp13-enc-test-inc    += $(TARGET_OUT_HEADERS)/mm-audio/audio-alsa
 LOCAL_MODULE            := mm-aenc-omxqcelp13-test
 LOCAL_MODULE_TAGS       := optional
 LOCAL_CFLAGS            := $(libOmxQcelp13Enc-def)
@@ -62,7 +65,6 @@
 LOCAL_PRELINK_MODULE    := false
 LOCAL_SHARED_LIBRARIES  := libmm-omxcore
 LOCAL_SHARED_LIBRARIES  += libOmxQcelp13Enc
-LOCAL_SHARED_LIBRARIES  += libaudioalsa
 LOCAL_SRC_FILES         := test/omx_qcelp13_enc_test.c
 
 include $(BUILD_EXECUTABLE)
diff --git a/mm-audio/aenc-qcelp13/qdsp6/test/omx_qcelp13_enc_test.c b/mm-audio/aenc-qcelp13/qdsp6/test/omx_qcelp13_enc_test.c
index a0b39c2..258fd2a 100644
--- a/mm-audio/aenc-qcelp13/qdsp6/test/omx_qcelp13_enc_test.c
+++ b/mm-audio/aenc-qcelp13/qdsp6/test/omx_qcelp13_enc_test.c
@@ -57,10 +57,6 @@
 #include <pthread.h>
 #include "QOMX_AudioExtensions.h"
 #include "QOMX_AudioIndexExtensions.h"
-#ifdef AUDIOV2
-#include "control.h"
-#endif
-
 
 #include <linux/ioctl.h>
 
@@ -72,14 +68,6 @@
 /* maximum ADTS frame header length                */
 void Release_Encoder();
 
-#ifdef AUDIOV2
-unsigned short session_id;
-int device_id;
-int control = 0;
-const char *device="handset_tx";
-#define DIR_TX 2
-#endif
-
 uint32_t samplerate = 8000;
 uint32_t channels = 1;
 uint32_t min_bitrate = 0;
@@ -714,22 +702,6 @@
             }
 
             /* Deinit OpenMAX */
-        if(tunnel)
-        {
-            #ifdef AUDIOV2
-            if (msm_route_stream(DIR_TX,session_id,device_id, 0))
-            {
-                DEBUG_PRINT("\ncould not set stream routing\n");
-                return -1;
-            }
-            if (msm_en_device(device_id, 0))
-            {
-                DEBUG_PRINT("\ncould not enable device\n");
-                return -1;
-            }
-            msm_mixer_close();
-            #endif
-        }
             OMX_Deinit();
             ebd_cnt=0;
             bOutputEosReached = false;
@@ -909,27 +881,6 @@
     OMX_SetParameter(qcelp13_enc_handle,OMX_IndexParamAudioQcelp13,&qcelp13param);
     OMX_GetExtensionIndex(qcelp13_enc_handle,"OMX.Qualcomm.index.audio.sessionId",&index);
     OMX_GetParameter(qcelp13_enc_handle,index,&streaminfoparam);
-    if(tunnel) {
-    #ifdef AUDIOV2
-    session_id = streaminfoparam.sessionId;
-    control = msm_mixer_open("/dev/snd/controlC0", 0);
-    if(control < 0)
-    printf("ERROR opening the device\n");
-    device_id = msm_get_device(device);
-    DEBUG_PRINT ("\ndevice_id = %d\n",device_id);
-    DEBUG_PRINT("\nsession_id = %d\n",session_id);
-    if (msm_en_device(device_id, 1))
-    {
-        perror("could not enable device\n");
-        return -1;
-    }
-    if (msm_route_stream(DIR_TX,session_id,device_id, 1))
-    {
-        perror("could not set stream routing\n");
-        return -1;
-    }
-    #endif
-    }
 
     DEBUG_PRINT ("\nOMX_SendCommand Encoder -> IDLE\n");
     OMX_SendCommand(qcelp13_enc_handle, OMX_CommandStateSet, OMX_StateIdle,0);
diff --git a/post_proc/Android.mk b/post_proc/Android.mk
index cbc5f8e..86a2ab1 100644
--- a/post_proc/Android.mk
+++ b/post_proc/Android.mk
@@ -52,6 +52,11 @@
 	$(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/techpack/audio/include \
         $(call include-path-for, audio-effects)
 
+ifneq ($(filter sdm670 qcs605,$(TARGET_BOARD_PLATFORM)),)
+  LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/vendor/qcom/opensource/audio-kernel/include
+  LOCAL_ADDITIONAL_DEPENDENCIES += $(BOARD_VENDOR_KERNEL_MODULES)
+endif
+
 include $(BUILD_SHARED_LIBRARY)
 
 
@@ -84,7 +89,7 @@
 
 ################################################################################
 
-ifneq ($(filter msm8992 msm8994 msm8996 msm8998 sdm660 sdm845 apq8098_latv sdm670,$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter msm8992 msm8994 msm8996 msm8998 sdm660 sdm845 apq8098_latv sdm670 qcs605,$(TARGET_BOARD_PLATFORM)),)
 
 include $(CLEAR_VARS)
 
@@ -116,6 +121,11 @@
         hardware/qcom/audio/hal/audio_extn \
         external/tinycompress/include
 
+ifneq ($(filter sdm670 qcs605,$(TARGET_BOARD_PLATFORM)),)
+  LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/vendor/qcom/opensource/audio-kernel/include
+  LOCAL_ADDITIONAL_DEPENDENCIES += $(BOARD_VENDOR_KERNEL_MODULES)
+endif
+
 include $(BUILD_SHARED_LIBRARY)
 
 endif
diff --git a/post_proc/asphere.c b/post_proc/asphere.c
index 885e85b..3ec2818 100644
--- a/post_proc/asphere.c
+++ b/post_proc/asphere.c
@@ -101,7 +101,8 @@
 
 static int asphere_get_values_from_mixer(void)
 {
-    int ret = 0, val[2] = {-1, -1};
+    int ret = 0;
+    long val[2] = {-1, -1};
     struct mixer_ctl *ctl = NULL;
     struct mixer *mixer = mixer_open(MIXER_CARD);
     if (mixer)
@@ -124,7 +125,8 @@
 
 static int asphere_set_values_to_mixer(void)
 {
-    int ret = 0, val[2] = {-1, -1};
+    int ret = 0;
+    long val[2] = {-1, -1};
     struct mixer_ctl *ctl = NULL;
     struct mixer *mixer = mixer_open(MIXER_CARD);
     if (mixer)
diff --git a/post_proc/effect_api.c b/post_proc/effect_api.c
index ab8576f..b01acc5 100644
--- a/post_proc/effect_api.c
+++ b/post_proc/effect_api.c
@@ -177,8 +177,8 @@
                                   struct bass_boost_params *bassboost,
                                  unsigned param_send_flags)
 {
-    int param_values[128] = {0};
-    int *p_param_values = param_values;
+    long param_values[128] = {0};
+    long *p_param_values = param_values;
 
     ALOGV("%s: flags 0x%x", __func__, param_send_flags);
     *p_param_values++ = BASS_BOOST_MODULE;
@@ -260,8 +260,9 @@
                             struct pbe_params *pbe,
                             unsigned param_send_flags)
 {
-    int param_values[128] = {0};
-    int i, *p_param_values = param_values, *cfg = NULL;
+    long  param_values[128] = {0};
+    long *p_param_values = param_values;
+    int i, *cfg = NULL;
 
     ALOGV("%s: enabled=%d", __func__, pbe->enable_flag);
     *p_param_values++ = PBE_MODULE;
@@ -366,8 +367,8 @@
                                     struct virtualizer_params *virtualizer,
                                    unsigned param_send_flags)
 {
-    int param_values[128] = {0};
-    int *p_param_values = param_values;
+    long param_values[128] = {0};
+    long *p_param_values = param_values;
 
     ALOGV("%s: flags 0x%x", __func__, param_send_flags);
     *p_param_values++ = VIRTUALIZER_MODULE;
@@ -486,8 +487,8 @@
 static int eq_send_params(eff_mode_t mode, void *ctl, struct eq_params *eq,
                           unsigned param_send_flags)
 {
-    int param_values[128] = {0};
-    int *p_param_values = param_values;
+    long param_values[128] = {0};
+    long *p_param_values = param_values;
     uint32_t i;
 
     ALOGV("%s: flags 0x%x", __func__, param_send_flags);
@@ -675,8 +676,8 @@
                                struct reverb_params *reverb,
                               unsigned param_send_flags)
 {
-    int param_values[128] = {0};
-    int *p_param_values = param_values;
+    long param_values[128] = {0};
+    long *p_param_values = param_values;
 
     ALOGV("%s: flags 0x%x", __func__, param_send_flags);
     *p_param_values++ = REVERB_MODULE;
@@ -855,8 +856,8 @@
                                     struct soft_volume_params vol,
                                     unsigned param_send_flags)
 {
-    int param_values[128] = {0};
-    int *p_param_values = param_values;
+    long param_values[128] = {0};
+    long *p_param_values = param_values;
     uint32_t i;
 
     ALOGV("%s", __func__);
@@ -921,8 +922,8 @@
                                                struct soft_volume_params vol,
                                                unsigned param_send_flags)
 {
-    int param_values[128] = {0};
-    int *p_param_values = param_values;
+    long param_values[128] = {0};
+    long *p_param_values = param_values;
     uint32_t i;
 
     ALOGV("%s", __func__);
@@ -964,8 +965,8 @@
 static int hpx_send_params(eff_mode_t mode, void *ctl,
                            unsigned param_send_flags)
 {
-    int param_values[128] = {0};
-    int *p_param_values = param_values;
+    long param_values[128] = {0};
+    long *p_param_values = param_values;
     uint32_t i;
 
     ALOGV("%s", __func__);
diff --git a/qahw_api/inc/qahw_defs.h b/qahw_api/inc/qahw_defs.h
index a301bf9..a33caf6 100644
--- a/qahw_api/inc/qahw_defs.h
+++ b/qahw_api/inc/qahw_defs.h
@@ -251,13 +251,13 @@
     uint16_t  doa_speech;
     uint16_t  doa_noise[3];
     uint8_t   polar_activity[360];
-};
+} __attribute__((packed));
 
 struct qahw_sound_focus_param {
     uint16_t  start_angle[MAX_SECTORS];
     uint8_t   enable[MAX_SECTORS];
     uint16_t  gain_step;
-};
+} __attribute__((packed));
 
 struct aptx_dec_bt_addr {
     uint32_t nap;
diff --git a/qahw_api/test/qahw_multi_record_test.c b/qahw_api/test/qahw_multi_record_test.c
index 23acdeb..5b07b0f 100644
--- a/qahw_api/test/qahw_multi_record_test.c
+++ b/qahw_api/test/qahw_multi_record_test.c
@@ -34,6 +34,7 @@
 #define nullptr NULL
 #define LATENCY_NODE "/sys/kernel/debug/audio_in_latency_measurement_node"
 #define LATENCY_NODE_INIT_STR "1"
+#define MAX_RECORD_SESSIONS 6
 
 static bool kpi_mode;
 FILE * log_file = NULL;
@@ -543,15 +544,7 @@
     thread_param->record_length = 8 /*sec*/;
     thread_param->record_delay = 0 /*sec*/;
 
-    if (rec_session == 1) {
-        thread_param->handle = 0x999;
-    } else if (rec_session == 2) {
-        thread_param->handle = 0x998;
-    } else if (rec_session == 3) {
-        thread_param->handle = 0x997;
-    } else if (rec_session == 4) {
-        thread_param->handle = 0x996;
-    }
+    thread_param->handle = 0x99A - rec_session;
 }
 
 void usage() {
@@ -592,14 +585,16 @@
 
 int main(int argc, char* argv[]) {
     int max_recordings_requested = 0, status = 0;
-    int thread_active[4] = {0};
+    int thread_active[MAX_RECORD_SESSIONS] = {0};
     qahw_module_handle_t *qahw_mod_handle;
     const  char *mod_name = "audio.primary";
-    struct audio_config_params params[4];
+    struct audio_config_params params[MAX_RECORD_SESSIONS];
     bool interactive_mode = false, source_tracking = false;
     struct listnode param_list;
     char log_filename[256] = "stdout";
     bool wakelock_acquired = false;
+    int i;
+    const char *recording_session[MAX_RECORD_SESSIONS] = {"first", "second", "third", "fourth", "fifth", "sixth"};
 
     log_file = stdout;
     list_init(&param_list);
@@ -692,8 +687,16 @@
         printf(" Enter logfile path (stdout or 1 for console out)::: \n");
         scanf(" %s", log_filename);
         printf(" Enter number of record sessions to be started \n");
-        printf("             (Maximum of 4 record sessions are allowed)::::  ");
+        printf("             (Maximum of %d record sessions are allowed)::::  ", MAX_RECORD_SESSIONS);
         scanf(" %d", &max_recordings_requested);
+        if (max_recordings_requested > MAX_RECORD_SESSIONS) {
+            fprintf(log_file, " INVALID input -- Max record sessions supported is %d -exit \n",
+                                                                                 MAX_RECORD_SESSIONS);
+            if (log_file != stdout)
+                fprintf(stdout, " INVALID input -- Max record sessions supported is %d -exit \n",
+                                                                                 MAX_RECORD_SESSIONS);
+            return -1;
+        }
     } else {
         max_recordings_requested = 1;
     }
@@ -705,51 +708,17 @@
         }
     }
 
-    switch (max_recordings_requested) {
-        case 4:
-            if (interactive_mode) {
-                printf(" Enter the config params for fourth record session \n");
-                fill_default_params(&params[3], 4);
-                read_config_params_from_user(&params[3]);
-            }
-            params[3].qahw_mod_handle = qahw_mod_handle;
-            thread_active[3] = 1;
-            printf(" \n");
-        case 3:
-            if (interactive_mode) {
-                printf(" Enter the config params for third record session \n");
-                fill_default_params(&params[2], 3);
-                read_config_params_from_user(&params[2]);
-            }
-            params[2].qahw_mod_handle = qahw_mod_handle;
-            thread_active[2] = 1;
-            printf(" \n");
-        case 2:
-            if (interactive_mode) {
-                printf(" Enter the config params for second record session \n");
-                fill_default_params(&params[1], 2);
-                read_config_params_from_user(&params[1]);
-            }
-            params[1].qahw_mod_handle = qahw_mod_handle;
-            thread_active[1] = 1;
-            printf(" \n");
-        case 1:
-            if (interactive_mode) {
-                printf(" Enter the config params for first record session \n");
-                fill_default_params(&params[0], 1);
-                read_config_params_from_user(&params[0]);
-            }
-            params[0].qahw_mod_handle = qahw_mod_handle;
-            thread_active[0] = 1;
-            printf(" \n");
-            break;
-        default:
-            fprintf(log_file, " INVALID input -- Max record sessions supported is 4 -exit \n");
-            if (log_file != stdout)
-                fprintf(stdout, " INVALID input -- Max record sessions supported is 4 -exit \n");
-            status = -1;
-            break;
+    for (i = max_recordings_requested; i > 0;  i--) {
+        if (interactive_mode) {
+            printf("Enter the config params for %s record session \n", recording_session[i - 1]);
+            fill_default_params(&params[i - 1], i);
+            read_config_params_from_user(&params[i - 1]);
+        }
+        params[i - 1].qahw_mod_handle = qahw_mod_handle;
+        thread_active[i - 1] = 1;
+        printf(" \n");
     }
+
     if (interactive_mode && status == 0) {
         int option = 0;
 
@@ -798,7 +767,7 @@
         qahw_set_parameters(qahw_mod_handle, params[0].kvpairs);
     }
 
-    pthread_t tid[4];
+    pthread_t tid[MAX_RECORD_SESSIONS];
     pthread_t sourcetrack_thread;
     int ret = -1;
 
@@ -829,50 +798,20 @@
     if (signal(SIGINT, stop_signal_handler) == SIG_ERR)
         fprintf(log_file, "Failed to register SIGINT:%d\n",errno);
 
-    if (thread_active[0] == 1) {
-        fprintf(log_file, "\n Create first record thread \n");
-        ret = pthread_create(&tid[0], NULL, start_input, (void *)&params[0]);
-        if (ret) {
-            status = -1;
-            fprintf(log_file, " Failed to create first record thread \n ");
-            if (log_file != stdout)
-                fprintf(stdout, " Failed to create first record thread \n ");
-            thread_active[0] = 0;
+    for (i = 0; i < MAX_RECORD_SESSIONS; i++) {
+        if (thread_active[i] == 1) {
+            fprintf(log_file, "\n Create %s record thread \n", recording_session[i]);
+            ret = pthread_create(&tid[i], NULL, start_input, (void *)&params[i]);
+            if (ret) {
+                status = -1;
+                fprintf(log_file, " Failed to create %s record thread \n", recording_session[i]);
+                if (log_file != stdout)
+                    fprintf(stdout, " Failed to create %s record thread \n", recording_session[i]);
+                thread_active[i] = 0;
+            }
         }
     }
-    if (thread_active[1] == 1) {
-        fprintf(log_file, "Create second record thread \n");
-        ret = pthread_create(&tid[1], NULL, start_input, (void *)&params[1]);
-        if (ret) {
-            status = -1;
-            fprintf(log_file, " Failed to create second record thread \n ");
-            if (log_file != stdout)
-                fprintf(stdout, " Failed to create second record thread \n ");
-            thread_active[1] = 0;
-        }
-    }
-    if (thread_active[2] == 1) {
-        fprintf(log_file, "Create third record thread \n");
-        ret = pthread_create(&tid[2], NULL, start_input, (void *)&params[2]);
-        if (ret) {
-            status = -1;
-            fprintf(log_file, " Failed to create third record thread \n ");
-            if (log_file != stdout)
-                fprintf(stdout, " Failed to create third record thread \n ");
-            thread_active[2] = 0;
-        }
-    }
-    if (thread_active[3] == 1) {
-        fprintf(log_file, "Create fourth record thread \n");
-        ret = pthread_create(&tid[3], NULL, start_input, (void *)&params[3]);
-        if (ret) {
-            status = -1;
-            fprintf(log_file, " Failed to create fourth record thread \n ");
-            if (log_file != stdout)
-                fprintf(stdout, " Failed to create fourth record thread \n ");
-            thread_active[3] = 0;
-        }
-    }
+
     fprintf(log_file, " All threads started \n");
     if (log_file != stdout)
         fprintf(stdout, " All threads started \n");
@@ -901,21 +840,12 @@
     fprintf(log_file, " Waiting for threads exit \n");
     if (log_file != stdout)
         fprintf(stdout, " Waiting for threads exit \n");
-    if (thread_active[0] == 1) {
-        pthread_join(tid[0], NULL);
-        fprintf(log_file, " after first record thread exit \n");
-    }
-    if (thread_active[1] == 1) {
-        pthread_join(tid[1], NULL);
-        fprintf(log_file, " after second record thread exit \n");
-    }
-    if (thread_active[2] == 1) {
-        pthread_join(tid[2], NULL);
-        fprintf(log_file, " after third record thread exit \n");
-    }
-    if (thread_active[3] == 1) {
-        pthread_join(tid[3], NULL);
-        fprintf(log_file, " after fourth record thread exit \n");
+
+    for (i = 0; i < MAX_RECORD_SESSIONS; i++) {
+        if (thread_active[i] == 1) {
+            pthread_join(tid[i], NULL);
+            fprintf(log_file, " after %s record thread exit \n", recording_session[i]);
+        }
     }
 
 sourcetrack_error:
diff --git a/qahw_api/test/qap_wrapper_extn.c b/qahw_api/test/qap_wrapper_extn.c
index d9f27d4..050796c 100644
--- a/qahw_api/test/qap_wrapper_extn.c
+++ b/qahw_api/test/qap_wrapper_extn.c
@@ -33,6 +33,7 @@
 #include <qap_api.h>
 #include <qti_audio.h>
 #include "qahw_playback_test.h"
+#include <dolby_ms12.h>
 
 #undef LOG_TAG
 #define LOG_TAG "HAL_TEST"
@@ -40,8 +41,8 @@
 /*#define LOG_NDEBUG 0*/
 
 #if LINUX_ENABLED
-#define QAC_LIB_MS12 "/usr/lib/libdolby_ms12_wrapper.so"
-#define QAC_LIB_M8   "/usr/lib/libdts_m8_wrapper.so"
+#define QAC_LIB_MS12 "libdolby_ms12_wrapper.so"
+#define QAC_LIB_M8   "libdts_m8_wrapper.so"
 #else
 #define QAC_LIB_MS12 "/system/lib/libdolby_ms12_wrapper.so"
 #define QAC_LIB_M8   "/system/lib/libdts_m8_wrapper.so"
@@ -104,7 +105,11 @@
 pthread_mutex_t main_eos_lock;
 pthread_cond_t sec_eos_cond;
 pthread_mutex_t sec_eos_lock;
+bool main_eos_received = false;
+bool sec_eos_received = false;
 
+dlb_ms12_session_param_t dlb_param;
+dlb_ms12_session_param_t dlb_param_hp;
 qap_session_outputs_config_t session_output_config;
 bool session_output_configured = false;
 struct timeval tcold_start, tcold_stop;
@@ -799,6 +804,7 @@
                 stream_cnt--;
             pthread_mutex_lock(&main_eos_lock);
             pthread_cond_signal(&main_eos_cond);
+            main_eos_received = true;
             pthread_mutex_unlock(&main_eos_lock);
 
             ALOGE("%s %d Received Main Input EOS ", __func__, __LINE__);
@@ -817,6 +823,7 @@
                 ALOGV("%s %d Received Secondary Input EOS", __func__, __LINE__);
                 pthread_mutex_lock(&sec_eos_lock);
                 pthread_cond_signal(&sec_eos_cond);
+                sec_eos_received = true;
                 pthread_mutex_unlock(&sec_eos_lock);
             }
             if (!stream_cnt)
@@ -1171,13 +1178,13 @@
     }
 }
 
-static void qap_wrapper_is_dap_enabled(char *kv_pairs, int out_device_id) {
+static void qap_wrapper_is_dap_enabled(char *kv_pairs, int out_device_id, qap_session_handle_t handle) {
     int status = 0;
     int temp = 0;
     char *dap_kvp = NULL;
     int *dap_value = NULL;
     int dap_enable = 0;
-
+    qap_session_pp_configs_t dap_pp_config;
     dap_kvp = qap_wrapper_get_single_kvp("dap_enable", kv_pairs, &status);
     if (dap_kvp != NULL) {
         dap_value = qap_wrapper_get_int_value_array(dap_kvp, &temp, &status);
@@ -1186,7 +1193,7 @@
         if (dap_enable) {
             fprintf(stdout, "dap enable %d and device id %d\n", dap_enable, out_device_id);
             char *dev_kvp = NULL;
-            if (out_device_id == AUDIO_DEVICE_OUT_SPEAKER) {
+            if ((out_device_id & AUDIO_DEVICE_OUT_SPEAKER) == AUDIO_DEVICE_OUT_SPEAKER) {
                 dev_kvp = (char *) calloc(1, status + strlen("o_device=1; "));
                 if (dev_kvp != NULL) {
                     strcat(dev_kvp, "o_device=1;");
@@ -1195,8 +1202,13 @@
                     free(dev_kvp);
                     dev_kvp = NULL;
                 }
-            } else if ((out_device_id == AUDIO_DEVICE_OUT_LINE)||
-                       (out_device_id == AUDIO_DEVICE_OUT_WIRED_HEADPHONE)) {
+                dap_pp_config.pp_config[dap_pp_config.num_confs].id = AUDIO_DEVICE_OUT_SPEAKER;
+                dlb_param = MS12_SESSION_CFG_DAP_ENABLE_SPEAKER;
+                dap_pp_config.pp_config[dap_pp_config.num_confs].pp_type = (void *) &dlb_param;
+                dap_pp_config.num_confs++;
+            }
+            if (((out_device_id & AUDIO_DEVICE_OUT_LINE) == AUDIO_DEVICE_OUT_LINE) ||
+                ((out_device_id & AUDIO_DEVICE_OUT_WIRED_HEADPHONE) == AUDIO_DEVICE_OUT_WIRED_HEADPHONE)) {
                 dev_kvp = (char *) calloc(1, status + strlen("o_device=2; "));
                 if (dev_kvp != NULL) {
                     strcat(dev_kvp, "o_device=2;");
@@ -1205,7 +1217,18 @@
                     free(dev_kvp);
                     dev_kvp = NULL;
                 }
+                if ((out_device_id & AUDIO_DEVICE_OUT_LINE) == AUDIO_DEVICE_OUT_LINE)
+                dap_pp_config.pp_config[dap_pp_config.num_confs].id = AUDIO_DEVICE_OUT_LINE;
+                else
+                dap_pp_config.pp_config[dap_pp_config.num_confs].id = AUDIO_DEVICE_OUT_WIRED_HEADPHONE;
+                dlb_param_hp = MS12_SESSION_CFG_DAP_ENABLE_HEADPHONE;
+                dap_pp_config.pp_config[dap_pp_config.num_confs].pp_type = (void *) &dlb_param_hp;
+                dap_pp_config.num_confs++;
             }
+            status = qap_session_cmd(qap_session_handle, QAP_SESSION_CMD_SET_PP_OUTPUTS,
+                                          sizeof(qap_session_pp_configs_t), &dap_pp_config, NULL, NULL);
+            if (status != QAP_STATUS_OK)
+                fprintf(stderr, "Output config failed\n");
         }
         free(dap_kvp);
         dap_kvp = NULL;
@@ -1289,7 +1312,6 @@
         dolby_formats = true;
     }
 
-    qap_wrapper_is_dap_enabled(kv_pairs, stream->output_device);
 
     // To-Do - Need to check SPDIF out also when SPDIF out is supported
     ALOGD("%s::%d output device %d", __func__, __LINE__, stream->output_device);
@@ -1363,6 +1385,7 @@
             fprintf(stderr, "Output config failed\n");
             return -EINVAL;
         }
+        qap_wrapper_is_dap_enabled(kv_pairs, stream->output_device, qap_session_handle);
 
         bitwidth_kvp = qap_wrapper_get_single_kvp("k", kv_pairs, &status);
         if (bitwidth_kvp && strncmp(bitwidth_kvp, "k=", 2) == 0) {
@@ -1560,17 +1583,23 @@
     } while (1);
 
 wait_for_eos:
-    if (stream_info->sec_input && !stream_info->aac_fmt_type) {
-        pthread_mutex_lock(&sec_eos_lock);
-        pthread_cond_wait(&sec_eos_cond, &sec_eos_lock);
-        pthread_mutex_unlock(&sec_eos_lock);
+    if (stream_info->sec_input) {
+        if (!sec_eos_received) {
+            pthread_mutex_lock(&sec_eos_lock);
+            pthread_cond_wait(&sec_eos_cond, &sec_eos_lock);
+            pthread_mutex_unlock(&sec_eos_lock);
+        }
+        sec_eos_received = false;
         fprintf(stdout, "Received EOS event for secondary input\n");
         ALOGV("Received EOS event for secondary input\n");
     }
     if (!(stream_info->system_input || stream_info->sec_input)){
-        pthread_mutex_lock(&main_eos_lock);
-        pthread_cond_wait(&main_eos_cond, &main_eos_lock);
-        pthread_mutex_unlock(&main_eos_lock);
+        if (!main_eos_received) {
+            pthread_mutex_lock(&main_eos_lock);
+            pthread_cond_wait(&main_eos_cond, &main_eos_lock);
+            pthread_mutex_unlock(&main_eos_lock);
+        }
+        main_eos_received = false;
         fprintf(stdout, "Received EOS event for main input\n");
         ALOGV("Received EOS event for main input\n");
     }
diff --git a/visualizer/Android.mk b/visualizer/Android.mk
index e9da7a8..d932ce0 100644
--- a/visualizer/Android.mk
+++ b/visualizer/Android.mk
@@ -21,7 +21,7 @@
 
 LOCAL_CFLAGS+= -O2 -fvisibility=hidden
 
-ifneq ($(filter sdm660 sdm845 msm8998 apq8098_latv,$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter sdm660 sdm845 msm8998 apq8098_latv sdm670 qcs605,$(TARGET_BOARD_PLATFORM)),)
     LOCAL_CFLAGS += -DCAPTURE_DEVICE=7
 endif